Exemple #1
0
static void
gv_surface_pixmap_upload(glw_video_surface_t *gvs,
			 const glw_video_config_t *gvc, int textype)
{
  if(gvs->gvs_uploaded || gvs->gvs_pbo[0] == 0)
    return;

  gvs->gvs_uploaded = 1;

  glBindBuffer(GL_PIXEL_UNPACK_BUFFER, gvs->gvs_pbo[0]);
  glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
  glBindTexture(textype, gv_tex_get(gvs, GVF_TEX_L));
  gv_set_tex_meta(textype);
  glTexImage2D(textype, 0, 1, gvc->gvc_width[0], gvc->gvc_height[0],
	       0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL);

  glBindBuffer(GL_PIXEL_UNPACK_BUFFER, gvs->gvs_pbo[1]);
  glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
  glBindTexture(textype, gv_tex_get(gvs, GVF_TEX_Cr));
  gv_set_tex_meta(textype);
  glTexImage2D(textype, 0, 1, gvc->gvc_width[1], gvc->gvc_height[1],
	       0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL);

  glBindBuffer(GL_PIXEL_UNPACK_BUFFER, gvs->gvs_pbo[2]);
  glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
  glBindTexture(textype, gv_tex_get(gvs, GVF_TEX_Cb));
  gv_set_tex_meta(textype);
  glTexImage2D(textype, 0, 1, gvc->gvc_width[2], gvc->gvc_height[2],
	       0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL);

  glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);

  gvs->gvs_pbo_ptr[0] = NULL;
  gvs->gvs_pbo_ptr[1] = NULL;
  gvs->gvs_pbo_ptr[2] = NULL;
}
static void
gv_surface_pixmap_upload(glw_video_surface_t *gvs, int textype,
                         const glw_video_t *gv)
{
  if(gvs->gvs_uploaded || gvs->gvs_pbo[0] == 0)
    return;

  gvs->gvs_uploaded = 1;

  for(int i = 0; i < gv->gv_planes; i++) {
    glBindBuffer(GL_PIXEL_UNPACK_BUFFER, gvs->gvs_pbo[i]);
    glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
    glBindTexture(textype, gv_tex_get(gvs, i));
    gv_set_tex_meta(textype);
    glTexImage2D(textype, 0, gv->gv_tex_internal_format,
                 gvs->gvs_width[i], gvs->gvs_height[i],
                 0, gv->gv_tex_format, gv->gv_tex_type, NULL);
    gvs->gvs_data[i] = NULL;
  }

  glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
}