[vlc-devel] [PATCH] opengl: add debug callbacks
Rémi Denis-Courmont
remi at remlab.net
Mon Sep 30 21:43:52 CEST 2019
Le torstaina 26. syyskuuta 2019, 16.59.51 EEST Steve Lhomme a écrit :
> 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";
format[]
> +
> + 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;
> }
> -
--
レミ・デニ-クールモン
http://www.remlab.net/
More information about the vlc-devel
mailing list