| From be426ad76c3e486f1364dd292cf8e1c633c80e91 Mon Sep 17 00:00:00 2001 |
| From: Vincent Davis Jr <vince@underview.tech> |
| Date: Thu, 8 Dec 2022 10:39:47 -0600 |
| Subject: [PATCH] libavdevice: opengl_enc.c update dynamic function loader |
| |
| Upstream-Status: Inappropriate |
| |
| RPI-Distro repo clones original ffmpeg and applies patches to enable |
| raspiberry pi support. |
| |
| For meta-raspberrypi ffmpeg builds, when opengl |
| is enabled do_compile will fail. Reasion is that |
| glGetProcAddress is undefined in either GLES2/gl2.h |
| or GLES2/gl2ext.h. |
| |
| define SelectedGetProcAddress to SDL_GL_GetProcAddress |
| if sdl2 is included. If not included, define function |
| pointers at compile time versus runtime. |
| |
| Signed-off-by: Vincent Davis Jr <vince@underview.tech> |
| --- |
| libavdevice/opengl_enc.c | 44 ++++++++++++++++++++++++++++++++++++---- |
| 1 file changed, 40 insertions(+), 4 deletions(-) |
| |
| diff --git a/libavdevice/opengl_enc.c b/libavdevice/opengl_enc.c |
| index 2bdb8da7..eabc1bf8 100644 |
| --- a/libavdevice/opengl_enc.c |
| +++ b/libavdevice/opengl_enc.c |
| @@ -37,12 +37,13 @@ |
| #include <OpenGL/gl3.h> |
| #elif HAVE_ES2_GL_H |
| #include <ES2/gl.h> |
| -#else |
| -#include <GL/gl.h> |
| -#include <GL/glext.h> |
| #endif |
| #if HAVE_GLXGETPROCADDRESS |
| #include <GL/glx.h> |
| +#else |
| +#define GL_GLEXT_PROTOTYPES |
| +#include <GLES2/gl2.h> |
| +#include <GLES2/gl2ext.h> |
| #endif |
| |
| #if CONFIG_SDL2 |
| @@ -493,8 +494,14 @@ static int av_cold opengl_load_procedures(OpenGLContext *opengl) |
| |
| #if HAVE_GLXGETPROCADDRESS |
| #define SelectedGetProcAddress glXGetProcAddress |
| +#define CAN_DYNAMIC_LOAD 1 |
| #elif HAVE_WGLGETPROCADDRESS |
| #define SelectedGetProcAddress wglGetProcAddress |
| +#elif CONFIG_SDL2 |
| +#define SelectedGetProcAddress SDL_GL_GetProcAddress |
| +#define CAN_DYNAMIC_LOAD 1 |
| +#else |
| +#define CAN_DYNAMIC_LOAD 0 |
| #endif |
| |
| #define LOAD_OPENGL_FUN(name, type) \ |
| @@ -504,7 +511,8 @@ static int av_cold opengl_load_procedures(OpenGLContext *opengl) |
| return AVERROR(ENOSYS); \ |
| } |
| |
| -#if CONFIG_SDL2 |
| +#if CAN_DYNAMIC_LOAD |
| +#if CONFIG_SDL2 |
| if (!opengl->no_window) |
| return opengl_sdl_load_procedures(opengl); |
| #endif |
| @@ -534,9 +542,37 @@ static int av_cold opengl_load_procedures(OpenGLContext *opengl) |
| LOAD_OPENGL_FUN(glGetShaderInfoLog, FF_PFNGLGETSHADERINFOLOGPROC) |
| LOAD_OPENGL_FUN(glEnableVertexAttribArray, FF_PFNGLENABLEVERTEXATTRIBARRAYPROC) |
| LOAD_OPENGL_FUN(glVertexAttribPointer, FF_PFNGLVERTEXATTRIBPOINTERPROC) |
| +#else |
| + procs->glActiveTexture = glActiveTexture; |
| + procs->glGenBuffers = glGenBuffers; |
| + procs->glDeleteBuffers = glDeleteBuffers; |
| + procs->glBufferData = glBufferData; |
| + procs->glBindBuffer = glBindBuffer; |
| + procs->glGetAttribLocation = glGetAttribLocation; |
| + procs->glGetUniformLocation = glGetUniformLocation; |
| + procs->glUniform1f = glUniform1f; |
| + procs->glUniform1i = glUniform1i; |
| + procs->glUniformMatrix4fv = glUniformMatrix4fv; |
| + procs->glCreateProgram = glCreateProgram; |
| + procs->glDeleteProgram = glDeleteProgram; |
| + procs->glUseProgram = glUseProgram; |
| + procs->glLinkProgram = glLinkProgram; |
| + procs->glGetProgramiv = glGetProgramiv; |
| + procs->glGetProgramInfoLog = glGetProgramInfoLog; |
| + procs->glAttachShader = glAttachShader; |
| + procs->glCreateShader = glCreateShader; |
| + procs->glDeleteShader = glDeleteShader; |
| + procs->glCompileShader = glCompileShader; |
| + procs->glShaderSource = glShaderSource; |
| + procs->glGetShaderiv = glGetShaderiv; |
| + procs->glGetShaderInfoLog = glGetShaderInfoLog; |
| + procs->glEnableVertexAttribArray = glEnableVertexAttribArray; |
| + procs->glVertexAttribPointer = (FF_PFNGLVERTEXATTRIBPOINTERPROC) glVertexAttribPointer; |
| +#endif |
| |
| return 0; |
| |
| +#undef CAN_DYNAMIC_LOAD |
| #undef SelectedGetProcAddress |
| #undef LOAD_OPENGL_FUN |
| } |
| -- |
| 2.38.1 |
| |