vlc | branch: master | Alexandre Janniaux <aja...@videolabs.io> | Wed Jan 27 
18:13:45 2021 +0100| [41b34d1188acd469d5bc2d3e83112162fd36a570] | committer: 
Alexandre Janniaux

opengl: api: drain error in case of error

Otherwise, the error might be detected afterwards in an unrelated part
of the code, leading to potential failure or assertion depending on the
compilation options.

Indeed, an OpenGL call can lead to multiple errors and glGetError must
be called in loop, as mentioned by the documentation.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glGetError.xhtml

> To allow for distributed implementations, there may be several error
> flags. If any single error flag has recorded an error, the value of
> that flag is returned and that flag is reset to GL_NO_ERROR when
> glGetError is called. If more than one flag has recorded an error,
> glGetError returns and clears an arbitrary error flag value. Thus,
> glGetError should always be called in a loop, until it returns
> GL_NO_ERROR, if all error flags are to be reset.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=41b34d1188acd469d5bc2d3e83112162fd36a570
---

 modules/video_output/opengl/gl_api.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/modules/video_output/opengl/gl_api.c 
b/modules/video_output/opengl/gl_api.c
index 1264dde2a1..d990493832 100644
--- a/modules/video_output/opengl/gl_api.c
+++ b/modules/video_output/opengl/gl_api.c
@@ -163,6 +163,10 @@ vlc_gl_api_Init(struct vlc_gl_api *api, vlc_gl_t *gl)
      */
     api->supports_multisample = version >= 3 && error == GL_NO_ERROR;
 
+    /* Drain the errors before continuing. */
+    while (error != GL_NO_ERROR)
+        error = api->vt.GetError();
+
 #ifdef USE_OPENGL_ES2
     api->is_gles = true;
     /* OpenGL ES 2 includes support for non-power of 2 textures by 
specification

_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to