[vlc-devel] [PATCH] opengl: extract OpenGL common to a separate header
Alexandre Janniaux
ajanni at videolabs.io
Fri Dec 6 15:24:14 CET 2019
Hi,
LGTM,
Regards,
--
Alexandre Janniaux
Videolabs
On Fri, Dec 06, 2019 at 01:12:13PM +0100, Romain Vimont wrote:
> All OpenGL compatibility code was in converter.h. Move it to a separate
> header so that we can use it without depending on converters.
> ---
> modules/video_output/Makefile.am | 1 +
> modules/video_output/opengl/converter.h | 214 +--------------------
> modules/video_output/opengl/gl_common.h | 237 ++++++++++++++++++++++++
> 3 files changed, 239 insertions(+), 213 deletions(-)
> create mode 100644 modules/video_output/opengl/gl_common.h
>
> diff --git a/modules/video_output/Makefile.am b/modules/video_output/Makefile.am
> index e14272fc15..3c1bee98cb 100644
> --- a/modules/video_output/Makefile.am
> +++ b/modules/video_output/Makefile.am
> @@ -4,6 +4,7 @@ vout_LTLIBRARIES =
> EXTRA_DIST += video_output/README
>
> OPENGL_COMMONSOURCES = video_output/opengl/vout_helper.c \
> + video_output/opengl/gl_common.h \
> video_output/opengl/vout_helper.h video_output/opengl/converter.h \
> video_output/opengl/internal.h video_output/opengl/fragment_shaders.c \
> video_output/opengl/converter_sw.c
> diff --git a/modules/video_output/opengl/converter.h b/modules/video_output/opengl/converter.h
> index 30d7332a85..a3aba06621 100644
> --- a/modules/video_output/opengl/converter.h
> +++ b/modules/video_output/opengl/converter.h
> @@ -26,219 +26,7 @@
> #include <vlc_opengl.h>
> #include <vlc_picture_pool.h>
> #include <vlc_plugin.h>
> -
> -/* if USE_OPENGL_ES2 is defined, OpenGL ES version 2 will be used, otherwise
> - * normal OpenGL will be used */
> -#ifdef __APPLE__
> -# include <TargetConditionals.h>
> -# if !TARGET_OS_IPHONE
> -# undef USE_OPENGL_ES2
> -# define MACOS_OPENGL
> -# include <OpenGL/gl.h>
> -# else /* Force ESv2 on iOS */
> -# define USE_OPENGL_ES2
> -# include <OpenGLES/ES1/gl.h>
> -# include <OpenGLES/ES2/gl.h>
> -# include <OpenGLES/ES2/glext.h>
> -# endif
> -#else /* !defined (__APPLE__) */
> -# if defined (USE_OPENGL_ES2)
> -# include <GLES2/gl2.h>
> -# include <GLES2/gl2ext.h>
> -# else
> -# ifdef HAVE_GL_WGLEW_H
> -# include <GL/glew.h>
> -# endif
> -# include <GL/gl.h>
> -# endif
> -#endif
> -
> -#define VLCGL_PICTURE_MAX 128
> -
> -#ifndef GL_TEXTURE_RECTANGLE
> -# define GL_TEXTURE_RECTANGLE 0x84F5
> -#endif
> -
> -#ifndef APIENTRY
> -# define APIENTRY
> -#endif
> -
> -/* Core OpenGL/OpenGLES functions: the following functions pointers typedefs
> - * are not defined. */
> -#if !defined(_WIN32) /* Already defined on Win32 */
> -typedef void (*PFNGLACTIVETEXTUREPROC) (GLenum texture);
> -#endif
> -typedef void (APIENTRY *PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
> -typedef void (APIENTRY *PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);
> -typedef void (APIENTRY *PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags);
> -typedef void (APIENTRY *PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
> -typedef void (APIENTRY *PFNGLCLEARPROC) (GLbitfield mask);
> -typedef void (APIENTRY *PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures);
> -typedef void (APIENTRY *PFNGLDEPTHMASKPROC) (GLboolean flag);
> -typedef void (APIENTRY *PFNGLDISABLEPROC) (GLenum cap);
> -typedef void (APIENTRY *PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count);
> -typedef void (APIENTRY *PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices);
> -typedef void (APIENTRY *PFNGLENABLEPROC) (GLenum cap);
> -typedef void (APIENTRY *PFNGLFINISHPROC)(void);
> -typedef void (APIENTRY *PFNGLFLUSHPROC)(void);
> -typedef void (APIENTRY *PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
> -typedef GLenum (APIENTRY *PFNGLGETERRORPROC) (void);
> -typedef void (APIENTRY *PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data);
> -typedef const GLubyte *(APIENTRY *PFNGLGETSTRINGPROC) (GLenum name);
> -typedef void (APIENTRY *PFNGLGETTEXLEVELPARAMETERIVPROC) (GLenum target, GLint level, GLenum pname, GLint *params);
> -typedef void (APIENTRY *PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
> -typedef void (APIENTRY *PFNGLTEXENVFPROC)(GLenum target, GLenum pname, GLfloat param);
> -typedef void (APIENTRY *PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
> -typedef void (APIENTRY *PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
> -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);
> -
> -/* The following are defined in glext.h but not for GLES2 or on Apple systems */
> -#if defined(USE_OPENGL_ES2) || defined(__APPLE__)
> -# define PFNGLGETPROGRAMIVPROC typeof(glGetProgramiv)*
> -# define PFNGLGETPROGRAMINFOLOGPROC typeof(glGetProgramInfoLog)*
> -# define PFNGLGETSHADERIVPROC typeof(glGetShaderiv)*
> -# define PFNGLGETSHADERINFOLOGPROC typeof(glGetShaderInfoLog)*
> -# define PFNGLGETUNIFORMLOCATIONPROC typeof(glGetUniformLocation)*
> -# define PFNGLGETATTRIBLOCATIONPROC typeof(glGetAttribLocation)*
> -# define PFNGLVERTEXATTRIBPOINTERPROC typeof(glVertexAttribPointer)*
> -# define PFNGLENABLEVERTEXATTRIBARRAYPROC typeof(glEnableVertexAttribArray)*
> -# define PFNGLUNIFORMMATRIX4FVPROC typeof(glUniformMatrix4fv)*
> -# define PFNGLUNIFORMMATRIX3FVPROC typeof(glUniformMatrix3fv)*
> -# define PFNGLUNIFORMMATRIX2FVPROC typeof(glUniformMatrix2fv)*
> -# define PFNGLUNIFORM4FVPROC typeof(glUniform4fv)*
> -# define PFNGLUNIFORM4FPROC typeof(glUniform4f)*
> -# define PFNGLUNIFORM3FPROC typeof(glUniform3f)*
> -# define PFNGLUNIFORM2FPROC typeof(glUniform2f)*
> -# define PFNGLUNIFORM1FPROC typeof(glUniform1f)*
> -# define PFNGLUNIFORM1IPROC typeof(glUniform1i)*
> -# define PFNGLCREATESHADERPROC typeof(glCreateShader)*
> -# define PFNGLSHADERSOURCEPROC typeof(glShaderSource)*
> -# define PFNGLCOMPILESHADERPROC typeof(glCompileShader)*
> -# define PFNGLDELETESHADERPROC typeof(glDeleteShader)*
> -# define PFNGLCREATEPROGRAMPROC typeof(glCreateProgram)*
> -# define PFNGLLINKPROGRAMPROC typeof(glLinkProgram)*
> -# define PFNGLUSEPROGRAMPROC typeof(glUseProgram)*
> -# define PFNGLDELETEPROGRAMPROC typeof(glDeleteProgram)*
> -# define PFNGLATTACHSHADERPROC typeof(glAttachShader)*
> -# define PFNGLGENBUFFERSPROC typeof(glGenBuffers)*
> -# define PFNGLBINDBUFFERPROC typeof(glBindBuffer)*
> -# define PFNGLBUFFERDATAPROC typeof(glBufferData)*
> -# define PFNGLBUFFERSUBDATAPROC typeof(glBufferSubData)*
> -# define PFNGLDELETEBUFFERSPROC typeof(glDeleteBuffers)*
> -# define PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC typeof(glGetFramebufferAttachmentParameteriv)*
> -#if defined(__APPLE__)
> -# import <CoreFoundation/CoreFoundation.h>
> -#endif
> -#endif
> -
> -/* The following are defined in glext.h but doesn't exist in GLES2 */
> -#if defined(USE_OPENGL_ES2) || defined(__APPLE__)
> -typedef struct __GLsync *GLsync;
> -typedef uint64_t GLuint64;
> -typedef void *(APIENTRY *PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
> -typedef void (APIENTRY *PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
> -typedef GLboolean (APIENTRY *PFNGLUNMAPBUFFERPROC) (GLenum target);
> -typedef GLsync (APIENTRY *PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);
> -typedef void (APIENTRY *PFNGLDELETESYNCPROC) (GLsync sync);
> -typedef GLenum (APIENTRY *PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
> -#endif
> -
> -/**
> - * Structure containing function pointers to shaders commands
> - */
> -typedef struct {
> - /*
> - * GL / GLES core functions
> - */
> - PFNGLBINDTEXTUREPROC BindTexture;
> - PFNGLBLENDFUNCPROC BlendFunc;
> - PFNGLCLEARCOLORPROC ClearColor;
> - PFNGLCLEARPROC Clear;
> - PFNGLDELETETEXTURESPROC DeleteTextures;
> - PFNGLDEPTHMASKPROC DepthMask;
> - PFNGLDISABLEPROC Disable;
> - PFNGLDRAWARRAYSPROC DrawArrays;
> - PFNGLDRAWELEMENTSPROC DrawElements;
> - PFNGLENABLEPROC Enable;
> - PFNGLFINISHPROC Finish;
> - PFNGLFLUSHPROC Flush;
> - PFNGLGENTEXTURESPROC GenTextures;
> - PFNGLGETERRORPROC GetError;
> - PFNGLGETINTEGERVPROC GetIntegerv;
> - PFNGLGETSTRINGPROC GetString;
> - PFNGLPIXELSTOREIPROC PixelStorei;
> - PFNGLTEXIMAGE2DPROC TexImage2D;
> - PFNGLTEXPARAMETERFPROC TexParameterf;
> - PFNGLTEXPARAMETERIPROC TexParameteri;
> - PFNGLTEXSUBIMAGE2DPROC TexSubImage2D;
> - PFNGLVIEWPORTPROC Viewport;
> -
> - /* GL only core functions: NULL for GLES2 */
> - PFNGLGETTEXLEVELPARAMETERIVPROC GetTexLevelParameteriv; /* Can be NULL */
> - PFNGLTEXENVFPROC TexEnvf; /* Can be NULL */
> -
> - /*
> - * GL / GLES extensions
> - */
> -
> - /* Shader commands */
> - PFNGLCREATESHADERPROC CreateShader;
> - PFNGLSHADERSOURCEPROC ShaderSource;
> - PFNGLCOMPILESHADERPROC CompileShader;
> - PFNGLATTACHSHADERPROC AttachShader;
> - PFNGLDELETESHADERPROC DeleteShader;
> -
> - /* Shader log commands */
> - PFNGLGETPROGRAMIVPROC GetProgramiv;
> - PFNGLGETSHADERIVPROC GetShaderiv;
> - PFNGLGETPROGRAMINFOLOGPROC GetProgramInfoLog;
> - PFNGLGETSHADERINFOLOGPROC GetShaderInfoLog;
> -
> - /* Shader variables commands */
> - PFNGLGETUNIFORMLOCATIONPROC GetUniformLocation;
> - PFNGLGETATTRIBLOCATIONPROC GetAttribLocation;
> - PFNGLVERTEXATTRIBPOINTERPROC VertexAttribPointer;
> - PFNGLENABLEVERTEXATTRIBARRAYPROC EnableVertexAttribArray;
> - PFNGLUNIFORMMATRIX4FVPROC UniformMatrix4fv;
> - PFNGLUNIFORMMATRIX3FVPROC UniformMatrix3fv;
> - PFNGLUNIFORMMATRIX2FVPROC UniformMatrix2fv;
> - PFNGLUNIFORM4FVPROC Uniform4fv;
> - PFNGLUNIFORM4FPROC Uniform4f;
> - PFNGLUNIFORM3FPROC Uniform3f;
> - PFNGLUNIFORM2FPROC Uniform2f;
> - PFNGLUNIFORM1FPROC Uniform1f;
> - PFNGLUNIFORM1IPROC Uniform1i;
> -
> - /* Program commands */
> - PFNGLCREATEPROGRAMPROC CreateProgram;
> - PFNGLLINKPROGRAMPROC LinkProgram;
> - PFNGLUSEPROGRAMPROC UseProgram;
> - PFNGLDELETEPROGRAMPROC DeleteProgram;
> -
> - /* Texture commands */
> - PFNGLACTIVETEXTUREPROC ActiveTexture;
> -
> - /* Buffers commands */
> - PFNGLGENBUFFERSPROC GenBuffers;
> - PFNGLBINDBUFFERPROC BindBuffer;
> - PFNGLBUFFERDATAPROC BufferData;
> - PFNGLDELETEBUFFERSPROC DeleteBuffers;
> -
> - /* Framebuffers commands */
> - PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC GetFramebufferAttachmentParameteriv;
> -
> - /* Commands used for PBO and/or Persistent mapping */
> - PFNGLBUFFERSUBDATAPROC BufferSubData; /* can be NULL */
> - PFNGLBUFFERSTORAGEPROC BufferStorage; /* can be NULL */
> - PFNGLMAPBUFFERRANGEPROC MapBufferRange; /* can be NULL */
> - PFNGLFLUSHMAPPEDBUFFERRANGEPROC FlushMappedBufferRange; /* can be NULL */
> - PFNGLUNMAPBUFFERPROC UnmapBuffer; /* can be NULL */
> - PFNGLFENCESYNCPROC FenceSync; /* can be NULL */
> - PFNGLDELETESYNCPROC DeleteSync; /* can be NULL */
> - PFNGLCLIENTWAITSYNCPROC ClientWaitSync; /* can be NULL */
> -} opengl_vtable_t;
> +#include "gl_common.h"
>
> struct pl_context;
> struct pl_shader;
> diff --git a/modules/video_output/opengl/gl_common.h b/modules/video_output/opengl/gl_common.h
> new file mode 100644
> index 0000000000..11c109a7a7
> --- /dev/null
> +++ b/modules/video_output/opengl/gl_common.h
> @@ -0,0 +1,237 @@
> +/*****************************************************************************
> ++ * gl_common.h
> ++ *****************************************************************************
> ++ * Copyright (C) 2019 VLC authors and VideoLAN
> ++ *
> ++ * This program is free software; you can redistribute it and/or modify it
> ++ * under the terms of the GNU Lesser General Public License as published by
> ++ * the Free Software Foundation; either version 2.1 of the License, or
> ++ * (at your option) any later version.
> ++ *
> ++ * This program is distributed in the hope that it will be useful,
> ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> ++ * GNU Lesser General Public License for more details.
> ++ *
> ++ * You should have received a copy of the GNU Lesser General Public License
> ++ * along with this program; if not, write to the Free Software Foundation,
> ++ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
> ++ *****************************************************************************/
> +
> +#ifndef VLC_GL_COMMON_H
> +#define VLC_GL_COMMON_H
> +
> +/* if USE_OPENGL_ES2 is defined, OpenGL ES version 2 will be used, otherwise
> + * normal OpenGL will be used */
> +#ifdef __APPLE__
> +# include <TargetConditionals.h>
> +# if !TARGET_OS_IPHONE
> +# undef USE_OPENGL_ES2
> +# define MACOS_OPENGL
> +# include <OpenGL/gl.h>
> +# else /* Force ESv2 on iOS */
> +# define USE_OPENGL_ES2
> +# include <OpenGLES/ES1/gl.h>
> +# include <OpenGLES/ES2/gl.h>
> +# include <OpenGLES/ES2/glext.h>
> +# endif
> +#else /* !defined (__APPLE__) */
> +# if defined (USE_OPENGL_ES2)
> +# include <GLES2/gl2.h>
> +# include <GLES2/gl2ext.h>
> +# else
> +# ifdef HAVE_GL_WGLEW_H
> +# include <GL/glew.h>
> +# endif
> +# include <GL/gl.h>
> +# endif
> +#endif
> +
> +#define VLCGL_PICTURE_MAX 128
> +
> +#ifndef GL_TEXTURE_RECTANGLE
> +# define GL_TEXTURE_RECTANGLE 0x84F5
> +#endif
> +
> +#ifndef APIENTRY
> +# define APIENTRY
> +#endif
> +
> +/* Core OpenGL/OpenGLES functions: the following functions pointers typedefs
> + * are not defined. */
> +#if !defined(_WIN32) /* Already defined on Win32 */
> +typedef void (*PFNGLACTIVETEXTUREPROC) (GLenum texture);
> +#endif
> +typedef void (APIENTRY *PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
> +typedef void (APIENTRY *PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);
> +typedef void (APIENTRY *PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags);
> +typedef void (APIENTRY *PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
> +typedef void (APIENTRY *PFNGLCLEARPROC) (GLbitfield mask);
> +typedef void (APIENTRY *PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures);
> +typedef void (APIENTRY *PFNGLDEPTHMASKPROC) (GLboolean flag);
> +typedef void (APIENTRY *PFNGLDISABLEPROC) (GLenum cap);
> +typedef void (APIENTRY *PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count);
> +typedef void (APIENTRY *PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices);
> +typedef void (APIENTRY *PFNGLENABLEPROC) (GLenum cap);
> +typedef void (APIENTRY *PFNGLFINISHPROC)(void);
> +typedef void (APIENTRY *PFNGLFLUSHPROC)(void);
> +typedef void (APIENTRY *PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
> +typedef GLenum (APIENTRY *PFNGLGETERRORPROC) (void);
> +typedef void (APIENTRY *PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data);
> +typedef const GLubyte *(APIENTRY *PFNGLGETSTRINGPROC) (GLenum name);
> +typedef void (APIENTRY *PFNGLGETTEXLEVELPARAMETERIVPROC) (GLenum target, GLint level, GLenum pname, GLint *params);
> +typedef void (APIENTRY *PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
> +typedef void (APIENTRY *PFNGLTEXENVFPROC)(GLenum target, GLenum pname, GLfloat param);
> +typedef void (APIENTRY *PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels);
> +typedef void (APIENTRY *PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
> +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);
> +
> +/* The following are defined in glext.h but not for GLES2 or on Apple systems */
> +#if defined(USE_OPENGL_ES2) || defined(__APPLE__)
> +# define PFNGLGETPROGRAMIVPROC typeof(glGetProgramiv)*
> +# define PFNGLGETPROGRAMINFOLOGPROC typeof(glGetProgramInfoLog)*
> +# define PFNGLGETSHADERIVPROC typeof(glGetShaderiv)*
> +# define PFNGLGETSHADERINFOLOGPROC typeof(glGetShaderInfoLog)*
> +# define PFNGLGETUNIFORMLOCATIONPROC typeof(glGetUniformLocation)*
> +# define PFNGLGETATTRIBLOCATIONPROC typeof(glGetAttribLocation)*
> +# define PFNGLVERTEXATTRIBPOINTERPROC typeof(glVertexAttribPointer)*
> +# define PFNGLENABLEVERTEXATTRIBARRAYPROC typeof(glEnableVertexAttribArray)*
> +# define PFNGLUNIFORMMATRIX4FVPROC typeof(glUniformMatrix4fv)*
> +# define PFNGLUNIFORMMATRIX3FVPROC typeof(glUniformMatrix3fv)*
> +# define PFNGLUNIFORMMATRIX2FVPROC typeof(glUniformMatrix2fv)*
> +# define PFNGLUNIFORM4FVPROC typeof(glUniform4fv)*
> +# define PFNGLUNIFORM4FPROC typeof(glUniform4f)*
> +# define PFNGLUNIFORM3FPROC typeof(glUniform3f)*
> +# define PFNGLUNIFORM2FPROC typeof(glUniform2f)*
> +# define PFNGLUNIFORM1FPROC typeof(glUniform1f)*
> +# define PFNGLUNIFORM1IPROC typeof(glUniform1i)*
> +# define PFNGLCREATESHADERPROC typeof(glCreateShader)*
> +# define PFNGLSHADERSOURCEPROC typeof(glShaderSource)*
> +# define PFNGLCOMPILESHADERPROC typeof(glCompileShader)*
> +# define PFNGLDELETESHADERPROC typeof(glDeleteShader)*
> +# define PFNGLCREATEPROGRAMPROC typeof(glCreateProgram)*
> +# define PFNGLLINKPROGRAMPROC typeof(glLinkProgram)*
> +# define PFNGLUSEPROGRAMPROC typeof(glUseProgram)*
> +# define PFNGLDELETEPROGRAMPROC typeof(glDeleteProgram)*
> +# define PFNGLATTACHSHADERPROC typeof(glAttachShader)*
> +# define PFNGLGENBUFFERSPROC typeof(glGenBuffers)*
> +# define PFNGLBINDBUFFERPROC typeof(glBindBuffer)*
> +# define PFNGLBUFFERDATAPROC typeof(glBufferData)*
> +# define PFNGLBUFFERSUBDATAPROC typeof(glBufferSubData)*
> +# define PFNGLDELETEBUFFERSPROC typeof(glDeleteBuffers)*
> +# define PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC typeof(glGetFramebufferAttachmentParameteriv)*
> +#if defined(__APPLE__)
> +# import <CoreFoundation/CoreFoundation.h>
> +#endif
> +#endif
> +
> +/* The following are defined in glext.h but doesn't exist in GLES2 */
> +#if defined(USE_OPENGL_ES2) || defined(__APPLE__)
> +typedef struct __GLsync *GLsync;
> +typedef uint64_t GLuint64;
> +typedef void *(APIENTRY *PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
> +typedef void (APIENTRY *PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);
> +typedef GLboolean (APIENTRY *PFNGLUNMAPBUFFERPROC) (GLenum target);
> +typedef GLsync (APIENTRY *PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);
> +typedef void (APIENTRY *PFNGLDELETESYNCPROC) (GLsync sync);
> +typedef GLenum (APIENTRY *PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
> +#endif
> +
> +/**
> + * Structure containing function pointers to shaders commands
> + */
> +typedef struct {
> + /*
> + * GL / GLES core functions
> + */
> + PFNGLBINDTEXTUREPROC BindTexture;
> + PFNGLBLENDFUNCPROC BlendFunc;
> + PFNGLCLEARCOLORPROC ClearColor;
> + PFNGLCLEARPROC Clear;
> + PFNGLDELETETEXTURESPROC DeleteTextures;
> + PFNGLDEPTHMASKPROC DepthMask;
> + PFNGLDISABLEPROC Disable;
> + PFNGLDRAWARRAYSPROC DrawArrays;
> + PFNGLDRAWELEMENTSPROC DrawElements;
> + PFNGLENABLEPROC Enable;
> + PFNGLFINISHPROC Finish;
> + PFNGLFLUSHPROC Flush;
> + PFNGLGENTEXTURESPROC GenTextures;
> + PFNGLGETERRORPROC GetError;
> + PFNGLGETINTEGERVPROC GetIntegerv;
> + PFNGLGETSTRINGPROC GetString;
> + PFNGLPIXELSTOREIPROC PixelStorei;
> + PFNGLTEXIMAGE2DPROC TexImage2D;
> + PFNGLTEXPARAMETERFPROC TexParameterf;
> + PFNGLTEXPARAMETERIPROC TexParameteri;
> + PFNGLTEXSUBIMAGE2DPROC TexSubImage2D;
> + PFNGLVIEWPORTPROC Viewport;
> +
> + /* GL only core functions: NULL for GLES2 */
> + PFNGLGETTEXLEVELPARAMETERIVPROC GetTexLevelParameteriv; /* Can be NULL */
> + PFNGLTEXENVFPROC TexEnvf; /* Can be NULL */
> +
> + /*
> + * GL / GLES extensions
> + */
> +
> + /* Shader commands */
> + PFNGLCREATESHADERPROC CreateShader;
> + PFNGLSHADERSOURCEPROC ShaderSource;
> + PFNGLCOMPILESHADERPROC CompileShader;
> + PFNGLATTACHSHADERPROC AttachShader;
> + PFNGLDELETESHADERPROC DeleteShader;
> +
> + /* Shader log commands */
> + PFNGLGETPROGRAMIVPROC GetProgramiv;
> + PFNGLGETSHADERIVPROC GetShaderiv;
> + PFNGLGETPROGRAMINFOLOGPROC GetProgramInfoLog;
> + PFNGLGETSHADERINFOLOGPROC GetShaderInfoLog;
> +
> + /* Shader variables commands */
> + PFNGLGETUNIFORMLOCATIONPROC GetUniformLocation;
> + PFNGLGETATTRIBLOCATIONPROC GetAttribLocation;
> + PFNGLVERTEXATTRIBPOINTERPROC VertexAttribPointer;
> + PFNGLENABLEVERTEXATTRIBARRAYPROC EnableVertexAttribArray;
> + PFNGLUNIFORMMATRIX4FVPROC UniformMatrix4fv;
> + PFNGLUNIFORMMATRIX3FVPROC UniformMatrix3fv;
> + PFNGLUNIFORMMATRIX2FVPROC UniformMatrix2fv;
> + PFNGLUNIFORM4FVPROC Uniform4fv;
> + PFNGLUNIFORM4FPROC Uniform4f;
> + PFNGLUNIFORM3FPROC Uniform3f;
> + PFNGLUNIFORM2FPROC Uniform2f;
> + PFNGLUNIFORM1FPROC Uniform1f;
> + PFNGLUNIFORM1IPROC Uniform1i;
> +
> + /* Program commands */
> + PFNGLCREATEPROGRAMPROC CreateProgram;
> + PFNGLLINKPROGRAMPROC LinkProgram;
> + PFNGLUSEPROGRAMPROC UseProgram;
> + PFNGLDELETEPROGRAMPROC DeleteProgram;
> +
> + /* Texture commands */
> + PFNGLACTIVETEXTUREPROC ActiveTexture;
> +
> + /* Buffers commands */
> + PFNGLGENBUFFERSPROC GenBuffers;
> + PFNGLBINDBUFFERPROC BindBuffer;
> + PFNGLBUFFERDATAPROC BufferData;
> + PFNGLDELETEBUFFERSPROC DeleteBuffers;
> +
> + /* Framebuffers commands */
> + PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC GetFramebufferAttachmentParameteriv;
> +
> + /* Commands used for PBO and/or Persistent mapping */
> + PFNGLBUFFERSUBDATAPROC BufferSubData; /* can be NULL */
> + PFNGLBUFFERSTORAGEPROC BufferStorage; /* can be NULL */
> + PFNGLMAPBUFFERRANGEPROC MapBufferRange; /* can be NULL */
> + PFNGLFLUSHMAPPEDBUFFERRANGEPROC FlushMappedBufferRange; /* can be NULL */
> + PFNGLUNMAPBUFFERPROC UnmapBuffer; /* can be NULL */
> + PFNGLFENCESYNCPROC FenceSync; /* can be NULL */
> + PFNGLDELETESYNCPROC DeleteSync; /* can be NULL */
> + PFNGLCLIENTWAITSYNCPROC ClientWaitSync; /* can be NULL */
> +} opengl_vtable_t;
> +
> +#endif
> --
> 2.24.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