Cogs.Core
GLFuncPointers.cpp
1#include "GLFuncPointers.h"
2#include "Foundation/StringView.h"
3#include "GLContext.h"
4#include "Foundation/Logging/Logger.h"
5
6#if defined(__EMSCRIPTEN__)
7
8#include <emscripten.h>
9
10extern "C" {
11
12 // Hack to work around missing function for EXT_clip_control in emscripten.
13 // -----------------------------------------------------------------
14 //
15 // These are typically called when setting up a graphics device, i.e.
16 // during initialization. So it shouldn't be a hot path, and thus unnecessary
17 // to cache these pointers for performance
18 void glClipControl(GLenum origin, GLenum depth)
19 {
20 EM_ASM({
21 const origin = $0;
22 const depth = $1;
23
24 // No idea how to figure out the right key, just use the first and hope for the best.
25 for (const item of Object.values(Module.GL.contexts)) {
26 if (item && item.hasOwnProperty('GLctx')) {
27 const ext = item.GLctx.getExtension("EXT_clip_control");
28 if (ext) {
29 ext.clipControlEXT(origin, depth);
30 }
31 break;
32 }
33 }
34 }, origin, depth);
35 }
36}
37
38bool has_glClipControl()
39{
40 int numExtensions = 0;
41 glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions);
42 for (int i = 0; i < numExtensions; i++) {
43 switch (Cogs::hash(Cogs::StringView((const char*)glGetStringi(GL_EXTENSIONS, i)))) {
44 case Cogs::hash("GL_EXT_clip_control"): return true;
45 default: break;
46 }
47 }
48 return false;
49}
50
51#elif !defined(__APPLE__)
52
53namespace {
54 Cogs::Logging::Log logger = Cogs::Logging::getLogger("GLFuncPointers");
55}
56
57
58PFNGLACTIVETEXTUREPROC glActiveTexture = nullptr;
59PFNGLATTACHSHADERPROC glAttachShader = nullptr;
60PFNGLBINDBUFFERBASEPROC glBindBufferBase = nullptr;
61PFNGLBINDBUFFERPROC glBindBuffer = nullptr;
62PFNGLBINDBUFFERRANGEPROC glBindBufferRange = nullptr;
63PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer = nullptr;
64PFNGLBINDIMAGETEXTUREPROC glBindImageTexture = nullptr;
65PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer = nullptr;
66PFNGLBINDSAMPLERPROC glBindSampler = nullptr;
67PFNGLBINDTEXTUREPROC glBindTexture = nullptr;
68PFNGLBINDVERTEXARRAYPROC glBindVertexArray = nullptr;
69PFNGLBLENDCOLORPROC glBlendColor = nullptr;
70PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate = nullptr;
71PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate = nullptr;
72PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer = nullptr;
73PFNGLBUFFERDATAPROC glBufferData = nullptr;
74PFNGLBUFFERSUBDATAPROC glBufferSubData = nullptr;
75PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus = nullptr;
76PFNGLCLEARBUFFERDATAPROC glClearBufferData = nullptr;
77PFNGLCLEARBUFFERFVPROC glClearBufferfv = nullptr;
78PFNGLCLEARBUFFERIVPROC glClearBufferiv = nullptr;
79PFNGLCLEARBUFFERUIVPROC glClearBufferuiv = nullptr;
80PFNGLCLEARCOLORPROC glClearColor = nullptr;
81PFNGLCLEARDEPTHFPROC glClearDepthf = nullptr;
82PFNGLCLEARDEPTHPROC glClearDepth = nullptr;
83PFNGLCLEARNAMEDBUFFERDATAPROC glClearNamedBufferData = nullptr;
84PFNGLCLEARPROC glClear = nullptr;
85PFNGLCLIENTWAITSYNCPROC glClientWaitSync = nullptr;
86#if defined(COGS_OPENGLES30)
87PFNGLCLIPCONTROLEXTPROC glClipControl = nullptr;
88#else
89PFNGLCLIPCONTROLPROC glClipControl = nullptr;
90#endif
91PFNGLCOMPILESHADERPROC glCompileShader = nullptr;
92PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D = nullptr;
93PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D = nullptr;
94PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D = nullptr;
95PFNGLCOPYBUFFERSUBDATAPROC glCopyBufferSubData = nullptr;
96PFNGLCOPYIMAGESUBDATAPROC glCopyImageSubData = nullptr;
97PFNGLCOPYNAMEDBUFFERSUBDATAPROC glCopyNamedBufferSubData = nullptr;
98PFNGLCOPYTEXSUBIMAGE2DPROC glCopyTexSubImage2D = nullptr;
99PFNGLCOPYTEXSUBIMAGE3DPROC glCopyTexSubImage3D = nullptr;
100PFNGLCREATEPROGRAMPROC glCreateProgram = nullptr;
101PFNGLCREATESHADERPROC glCreateShader = nullptr;
102PFNGLCULLFACEPROC glCullFace = nullptr;
103PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback = nullptr;
104PFNGLDEBUGMESSAGECONTROLPROC glDebugMessageControl = nullptr;
105PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert = nullptr;
106PFNGLDELETEBUFFERSPROC glDeleteBuffers = nullptr;
107PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers = nullptr;
108PFNGLDELETEPROGRAMPROC glDeleteProgram = nullptr;
109PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers = nullptr;
110PFNGLDELETESAMPLERSPROC glDeleteSamplers = nullptr;
111PFNGLDELETESHADERPROC glDeleteShader = nullptr;
112PFNGLDELETESYNCPROC glDeleteSync = nullptr;
113PFNGLDELETETEXTURESPROC glDeleteTextures = nullptr;
114PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays = nullptr;
115PFNGLDEPTHFUNCPROC glDepthFunc = nullptr;
116PFNGLDEPTHMASKPROC glDepthMask = nullptr;
117PFNGLDISABLEIPROC glDisablei = nullptr;
118PFNGLDISABLEPROC glDisable = nullptr;
119PFNGLDISABLEVERTEXARRAYATTRIBPROC glDisableVertexArrayAttrib = nullptr;
120PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray = nullptr;
121PFNGLDISPATCHCOMPUTEPROC glDispatchCompute = nullptr;
122PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glDrawArraysInstancedBaseInstance = nullptr;
123PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced = nullptr;
124PFNGLDRAWARRAYSPROC glDrawArrays = nullptr;
125PFNGLDRAWBUFFERPROC glDrawBuffer = nullptr;
126PFNGLDRAWBUFFERSPROC glDrawBuffers = nullptr;
127PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex = nullptr;
128PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC glDrawElementsInstancedBaseInstance = nullptr;
129PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced = nullptr;
130PFNGLDRAWELEMENTSPROC glDrawElements = nullptr;
131PFNGLENABLEIPROC glEnablei = nullptr;
132PFNGLENABLEPROC glEnable = nullptr;
133PFNGLENABLEVERTEXARRAYATTRIBPROC glEnableVertexArrayAttrib = nullptr;
134PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray = nullptr;
135PFNGLFENCESYNCPROC glFenceSync = nullptr;
136PFNGLFINISHPROC glFinish = nullptr;
137PFNGLFLUSHPROC glFlush = nullptr;
138PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer = nullptr;
139PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D = nullptr;
140PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer = nullptr;
141PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC glFramebufferTextureMultiviewOVR = nullptr;
142PFNGLFRONTFACEPROC glFrontFace = nullptr;
143PFNGLGENBUFFERSPROC glGenBuffers = nullptr;
144PFNGLGENERATEMIPMAPPROC glGenerateMipmap = nullptr;
145PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers = nullptr;
146PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers = nullptr;
147PFNGLGENSAMPLERSPROC glGenSamplers = nullptr;
148PFNGLGENTEXTURESPROC glGenTextures = nullptr;
149PFNGLGENVERTEXARRAYSPROC glGenVertexArrays = nullptr;
150PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC glGetActiveAtomicCounterBufferiv = nullptr;
151PFNGLGETACTIVEATTRIBPROC glGetActiveAttrib = nullptr;
152PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv = nullptr;
153PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glGetActiveUniformBlockName = nullptr;
154PFNGLGETACTIVEUNIFORMNAMEPROC glGetActiveUniformName = nullptr;
155PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform = nullptr;
156PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv = nullptr;
157PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders = nullptr;
158PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation = nullptr;
159PFNGLGETBUFFERSUBDATAPROC glGetBufferSubData = nullptr;
160PFNGLGETERRORPROC glGetError = nullptr;
161PFNGLGETFLOATVPROC glGetFloatv = nullptr;
162PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv = nullptr;
163PFNGLGETINTEGERI_VPROC glGetIntegeri_v = nullptr;
164PFNGLGETINTEGERVPROC glGetIntegerv = nullptr;
165PFNGLGETINTERNALFORMATIVPROC glGetInternalformativ = nullptr;
166PFNGLGETNAMEDBUFFERSUBDATAPROC glGetNamedBufferSubData = nullptr;
167PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog = nullptr;
168PFNGLGETPROGRAMIVPROC glGetProgramiv = nullptr;
169PFNGLGETPROGRAMRESOURCEINDEXPROC glGetProgramResourceIndex = nullptr;
170PFNGLGETPROGRAMRESOURCEIVPROC glGetProgramResourceiv = nullptr;
171PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog = nullptr;
172PFNGLGETSHADERIVPROC glGetShaderiv = nullptr;
173PFNGLGETSHADERSOURCEPROC glGetShaderSource = nullptr;
174PFNGLGETSTRINGIPROC glGetStringi = nullptr;
175PFNGLGETSTRINGPROC glGetString = nullptr;
176PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex = nullptr;
177PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation = nullptr;
178PFNGLINVALIDATEFRAMEBUFFERPROC glInvalidateFramebuffer = nullptr;
179PFNGLISENABLEDPROC glIsEnabled = nullptr;
180PFNGLLINKPROGRAMPROC glLinkProgram = nullptr;
181PFNGLMAPBUFFERRANGEPROC glMapBufferRange = nullptr;
182PFNGLMEMORYBARRIERPROC glMemoryBarrier = nullptr;
183PFNGLNAMEDBUFFERDATAPROC glNamedBufferData = nullptr;
184PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC glNamedFramebufferDrawBuffer = nullptr;
185PFNGLOBJECTLABELPROC glObjectLabel = nullptr;
186PFNGLPIXELSTOREIPROC glPixelStorei = nullptr;
187PFNGLPOLYGONMODEPROC glPolygonMode = nullptr;
188PFNGLPOLYGONOFFSETPROC glPolygonOffset = nullptr;
189PFNGLPOPDEBUGGROUPPROC glPopDebugGroup = nullptr;
190PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup = nullptr;
191PFNGLREADBUFFERPROC glReadBuffer = nullptr;
192PFNGLREADPIXELSPROC glReadPixels = nullptr;
193PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample = nullptr;
194PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage = nullptr;
195PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf = nullptr;
196PFNGLSAMPLERPARAMETERFVPROC glSamplerParameterfv = nullptr;
197PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri = nullptr;
198PFNGLSCISSORPROC glScissor = nullptr;
199PFNGLSHADERSOURCEPROC glShaderSource = nullptr;
200PFNGLTEXIMAGE2DPROC glTexImage2D = nullptr;
201PFNGLTEXPARAMETERIPROC glTexParameteri = nullptr;
202PFNGLTEXSTORAGE1DPROC glTexStorage1D = nullptr;
203PFNGLTEXSTORAGE2DMULTISAMPLEPROC glTexStorage2DMultisample = nullptr;
204PFNGLTEXSTORAGE2DPROC glTexStorage2D = nullptr;
205PFNGLTEXSTORAGE3DMULTISAMPLEPROC glTexStorage3DMultisample = nullptr;
206PFNGLTEXSTORAGE3DPROC glTexStorage3D = nullptr;
207PFNGLTEXSUBIMAGE1DPROC glTexSubImage1D = nullptr;
208PFNGLTEXSUBIMAGE2DPROC glTexSubImage2D = nullptr;
209PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D = nullptr;
210PFNGLTEXTUREVIEWPROC glTextureView = nullptr;
211PFNGLUNIFORM1FPROC glUniform1f = nullptr;
212PFNGLUNIFORM1FVPROC glUniform1fv = nullptr;
213PFNGLUNIFORM1IPROC glUniform1i = nullptr;
214PFNGLUNIFORM1IVPROC glUniform1iv = nullptr;
215PFNGLUNIFORM2FVPROC glUniform2fv = nullptr;
216PFNGLUNIFORM3FVPROC glUniform3fv = nullptr;
217PFNGLUNIFORM4FVPROC glUniform4fv = nullptr;
218PFNGLUNIFORM4IVPROC glUniform4iv = nullptr;
219PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding = nullptr;
220PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv = nullptr;
221PFNGLUNMAPBUFFERPROC glUnmapBuffer = nullptr;
222PFNGLUSEPROGRAMPROC glUseProgram = nullptr;
223PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor = nullptr;
224PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer = nullptr;
225PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer = nullptr;
226PFNGLVIEWPORTPROC glViewport = nullptr;
227PFNGLWAITSYNCPROC glWaitSync = nullptr;
228
229#if defined(COGS_OPENGLES30)
230PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC glFramebufferTextureMultisampleMultiviewOVR = nullptr;
231
232PFNGLDEBUGMESSAGECALLBACKKHRPROC glDebugMessageCallbackKHR = nullptr;
233PFNGLDEBUGMESSAGECONTROLKHRPROC glDebugMessageControlKHR = nullptr;
234PFNGLDEBUGMESSAGEINSERTKHRPROC glDebugMessageInsertKHR = nullptr;
235PFNGLOBJECTLABELKHRPROC glObjectLabelKHR = nullptr;
236#endif
237
238#ifdef COGS_GLX
239extern PFNGLXGETPROCADDRESSPROC _glXGetProcAddress;
240#endif
241
242#ifdef COGS_EGL
243extern PFNEGLGETPROCADDRESSPROC _eglGetProcAddress;
244#endif
245
246namespace {
247
248#ifdef _WIN32
249 void* getProcAddress(const char* name)
250 {
251 // 20221015 chrisdy: Any reason anymore to not solely rely on wglGetProcAddress? Some old
252 // stuff? And these 1, 2, 3 and -1 return values?
253 auto* f = (void*)wglGetProcAddress(name);
254 if (f && (f != (void*)1) && (f != (void*)2) && (f != (void*)3) && (f != (void*)-1)) {
255 return f;
256 }
257 HMODULE module = LoadLibraryA("opengl32.dll");
258 assert(module);
259 f = (void*)GetProcAddress(module, name);
260 assert(f);
261 return f;
262 }
263#endif
264
265#ifdef COGS_GLX
266
267 void* getProcAddress(const char* name)
268 {
269 auto f = (void*)_glXGetProcAddress((const GLubyte*)name);
270 assert(f);
271 return f;
272 }
273
274#endif
275
276#ifdef COGS_EGL
277 void* getProcAddress(const char* name)
278 {
279 auto f = (void*)_eglGetProcAddress(name);
280 assert(f);
281 return f;
282 }
283#endif
284
285 struct Version
286 {
287 int major = 0;
288 int minor = 0;
289
290 bool has_GL_NV_instanced_arrays = false;
291 bool has_GL_KHR_debug = false;
292 bool has_GL_OCULUS_multiview = false;
293 bool has_GL_OVR_multiview = false;
294 bool has_GL_EXT_clip_control = false;
295 };
296
297
298 bool bootstrap(Version& version)
299 {
300 glGetStringi = (PFNGLGETSTRINGIPROC)getProcAddress("glGetStringi");
301 glGetIntegerv = (PFNGLGETINTEGERVPROC)getProcAddress("glGetIntegerv");
302
303 glGetIntegerv(GL_MAJOR_VERSION, &version.major);
304 glGetIntegerv(GL_MINOR_VERSION, &version.minor);
305 LOG_DEBUG(logger, "Got OpenGL version %d.%d", version.major, version.minor);
306 if (version.major < 3) {
307 LOG_FATAL(logger, "Insufficient OpenGL version");
308 return false;
309 }
310
311 int numExtensions = 0;
312 glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions);
313 for (int i = 0; i < numExtensions; i++) {
314 switch (Cogs::hash(Cogs::StringView((const char*)glGetStringi(GL_EXTENSIONS, i)))) {
315 case Cogs::hash("GL_KHR_debug"): version.has_GL_KHR_debug = true; break;
316 case Cogs::hash("GL_OCULUS_multiview"): version.has_GL_OCULUS_multiview = true; break;
317 case Cogs::hash("GL_OVR_multiview_multisampled_render_to_texture"): version.has_GL_OCULUS_multiview = true; break;
318 case Cogs::hash("GL_OVR_multiview"): version.has_GL_OVR_multiview = true; break;
319 case Cogs::hash("GL_OVR_multiview2"): version.has_GL_OVR_multiview = true; break;
320 case Cogs::hash("GL_NV_instanced_arrays"): version.has_GL_NV_instanced_arrays = true; break;
321 case Cogs::hash("GL_EXT_clip_control"): version.has_GL_EXT_clip_control = true; break;
322 default: break;
323 }
324 }
325 return true;
326 }
327
328}
329
330bool Cogs::getGLES3FuncPointers(GLContextBase::Platform platform)
331{
332 Version version;
333 if (!bootstrap(version)) return false;
334
335 glActiveTexture = (PFNGLACTIVETEXTUREPROC)getProcAddress("glActiveTexture");
336 glAttachShader = (PFNGLATTACHSHADERPROC)getProcAddress("glAttachShader");
337 glBindBuffer = (PFNGLBINDBUFFERPROC)getProcAddress("glBindBuffer");
338 glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)getProcAddress("glBindBufferBase");
339 glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)getProcAddress("glBindBufferRange");
340 glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)getProcAddress("glBindFramebuffer");
341 glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)getProcAddress("glBindRenderbuffer");
342 glBindSampler = (PFNGLBINDSAMPLERPROC)getProcAddress("glBindSampler");
343 glBindTexture = (PFNGLBINDTEXTUREPROC)getProcAddress("glBindTexture");
344 glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)getProcAddress("glBindVertexArray");
345 glBlendColor = (PFNGLBLENDCOLORPROC)getProcAddress("glBlendColor");
346 glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)getProcAddress("glBlendEquationSeparate");
347 glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)getProcAddress("glBlendFuncSeparate");
348 glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)getProcAddress("glBlitFramebuffer");
349 glBufferData = (PFNGLBUFFERDATAPROC)getProcAddress("glBufferData");
350 glBufferSubData = (PFNGLBUFFERSUBDATAPROC)getProcAddress("glBufferSubData");
351 glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)getProcAddress("glCheckFramebufferStatus");
352 glClear = (PFNGLCLEARPROC)getProcAddress("glClear");
353 glClearBufferData = (PFNGLCLEARBUFFERDATAPROC)getProcAddress("glClearBufferData");
354 glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)getProcAddress("glClearBufferfv");
355 glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)getProcAddress("glClearBufferiv");
356 glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)getProcAddress("glClearBufferuiv");
357 glClearColor = (PFNGLCLEARCOLORPROC)getProcAddress("glClearColor");
358 glClearDepth = (PFNGLCLEARDEPTHPROC)getProcAddress("glClearDepth");
359 glClearDepthf = (PFNGLCLEARDEPTHFPROC)getProcAddress("glClearDepthf");
360 glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)getProcAddress("glClientWaitSync");
361 glCompileShader = (PFNGLCOMPILESHADERPROC)getProcAddress("glCompileShader");
362 glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)getProcAddress("glCompressedTexImage2D");
363 glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)getProcAddress("glCompressedTexSubImage2D");
364 glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)getProcAddress("glCompressedTexSubImage3D");
365 glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)getProcAddress("glCopyBufferSubData");
366 glCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC)getProcAddress("glCopyImageSubData");
367 glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)getProcAddress("glCopyTexSubImage2D");
368 glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)getProcAddress("glCopyTexSubImage3D");
369 glCreateProgram = (PFNGLCREATEPROGRAMPROC)getProcAddress("glCreateProgram");
370 glCreateShader = (PFNGLCREATESHADERPROC)getProcAddress("glCreateShader");
371 glCullFace = (PFNGLCULLFACEPROC)getProcAddress("glCullFace");
372 glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)getProcAddress("glDeleteBuffers");
373 glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)getProcAddress("glDeleteFramebuffers");
374 glDeleteProgram = (PFNGLDELETEPROGRAMPROC)getProcAddress("glDeleteProgram");
375 glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)getProcAddress("glDeleteRenderbuffers");
376 glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)getProcAddress("glDeleteSamplers");
377 glDeleteShader = (PFNGLDELETESHADERPROC)getProcAddress("glDeleteShader");
378 glDeleteSync = (PFNGLDELETESYNCPROC)getProcAddress("glDeleteSync");
379 glDeleteTextures = (PFNGLDELETETEXTURESPROC)getProcAddress("glDeleteTextures");
380 glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)getProcAddress("glDeleteVertexArrays");
381 glDepthFunc = (PFNGLDEPTHFUNCPROC)getProcAddress("glDepthFunc");
382 glDepthMask = (PFNGLDEPTHMASKPROC)getProcAddress("glDepthMask");
383 glDisable = (PFNGLDISABLEPROC)getProcAddress("glDisable");
384 glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)getProcAddress("glDisableVertexAttribArray");
385 glDrawArrays = (PFNGLDRAWARRAYSPROC)getProcAddress("glDrawArrays");
386 glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)getProcAddress("glDrawArraysInstanced");
387 glDrawBuffers = (PFNGLDRAWBUFFERSPROC)getProcAddress("glDrawBuffers");
388 glDrawElements = (PFNGLDRAWELEMENTSPROC)getProcAddress("glDrawElements");
389 glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)getProcAddress("glDrawElementsInstanced");
390 glEnable = (PFNGLENABLEPROC)getProcAddress("glEnable");
391 glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)getProcAddress("glEnableVertexAttribArray");
392 glFenceSync = (PFNGLFENCESYNCPROC)getProcAddress("glFenceSync");
393 glFinish = (PFNGLFINISHPROC)getProcAddress("glFinish");
394 glFlush = (PFNGLFLUSHPROC)getProcAddress("glFlush");
395 glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)getProcAddress("glFramebufferRenderbuffer");
396 glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)getProcAddress("glFramebufferTexture2D");
397 glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)getProcAddress("glFramebufferTextureLayer");
398 glFrontFace = (PFNGLFRONTFACEPROC)getProcAddress("glFrontFace");
399 glGenBuffers = (PFNGLGENBUFFERSPROC)getProcAddress("glGenBuffers");
400 glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)getProcAddress("glGenerateMipmap");
401 glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)getProcAddress("glGenFramebuffers");
402 glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)getProcAddress("glGenRenderbuffers");
403 glGenSamplers = (PFNGLGENSAMPLERSPROC)getProcAddress("glGenSamplers");
404 glGenTextures = (PFNGLGENTEXTURESPROC)getProcAddress("glGenTextures");
405 glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)getProcAddress("glGenVertexArrays");
406 glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)getProcAddress("glGetActiveAttrib");
407 glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)getProcAddress("glGetActiveUniform");
408 glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)getProcAddress("glGetActiveUniformBlockiv");
409 glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)getProcAddress("glGetActiveUniformBlockName");
410 glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)getProcAddress("glGetActiveUniformsiv");
411 glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)getProcAddress("glGetAttachedShaders");
412 glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)getProcAddress("glGetAttribLocation");
413 glGetError = (PFNGLGETERRORPROC)getProcAddress("glGetError");
414 glGetFloatv = (PFNGLGETFLOATVPROC)getProcAddress("glGetFloatv");
415 glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)getProcAddress("glGetFramebufferAttachmentParameteriv");
416 glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)getProcAddress("glGetIntegeri_v");
417 glGetIntegerv = (PFNGLGETINTEGERVPROC)getProcAddress("glGetIntegerv");
418 glGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC)getProcAddress("glGetInternalformativ");
419 glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)getProcAddress("glGetProgramInfoLog");
420 glGetProgramiv = (PFNGLGETPROGRAMIVPROC)getProcAddress("glGetProgramiv");
421 glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)getProcAddress("glGetShaderInfoLog");
422 glGetShaderiv = (PFNGLGETSHADERIVPROC)getProcAddress("glGetShaderiv");
423 glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)getProcAddress("glGetShaderSource");
424 glGetString = (PFNGLGETSTRINGPROC)getProcAddress("glGetString");
425 glGetStringi = (PFNGLGETSTRINGIPROC)getProcAddress("glGetStringi");
426 glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)getProcAddress("glGetUniformBlockIndex");
427 glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)getProcAddress("glGetUniformLocation");
428 glInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC)getProcAddress("glInvalidateFramebuffer");
429 glIsEnabled = (PFNGLISENABLEDPROC)getProcAddress("glIsEnabled");
430 glLinkProgram = (PFNGLLINKPROGRAMPROC)getProcAddress("glLinkProgram");
431 glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)getProcAddress("glMapBufferRange");
432 glPixelStorei = (PFNGLPIXELSTOREIPROC)getProcAddress("glPixelStorei");
433 glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)getProcAddress("glPolygonOffset");
434 glReadBuffer = (PFNGLREADBUFFERPROC)getProcAddress("glReadBuffer");
435 glReadPixels = (PFNGLREADPIXELSPROC)getProcAddress("glReadPixels");
436 glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)getProcAddress("glRenderbufferStorage");
437 glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)getProcAddress("glRenderbufferStorageMultisample");
438 glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)getProcAddress("glSamplerParameterf");
439 glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)getProcAddress("glSamplerParameterfv");
440 glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)getProcAddress("glSamplerParameteri");
441 glScissor = (PFNGLSCISSORPROC)getProcAddress("glScissor");
442 glShaderSource = (PFNGLSHADERSOURCEPROC)getProcAddress("glShaderSource");
443 glTexImage2D = (PFNGLTEXIMAGE2DPROC)getProcAddress("glTexImage2D");
444 glTexParameteri = (PFNGLTEXPARAMETERIPROC)getProcAddress("glTexParameteri");
445 glTexStorage2D = (PFNGLTEXSTORAGE2DPROC)getProcAddress("glTexStorage2D");
446 glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)getProcAddress("glTexStorage3D");
447 glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)getProcAddress("glTexSubImage2D");
448 glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)getProcAddress("glTexSubImage3D");
449 glUniform1f = (PFNGLUNIFORM1FPROC)getProcAddress("glUniform1f");
450 glUniform1fv = (PFNGLUNIFORM1FVPROC)getProcAddress("glUniform1fv");
451 glUniform1i = (PFNGLUNIFORM1IPROC)getProcAddress("glUniform1i");
452 glUniform1iv = (PFNGLUNIFORM1IVPROC)getProcAddress("glUniform1iv");
453 glUniform2fv = (PFNGLUNIFORM2FVPROC)getProcAddress("glUniform2fv");
454 glUniform3fv = (PFNGLUNIFORM3FVPROC)getProcAddress("glUniform3fv");
455 glUniform4fv = (PFNGLUNIFORM4FVPROC)getProcAddress("glUniform4fv");
456 glUniform4iv = (PFNGLUNIFORM4IVPROC)getProcAddress("glUniform4iv");
457 glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)getProcAddress("glUniformBlockBinding");
458 glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)getProcAddress("glUniformMatrix4fv");
459 glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)getProcAddress("glUnmapBuffer");
460 glUseProgram = (PFNGLUSEPROGRAMPROC)getProcAddress("glUseProgram");
461 glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)getProcAddress("glVertexAttribDivisor");
462 glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)getProcAddress("glVertexAttribIPointer");
463 glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)getProcAddress("glVertexAttribPointer");
464 glViewport = (PFNGLVIEWPORTPROC)getProcAddress("glViewport");
465 glWaitSync = (PFNGLWAITSYNCPROC)getProcAddress("glWaitSync");
466
467#if defined(COGS_OPENGLES30)
468 if (version.has_GL_KHR_debug) {
469 // According to GL_KHR_debug extension specification, in an ES context, the extension API funcs have KHR suffices, but not in a GL context
470 if (platform == GLContextBase::Platform::ES3) {
471 glDebugMessageCallbackKHR = (PFNGLDEBUGMESSAGECALLBACKKHRPROC)getProcAddress("glDebugMessageCallbackKHR");
472 glDebugMessageControlKHR = (PFNGLDEBUGMESSAGECONTROLKHRPROC)getProcAddress("glDebugMessageControlKHR");
473 glDebugMessageInsertKHR = (PFNGLDEBUGMESSAGEINSERTKHRPROC)getProcAddress("glDebugMessageInsertKHR");
474 glObjectLabelKHR = (PFNGLOBJECTLABELKHRPROC)getProcAddress("glObjectLabelKHR");
475 }
476 else {
477 glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKKHRPROC)getProcAddress("glDebugMessageCallback");
478 glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLKHRPROC)getProcAddress("glDebugMessageControl");
479 glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTKHRPROC)getProcAddress("glDebugMessageInsert");
480 glObjectLabel = (PFNGLOBJECTLABELKHRPROC)getProcAddress("glObjectLabel");
481 }
482 }
483
484 if (version.has_GL_OCULUS_multiview) {
485 glFramebufferTextureMultisampleMultiviewOVR = (PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC)getProcAddress("glFramebufferTextureMultisampleMultiviewOVR");
486 glFramebufferTextureMultiviewOVR = (PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC)getProcAddress("glFramebufferTextureMultiviewOVR");
487 }
488 else if (version.has_GL_OVR_multiview) {
489 glFramebufferTextureMultiviewOVR = (PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC)getProcAddress("glFramebufferTextureMultiviewOVR");
490 }
491
492 if (version.has_GL_EXT_clip_control) {
493 glClipControl = (PFNGLCLIPCONTROLEXTPROC)getProcAddress("glClipControlEXT");
494 }
495#else
496 // To stop build warning unused variable 'platform'
497 (void)platform;
498#endif
499
500 return true;
501}
502
503bool Cogs::getGLFuncPointers()
504{
505 Version version;
506 if (!bootstrap(version)) return false;
507
508 glActiveTexture = (PFNGLACTIVETEXTUREPROC)getProcAddress("glActiveTexture");
509 glAttachShader = (PFNGLATTACHSHADERPROC)getProcAddress("glAttachShader");
510 glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)getProcAddress("glBindBufferBase");
511 glBindBuffer = (PFNGLBINDBUFFERPROC)getProcAddress("glBindBuffer");
512 glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)getProcAddress("glBindBufferRange");
513 glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)getProcAddress("glBindFramebuffer");
514 glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)getProcAddress("glBindImageTexture");
515 glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)getProcAddress("glBindRenderbuffer");
516 glBindSampler = (PFNGLBINDSAMPLERPROC)getProcAddress("glBindSampler");
517 glBindTexture = (PFNGLBINDTEXTUREPROC)getProcAddress("glBindTexture");
518 glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)getProcAddress("glBindVertexArray");
519 glBlendColor = (PFNGLBLENDCOLORPROC)getProcAddress("glBlendColor");
520 glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)getProcAddress("glBlendEquationSeparate");
521 glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)getProcAddress("glBlendFuncSeparate");
522 glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)getProcAddress("glBlitFramebuffer");
523 glBufferData = (PFNGLBUFFERDATAPROC)getProcAddress("glBufferData");
524 glBufferSubData = (PFNGLBUFFERSUBDATAPROC)getProcAddress("glBufferSubData");
525 glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)getProcAddress("glCheckFramebufferStatus");
526 glClearBufferData = (PFNGLCLEARBUFFERDATAPROC)getProcAddress("glClearBufferData");
527 glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)getProcAddress("glClearBufferfv");
528 glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)getProcAddress("glClearBufferiv");
529 glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)getProcAddress("glClearBufferuiv");
530 glClearColor = (PFNGLCLEARCOLORPROC)getProcAddress("glClearColor");
531 glClearDepthf = (PFNGLCLEARDEPTHFPROC)getProcAddress("glClearDepthf");
532 glClearDepth = (PFNGLCLEARDEPTHPROC)getProcAddress("glClearDepth");
533 glClearNamedBufferData = (PFNGLCLEARNAMEDBUFFERDATAPROC)getProcAddress("glClearNamedBufferData");
534 glClear = (PFNGLCLEARPROC)getProcAddress("glClear");
535 glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)getProcAddress("glClientWaitSync");
536 glClipControl = (PFNGLCLIPCONTROLPROC)getProcAddress("glClipControl");
537 glCompileShader = (PFNGLCOMPILESHADERPROC)getProcAddress("glCompileShader");
538 glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)getProcAddress("glCompressedTexImage2D");
539 glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)getProcAddress("glCompressedTexSubImage2D");
540 glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)getProcAddress("glCompressedTexSubImage3D");
541 glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)getProcAddress("glCopyBufferSubData");
542 glCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC)getProcAddress("glCopyImageSubData");
543 glCopyNamedBufferSubData = (PFNGLCOPYNAMEDBUFFERSUBDATAPROC)getProcAddress("glCopyNamedBufferSubData");
544 glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)getProcAddress("glCopyTexSubImage2D");
545 glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)getProcAddress("glCopyTexSubImage3D");
546 glCreateProgram = (PFNGLCREATEPROGRAMPROC)getProcAddress("glCreateProgram");
547 glCreateShader = (PFNGLCREATESHADERPROC)getProcAddress("glCreateShader");
548 glCullFace = (PFNGLCULLFACEPROC)getProcAddress("glCullFace");
549 glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC)getProcAddress("glDebugMessageCallback");
550 glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC)getProcAddress("glDebugMessageControl");
551 glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC)getProcAddress("glDebugMessageInsert");
552 glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)getProcAddress("glDeleteBuffers");
553 glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)getProcAddress("glDeleteFramebuffers");
554 glDeleteProgram = (PFNGLDELETEPROGRAMPROC)getProcAddress("glDeleteProgram");
555 glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)getProcAddress("glDeleteRenderbuffers");
556 glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)getProcAddress("glDeleteSamplers");
557 glDeleteShader = (PFNGLDELETESHADERPROC)getProcAddress("glDeleteShader");
558 glDeleteSync = (PFNGLDELETESYNCPROC)getProcAddress("glDeleteSync");
559 glDeleteTextures = (PFNGLDELETETEXTURESPROC)getProcAddress("glDeleteTextures");
560 glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)getProcAddress("glDeleteVertexArrays");
561 glDepthFunc = (PFNGLDEPTHFUNCPROC)getProcAddress("glDepthFunc");
562 glDepthMask = (PFNGLDEPTHMASKPROC)getProcAddress("glDepthMask");
563 glDisablei = (PFNGLDISABLEIPROC)getProcAddress("glDisablei");
564 glDisable = (PFNGLDISABLEPROC)getProcAddress("glDisable");
565 glDisableVertexArrayAttrib = (PFNGLDISABLEVERTEXARRAYATTRIBPROC)getProcAddress("glDisableVertexArrayAttrib");
566 glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)getProcAddress("glDisableVertexAttribArray");
567 glDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC)getProcAddress("glDispatchCompute");
568 glDrawArraysInstancedBaseInstance = (PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)getProcAddress("glDrawArraysInstancedBaseInstance");
569 glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)getProcAddress("glDrawArraysInstanced");
570 glDrawArrays = (PFNGLDRAWARRAYSPROC)getProcAddress("glDrawArrays");
571 glDrawBuffer = (PFNGLDRAWBUFFERPROC)getProcAddress("glDrawBuffer");
572 glDrawBuffers = (PFNGLDRAWBUFFERSPROC)getProcAddress("glDrawBuffers");
573 glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)getProcAddress("glDrawElementsBaseVertex");
574 glDrawElementsInstancedBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)getProcAddress("glDrawElementsInstancedBaseInstance");
575 glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)getProcAddress("glDrawElementsInstanced");
576 glDrawElements = (PFNGLDRAWELEMENTSPROC)getProcAddress("glDrawElements");
577 glEnablei = (PFNGLENABLEIPROC)getProcAddress("glEnablei");
578 glEnable = (PFNGLENABLEPROC)getProcAddress("glEnable");
579 glEnableVertexArrayAttrib = (PFNGLENABLEVERTEXARRAYATTRIBPROC)getProcAddress("glEnableVertexArrayAttrib");
580 glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)getProcAddress("glEnableVertexAttribArray");
581 glFenceSync = (PFNGLFENCESYNCPROC)getProcAddress("glFenceSync");
582 glFinish = (PFNGLFINISHPROC)getProcAddress("glFinish");
583 glFlush = (PFNGLFLUSHPROC)getProcAddress("glFlush");
584 glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)getProcAddress("glFramebufferRenderbuffer");
585 glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)getProcAddress("glFramebufferTexture2D");
586 glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)getProcAddress("glFramebufferTextureLayer");
587 glFramebufferTextureMultiviewOVR = (PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC)getProcAddress("glFramebufferTextureMultiviewOVR");
588 glFrontFace = (PFNGLFRONTFACEPROC)getProcAddress("glFrontFace");
589 glGenBuffers = (PFNGLGENBUFFERSPROC)getProcAddress("glGenBuffers");
590 glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)getProcAddress("glGenerateMipmap");
591 glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)getProcAddress("glGenFramebuffers");
592 glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)getProcAddress("glGenRenderbuffers");
593 glGenSamplers = (PFNGLGENSAMPLERSPROC)getProcAddress("glGenSamplers");
594 glGenTextures = (PFNGLGENTEXTURESPROC)getProcAddress("glGenTextures");
595 glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)getProcAddress("glGenVertexArrays");
596 glGetActiveAtomicCounterBufferiv = (PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)getProcAddress("glGetActiveAtomicCounterBufferiv");
597 glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)getProcAddress("glGetActiveAttrib");
598 glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)getProcAddress("glGetActiveUniformBlockiv");
599 glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)getProcAddress("glGetActiveUniformBlockName");
600 glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)getProcAddress("glGetActiveUniformName");
601 glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)getProcAddress("glGetActiveUniform");
602 glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)getProcAddress("glGetActiveUniformsiv");
603 glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)getProcAddress("glGetAttachedShaders");
604 glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)getProcAddress("glGetAttribLocation");
605 glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)getProcAddress("glGetBufferSubData");
606 glGetError = (PFNGLGETERRORPROC)getProcAddress("glGetError");
607 glGetFloatv = (PFNGLGETFLOATVPROC)getProcAddress("glGetFloatv");
608 glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)getProcAddress("glGetFramebufferAttachmentParameteriv");
609 glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)getProcAddress("glGetIntegeri_v");
610 glGetIntegerv = (PFNGLGETINTEGERVPROC)getProcAddress("glGetIntegerv");
611 glGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC)getProcAddress("glGetInternalformativ");
612 glGetNamedBufferSubData = (PFNGLGETNAMEDBUFFERSUBDATAPROC)getProcAddress("glGetNamedBufferSubData");
613 glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)getProcAddress("glGetProgramInfoLog");
614 glGetProgramiv = (PFNGLGETPROGRAMIVPROC)getProcAddress("glGetProgramiv");
615 glGetProgramResourceIndex = (PFNGLGETPROGRAMRESOURCEINDEXPROC)getProcAddress("glGetProgramResourceIndex");
616 glGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC)getProcAddress("glGetProgramResourceiv");
617 glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)getProcAddress("glGetShaderInfoLog");
618 glGetShaderiv = (PFNGLGETSHADERIVPROC)getProcAddress("glGetShaderiv");
619 glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)getProcAddress("glGetShaderSource");
620 glGetStringi = (PFNGLGETSTRINGIPROC)getProcAddress("glGetStringi");
621 glGetString = (PFNGLGETSTRINGPROC)getProcAddress("glGetString");
622 glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)getProcAddress("glGetUniformBlockIndex");
623 glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)getProcAddress("glGetUniformLocation");
624 glInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC)getProcAddress("glInvalidateFramebuffer");
625 glIsEnabled = (PFNGLISENABLEDPROC)getProcAddress("glIsEnabled");
626 glLinkProgram = (PFNGLLINKPROGRAMPROC)getProcAddress("glLinkProgram");
627 glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)getProcAddress("glMapBufferRange");
628 glMemoryBarrier = (PFNGLMEMORYBARRIERPROC)getProcAddress("glMemoryBarrier");
629 glNamedBufferData = (PFNGLNAMEDBUFFERDATAPROC)getProcAddress("glNamedBufferData");
630 glNamedFramebufferDrawBuffer = (PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC)getProcAddress("glNamedFramebufferDrawBuffer");
631 glObjectLabel = (PFNGLOBJECTLABELPROC)getProcAddress("glObjectLabel");
632 glPixelStorei = (PFNGLPIXELSTOREIPROC)getProcAddress("glPixelStorei");
633 glPolygonMode = (PFNGLPOLYGONMODEPROC)getProcAddress("glPolygonMode");
634 glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)getProcAddress("glPolygonOffset");
635 glPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC)getProcAddress("glPopDebugGroup");
636 glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC)getProcAddress("glPushDebugGroup");
637 glReadBuffer = (PFNGLREADBUFFERPROC)getProcAddress("glReadBuffer");
638 glReadPixels = (PFNGLREADPIXELSPROC)getProcAddress("glReadPixels");
639 glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)getProcAddress("glRenderbufferStorageMultisample");
640 glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)getProcAddress("glRenderbufferStorage");
641 glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)getProcAddress("glSamplerParameterf");
642 glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)getProcAddress("glSamplerParameterfv");
643 glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)getProcAddress("glSamplerParameteri");
644 glScissor = (PFNGLSCISSORPROC)getProcAddress("glScissor");
645 glShaderSource = (PFNGLSHADERSOURCEPROC)getProcAddress("glShaderSource");
646 glTexImage2D = (PFNGLTEXIMAGE2DPROC)getProcAddress("glTexImage2D");
647 glTexParameteri = (PFNGLTEXPARAMETERIPROC)getProcAddress("glTexParameteri");
648 glTexStorage1D = (PFNGLTEXSTORAGE1DPROC)getProcAddress("glTexStorage1D");
649 glTexStorage2DMultisample = (PFNGLTEXSTORAGE2DMULTISAMPLEPROC)getProcAddress("glTexStorage2DMultisample");
650 glTexStorage2D = (PFNGLTEXSTORAGE2DPROC)getProcAddress("glTexStorage2D");
651 glTexStorage3DMultisample = (PFNGLTEXSTORAGE3DMULTISAMPLEPROC)getProcAddress("glTexStorage3DMultisample");
652 glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)getProcAddress("glTexStorage3D");
653 glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC)getProcAddress("glTexSubImage1D");
654 glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)getProcAddress("glTexSubImage2D");
655 glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)getProcAddress("glTexSubImage3D");
656 glTextureView = (PFNGLTEXTUREVIEWPROC)getProcAddress("glTextureView");
657 glUniform1f = (PFNGLUNIFORM1FPROC)getProcAddress("glUniform1f");
658 glUniform1fv = (PFNGLUNIFORM1FVPROC)getProcAddress("glUniform1fv");
659 glUniform1i = (PFNGLUNIFORM1IPROC)getProcAddress("glUniform1i");
660 glUniform1iv = (PFNGLUNIFORM1IVPROC)getProcAddress("glUniform1iv");
661 glUniform2fv = (PFNGLUNIFORM2FVPROC)getProcAddress("glUniform2fv");
662 glUniform3fv = (PFNGLUNIFORM3FVPROC)getProcAddress("glUniform3fv");
663 glUniform4fv = (PFNGLUNIFORM4FVPROC)getProcAddress("glUniform4fv");
664 glUniform4iv = (PFNGLUNIFORM4IVPROC)getProcAddress("glUniform4iv");
665 glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)getProcAddress("glUniformBlockBinding");
666 glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)getProcAddress("glUniformMatrix4fv");
667 glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)getProcAddress("glUnmapBuffer");
668 glUseProgram = (PFNGLUSEPROGRAMPROC)getProcAddress("glUseProgram");
669 glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)getProcAddress("glVertexAttribDivisor");
670 glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)getProcAddress("glVertexAttribIPointer");
671 glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)getProcAddress("glVertexAttribPointer");
672 glViewport = (PFNGLVIEWPORTPROC)getProcAddress("glViewport");
673 glWaitSync = (PFNGLWAITSYNCPROC)getProcAddress("glWaitSync");
674
675 return true;
676}
677
678#endif
Log implementation class.
Definition: LogManager.h:140
Provides a weakly referenced view over the contents of a string.
Definition: StringView.h:50
constexpr Log getLogger(const char(&name)[LEN]) noexcept
Definition: LogManager.h:181
constexpr size_t hash() noexcept
Simple getter function that returns the initial value for fnv1a hashing.
Definition: HashFunctions.h:62