1From be426ad76c3e486f1364dd292cf8e1c633c80e91 Mon Sep 17 00:00:00 2001 2From: Vincent Davis Jr <vince@underview.tech> 3Date: Thu, 8 Dec 2022 10:39:47 -0600 4Subject: [PATCH] libavdevice: opengl_enc.c update dynamic function loader 5 6Upstream-Status: Inappropriate 7 8RPI-Distro repo clones original ffmpeg and applies patches to enable 9raspiberry pi support. 10 11For meta-raspberrypi ffmpeg builds, when opengl 12is enabled do_compile will fail. Reasion is that 13glGetProcAddress is undefined in either GLES2/gl2.h 14or GLES2/gl2ext.h. 15 16define SelectedGetProcAddress to SDL_GL_GetProcAddress 17if sdl2 is included. If not included, define function 18pointers at compile time versus runtime. 19 20Signed-off-by: Vincent Davis Jr <vince@underview.tech> 21--- 22 libavdevice/opengl_enc.c | 44 ++++++++++++++++++++++++++++++++++++---- 23 1 file changed, 40 insertions(+), 4 deletions(-) 24 25diff --git a/libavdevice/opengl_enc.c b/libavdevice/opengl_enc.c 26index 2bdb8da7..eabc1bf8 100644 27--- a/libavdevice/opengl_enc.c 28+++ b/libavdevice/opengl_enc.c 29@@ -37,12 +37,13 @@ 30 #include <OpenGL/gl3.h> 31 #elif HAVE_ES2_GL_H 32 #include <ES2/gl.h> 33-#else 34-#include <GL/gl.h> 35-#include <GL/glext.h> 36 #endif 37 #if HAVE_GLXGETPROCADDRESS 38 #include <GL/glx.h> 39+#else 40+#define GL_GLEXT_PROTOTYPES 41+#include <GLES2/gl2.h> 42+#include <GLES2/gl2ext.h> 43 #endif 44 45 #if CONFIG_SDL2 46@@ -493,8 +494,14 @@ static int av_cold opengl_load_procedures(OpenGLContext *opengl) 47 48 #if HAVE_GLXGETPROCADDRESS 49 #define SelectedGetProcAddress glXGetProcAddress 50+#define CAN_DYNAMIC_LOAD 1 51 #elif HAVE_WGLGETPROCADDRESS 52 #define SelectedGetProcAddress wglGetProcAddress 53+#elif CONFIG_SDL2 54+#define SelectedGetProcAddress SDL_GL_GetProcAddress 55+#define CAN_DYNAMIC_LOAD 1 56+#else 57+#define CAN_DYNAMIC_LOAD 0 58 #endif 59 60 #define LOAD_OPENGL_FUN(name, type) \ 61@@ -504,7 +511,8 @@ static int av_cold opengl_load_procedures(OpenGLContext *opengl) 62 return AVERROR(ENOSYS); \ 63 } 64 65-#if CONFIG_SDL2 66+#if CAN_DYNAMIC_LOAD 67+#if CONFIG_SDL2 68 if (!opengl->no_window) 69 return opengl_sdl_load_procedures(opengl); 70 #endif 71@@ -534,9 +542,37 @@ static int av_cold opengl_load_procedures(OpenGLContext *opengl) 72 LOAD_OPENGL_FUN(glGetShaderInfoLog, FF_PFNGLGETSHADERINFOLOGPROC) 73 LOAD_OPENGL_FUN(glEnableVertexAttribArray, FF_PFNGLENABLEVERTEXATTRIBARRAYPROC) 74 LOAD_OPENGL_FUN(glVertexAttribPointer, FF_PFNGLVERTEXATTRIBPOINTERPROC) 75+#else 76+ procs->glActiveTexture = glActiveTexture; 77+ procs->glGenBuffers = glGenBuffers; 78+ procs->glDeleteBuffers = glDeleteBuffers; 79+ procs->glBufferData = glBufferData; 80+ procs->glBindBuffer = glBindBuffer; 81+ procs->glGetAttribLocation = glGetAttribLocation; 82+ procs->glGetUniformLocation = glGetUniformLocation; 83+ procs->glUniform1f = glUniform1f; 84+ procs->glUniform1i = glUniform1i; 85+ procs->glUniformMatrix4fv = glUniformMatrix4fv; 86+ procs->glCreateProgram = glCreateProgram; 87+ procs->glDeleteProgram = glDeleteProgram; 88+ procs->glUseProgram = glUseProgram; 89+ procs->glLinkProgram = glLinkProgram; 90+ procs->glGetProgramiv = glGetProgramiv; 91+ procs->glGetProgramInfoLog = glGetProgramInfoLog; 92+ procs->glAttachShader = glAttachShader; 93+ procs->glCreateShader = glCreateShader; 94+ procs->glDeleteShader = glDeleteShader; 95+ procs->glCompileShader = glCompileShader; 96+ procs->glShaderSource = glShaderSource; 97+ procs->glGetShaderiv = glGetShaderiv; 98+ procs->glGetShaderInfoLog = glGetShaderInfoLog; 99+ procs->glEnableVertexAttribArray = glEnableVertexAttribArray; 100+ procs->glVertexAttribPointer = (FF_PFNGLVERTEXATTRIBPOINTERPROC) glVertexAttribPointer; 101+#endif 102 103 return 0; 104 105+#undef CAN_DYNAMIC_LOAD 106 #undef SelectedGetProcAddress 107 #undef LOAD_OPENGL_FUN 108 } 109-- 1102.38.1 111 112