mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-07 21:23:32 +00:00
gl_engine: dynamic load gl functions
no any 3rd-party libs, such as glfw or glad did not used support windows, linux, macos and emsdk only the actually used set of functions are loaded Co-Authored-By: Sergii Liebodkin <sergii@lottiefiles.com> Co-Authored-BY: Hermet Park <hermet@lottiefiles.com> issue: https://github.com/thorvg/thorvg/issues/2453
This commit is contained in:
parent
57adfbd499
commit
ec26784266
8 changed files with 2343 additions and 43 deletions
|
@ -327,6 +327,7 @@ struct GlWindow : Window
|
||||||
if (!initialized) return;
|
if (!initialized) return;
|
||||||
|
|
||||||
#ifdef THORVG_GL_TARGET_GLES
|
#ifdef THORVG_GL_TARGET_GLES
|
||||||
|
SDL_SetHint(SDL_HINT_OPENGL_ES_DRIVER, "1");
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
source_file = [
|
source_file = [
|
||||||
|
'tvgGl.h',
|
||||||
'tvgGlCommon.h',
|
'tvgGlCommon.h',
|
||||||
'tvgGlGpuBuffer.h',
|
'tvgGlGpuBuffer.h',
|
||||||
'tvgGlList.h',
|
'tvgGlList.h',
|
||||||
|
@ -9,6 +10,7 @@ source_file = [
|
||||||
'tvgGlRenderTask.h',
|
'tvgGlRenderTask.h',
|
||||||
'tvgGlShader.h',
|
'tvgGlShader.h',
|
||||||
'tvgGlShaderSrc.h',
|
'tvgGlShaderSrc.h',
|
||||||
|
'tvgGl.cpp',
|
||||||
'tvgGlGeometry.cpp',
|
'tvgGlGeometry.cpp',
|
||||||
'tvgGlGpuBuffer.cpp',
|
'tvgGlGpuBuffer.cpp',
|
||||||
'tvgGlProgram.cpp',
|
'tvgGlProgram.cpp',
|
||||||
|
@ -55,7 +57,6 @@ endif
|
||||||
|
|
||||||
engine_dep += [declare_dependency(
|
engine_dep += [declare_dependency(
|
||||||
compile_args : gl_target_profile,
|
compile_args : gl_target_profile,
|
||||||
dependencies : gl_dep,
|
|
||||||
include_directories : include_directories('.'),
|
include_directories : include_directories('.'),
|
||||||
sources : source_file,
|
sources : source_file,
|
||||||
)]
|
)]
|
||||||
|
|
831
src/renderer/gl_engine/tvgGl.cpp
Executable file
831
src/renderer/gl_engine/tvgGl.cpp
Executable file
|
@ -0,0 +1,831 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2025 the ThorVG project. All rights reserved.
|
||||||
|
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "tvgGl.h"
|
||||||
|
#include "tvgCommon.h"
|
||||||
|
|
||||||
|
#ifdef __EMSCRIPTEN__
|
||||||
|
|
||||||
|
bool glInit()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool glTerm()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else //__EMSCRIPTEN__
|
||||||
|
|
||||||
|
#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
|
||||||
|
|
||||||
|
typedef PROC(WINAPI *PFNGLGETPROCADDRESSPROC)(LPCSTR);
|
||||||
|
|
||||||
|
static HMODULE _libGL = NULL;
|
||||||
|
static PFNGLGETPROCADDRESSPROC glGetProcAddress = NULL;
|
||||||
|
|
||||||
|
static bool _glLoad()
|
||||||
|
{
|
||||||
|
#ifndef THORVG_GL_TARGET_GLES
|
||||||
|
_libGL = LoadLibraryW(L"opengl32.dll");
|
||||||
|
if (!_libGL) {
|
||||||
|
TVGERR("GL_ENGINE", "Cannot find the gl library.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!glGetProcAddress) glGetProcAddress = (PFNGLGETPROCADDRESSPROC)GetProcAddress(_libGL, "wglGetProcAddress");
|
||||||
|
if (!glGetProcAddress) glGetProcAddress = (PFNGLGETPROCADDRESSPROC)GetProcAddress(_libGL, "wglGetProcAddressARB");
|
||||||
|
if (!glGetProcAddress) return false;
|
||||||
|
#else
|
||||||
|
if (!_libGL) _libGL = LoadLibraryW(L"GLESv2.dll");
|
||||||
|
if (!_libGL) _libGL = LoadLibraryW(L"libGLESv2.dll");
|
||||||
|
if (!_libGL) {
|
||||||
|
TVGERR("GL_ENGINE", "Cannot find gles library.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// load opengl proc address from dll or from wglGetProcAddress
|
||||||
|
static PROC _getProcAddress(const char* procName)
|
||||||
|
{
|
||||||
|
PROC procHandle = GetProcAddress(_libGL, procName);
|
||||||
|
#ifndef THORVG_GL_TARGET_GLES
|
||||||
|
if (!procHandle) procHandle = glGetProcAddress(procName);
|
||||||
|
#endif
|
||||||
|
return procHandle;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(__linux__)
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
typedef void* (*PFNGLGETPROCADDRESSPROC)(const char*);
|
||||||
|
|
||||||
|
static void* _libGL = nullptr;
|
||||||
|
static PFNGLGETPROCADDRESSPROC glGetProcAddress = nullptr;
|
||||||
|
|
||||||
|
static bool _glLoad()
|
||||||
|
{
|
||||||
|
#ifndef THORVG_GL_TARGET_GLES
|
||||||
|
_libGL = dlopen("libGL.so", RTLD_LAZY);
|
||||||
|
if (!_libGL) _libGL = dlopen("libGL.so.4", RTLD_LAZY);
|
||||||
|
if (!_libGL) _libGL = dlopen("libGL.so.3", RTLD_LAZY);
|
||||||
|
if (!_libGL) {
|
||||||
|
TVGERR("GL_ENGINE", "Cannot find the gl library.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!glGetProcAddress) glGetProcAddress = (PFNGLGETPROCADDRESSPROC)dlsym(_libGL, "glXGetProcAddress");
|
||||||
|
if (!glGetProcAddress) glGetProcAddress = (PFNGLGETPROCADDRESSPROC)dlsym(_libGL, "glXGetProcAddressARB");
|
||||||
|
if (!glGetProcAddress) return false;
|
||||||
|
#else
|
||||||
|
if (!_libGL) _libGL = dlopen("libGLESv2.so", RTLD_LAZY);
|
||||||
|
if (!_libGL) _libGL = dlopen("libGLESv2.so.2.0", RTLD_LAZY); // sometimes used in Mesa
|
||||||
|
if (!_libGL) _libGL = dlopen("libGLESv2.so.2", RTLD_LAZY);
|
||||||
|
if (!_libGL) {
|
||||||
|
TVGERR("GL_ENGINE", "Cannot find the gles library.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// load opengl proc address from glXGetProcAddress
|
||||||
|
static void* _getProcAddress(const char* procName)
|
||||||
|
{
|
||||||
|
#ifndef THORVG_GL_TARGET_GLES
|
||||||
|
return glGetProcAddress(procName);
|
||||||
|
#else
|
||||||
|
return dlsym(_libGL, procName);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(__APPLE__) || defined(__MACH__)
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
static void* _libGL = nullptr;
|
||||||
|
|
||||||
|
static bool _glLoad() {
|
||||||
|
if (!_libGL) _libGL = dlopen("/Library/Frameworks/OpenGL.framework/OpenGL", RTLD_LAZY);
|
||||||
|
if (!_libGL) _libGL = dlopen("/System/Library/Frameworks/OpenGL.framework/OpenGL", RTLD_LAZY);
|
||||||
|
if (_libGL) return true;
|
||||||
|
TVGERR("GL_ENGINE", "Cannot find gl library.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void* _getProcAddress(const char* procName) {
|
||||||
|
return dlsym(_libGL, procName);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define GL_FUNCTION_FETCH(procName, procType) \
|
||||||
|
procName = (procType)_getProcAddress(#procName); \
|
||||||
|
if (!procName) { \
|
||||||
|
TVGERR("GL_ENGINE", "%s is not supported.", #procName); \
|
||||||
|
return false; \
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************************************************************/
|
||||||
|
/* External Class Implementation */
|
||||||
|
/************************************************************************/
|
||||||
|
|
||||||
|
//GL_VERSION_1_0
|
||||||
|
PFNGLCULLFACEPROC glCullFace;
|
||||||
|
PFNGLFRONTFACEPROC glFrontFace;
|
||||||
|
PFNGLSCISSORPROC glScissor;
|
||||||
|
PFNGLTEXPARAMETERIPROC glTexParameteri;
|
||||||
|
PFNGLTEXIMAGE2DPROC glTexImage2D;
|
||||||
|
PFNGLDRAWBUFFERPROC glDrawBuffer;
|
||||||
|
PFNGLCLEARPROC glClear;
|
||||||
|
PFNGLCLEARCOLORPROC glClearColor;
|
||||||
|
PFNGLCLEARSTENCILPROC glClearStencil;
|
||||||
|
PFNGLCLEARDEPTHPROC glClearDepth;
|
||||||
|
PFNGLCLEARDEPTHFPROC glClearDepthf; // GLES
|
||||||
|
PFNGLCOLORMASKPROC glColorMask;
|
||||||
|
PFNGLDEPTHMASKPROC glDepthMask;
|
||||||
|
PFNGLDISABLEPROC glDisable;
|
||||||
|
PFNGLENABLEPROC glEnable;
|
||||||
|
PFNGLBLENDFUNCPROC glBlendFunc;
|
||||||
|
PFNGLSTENCILFUNCPROC glStencilFunc;
|
||||||
|
PFNGLSTENCILOPPROC glStencilOp;
|
||||||
|
PFNGLDEPTHFUNCPROC glDepthFunc;
|
||||||
|
PFNGLGETERRORPROC glGetError;
|
||||||
|
PFNGLGETINTEGERVPROC glGetIntegerv;
|
||||||
|
PFNGLGETSTRINGPROC glGetString;
|
||||||
|
PFNGLVIEWPORTPROC glViewport;
|
||||||
|
//PFNGLHINTPROC glHint;
|
||||||
|
//PFNGLLINEWIDTHPROC glLineWidth;
|
||||||
|
//PFNGLPOINTSIZEPROC glPointSize;
|
||||||
|
//PFNGLPOLYGONMODEPROC glPolygonMode;
|
||||||
|
//PFNGLTEXPARAMETERFPROC glTexParameterf;
|
||||||
|
//PFNGLTEXPARAMETERFVPROC glTexParameterfv;
|
||||||
|
//PFNGLTEXPARAMETERIVPROC glTexParameteriv;
|
||||||
|
//PFNGLTEXIMAGE1DPROC glTexImage1D;
|
||||||
|
//PFNGLSTENCILMASKPROC glStencilMask;
|
||||||
|
//PFNGLFINISHPROC glFinish;
|
||||||
|
//PFNGLFLUSHPROC glFlush;
|
||||||
|
//PFNGLLOGICOPPROC glLogicOp = nullptr
|
||||||
|
//PFNGLPIXELSTOREFPROC glPixelStoref;
|
||||||
|
//PFNGLPIXELSTOREIPROC glPixelStorei;
|
||||||
|
//PFNGLREADBUFFERPROC glReadBuffer;
|
||||||
|
//PFNGLREADPIXELSPROC glReadPixels;
|
||||||
|
//PFNGLGETBOOLEANVPROC glGetBooleanv;
|
||||||
|
//PFNGLGETDOUBLEVPROC glGetDoublev;
|
||||||
|
//PFNGLGETFLOATVPROC glGetFloatv;
|
||||||
|
//PFNGLGETTEXIMAGEPROC glGetTexImage;
|
||||||
|
//PFNGLGETTEXPARAMETERFVPROC glGetTexParameterfv;
|
||||||
|
//PFNGLGETTEXPARAMETERIVPROC glGetTexParameteriv;
|
||||||
|
//PFNGLGETTEXLEVELPARAMETERFVPROC glGetTexLevelParameterfv;
|
||||||
|
//PFNGLGETTEXLEVELPARAMETERIVPROC glGetTexLevelParameteriv;
|
||||||
|
//PFNGLISENABLEDPROC glIsEnabled;
|
||||||
|
//PFNGLDEPTHRANGEPROC glDepthRange;
|
||||||
|
|
||||||
|
//GL_VERSION_1_1
|
||||||
|
PFNGLDRAWELEMENTSPROC glDrawElements;
|
||||||
|
PFNGLBINDTEXTUREPROC glBindTexture;
|
||||||
|
PFNGLDELETETEXTURESPROC glDeleteTextures;
|
||||||
|
PFNGLGENTEXTURESPROC glGenTextures;
|
||||||
|
//PFNGLDRAWARRAYSPROC glDrawArrays;
|
||||||
|
//PFNGLGETPOINTERVPROC glGetPointerv;
|
||||||
|
//PFNGLPOLYGONOFFSETPROC glPolygonOffset;
|
||||||
|
//PFNGLCOPYTEXIMAGE1DPROC glCopyTexImage1D;
|
||||||
|
//PFNGLCOPYTEXIMAGE2DPROC glCopyTexImage2D;
|
||||||
|
//PFNGLCOPYTEXSUBIMAGE1DPROC glCopyTexSubImage1D;
|
||||||
|
//PFNGLCOPYTEXSUBIMAGE2DPROC glCopyTexSubImage2D;
|
||||||
|
//PFNGLTEXSUBIMAGE1DPROC glTexSubImage1D;
|
||||||
|
//PFNGLTEXSUBIMAGE2DPROC glTexSubImage2D;
|
||||||
|
//PFNGLISTEXTUREPROC glIsTexture;
|
||||||
|
|
||||||
|
//GL_VERSION_1_2
|
||||||
|
//PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements;
|
||||||
|
//PFNGLTEXIMAGE3DPROC glTexImage3D;
|
||||||
|
//PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D;
|
||||||
|
//PFNGLCOPYTEXSUBIMAGE3DPROC glCopyTexSubImage3D;
|
||||||
|
|
||||||
|
//GL_VERSION_1_3
|
||||||
|
PFNGLACTIVETEXTUREPROC glActiveTexture;
|
||||||
|
//PFNGLSAMPLECOVERAGEPROC glSampleCoverage;
|
||||||
|
//PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D;
|
||||||
|
//PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D;
|
||||||
|
//PFNGLCOMPRESSEDTEXIMAGE1DPROC glCompressedTexImage1D;
|
||||||
|
//PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D;
|
||||||
|
//PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D;
|
||||||
|
//PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glCompressedTexSubImage1D;
|
||||||
|
//PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage;
|
||||||
|
|
||||||
|
//GL_VERSION_1_4
|
||||||
|
PFNGLBLENDEQUATIONPROC glBlendEquation;
|
||||||
|
//PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate;
|
||||||
|
//PFNGLMULTIDRAWARRAYSPROC glMultiDrawArrays;
|
||||||
|
//PFNGLMULTIDRAWELEMENTSPROC glMultiDrawElements;
|
||||||
|
//PFNGLPOINTPARAMETERFPROC glPointParameterf;
|
||||||
|
//PFNGLPOINTPARAMETERFVPROC glPointParameterfv;
|
||||||
|
//PFNGLPOINTPARAMETERIPROC glPointParameteri;
|
||||||
|
//PFNGLPOINTPARAMETERIVPROC glPointParameteriv;
|
||||||
|
//PFNGLBLENDCOLORPROC glBlendColor;
|
||||||
|
|
||||||
|
//GL_VERSION_1_5
|
||||||
|
PFNGLBINDBUFFERPROC glBindBuffer;
|
||||||
|
PFNGLDELETEBUFFERSPROC glDeleteBuffers;
|
||||||
|
PFNGLGENBUFFERSPROC glGenBuffers;
|
||||||
|
PFNGLBUFFERDATAPROC glBufferData;
|
||||||
|
//PFNGLGENQUERIESPROC glGenQueries;
|
||||||
|
//PFNGLDELETEQUERIESPROC glDeleteQueries;
|
||||||
|
//PFNGLISQUERYPROC glIsQuery;
|
||||||
|
//PFNGLBEGINQUERYPROC glBeginQuery;
|
||||||
|
//PFNGLENDQUERYPROC glEndQuery;
|
||||||
|
//PFNGLGETQUERYIVPROC glGetQueryiv;
|
||||||
|
//PFNGLGETQUERYOBJECTIVPROC glGetQueryObjectiv;
|
||||||
|
//PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv;
|
||||||
|
//PFNGLISBUFFERPROC glIsBuffer;
|
||||||
|
//PFNGLBUFFERSUBDATAPROC glBufferSubData;
|
||||||
|
//PFNGLGETBUFFERSUBDATAPROC glGetBufferSubData;
|
||||||
|
//PFNGLMAPBUFFERPROC glMapBuffer;
|
||||||
|
//PFNGLUNMAPBUFFERPROC glUnmapBuffer;
|
||||||
|
//PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv;
|
||||||
|
//PFNGLGETBUFFERPOINTERVPROC glGetBufferPointerv;
|
||||||
|
|
||||||
|
//GL_VERSION_2_0
|
||||||
|
PFNGLDRAWBUFFERSPROC glDrawBuffers;
|
||||||
|
PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate;
|
||||||
|
PFNGLSTENCILFUNCSEPARATEPROC glStencilFuncSeparate;
|
||||||
|
PFNGLATTACHSHADERPROC glAttachShader;
|
||||||
|
PFNGLCOMPILESHADERPROC glCompileShader;
|
||||||
|
PFNGLCREATEPROGRAMPROC glCreateProgram;
|
||||||
|
PFNGLCREATESHADERPROC glCreateShader;
|
||||||
|
PFNGLDELETEPROGRAMPROC glDeleteProgram;
|
||||||
|
PFNGLDELETESHADERPROC glDeleteShader;
|
||||||
|
PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
|
||||||
|
PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
|
||||||
|
PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation;
|
||||||
|
PFNGLGETPROGRAMIVPROC glGetProgramiv;
|
||||||
|
PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
|
||||||
|
PFNGLGETSHADERIVPROC glGetShaderiv;
|
||||||
|
PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
|
||||||
|
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
|
||||||
|
PFNGLLINKPROGRAMPROC glLinkProgram;
|
||||||
|
PFNGLSHADERSOURCEPROC glShaderSource;
|
||||||
|
PFNGLUSEPROGRAMPROC glUseProgram;
|
||||||
|
PFNGLUNIFORM1FPROC glUniform1f;
|
||||||
|
PFNGLUNIFORM1FVPROC glUniform1fv;
|
||||||
|
PFNGLUNIFORM2FVPROC glUniform2fv;
|
||||||
|
PFNGLUNIFORM3FVPROC glUniform3fv;
|
||||||
|
PFNGLUNIFORM4FVPROC glUniform4fv;
|
||||||
|
PFNGLUNIFORM1IVPROC glUniform1iv;
|
||||||
|
PFNGLUNIFORM2IVPROC glUniform2iv;
|
||||||
|
PFNGLUNIFORM3IVPROC glUniform3iv;
|
||||||
|
PFNGLUNIFORM4IVPROC glUniform4iv;
|
||||||
|
PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
|
||||||
|
PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
|
||||||
|
//PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate;
|
||||||
|
//PFNGLSTENCILMASKSEPARATEPROC glStencilMaskSeparate;
|
||||||
|
//PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation;
|
||||||
|
//PFNGLDETACHSHADERPROC glDetachShader;
|
||||||
|
//PFNGLGETACTIVEATTRIBPROC glGetActiveAttrib;
|
||||||
|
//PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform;
|
||||||
|
//PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders;
|
||||||
|
//PFNGLGETSHADERSOURCEPROC glGetShaderSource;
|
||||||
|
//PFNGLGETUNIFORMFVPROC glGetUniformfv;
|
||||||
|
//PFNGLGETUNIFORMIVPROC glGetUniformiv;
|
||||||
|
//PFNGLGETVERTEXATTRIBDVPROC glGetVertexAttribdv;
|
||||||
|
//PFNGLGETVERTEXATTRIBFVPROC glGetVertexAttribfv;
|
||||||
|
//PFNGLGETVERTEXATTRIBIVPROC glGetVertexAttribiv;
|
||||||
|
//PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv;
|
||||||
|
//PFNGLISPROGRAMPROC glIsProgram;
|
||||||
|
//PFNGLISSHADERPROC glIsShader;
|
||||||
|
//PFNGLUNIFORM2FPROC glUniform2f;
|
||||||
|
//PFNGLUNIFORM3FPROC glUniform3f;
|
||||||
|
//PFNGLUNIFORM4FPROC glUniform4f;
|
||||||
|
//PFNGLUNIFORM1IPROC glUniform1i;
|
||||||
|
//PFNGLUNIFORM2IPROC glUniform2i;
|
||||||
|
//PFNGLUNIFORM3IPROC glUniform3i;
|
||||||
|
//PFNGLUNIFORM4IPROC glUniform4i;
|
||||||
|
//PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv;
|
||||||
|
//PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv;
|
||||||
|
//PFNGLVALIDATEPROGRAMPROC glValidateProgram;
|
||||||
|
//PFNGLVERTEXATTRIB1DPROC glVertexAttrib1d;
|
||||||
|
//PFNGLVERTEXATTRIB1DVPROC glVertexAttrib1dv;
|
||||||
|
//PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f;
|
||||||
|
//PFNGLVERTEXATTRIB1FVPROC glVertexAttrib1fv;
|
||||||
|
//PFNGLVERTEXATTRIB1SPROC glVertexAttrib1s;
|
||||||
|
//PFNGLVERTEXATTRIB1SVPROC glVertexAttrib1sv;
|
||||||
|
//PFNGLVERTEXATTRIB2DPROC glVertexAttrib2d;
|
||||||
|
//PFNGLVERTEXATTRIB2DVPROC glVertexAttrib2dv;
|
||||||
|
//PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f;
|
||||||
|
//PFNGLVERTEXATTRIB2FVPROC glVertexAttrib2fv;
|
||||||
|
//PFNGLVERTEXATTRIB2SPROC glVertexAttrib2s;
|
||||||
|
//PFNGLVERTEXATTRIB2SVPROC glVertexAttrib2sv;
|
||||||
|
//PFNGLVERTEXATTRIB3DPROC glVertexAttrib3d;
|
||||||
|
//PFNGLVERTEXATTRIB3DVPROC glVertexAttrib3dv;
|
||||||
|
//PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f;
|
||||||
|
//PFNGLVERTEXATTRIB3FVPROC glVertexAttrib3fv;
|
||||||
|
//PFNGLVERTEXATTRIB3SPROC glVertexAttrib3s;
|
||||||
|
//PFNGLVERTEXATTRIB3SVPROC glVertexAttrib3sv;
|
||||||
|
//PFNGLVERTEXATTRIB4NBVPROC glVertexAttrib4Nbv;
|
||||||
|
//PFNGLVERTEXATTRIB4NIVPROC glVertexAttrib4Niv;
|
||||||
|
//PFNGLVERTEXATTRIB4NSVPROC glVertexAttrib4Nsv;
|
||||||
|
//PFNGLVERTEXATTRIB4NUBPROC glVertexAttrib4Nub;
|
||||||
|
//PFNGLVERTEXATTRIB4NUBVPROC glVertexAttrib4Nubv;
|
||||||
|
//PFNGLVERTEXATTRIB4NUIVPROC glVertexAttrib4Nuiv;
|
||||||
|
//PFNGLVERTEXATTRIB4NUSVPROC glVertexAttrib4Nusv;
|
||||||
|
//PFNGLVERTEXATTRIB4BVPROC glVertexAttrib4bv;
|
||||||
|
//PFNGLVERTEXATTRIB4DPROC glVertexAttrib4d;
|
||||||
|
//PFNGLVERTEXATTRIB4DVPROC glVertexAttrib4dv;
|
||||||
|
//PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f;
|
||||||
|
//PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv;
|
||||||
|
//PFNGLVERTEXATTRIB4IVPROC glVertexAttrib4iv;
|
||||||
|
//PFNGLVERTEXATTRIB4SPROC glVertexAttrib4s;
|
||||||
|
//PFNGLVERTEXATTRIB4SVPROC glVertexAttrib4sv;
|
||||||
|
//PFNGLVERTEXATTRIB4UBVPROC glVertexAttrib4ubv;
|
||||||
|
//PFNGLVERTEXATTRIB4UIVPROC glVertexAttrib4uiv;
|
||||||
|
//PFNGLVERTEXATTRIB4USVPROC glVertexAttrib4usv;
|
||||||
|
|
||||||
|
//GL_VERSION_2_1
|
||||||
|
//PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv;
|
||||||
|
//PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv;
|
||||||
|
//PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv;
|
||||||
|
//PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv;
|
||||||
|
//PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv;
|
||||||
|
//PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv;
|
||||||
|
|
||||||
|
//GL_VERSION_3_0
|
||||||
|
PFNGLBINDBUFFERRANGEPROC glBindBufferRange;
|
||||||
|
PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer;
|
||||||
|
PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
|
||||||
|
PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers;
|
||||||
|
PFNGLINVALIDATEFRAMEBUFFERPROC glInvalidateFramebuffer;
|
||||||
|
PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
|
||||||
|
PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
|
||||||
|
PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
|
||||||
|
PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
|
||||||
|
PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer;
|
||||||
|
PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
|
||||||
|
PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample;
|
||||||
|
PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
|
||||||
|
PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
|
||||||
|
PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
|
||||||
|
//PFNGLCOLORMASKIPROC glColorMaski;
|
||||||
|
//PFNGLGETBOOLEANI_VPROC glGetBooleani_v;
|
||||||
|
//PFNGLGETINTEGERI_VPROC glGetIntegeri_v;
|
||||||
|
//PFNGLENABLEIPROC glEnablei;
|
||||||
|
//PFNGLDISABLEIPROC glDisablei;
|
||||||
|
//PFNGLISENABLEDIPROC glIsEnabledi;
|
||||||
|
//PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback;
|
||||||
|
//PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback;
|
||||||
|
//PFNGLBINDBUFFERBASEPROC glBindBufferBase;
|
||||||
|
//PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings;
|
||||||
|
//PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glGetTransformFeedbackVarying;
|
||||||
|
//PFNGLCLAMPCOLORPROC glClampColor;
|
||||||
|
//PFNGLBEGINCONDITIONALRENDERPROC glBeginConditionalRender;
|
||||||
|
//PFNGLENDCONDITIONALRENDERPROC glEndConditionalRender;
|
||||||
|
//PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer;
|
||||||
|
//PFNGLGETVERTEXATTRIBIIVPROC glGetVertexAttribIiv;
|
||||||
|
//PFNGLGETVERTEXATTRIBIUIVPROC glGetVertexAttribIuiv;
|
||||||
|
//PFNGLVERTEXATTRIBI1IPROC glVertexAttribI1i;
|
||||||
|
//PFNGLVERTEXATTRIBI2IPROC glVertexAttribI2i;
|
||||||
|
//PFNGLVERTEXATTRIBI3IPROC glVertexAttribI3i;
|
||||||
|
//PFNGLVERTEXATTRIBI4IPROC glVertexAttribI4i;
|
||||||
|
//PFNGLVERTEXATTRIBI1UIPROC glVertexAttribI1ui;
|
||||||
|
//PFNGLVERTEXATTRIBI2UIPROC glVertexAttribI2ui;
|
||||||
|
//PFNGLVERTEXATTRIBI3UIPROC glVertexAttribI3ui;
|
||||||
|
//PFNGLVERTEXATTRIBI4UIPROC glVertexAttribI4ui;
|
||||||
|
//PFNGLVERTEXATTRIBI1IVPROC glVertexAttribI1iv;
|
||||||
|
//PFNGLVERTEXATTRIBI2IVPROC glVertexAttribI2iv;
|
||||||
|
//PFNGLVERTEXATTRIBI3IVPROC glVertexAttribI3iv;
|
||||||
|
//PFNGLVERTEXATTRIBI4IVPROC glVertexAttribI4iv;
|
||||||
|
//PFNGLVERTEXATTRIBI1UIVPROC glVertexAttribI1uiv;
|
||||||
|
//PFNGLVERTEXATTRIBI2UIVPROC glVertexAttribI2uiv;
|
||||||
|
//PFNGLVERTEXATTRIBI3UIVPROC glVertexAttribI3uiv;
|
||||||
|
//PFNGLVERTEXATTRIBI4UIVPROC glVertexAttribI4uiv;
|
||||||
|
//PFNGLVERTEXATTRIBI4BVPROC glVertexAttribI4bv;
|
||||||
|
//PFNGLVERTEXATTRIBI4SVPROC glVertexAttribI4sv;
|
||||||
|
//PFNGLVERTEXATTRIBI4UBVPROC glVertexAttribI4ubv;
|
||||||
|
//PFNGLVERTEXATTRIBI4USVPROC glVertexAttribI4usv;
|
||||||
|
//PFNGLGETUNIFORMUIVPROC glGetUniformuiv;
|
||||||
|
//PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation;
|
||||||
|
//PFNGLGETFRAGDATALOCATIONPROC glGetFragDataLocation;
|
||||||
|
//PFNGLUNIFORM1UIPROC glUniform1ui;
|
||||||
|
//PFNGLUNIFORM2UIPROC glUniform2ui;
|
||||||
|
//PFNGLUNIFORM3UIPROC glUniform3ui;
|
||||||
|
//PFNGLUNIFORM4UIPROC glUniform4ui;
|
||||||
|
//PFNGLUNIFORM1UIVPROC glUniform1uiv;
|
||||||
|
//PFNGLUNIFORM2UIVPROC glUniform2uiv;
|
||||||
|
//PFNGLUNIFORM3UIVPROC glUniform3uiv;
|
||||||
|
//PFNGLUNIFORM4UIVPROC glUniform4uiv;
|
||||||
|
//PFNGLTEXPARAMETERIIVPROC glTexParameterIiv;
|
||||||
|
//PFNGLTEXPARAMETERIUIVPROC glTexParameterIuiv;
|
||||||
|
//PFNGLGETTEXPARAMETERIIVPROC glGetTexParameterIiv;
|
||||||
|
//PFNGLGETTEXPARAMETERIUIVPROC glGetTexParameterIuiv;
|
||||||
|
//PFNGLCLEARBUFFERIVPROC glClearBufferiv;
|
||||||
|
//PFNGLCLEARBUFFERUIVPROC glClearBufferuiv;
|
||||||
|
//PFNGLCLEARBUFFERFVPROC glClearBufferfv;
|
||||||
|
//PFNGLCLEARBUFFERFIPROC glClearBufferfi;
|
||||||
|
//PFNGLGETSTRINGIPROC glGetStringi;
|
||||||
|
//PFNGLISRENDERBUFFERPROC glIsRenderbuffer;
|
||||||
|
//PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;
|
||||||
|
//PFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv;
|
||||||
|
//PFNGLISFRAMEBUFFERPROC glIsFramebuffer;
|
||||||
|
//PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
|
||||||
|
//PFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D;
|
||||||
|
//PFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D;
|
||||||
|
//PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv;
|
||||||
|
//PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
|
||||||
|
//PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer;
|
||||||
|
//PFNGLMAPBUFFERRANGEPROC glMapBufferRange;
|
||||||
|
//PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
|
||||||
|
//PFNGLISVERTEXARRAYPROC glIsVertexArray;
|
||||||
|
|
||||||
|
//GL_VERSION_3_1
|
||||||
|
PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex;
|
||||||
|
PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;
|
||||||
|
//PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced;
|
||||||
|
//PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced;
|
||||||
|
//PFNGLTEXBUFFERPROC glTexBuffer;
|
||||||
|
//PFNGLPRIMITIVERESTARTINDEXPROC glPrimitiveRestartIndex;
|
||||||
|
//PFNGLCOPYBUFFERSUBDATAPROC glCopyBufferSubData;
|
||||||
|
//PFNGLGETUNIFORMINDICESPROC glGetUniformIndices;
|
||||||
|
//PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv;
|
||||||
|
//PFNGLGETACTIVEUNIFORMNAMEPROC glGetActiveUniformName;
|
||||||
|
//PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv;
|
||||||
|
//PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glGetActiveUniformBlockName;
|
||||||
|
|
||||||
|
bool glInit()
|
||||||
|
{
|
||||||
|
if (!_glLoad()) return false;
|
||||||
|
|
||||||
|
// GL_VERSION_1_0
|
||||||
|
GL_FUNCTION_FETCH(glCullFace, PFNGLCULLFACEPROC);
|
||||||
|
GL_FUNCTION_FETCH(glFrontFace, PFNGLFRONTFACEPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glHint, PFNGLHINTPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glLineWidth, PFNGLLINEWIDTHPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glPointSize, PFNGLPOINTSIZEPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glPolygonMode, PFNGLPOLYGONMODEPROC);
|
||||||
|
GL_FUNCTION_FETCH(glScissor, PFNGLSCISSORPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glTexParameterf, PFNGLTEXPARAMETERFPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glTexParameterfv, PFNGLTEXPARAMETERFVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glTexParameteri, PFNGLTEXPARAMETERIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glTexParameteriv, PFNGLTEXPARAMETERIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glTexImage1D, PFNGLTEXIMAGE1DPROC);
|
||||||
|
GL_FUNCTION_FETCH(glTexImage2D, PFNGLTEXIMAGE2DPROC);
|
||||||
|
#if !defined(THORVG_GL_TARGET_GLES)
|
||||||
|
GL_FUNCTION_FETCH(glDrawBuffer, PFNGLDRAWBUFFERPROC);
|
||||||
|
#endif
|
||||||
|
GL_FUNCTION_FETCH(glClear, PFNGLCLEARPROC);
|
||||||
|
GL_FUNCTION_FETCH(glClearColor, PFNGLCLEARCOLORPROC);
|
||||||
|
GL_FUNCTION_FETCH(glClearStencil, PFNGLCLEARSTENCILPROC);
|
||||||
|
#if defined(THORVG_GL_TARGET_GLES)
|
||||||
|
GL_FUNCTION_FETCH(glClearDepthf, PFNGLCLEARDEPTHFPROC);
|
||||||
|
#else
|
||||||
|
GL_FUNCTION_FETCH(glClearDepth, PFNGLCLEARDEPTHPROC);
|
||||||
|
#endif
|
||||||
|
// GL_FUNCTION_FETCH(glStencilMask, PFNGLSTENCILMASKPROC);
|
||||||
|
GL_FUNCTION_FETCH(glColorMask, PFNGLCOLORMASKPROC);
|
||||||
|
GL_FUNCTION_FETCH(glDepthMask, PFNGLDEPTHMASKPROC);
|
||||||
|
GL_FUNCTION_FETCH(glDisable, PFNGLDISABLEPROC);
|
||||||
|
GL_FUNCTION_FETCH(glEnable, PFNGLENABLEPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glFinish, PFNGLFINISHPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glFlush, PFNGLFLUSHPROC);
|
||||||
|
GL_FUNCTION_FETCH(glBlendFunc, PFNGLBLENDFUNCPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glLogicOp, PFNGLLOGICOPPROC);
|
||||||
|
GL_FUNCTION_FETCH(glStencilFunc, PFNGLSTENCILFUNCPROC);
|
||||||
|
GL_FUNCTION_FETCH(glStencilOp, PFNGLSTENCILOPPROC);
|
||||||
|
GL_FUNCTION_FETCH(glDepthFunc, PFNGLDEPTHFUNCPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glPixelStoref, PFNGLPIXELSTOREFPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glPixelStorei, PFNGLPIXELSTOREIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glReadBuffer, PFNGLREADBUFFERPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glReadPixels, PFNGLREADPIXELSPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetBooleanv, PFNGLGETBOOLEANVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetDoublev, PFNGLGETDOUBLEVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glGetError, PFNGLGETERRORPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetFloatv, PFNGLGETFLOATVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glGetIntegerv, PFNGLGETINTEGERVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glGetString, PFNGLGETSTRINGPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetTexImage, PFNGLGETTEXIMAGEPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetTexParameterfv, PFNGLGETTEXPARAMETERFVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetTexParameteriv, PFNGLGETTEXPARAMETERIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetTexLevelParameterfv, PFNGLGETTEXLEVELPARAMETERFVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetTexLevelParameteriv, PFNGLGETTEXLEVELPARAMETERIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glIsEnabled, PFNGLISENABLEDPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glDepthRange, PFNGLDEPTHRANGEPROC);
|
||||||
|
GL_FUNCTION_FETCH(glViewport, PFNGLVIEWPORTPROC);
|
||||||
|
|
||||||
|
// GL_VERSION_1_1
|
||||||
|
// GL_FUNCTION_FETCH(glDrawArrays, PFNGLDRAWARRAYSPROC);
|
||||||
|
GL_FUNCTION_FETCH(glDrawElements, PFNGLDRAWELEMENTSPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetPointerv, PFNGLGETPOINTERVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glPolygonOffset, PFNGLPOLYGONOFFSETPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glCopyTexImage1D, PFNGLCOPYTEXIMAGE1DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glCopyTexImage2D, PFNGLCOPYTEXIMAGE2DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glCopyTexSubImage1D, PFNGLCOPYTEXSUBIMAGE1DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glCopyTexSubImage2D, PFNGLCOPYTEXSUBIMAGE2DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glTexSubImage1D, PFNGLTEXSUBIMAGE1DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glTexSubImage2D, PFNGLTEXSUBIMAGE2DPROC);
|
||||||
|
GL_FUNCTION_FETCH(glBindTexture, PFNGLBINDTEXTUREPROC);
|
||||||
|
GL_FUNCTION_FETCH(glDeleteTextures, PFNGLDELETETEXTURESPROC);
|
||||||
|
GL_FUNCTION_FETCH(glGenTextures, PFNGLGENTEXTURESPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glIsTexture, PFNGLISTEXTUREPROC);
|
||||||
|
|
||||||
|
// // GL_VERSION_1_2
|
||||||
|
// GL_FUNCTION_FETCH(glDrawRangeElements, PFNGLDRAWRANGEELEMENTSPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glTexImage3D, PFNGLTEXIMAGE3DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glTexSubImage3D, PFNGLTEXSUBIMAGE3DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glCopyTexSubImage3D, PFNGLCOPYTEXSUBIMAGE3DPROC);
|
||||||
|
|
||||||
|
// // GL_VERSION_1_3
|
||||||
|
GL_FUNCTION_FETCH(glActiveTexture, PFNGLACTIVETEXTUREPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glSampleCoverage, PFNGLSAMPLECOVERAGEPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glCompressedTexImage3D, PFNGLCOMPRESSEDTEXIMAGE3DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glCompressedTexImage2D, PFNGLCOMPRESSEDTEXIMAGE2DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glCompressedTexImage1D, PFNGLCOMPRESSEDTEXIMAGE1DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glCompressedTexSubImage3D, PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glCompressedTexSubImage2D, PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glCompressedTexSubImage1D, PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetCompressedTexImage, PFNGLGETCOMPRESSEDTEXIMAGEPROC);
|
||||||
|
|
||||||
|
// // GL_VERSION_1_4
|
||||||
|
// GL_FUNCTION_FETCH(glBlendFuncSeparate, PFNGLBLENDFUNCSEPARATEPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glMultiDrawArrays, PFNGLMULTIDRAWARRAYSPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glMultiDrawElements, PFNGLMULTIDRAWELEMENTSPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glPointParameterf, PFNGLPOINTPARAMETERFPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glPointParameterfv, PFNGLPOINTPARAMETERFVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glPointParameteri, PFNGLPOINTPARAMETERIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glPointParameteriv, PFNGLPOINTPARAMETERIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glBlendColor, PFNGLBLENDCOLORPROC);
|
||||||
|
GL_FUNCTION_FETCH(glBlendEquation, PFNGLBLENDEQUATIONPROC);
|
||||||
|
|
||||||
|
// GL_VERSION_1_5
|
||||||
|
// GL_FUNCTION_FETCH(glGenQueries, PFNGLGENQUERIESPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glDeleteQueries, PFNGLDELETEQUERIESPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glIsQuery, PFNGLISQUERYPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glBeginQuery, PFNGLBEGINQUERYPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glEndQuery, PFNGLENDQUERYPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetQueryiv, PFNGLGETQUERYIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetQueryObjectiv, PFNGLGETQUERYOBJECTIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetQueryObjectuiv, PFNGLGETQUERYOBJECTUIVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glBindBuffer, PFNGLBINDBUFFERPROC);
|
||||||
|
GL_FUNCTION_FETCH(glDeleteBuffers, PFNGLDELETEBUFFERSPROC);
|
||||||
|
GL_FUNCTION_FETCH(glGenBuffers, PFNGLGENBUFFERSPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glIsBuffer, PFNGLISBUFFERPROC);
|
||||||
|
GL_FUNCTION_FETCH(glBufferData, PFNGLBUFFERDATAPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glBufferSubData, PFNGLBUFFERSUBDATAPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetBufferSubData, PFNGLGETBUFFERSUBDATAPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glMapBuffer, PFNGLMAPBUFFERPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUnmapBuffer, PFNGLUNMAPBUFFERPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetBufferParameteriv, PFNGLGETBUFFERPARAMETERIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetBufferPointerv, PFNGLGETBUFFERPOINTERVPROC);
|
||||||
|
|
||||||
|
// GL_VERSION_2_0
|
||||||
|
// GL_FUNCTION_FETCH(glBlendEquationSeparate, PFNGLBLENDEQUATIONSEPARATEPROC);
|
||||||
|
#if defined(THORVG_GL_TARGET_GLES)
|
||||||
|
GL_FUNCTION_FETCH(glDrawBuffers, PFNGLDRAWBUFFERSPROC);
|
||||||
|
#endif
|
||||||
|
GL_FUNCTION_FETCH(glStencilOpSeparate, PFNGLSTENCILOPSEPARATEPROC);
|
||||||
|
GL_FUNCTION_FETCH(glStencilFuncSeparate, PFNGLSTENCILFUNCSEPARATEPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glStencilMaskSeparate, PFNGLSTENCILMASKSEPARATEPROC);
|
||||||
|
GL_FUNCTION_FETCH(glAttachShader, PFNGLATTACHSHADERPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glBindAttribLocation, PFNGLBINDATTRIBLOCATIONPROC);
|
||||||
|
GL_FUNCTION_FETCH(glCompileShader, PFNGLCOMPILESHADERPROC);
|
||||||
|
GL_FUNCTION_FETCH(glCreateProgram, PFNGLCREATEPROGRAMPROC);
|
||||||
|
GL_FUNCTION_FETCH(glCreateShader, PFNGLCREATESHADERPROC);
|
||||||
|
GL_FUNCTION_FETCH(glDeleteProgram, PFNGLDELETEPROGRAMPROC);
|
||||||
|
GL_FUNCTION_FETCH(glDeleteShader, PFNGLDELETESHADERPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glDetachShader, PFNGLDETACHSHADERPROC);
|
||||||
|
GL_FUNCTION_FETCH(glDisableVertexAttribArray, PFNGLDISABLEVERTEXATTRIBARRAYPROC);
|
||||||
|
GL_FUNCTION_FETCH(glEnableVertexAttribArray, PFNGLENABLEVERTEXATTRIBARRAYPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetActiveAttrib, PFNGLGETACTIVEATTRIBPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetActiveUniform, PFNGLGETACTIVEUNIFORMPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetAttachedShaders, PFNGLGETATTACHEDSHADERSPROC);
|
||||||
|
GL_FUNCTION_FETCH(glGetAttribLocation, PFNGLGETATTRIBLOCATIONPROC);
|
||||||
|
GL_FUNCTION_FETCH(glGetProgramiv, PFNGLGETPROGRAMIVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glGetProgramInfoLog, PFNGLGETPROGRAMINFOLOGPROC);
|
||||||
|
GL_FUNCTION_FETCH(glGetShaderiv, PFNGLGETSHADERIVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glGetShaderInfoLog, PFNGLGETSHADERINFOLOGPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetShaderSource, PFNGLGETSHADERSOURCEPROC);
|
||||||
|
GL_FUNCTION_FETCH(glGetUniformLocation, PFNGLGETUNIFORMLOCATIONPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetUniformfv, PFNGLGETUNIFORMFVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetUniformiv, PFNGLGETUNIFORMIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetVertexAttribdv, PFNGLGETVERTEXATTRIBDVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetVertexAttribfv, PFNGLGETVERTEXATTRIBFVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetVertexAttribiv, PFNGLGETVERTEXATTRIBIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetVertexAttribPointerv, PFNGLGETVERTEXATTRIBPOINTERVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glIsProgram, PFNGLISPROGRAMPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glIsShader, PFNGLISSHADERPROC);
|
||||||
|
GL_FUNCTION_FETCH(glLinkProgram, PFNGLLINKPROGRAMPROC);
|
||||||
|
GL_FUNCTION_FETCH(glShaderSource, PFNGLSHADERSOURCEPROC);
|
||||||
|
GL_FUNCTION_FETCH(glUseProgram, PFNGLUSEPROGRAMPROC);
|
||||||
|
GL_FUNCTION_FETCH(glUniform1f, PFNGLUNIFORM1FPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniform2f, PFNGLUNIFORM2FPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniform3f, PFNGLUNIFORM3FPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniform4f, PFNGLUNIFORM4FPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniform1i, PFNGLUNIFORM1IPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniform2i, PFNGLUNIFORM2IPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniform3i, PFNGLUNIFORM3IPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniform4i, PFNGLUNIFORM4IPROC);
|
||||||
|
GL_FUNCTION_FETCH(glUniform1fv, PFNGLUNIFORM1FVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glUniform2fv, PFNGLUNIFORM2FVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glUniform3fv, PFNGLUNIFORM3FVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glUniform4fv, PFNGLUNIFORM4FVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glUniform1iv, PFNGLUNIFORM1IVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glUniform2iv, PFNGLUNIFORM2IVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glUniform3iv, PFNGLUNIFORM3IVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glUniform4iv, PFNGLUNIFORM4IVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniformMatrix2fv, PFNGLUNIFORMMATRIX2FVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniformMatrix3fv, PFNGLUNIFORMMATRIX3FVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glUniformMatrix4fv, PFNGLUNIFORMMATRIX4FVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glValidateProgram, PFNGLVALIDATEPROGRAMPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib1d, PFNGLVERTEXATTRIB1DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib1dv, PFNGLVERTEXATTRIB1DVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib1f, PFNGLVERTEXATTRIB1FPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib1fv, PFNGLVERTEXATTRIB1FVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib1s, PFNGLVERTEXATTRIB1SPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib1sv, PFNGLVERTEXATTRIB1SVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib2d, PFNGLVERTEXATTRIB2DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib2dv, PFNGLVERTEXATTRIB2DVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib2f, PFNGLVERTEXATTRIB2FPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib2fv, PFNGLVERTEXATTRIB2FVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib2s, PFNGLVERTEXATTRIB2SPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib2sv, PFNGLVERTEXATTRIB2SVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib3d, PFNGLVERTEXATTRIB3DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib3dv, PFNGLVERTEXATTRIB3DVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib3f, PFNGLVERTEXATTRIB3FPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib3fv, PFNGLVERTEXATTRIB3FVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib3s, PFNGLVERTEXATTRIB3SPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib3sv, PFNGLVERTEXATTRIB3SVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4Nbv, PFNGLVERTEXATTRIB4NBVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4Niv, PFNGLVERTEXATTRIB4NIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4Nsv, PFNGLVERTEXATTRIB4NSVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4Nub, PFNGLVERTEXATTRIB4NUBPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4Nubv, PFNGLVERTEXATTRIB4NUBVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4Nuiv, PFNGLVERTEXATTRIB4NUIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4Nusv, PFNGLVERTEXATTRIB4NUSVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4bv, PFNGLVERTEXATTRIB4BVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4d, PFNGLVERTEXATTRIB4DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4dv, PFNGLVERTEXATTRIB4DVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4f, PFNGLVERTEXATTRIB4FPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4fv, PFNGLVERTEXATTRIB4FVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4iv, PFNGLVERTEXATTRIB4IVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4s, PFNGLVERTEXATTRIB4SPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4sv, PFNGLVERTEXATTRIB4SVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4ubv, PFNGLVERTEXATTRIB4UBVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4uiv, PFNGLVERTEXATTRIB4UIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttrib4usv, PFNGLVERTEXATTRIB4USVPROC);
|
||||||
|
GL_FUNCTION_FETCH(glVertexAttribPointer, PFNGLVERTEXATTRIBPOINTERPROC);
|
||||||
|
|
||||||
|
// // GL_VERSION_2_1
|
||||||
|
// GL_FUNCTION_FETCH(glUniformMatrix2x3fv, PFNGLUNIFORMMATRIX2X3FVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniformMatrix3x2fv, PFNGLUNIFORMMATRIX3X2FVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniformMatrix2x4fv, PFNGLUNIFORMMATRIX2X4FVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniformMatrix4x2fv, PFNGLUNIFORMMATRIX4X2FVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniformMatrix3x4fv, PFNGLUNIFORMMATRIX3X4FVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniformMatrix4x3fv, PFNGLUNIFORMMATRIX4X3FVPROC);
|
||||||
|
|
||||||
|
// GL_VERSION_3_0
|
||||||
|
// GL_FUNCTION_FETCH(glColorMaski, PFNGLCOLORMASKIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetBooleani_v, PFNGLGETBOOLEANI_VPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetIntegeri_v, PFNGLGETINTEGERI_VPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glEnablei, PFNGLENABLEIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glDisablei, PFNGLDISABLEIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glIsEnabledi, PFNGLISENABLEDIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glBeginTransformFeedback, PFNGLBEGINTRANSFORMFEEDBACKPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glEndTransformFeedback, PFNGLENDTRANSFORMFEEDBACKPROC);
|
||||||
|
GL_FUNCTION_FETCH(glBindBufferRange, PFNGLBINDBUFFERRANGEPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glBindBufferBase, PFNGLBINDBUFFERBASEPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glTransformFeedbackVaryings, PFNGLTRANSFORMFEEDBACKVARYINGSPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetTransformFeedbackVarying, PFNGLGETTRANSFORMFEEDBACKVARYINGPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glClampColor, PFNGLCLAMPCOLORPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glBeginConditionalRender, PFNGLBEGINCONDITIONALRENDERPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glEndConditionalRender, PFNGLENDCONDITIONALRENDERPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribIPointer, PFNGLVERTEXATTRIBIPOINTERPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetVertexAttribIiv, PFNGLGETVERTEXATTRIBIIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetVertexAttribIuiv, PFNGLGETVERTEXATTRIBIUIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI1i, PFNGLVERTEXATTRIBI1IPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI2i, PFNGLVERTEXATTRIBI2IPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI3i, PFNGLVERTEXATTRIBI3IPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI4i, PFNGLVERTEXATTRIBI4IPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI1ui, PFNGLVERTEXATTRIBI1UIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI2ui, PFNGLVERTEXATTRIBI2UIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI3ui, PFNGLVERTEXATTRIBI3UIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI4ui, PFNGLVERTEXATTRIBI4UIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI1iv, PFNGLVERTEXATTRIBI1IVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI2iv, PFNGLVERTEXATTRIBI2IVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI3iv, PFNGLVERTEXATTRIBI3IVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI4iv, PFNGLVERTEXATTRIBI4IVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI1uiv, PFNGLVERTEXATTRIBI1UIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI2uiv, PFNGLVERTEXATTRIBI2UIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI3uiv, PFNGLVERTEXATTRIBI3UIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI4uiv, PFNGLVERTEXATTRIBI4UIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI4bv, PFNGLVERTEXATTRIBI4BVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI4sv, PFNGLVERTEXATTRIBI4SVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI4ubv, PFNGLVERTEXATTRIBI4UBVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glVertexAttribI4usv, PFNGLVERTEXATTRIBI4USVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetUniformuiv, PFNGLGETUNIFORMUIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glBindFragDataLocation, PFNGLBINDFRAGDATALOCATIONPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetFragDataLocation, PFNGLGETFRAGDATALOCATIONPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniform1ui, PFNGLUNIFORM1UIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniform2ui, PFNGLUNIFORM2UIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniform3ui, PFNGLUNIFORM3UIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniform4ui, PFNGLUNIFORM4UIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniform1uiv, PFNGLUNIFORM1UIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniform2uiv, PFNGLUNIFORM2UIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniform3uiv, PFNGLUNIFORM3UIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glUniform4uiv, PFNGLUNIFORM4UIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glTexParameterIiv, PFNGLTEXPARAMETERIIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glTexParameterIuiv, PFNGLTEXPARAMETERIUIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetTexParameterIiv, PFNGLGETTEXPARAMETERIIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetTexParameterIuiv, PFNGLGETTEXPARAMETERIUIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glClearBufferiv, PFNGLCLEARBUFFERIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glClearBufferuiv, PFNGLCLEARBUFFERUIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glClearBufferfv, PFNGLCLEARBUFFERFVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glClearBufferfi, PFNGLCLEARBUFFERFIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetStringi, PFNGLGETSTRINGIPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glIsRenderbuffer, PFNGLISRENDERBUFFERPROC);
|
||||||
|
GL_FUNCTION_FETCH(glBindRenderbuffer, PFNGLBINDRENDERBUFFERPROC);
|
||||||
|
GL_FUNCTION_FETCH(glDeleteRenderbuffers, PFNGLDELETERENDERBUFFERSPROC);
|
||||||
|
GL_FUNCTION_FETCH(glGenRenderbuffers, PFNGLGENRENDERBUFFERSPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glRenderbufferStorage, PFNGLRENDERBUFFERSTORAGEPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetRenderbufferParameteriv, PFNGLGETRENDERBUFFERPARAMETERIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glIsFramebuffer, PFNGLISFRAMEBUFFERPROC);
|
||||||
|
#if defined(THORVG_GL_TARGET_GLES)
|
||||||
|
GL_FUNCTION_FETCH(glInvalidateFramebuffer, PFNGLINVALIDATEFRAMEBUFFERPROC);
|
||||||
|
#endif
|
||||||
|
GL_FUNCTION_FETCH(glBindFramebuffer, PFNGLBINDFRAMEBUFFERPROC);
|
||||||
|
GL_FUNCTION_FETCH(glDeleteFramebuffers, PFNGLDELETEFRAMEBUFFERSPROC);
|
||||||
|
GL_FUNCTION_FETCH(glGenFramebuffers, PFNGLGENFRAMEBUFFERSPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glCheckFramebufferStatus, PFNGLCHECKFRAMEBUFFERSTATUSPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glFramebufferTexture1D, PFNGLFRAMEBUFFERTEXTURE1DPROC);
|
||||||
|
GL_FUNCTION_FETCH(glFramebufferTexture2D, PFNGLFRAMEBUFFERTEXTURE2DPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glFramebufferTexture3D, PFNGLFRAMEBUFFERTEXTURE3DPROC);
|
||||||
|
GL_FUNCTION_FETCH(glFramebufferRenderbuffer, PFNGLFRAMEBUFFERRENDERBUFFERPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetFramebufferAttachmentParameteriv, PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGenerateMipmap, PFNGLGENERATEMIPMAPPROC);
|
||||||
|
GL_FUNCTION_FETCH(glBlitFramebuffer, PFNGLBLITFRAMEBUFFERPROC);
|
||||||
|
GL_FUNCTION_FETCH(glRenderbufferStorageMultisample, PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glFramebufferTextureLayer, PFNGLFRAMEBUFFERTEXTURELAYERPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glMapBufferRange, PFNGLMAPBUFFERRANGEPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glFlushMappedBufferRange, PFNGLFLUSHMAPPEDBUFFERRANGEPROC);
|
||||||
|
GL_FUNCTION_FETCH(glBindVertexArray, PFNGLBINDVERTEXARRAYPROC);
|
||||||
|
GL_FUNCTION_FETCH(glDeleteVertexArrays, PFNGLDELETEVERTEXARRAYSPROC);
|
||||||
|
GL_FUNCTION_FETCH(glGenVertexArrays, PFNGLGENVERTEXARRAYSPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glIsVertexArray, PFNGLISVERTEXARRAYPROC);
|
||||||
|
|
||||||
|
// GL_VERSION_3_1
|
||||||
|
// GL_FUNCTION_FETCH(glDrawArraysInstanced, PFNGLDRAWARRAYSINSTANCEDPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glDrawElementsInstanced, PFNGLDRAWELEMENTSINSTANCEDPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glTexBuffer, PFNGLTEXBUFFERPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glPrimitiveRestartIndex, PFNGLPRIMITIVERESTARTINDEXPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glCopyBufferSubData, PFNGLCOPYBUFFERSUBDATAPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetUniformIndices, PFNGLGETUNIFORMINDICESPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetActiveUniformsiv, PFNGLGETACTIVEUNIFORMSIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetActiveUniformName, PFNGLGETACTIVEUNIFORMNAMEPROC);
|
||||||
|
GL_FUNCTION_FETCH(glGetUniformBlockIndex, PFNGLGETUNIFORMBLOCKINDEXPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetActiveUniformBlockiv, PFNGLGETACTIVEUNIFORMBLOCKIVPROC);
|
||||||
|
// GL_FUNCTION_FETCH(glGetActiveUniformBlockName, PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC);
|
||||||
|
GL_FUNCTION_FETCH(glUniformBlockBinding, PFNGLUNIFORMBLOCKBINDINGPROC);
|
||||||
|
|
||||||
|
//Confirm the version
|
||||||
|
GLint vMajor, vMinor;
|
||||||
|
glGetIntegerv(GL_MAJOR_VERSION, &vMajor);
|
||||||
|
glGetIntegerv(GL_MINOR_VERSION, &vMinor);
|
||||||
|
if (vMajor < TVG_REQUIRE_GL_MAJOR_VER || (vMajor == TVG_REQUIRE_GL_MAJOR_VER && vMinor < TVG_REQUIRE_GL_MINOR_VER)) {
|
||||||
|
TVGERR("GL_ENGINE", "OpenGL/ES version is not satisfied. Current: v%d.%d, Required: v%d.%d", vMajor, vMinor, TVG_REQUIRE_GL_MAJOR_VER, TVG_REQUIRE_GL_MINOR_VER);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
TVGLOG("GL_ENGINE", "OpenGL/ES version = v%d.%d", vMajor, vMinor);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
bool glTerm()
|
||||||
|
{
|
||||||
|
#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
|
||||||
|
if (_libGL) FreeLibrary(_libGL);
|
||||||
|
#else
|
||||||
|
if (_libGL) dlclose(_libGL);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __EMSCRIPTEN__
|
1498
src/renderer/gl_engine/tvgGl.h
Executable file
1498
src/renderer/gl_engine/tvgGl.h
Executable file
File diff suppressed because it is too large
Load diff
|
@ -24,41 +24,10 @@
|
||||||
#define _TVG_GL_COMMON_H_
|
#define _TVG_GL_COMMON_H_
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include "tvgGl.h"
|
||||||
#if defined (THORVG_GL_TARGET_GLES)
|
|
||||||
#include <GLES3/gl3.h>
|
|
||||||
#define TVG_REQUIRE_GL_MAJOR_VER 3
|
|
||||||
#define TVG_REQUIRE_GL_MINOR_VER 0
|
|
||||||
#else
|
|
||||||
#if defined(__APPLE__) || defined(__MACH__)
|
|
||||||
#include <OpenGL/gl3.h>
|
|
||||||
#else
|
|
||||||
#define GL_GLEXT_PROTOTYPES 1
|
|
||||||
#include <GL/gl.h>
|
|
||||||
#endif
|
|
||||||
#define TVG_REQUIRE_GL_MAJOR_VER 3
|
|
||||||
#define TVG_REQUIRE_GL_MINOR_VER 3
|
|
||||||
#endif
|
|
||||||
#include "tvgCommon.h"
|
|
||||||
#include "tvgRender.h"
|
#include "tvgRender.h"
|
||||||
#include "tvgMath.h"
|
#include "tvgMath.h"
|
||||||
|
|
||||||
#ifdef __EMSCRIPTEN__
|
|
||||||
#include <emscripten/html5_webgl.h>
|
|
||||||
// query GL Error on WebGL is very slow, so disable it on WebGL
|
|
||||||
#define GL_CHECK(x) x
|
|
||||||
#else
|
|
||||||
#define GL_CHECK(x) \
|
|
||||||
x; \
|
|
||||||
do { \
|
|
||||||
GLenum glError = glGetError(); \
|
|
||||||
if(glError != GL_NO_ERROR) { \
|
|
||||||
TVGERR("GL_ENGINE", "glGetError() = %i (0x%.8x)", glError, glError); \
|
|
||||||
assert(0); \
|
|
||||||
} \
|
|
||||||
} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MIN_GL_STROKE_WIDTH 1.0f
|
#define MIN_GL_STROKE_WIDTH 1.0f
|
||||||
|
|
||||||
#define MVP_MATRIX(w, h) \
|
#define MVP_MATRIX(w, h) \
|
||||||
|
@ -220,4 +189,4 @@ struct GlEffectParams {
|
||||||
float params[4+4+4];
|
float params[4+4+4];
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* _TVG_GL_COMMON_H_ */
|
#endif /* _TVG_GL_COMMON_H_ */
|
|
@ -181,7 +181,11 @@ void GlComposeTask::run()
|
||||||
GL_CHECK(glScissor(0, 0, mFbo->getWidth(), mFbo->getHeight()));
|
GL_CHECK(glScissor(0, 0, mFbo->getWidth(), mFbo->getHeight()));
|
||||||
GL_CHECK(glClearColor(0, 0, 0, 0));
|
GL_CHECK(glClearColor(0, 0, 0, 0));
|
||||||
GL_CHECK(glClearStencil(0));
|
GL_CHECK(glClearStencil(0));
|
||||||
|
#ifdef THORVG_GL_TARGET_GLES
|
||||||
GL_CHECK(glClearDepthf(0.0));
|
GL_CHECK(glClearDepthf(0.0));
|
||||||
|
#else
|
||||||
|
GL_CHECK(glClearDepth(0.0));
|
||||||
|
#endif
|
||||||
GL_CHECK(glDepthMask(1));
|
GL_CHECK(glDepthMask(1));
|
||||||
|
|
||||||
GL_CHECK(glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
|
GL_CHECK(glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
|
||||||
|
|
|
@ -1542,7 +1542,7 @@ bool GlRenderer::term()
|
||||||
{
|
{
|
||||||
if (rendererCnt > 0) return false;
|
if (rendererCnt > 0) return false;
|
||||||
|
|
||||||
//TODO: clean up global resources
|
glTerm();
|
||||||
|
|
||||||
rendererCnt = -1;
|
rendererCnt = -1;
|
||||||
|
|
||||||
|
@ -1554,15 +1554,10 @@ GlRenderer* GlRenderer::gen(TVG_UNUSED uint32_t threads)
|
||||||
{
|
{
|
||||||
//initialize engine
|
//initialize engine
|
||||||
if (rendererCnt == -1) {
|
if (rendererCnt == -1) {
|
||||||
//TODO: GL minimum version check, should be replaced with the runtime linking in GlRenderer::init()
|
if (!glInit()) {
|
||||||
GLint vMajor, vMinor;
|
TVGERR("GL_ENGINE", "Failed GL initialization!");
|
||||||
glGetIntegerv(GL_MAJOR_VERSION, &vMajor);
|
|
||||||
glGetIntegerv(GL_MINOR_VERSION, &vMinor);
|
|
||||||
if (vMajor < TVG_REQUIRE_GL_MAJOR_VER || (vMajor == TVG_REQUIRE_GL_MAJOR_VER && vMinor < TVG_REQUIRE_GL_MINOR_VER)) {
|
|
||||||
TVGERR("GL_ENGINE", "OpenGL/ES version is not satisfied. Current: v%d.%d, Required: v%d.%d", vMajor, vMinor, TVG_REQUIRE_GL_MAJOR_VER, TVG_REQUIRE_GL_MINOR_VER);
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
TVGLOG("GL_ENGINE", "OpenGL/ES version = v%d.%d", vMajor, vMinor);
|
|
||||||
rendererCnt = 0;
|
rendererCnt = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#define _USE_MATH_DEFINES
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue