vlc | branch: master | Romain Vimont <[email protected]> | Wed Mar 4 08:53:49 2020 +0100| [0a71f665e1b3e5defba280fbd9c0d101184089e2] | committer: Steve Lhomme
opengl: fix GL_ASSERT_NOERROR macro The macro assumed a local variable vgl existed, which is not always the case. Instead, pass a pointer to the opengl_vtable_t as parameter. (cherry picked from commit 70e11c4f4e895269af9ecbd0e9a9666aa2a5ac33) > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0a71f665e1b3e5defba280fbd9c0d101184089e2 --- modules/video_output/opengl/gl_common.h | 8 +++++--- modules/video_output/opengl/sub_renderer.c | 10 +++++----- modules/video_output/opengl/vout_helper.c | 20 ++++++++++---------- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/modules/video_output/opengl/gl_common.h b/modules/video_output/opengl/gl_common.h index 303ef73131..e7a07ad869 100644 --- a/modules/video_output/opengl/gl_common.h +++ b/modules/video_output/opengl/gl_common.h @@ -21,6 +21,8 @@ #ifndef VLC_GL_COMMON_H #define VLC_GL_COMMON_H +#include <assert.h> + /* if USE_OPENGL_ES2 is defined, OpenGL ES version 2 will be used, otherwise * normal OpenGL will be used */ #ifdef __APPLE__ @@ -107,8 +109,8 @@ #endif #ifdef HAVE_GL_ASSERT_NOERROR -# define GL_ASSERT_NOERROR() do { \ - GLenum glError = vgl->vt.GetError(); \ +# define GL_ASSERT_NOERROR(vt) do { \ + GLenum glError = (vt)->GetError(); \ switch (glError) \ { \ case GL_NO_ERROR: break; \ @@ -121,7 +123,7 @@ } \ } while(0) #else -# define GL_ASSERT_NOERROR() +# define GL_ASSERT_NOERROR(vt) #endif /* Core OpenGL/OpenGLES functions: the following functions pointers typedefs diff --git a/modules/video_output/opengl/sub_renderer.c b/modules/video_output/opengl/sub_renderer.c index f25900fd1c..a900f90473 100644 --- a/modules/video_output/opengl/sub_renderer.c +++ b/modules/video_output/opengl/sub_renderer.c @@ -320,7 +320,7 @@ vlc_gl_sub_renderer_Delete(struct vlc_gl_sub_renderer *sr) int vlc_gl_sub_renderer_Prepare(struct vlc_gl_sub_renderer *sr, subpicture_t *subpicture) { - GL_ASSERT_NOERROR(); + GL_ASSERT_NOERROR(sr->vt); const struct vlc_gl_interop *interop = sr->interop; @@ -408,7 +408,7 @@ vlc_gl_sub_renderer_Prepare(struct vlc_gl_sub_renderer *sr, subpicture_t *subpic } free(last); - GL_ASSERT_NOERROR(); + GL_ASSERT_NOERROR(sr->vt); return VLC_SUCCESS; } @@ -416,11 +416,11 @@ vlc_gl_sub_renderer_Prepare(struct vlc_gl_sub_renderer *sr, subpicture_t *subpic int vlc_gl_sub_renderer_Draw(struct vlc_gl_sub_renderer *sr) { - GL_ASSERT_NOERROR(); - const struct vlc_gl_interop *interop = sr->interop; const opengl_vtable_t *vt = sr->vt; + GL_ASSERT_NOERROR(vt); + assert(sr->program_id); vt->UseProgram(sr->program_id); @@ -477,7 +477,7 @@ vlc_gl_sub_renderer_Draw(struct vlc_gl_sub_renderer *sr) } vt->Disable(GL_BLEND); - GL_ASSERT_NOERROR(); + GL_ASSERT_NOERROR(vt); return VLC_SUCCESS; } diff --git a/modules/video_output/opengl/vout_helper.c b/modules/video_output/opengl/vout_helper.c index d4a2eda148..61f1321f69 100644 --- a/modules/video_output/opengl/vout_helper.c +++ b/modules/video_output/opengl/vout_helper.c @@ -197,7 +197,7 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt, GET_PROC_ADDR_OPTIONAL(ClientWaitSync); #undef GET_PROC_ADDR - GL_ASSERT_NOERROR(); + GL_ASSERT_NOERROR(&vgl->vt); const char *extensions = (const char *)vgl->vt.GetString(GL_EXTENSIONS); assert(extensions); @@ -251,7 +251,7 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt, return NULL; } - GL_ASSERT_NOERROR(); + GL_ASSERT_NOERROR(&vgl->vt); vgl->sub_renderer = vlc_gl_sub_renderer_New(gl, &vgl->vt, supports_npot); @@ -263,7 +263,7 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt, return NULL; } - GL_ASSERT_NOERROR(); + GL_ASSERT_NOERROR(&vgl->vt); if (renderer->fmt.projection_mode != PROJECTION_MODE_RECTANGULAR && vout_display_opengl_SetViewpoint(vgl, viewpoint) != VLC_SUCCESS) @@ -277,13 +277,13 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt, *subpicture_chromas = gl_subpicture_chromas; } - GL_ASSERT_NOERROR(); + GL_ASSERT_NOERROR(&vgl->vt); return vgl; } void vout_display_opengl_Delete(vout_display_opengl_t *vgl) { - GL_ASSERT_NOERROR(); + GL_ASSERT_NOERROR(&vgl->vt); /* */ vgl->vt.Finish(); @@ -292,7 +292,7 @@ void vout_display_opengl_Delete(vout_display_opengl_t *vgl) vlc_gl_sub_renderer_Delete(vgl->sub_renderer); vlc_gl_renderer_Delete(vgl->renderer); - GL_ASSERT_NOERROR(); + GL_ASSERT_NOERROR(&vgl->vt); free(vgl); } @@ -318,20 +318,20 @@ void vout_display_opengl_Viewport(vout_display_opengl_t *vgl, int x, int y, int vout_display_opengl_Prepare(vout_display_opengl_t *vgl, picture_t *picture, subpicture_t *subpicture) { - GL_ASSERT_NOERROR(); + GL_ASSERT_NOERROR(&vgl->vt); int ret = vlc_gl_renderer_Prepare(vgl->renderer, picture); if (ret != VLC_SUCCESS) return ret; ret = vlc_gl_sub_renderer_Prepare(vgl->sub_renderer, subpicture); - GL_ASSERT_NOERROR(); + GL_ASSERT_NOERROR(&vgl->vt); return ret; } int vout_display_opengl_Display(vout_display_opengl_t *vgl, const video_format_t *source) { - GL_ASSERT_NOERROR(); + GL_ASSERT_NOERROR(&vgl->vt); /* Why drawing here and not in Render()? Because this way, the OpenGL providers can call vout_display_opengl_Display to force redraw. @@ -348,7 +348,7 @@ int vout_display_opengl_Display(vout_display_opengl_t *vgl, /* Display */ vlc_gl_Swap(vgl->gl); - GL_ASSERT_NOERROR(); + GL_ASSERT_NOERROR(&vgl->vt); return VLC_SUCCESS; } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
