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); }