diff options
author | wm4 <wm4@nowhere> | 2015-09-01 15:20:33 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-09-01 15:40:04 +0200 |
commit | 9be10f3bf1897f871585b683eaee9d68e0fbf285 (patch) | |
tree | 0348b7f37bb8571ba8e99438543d4be3e4912bbb | |
parent | d60270ed3dd41f7afb4cda6523c93a4c6120c898 (diff) | |
download | mpv-9be10f3bf1897f871585b683eaee9d68e0fbf285.tar.bz2 mpv-9be10f3bf1897f871585b683eaee9d68e0fbf285.tar.xz |
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.
-rw-r--r-- | video/out/gl_hwdec_vda.c | 5 | ||||
-rw-r--r-- | 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 |