From 9be10f3bf1897f871585b683eaee9d68e0fbf285 Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 1 Sep 2015 15:20:33 +0200 Subject: vo_opengl, vda: return to old state Undo 292266f2. Reapply 3e12e79b. An additional copy is not really justified, as it could reduce performance. On the other hand, we can force API users to create a GL 3.x context. --- video/out/gl_hwdec_vda.c | 5 +++++ video/out/gl_video.c | 31 ------------------------------- 2 files changed, 5 insertions(+), 31 deletions(-) diff --git a/video/out/gl_hwdec_vda.c b/video/out/gl_hwdec_vda.c index 4ec46671a4..3fbcda0e79 100644 --- a/video/out/gl_hwdec_vda.c +++ b/video/out/gl_hwdec_vda.c @@ -122,6 +122,11 @@ static struct mp_image *download_image(struct mp_hwdec_ctx *ctx, static bool check_hwdec(struct gl_hwdec *hw) { + if (hw->gl->version < 300) { + MP_ERR(hw, "need >= OpenGL 3.0 for core rectangle texture support\n"); + return false; + } + if (!CGLGetCurrentContext()) { MP_ERR(hw, "need cocoa opengl backend to be active"); return false; diff --git a/video/out/gl_video.c b/video/out/gl_video.c index d5af6efcfc..bb67c61987 100644 --- a/video/out/gl_video.c +++ b/video/out/gl_video.c @@ -1376,43 +1376,12 @@ static void pass_sample(struct gl_video *p, int src_tex, struct scaler *scaler, GLSL(color.a = 1.0;) } -static void pass_copy_from_rect(struct gl_video *p) -{ - struct src_tex new_pass_tex[TEXUNIT_VIDEO_NUM]; - assert(sizeof(new_pass_tex) == sizeof(p->pass_tex)); - memcpy(&new_pass_tex, &p->pass_tex, sizeof(p->pass_tex)); - memset(&p->pass_tex, 0, sizeof(p->pass_tex)); - - for (int n = 0; n < TEXUNIT_VIDEO_NUM; n++) { - struct src_tex *src = &new_pass_tex[n]; - if (src->gl_tex && src->gl_target == GL_TEXTURE_RECTANGLE) { - p->pass_tex[0] = (struct src_tex){ - .gl_tex = src->gl_tex, - .gl_target = GL_TEXTURE_RECTANGLE, - .tex_w = src->tex_w, - .tex_h = src->tex_h, - .src = {0, 0, src->tex_w, src->tex_h}, - }; - const char *get = p->gl->version < 300 ? "texture2DRect" : "texture"; - GLSLF("vec4 color = %s(texture0, texcoord0);\n", get); - finish_pass_fbo(p, &p->copy_fbos[n], src->tex_w, src->tex_h, 0, 0); - src->gl_tex = p->copy_fbos[n].texture; - src->gl_target = GL_TEXTURE_2D; - } - } - - memcpy(&p->pass_tex, &new_pass_tex, sizeof(p->pass_tex)); -} - // sample from video textures, set "color" variable to yuv value static void pass_read_video(struct gl_video *p) { struct gl_transform chromafix; pass_set_image_textures(p, &p->image, &chromafix); - if (p->gl->version < 300 && p->pass_tex[0].gl_target == GL_TEXTURE_RECTANGLE) - pass_copy_from_rect(p); - // The custom shader logic is a bit tricky, but there are basically three // different places it can occur: RGB, or chroma *and* luma (which are // treated separately even for 4:4:4 content, but the minor speed loss -- cgit v1.2.3