[vlc-devel] [PATCH] opengl: add debug callbacks

Steve Lhomme robux4 at ycbcr.xyz
Fri Sep 27 07:54:44 CEST 2019


Oops, it wasn't meant for this patchset.
(and it doesn't work on Windows)

On 2019-09-26 15:59, Steve Lhomme wrote:
> From: Alexandre Janniaux <ajanni at videolabs.io>
> 
> ---
>   modules/video_output/opengl/converter.h   |  6 ++++
>   modules/video_output/opengl/vout_helper.c | 41 +++++++++++++++++++++--
>   2 files changed, 45 insertions(+), 2 deletions(-)
> 
> diff --git a/modules/video_output/opengl/converter.h b/modules/video_output/opengl/converter.h
> index 73dfabeb713..66e2bb6d4c3 100644
> --- a/modules/video_output/opengl/converter.h
> +++ b/modules/video_output/opengl/converter.h
> @@ -93,6 +93,10 @@ typedef void (APIENTRY *PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GL
>   typedef void (APIENTRY *PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
>   typedef void (APIENTRY *PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels);
>   typedef void (APIENTRY *PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
> +typedef void APIENTRY PFNGLDEBUGCALLBACK(GLenum source, GLenum type, GLuint id,
> +   GLenum severity, GLsizei length, const GLchar* message, const void* userdata);
> +typedef void (APIENTRY *PFNGLDEBUGMESSAGECALLBACK) (PFNGLDEBUGCALLBACK callback, void * userdata);
> +
>   
>   /* The following are defined in glext.h but not for GLES2 or on Apple systems */
>   #if defined(USE_OPENGL_ES2) || defined(__APPLE__)
> @@ -175,6 +179,8 @@ typedef struct {
>       PFNGLTEXSUBIMAGE2DPROC  TexSubImage2D;
>       PFNGLVIEWPORTPROC       Viewport;
>   
> +    PFNGLDEBUGMESSAGECALLBACK DebugMessageCallback;
> +
>       /* GL only core functions: NULL for GLES2 */
>       PFNGLGETTEXLEVELPARAMETERIVPROC GetTexLevelParameteriv; /* Can be NULL */
>       PFNGLTEXENVFPROC                TexEnvf; /* Can be NULL */
> diff --git a/modules/video_output/opengl/vout_helper.c b/modules/video_output/opengl/vout_helper.c
> index b37b6532572..b013b8e423b 100644
> --- a/modules/video_output/opengl/vout_helper.c
> +++ b/modules/video_output/opengl/vout_helper.c
> @@ -628,6 +628,33 @@ opengl_init_program(vout_display_opengl_t *vgl, vlc_video_context *context,
>       return VLC_SUCCESS;
>   }
>   
> +#if !defined(USE_OPENGL_ES2)
> +static void GLAPIENTRY
> +OpenglMessageCallback(GLenum source,
> +                      GLenum type,
> +                      GLuint id,
> +                      GLenum severity,
> +                      GLsizei length,
> +                      const GLchar* message,
> +                      const void* userdata)
> +{
> +    vout_display_opengl_t *vgl = userdata;
> +
> +    const char *format = "OpenGL Debug callback: "
> +        "type = 0x%x, severity = 0x%x, message = %s";
> +
> +    if (type == GL_DEBUG_TYPE_ERROR)
> +        msg_Err(vgl->gl, format, type, severity, message);
> +    else
> +        msg_Dbg(vgl->gl, format, type, severity, message );
> +
> +    VLC_UNUSED(source);
> +    VLC_UNUSED(id);
> +    VLC_UNUSED(length);
> +}
> +#endif
> +
> +
>   static void
>   ResizeFormatToGLMaxTexSize(video_format_t *fmt, unsigned int max_tex_size)
>   {
> @@ -717,6 +744,8 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt,
>       GET_PROC_ADDR_CORE_GL(GetTexLevelParameteriv);
>       GET_PROC_ADDR_CORE_GL(TexEnvf);
>   
> +    GET_PROC_ADDR_CORE_GL(DebugMessageCallback);
> +
>       GET_PROC_ADDR(CreateShader);
>       GET_PROC_ADDR(ShaderSource);
>       GET_PROC_ADDR(CompileShader);
> @@ -881,6 +910,12 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt,
>       vgl->vt.GenBuffers(1, &vgl->index_buffer_object);
>       vgl->vt.GenBuffers(vgl->prgm->tc->tex_count, vgl->texture_buffer_object);
>   
> +#if !defined(USE_OPENGL_ES2)
> +    // During init, enable debug output
> +    vgl->vt.Enable(GL_DEBUG_OUTPUT);
> +    vgl->vt.DebugMessageCallback(OpenglMessageCallback, vgl);
> +#endif
> +
>       /* Initial number of allocated buffer objects for subpictures, will grow dynamically. */
>       int subpicture_buffer_object_count = 8;
>       vgl->subpicture_buffer_object = vlc_alloc(subpicture_buffer_object_count, sizeof(GLuint));
> @@ -915,7 +950,6 @@ vout_display_opengl_t *vout_display_opengl_New(video_format_t *fmt,
>   void vout_display_opengl_Delete(vout_display_opengl_t *vgl)
>   {
>       GL_ASSERT_NOERROR();
> -
>       /* */
>       vgl->vt.Finish();
>       vgl->vt.Flush();
> @@ -948,6 +982,10 @@ void vout_display_opengl_Delete(vout_display_opengl_t *vgl)
>       free(vgl->region);
>       GL_ASSERT_NOERROR();
>   
> +#if !defined(USE_OPENGL_ES2)
> +    vgl->vt.Disable(GL_DEBUG_OUTPUT);
> +#endif
> +
>       free(vgl);
>   }
>   
> @@ -1697,4 +1735,3 @@ int vout_display_opengl_Display(vout_display_opengl_t *vgl,
>   
>       return VLC_SUCCESS;
>   }
> -
> -- 
> 2.23.0
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
> 


More information about the vlc-devel mailing list