egl: Expose direct function pointers on INTEGRITY

Change-Id: I4f7df9abcd580297a40fd9dd16a26f5f93e1c4c7
Reviewed-by: Jesus Fernandez <Jesus.Fernandez@qt.io>
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
This commit is contained in:
Laszlo Agocs 2017-02-03 12:19:01 +01:00
parent 44d5fb33be
commit 52094e2520
2 changed files with 354 additions and 10 deletions

View File

@ -83,17 +83,16 @@ typedef void* GLeglImageOES;
# else // "uncontrolled" ES2 platforms
// In "es2" builds (QT_OPENGL_ES_2) additional defines indicate if ES
// 3.0 or higher is available. In this case include the corresponding
// header. These are backwards compatible and it should be safe to
// include headers on top of each other, meaning that applications can
// include gl2.h even if gl31.h gets included here.
// In "es2" builds (QT_OPENGL_ES_2) additional defines indicate GLES 3.0 or
// higher is available *at build time*. In this case include the corresponding
// header. These are backwards compatible and it should be safe to include
// headers on top of each other, meaning that applications can include gl2.h
// even if gl31.h gets included here.
// NB! This file contains the only usages of the ES_3 and ES_3_1
// macros. They are useless for pretty much anything else. The fact
// that Qt was built against an SDK with f.ex. ES 2 only does not mean
// applications cannot target ES 3. Therefore QOpenGLFunctions and
// friends do everything dynamically and never rely on these macros.
// NB! The fact that Qt was built against an SDK with GLES 2 only does not mean
// applications cannot be deployed on a GLES 3 system. Therefore
// QOpenGLFunctions and friends must do everything dynamically and must not rely
// on these macros, except in special cases for controlled build/run environments.
// Some Khronos headers use the ext proto guard in the standard headers as well,
// which is bad. Work it around, but avoid spilling over to the ext header.

View File

@ -457,7 +457,352 @@ QFunctionPointer QEGLPlatformContext::getProcAddress(const char *procName)
#if !defined(Q_OS_WIN) && !defined(Q_OS_INTEGRITY)
if (!proc)
proc = (QFunctionPointer) dlsym(RTLD_DEFAULT, procName);
#elif !defined(QT_OPENGL_DYNAMIC)
// On systems without KHR_get_all_proc_addresses and without
// dynamic linking there still has to be a way to access the
// standard GLES functions. QOpenGL(Extra)Functions never makes
// direct GL API calls since Qt 5.7, so all such workarounds are
// expected to be handled in the platform plugin.
if (!proc) {
static struct StdFunc {
const char *name;
QFunctionPointer func;
} standardFuncs[] = {
#ifdef QT_OPENGL_ES_2
{ "glBindTexture", (QFunctionPointer) ::glBindTexture },
{ "glBlendFunc", (QFunctionPointer) ::glBlendFunc },
{ "glClear", (QFunctionPointer) ::glClear },
{ "glClearColor", (QFunctionPointer) ::glClearColor },
{ "glClearStencil", (QFunctionPointer) ::glClearStencil },
{ "glColorMask", (QFunctionPointer) ::glColorMask },
{ "glCopyTexImage2D", (QFunctionPointer) ::glCopyTexImage2D },
{ "glCopyTexSubImage2D", (QFunctionPointer) ::glCopyTexSubImage2D },
{ "glCullFace", (QFunctionPointer) ::glCullFace },
{ "glDeleteTextures", (QFunctionPointer) ::glDeleteTextures },
{ "glDepthFunc", (QFunctionPointer) ::glDepthFunc },
{ "glDepthMask", (QFunctionPointer) ::glDepthMask },
{ "glDisable", (QFunctionPointer) ::glDisable },
{ "glDrawArrays", (QFunctionPointer) ::glDrawArrays },
{ "glDrawElements", (QFunctionPointer) ::glDrawElements },
{ "glEnable", (QFunctionPointer) ::glEnable },
{ "glFinish", (QFunctionPointer) ::glFinish },
{ "glFlush", (QFunctionPointer) ::glFlush },
{ "glFrontFace", (QFunctionPointer) ::glFrontFace },
{ "glGenTextures", (QFunctionPointer) ::glGenTextures },
{ "glGetBooleanv", (QFunctionPointer) ::glGetBooleanv },
{ "glGetError", (QFunctionPointer) ::glGetError },
{ "glGetFloatv", (QFunctionPointer) ::glGetFloatv },
{ "glGetIntegerv", (QFunctionPointer) ::glGetIntegerv },
{ "glGetString", (QFunctionPointer) ::glGetString },
{ "glGetTexParameterfv", (QFunctionPointer) ::glGetTexParameterfv },
{ "glGetTexParameteriv", (QFunctionPointer) ::glGetTexParameteriv },
{ "glHint", (QFunctionPointer) ::glHint },
{ "glIsEnabled", (QFunctionPointer) ::glIsEnabled },
{ "glIsTexture", (QFunctionPointer) ::glIsTexture },
{ "glLineWidth", (QFunctionPointer) ::glLineWidth },
{ "glPixelStorei", (QFunctionPointer) ::glPixelStorei },
{ "glPolygonOffset", (QFunctionPointer) ::glPolygonOffset },
{ "glReadPixels", (QFunctionPointer) ::glReadPixels },
{ "glScissor", (QFunctionPointer) ::glScissor },
{ "glStencilFunc", (QFunctionPointer) ::glStencilFunc },
{ "glStencilMask", (QFunctionPointer) ::glStencilMask },
{ "glStencilOp", (QFunctionPointer) ::glStencilOp },
{ "glTexImage2D", (QFunctionPointer) ::glTexImage2D },
{ "glTexParameterf", (QFunctionPointer) ::glTexParameterf },
{ "glTexParameterfv", (QFunctionPointer) ::glTexParameterfv },
{ "glTexParameteri", (QFunctionPointer) ::glTexParameteri },
{ "glTexParameteriv", (QFunctionPointer) ::glTexParameteriv },
{ "glTexSubImage2D", (QFunctionPointer) ::glTexSubImage2D },
{ "glViewport", (QFunctionPointer) ::glViewport },
{ "glActiveTexture", (QFunctionPointer) ::glActiveTexture },
{ "glAttachShader", (QFunctionPointer) ::glAttachShader },
{ "glBindAttribLocation", (QFunctionPointer) ::glBindAttribLocation },
{ "glBindBuffer", (QFunctionPointer) ::glBindBuffer },
{ "glBindFramebuffer", (QFunctionPointer) ::glBindFramebuffer },
{ "glBindRenderbuffer", (QFunctionPointer) ::glBindRenderbuffer },
{ "glBlendColor", (QFunctionPointer) ::glBlendColor },
{ "glBlendEquation", (QFunctionPointer) ::glBlendEquation },
{ "glBlendEquationSeparate", (QFunctionPointer) ::glBlendEquationSeparate },
{ "glBlendFuncSeparate", (QFunctionPointer) ::glBlendFuncSeparate },
{ "glBufferData", (QFunctionPointer) ::glBufferData },
{ "glBufferSubData", (QFunctionPointer) ::glBufferSubData },
{ "glCheckFramebufferStatus", (QFunctionPointer) ::glCheckFramebufferStatus },
{ "glCompileShader", (QFunctionPointer) ::glCompileShader },
{ "glCompressedTexImage2D", (QFunctionPointer) ::glCompressedTexImage2D },
{ "glCompressedTexSubImage2D", (QFunctionPointer) ::glCompressedTexSubImage2D },
{ "glCreateProgram", (QFunctionPointer) ::glCreateProgram },
{ "glCreateShader", (QFunctionPointer) ::glCreateShader },
{ "glDeleteBuffers", (QFunctionPointer) ::glDeleteBuffers },
{ "glDeleteFramebuffers", (QFunctionPointer) ::glDeleteFramebuffers },
{ "glDeleteProgram", (QFunctionPointer) ::glDeleteProgram },
{ "glDeleteRenderbuffers", (QFunctionPointer) ::glDeleteRenderbuffers },
{ "glDeleteShader", (QFunctionPointer) ::glDeleteShader },
{ "glDetachShader", (QFunctionPointer) ::glDetachShader },
{ "glDisableVertexAttribArray", (QFunctionPointer) ::glDisableVertexAttribArray },
{ "glEnableVertexAttribArray", (QFunctionPointer) ::glEnableVertexAttribArray },
{ "glFramebufferRenderbuffer", (QFunctionPointer) ::glFramebufferRenderbuffer },
{ "glFramebufferTexture2D", (QFunctionPointer) ::glFramebufferTexture2D },
{ "glGenBuffers", (QFunctionPointer) ::glGenBuffers },
{ "glGenerateMipmap", (QFunctionPointer) ::glGenerateMipmap },
{ "glGenFramebuffers", (QFunctionPointer) ::glGenFramebuffers },
{ "glGenRenderbuffers", (QFunctionPointer) ::glGenRenderbuffers },
{ "glGetActiveAttrib", (QFunctionPointer) ::glGetActiveAttrib },
{ "glGetActiveUniform", (QFunctionPointer) ::glGetActiveUniform },
{ "glGetAttachedShaders", (QFunctionPointer) ::glGetAttachedShaders },
{ "glGetAttribLocation", (QFunctionPointer) ::glGetAttribLocation },
{ "glGetBufferParameteriv", (QFunctionPointer) ::glGetBufferParameteriv },
{ "glGetFramebufferAttachmentParameteriv", (QFunctionPointer) ::glGetFramebufferAttachmentParameteriv },
{ "glGetProgramiv", (QFunctionPointer) ::glGetProgramiv },
{ "glGetProgramInfoLog", (QFunctionPointer) ::glGetProgramInfoLog },
{ "glGetRenderbufferParameteriv", (QFunctionPointer) ::glGetRenderbufferParameteriv },
{ "glGetShaderiv", (QFunctionPointer) ::glGetShaderiv },
{ "glGetShaderInfoLog", (QFunctionPointer) ::glGetShaderInfoLog },
{ "glGetShaderPrecisionFormat", (QFunctionPointer) ::glGetShaderPrecisionFormat },
{ "glGetShaderSource", (QFunctionPointer) ::glGetShaderSource },
{ "glGetUniformfv", (QFunctionPointer) ::glGetUniformfv },
{ "glGetUniformiv", (QFunctionPointer) ::glGetUniformiv },
{ "glGetUniformLocation", (QFunctionPointer) ::glGetUniformLocation },
{ "glGetVertexAttribfv", (QFunctionPointer) ::glGetVertexAttribfv },
{ "glGetVertexAttribiv", (QFunctionPointer) ::glGetVertexAttribiv },
{ "glGetVertexAttribPointerv", (QFunctionPointer) ::glGetVertexAttribPointerv },
{ "glIsBuffer", (QFunctionPointer) ::glIsBuffer },
{ "glIsFramebuffer", (QFunctionPointer) ::glIsFramebuffer },
{ "glIsProgram", (QFunctionPointer) ::glIsProgram },
{ "glIsRenderbuffer", (QFunctionPointer) ::glIsRenderbuffer },
{ "glIsShader", (QFunctionPointer) ::glIsShader },
{ "glLinkProgram", (QFunctionPointer) ::glLinkProgram },
{ "glReleaseShaderCompiler", (QFunctionPointer) ::glReleaseShaderCompiler },
{ "glRenderbufferStorage", (QFunctionPointer) ::glRenderbufferStorage },
{ "glSampleCoverage", (QFunctionPointer) ::glSampleCoverage },
{ "glShaderBinary", (QFunctionPointer) ::glShaderBinary },
{ "glShaderSource", (QFunctionPointer) ::glShaderSource },
{ "glStencilFuncSeparate", (QFunctionPointer) ::glStencilFuncSeparate },
{ "glStencilMaskSeparate", (QFunctionPointer) ::glStencilMaskSeparate },
{ "glStencilOpSeparate", (QFunctionPointer) ::glStencilOpSeparate },
{ "glUniform1f", (QFunctionPointer) ::glUniform1f },
{ "glUniform1fv", (QFunctionPointer) ::glUniform1fv },
{ "glUniform1i", (QFunctionPointer) ::glUniform1i },
{ "glUniform1iv", (QFunctionPointer) ::glUniform1iv },
{ "glUniform2f", (QFunctionPointer) ::glUniform2f },
{ "glUniform2fv", (QFunctionPointer) ::glUniform2fv },
{ "glUniform2i", (QFunctionPointer) ::glUniform2i },
{ "glUniform2iv", (QFunctionPointer) ::glUniform2iv },
{ "glUniform3f", (QFunctionPointer) ::glUniform3f },
{ "glUniform3fv", (QFunctionPointer) ::glUniform3fv },
{ "glUniform3i", (QFunctionPointer) ::glUniform3i },
{ "glUniform3iv", (QFunctionPointer) ::glUniform3iv },
{ "glUniform4f", (QFunctionPointer) ::glUniform4f },
{ "glUniform4fv", (QFunctionPointer) ::glUniform4fv },
{ "glUniform4i", (QFunctionPointer) ::glUniform4i },
{ "glUniform4iv", (QFunctionPointer) ::glUniform4iv },
{ "glUniformMatrix2fv", (QFunctionPointer) ::glUniformMatrix2fv },
{ "glUniformMatrix3fv", (QFunctionPointer) ::glUniformMatrix3fv },
{ "glUniformMatrix4fv", (QFunctionPointer) ::glUniformMatrix4fv },
{ "glUseProgram", (QFunctionPointer) ::glUseProgram },
{ "glValidateProgram", (QFunctionPointer) ::glValidateProgram },
{ "glVertexAttrib1f", (QFunctionPointer) ::glVertexAttrib1f },
{ "glVertexAttrib1fv", (QFunctionPointer) ::glVertexAttrib1fv },
{ "glVertexAttrib2f", (QFunctionPointer) ::glVertexAttrib2f },
{ "glVertexAttrib2fv", (QFunctionPointer) ::glVertexAttrib2fv },
{ "glVertexAttrib3f", (QFunctionPointer) ::glVertexAttrib3f },
{ "glVertexAttrib3fv", (QFunctionPointer) ::glVertexAttrib3fv },
{ "glVertexAttrib4f", (QFunctionPointer) ::glVertexAttrib4f },
{ "glVertexAttrib4fv", (QFunctionPointer) ::glVertexAttrib4fv },
{ "glVertexAttribPointer", (QFunctionPointer) ::glVertexAttribPointer },
{ "glClearDepthf", (QFunctionPointer) ::glClearDepthf },
{ "glDepthRangef", (QFunctionPointer) ::glDepthRangef },
#endif // QT_OPENGL_ES_2
#ifdef QT_OPENGL_ES_3
{ "glBeginQuery", (QFunctionPointer) ::glBeginQuery },
{ "glBeginTransformFeedback", (QFunctionPointer) ::glBeginTransformFeedback },
{ "glBindBufferBase", (QFunctionPointer) ::glBindBufferBase },
{ "glBindBufferRange", (QFunctionPointer) ::glBindBufferRange },
{ "glBindSampler", (QFunctionPointer) ::glBindSampler },
{ "glBindTransformFeedback", (QFunctionPointer) ::glBindTransformFeedback },
{ "glBindVertexArray", (QFunctionPointer) ::glBindVertexArray },
{ "glBlitFramebuffer", (QFunctionPointer) ::glBlitFramebuffer },
{ "glClearBufferfi", (QFunctionPointer) ::glClearBufferfi },
{ "glClearBufferfv", (QFunctionPointer) ::glClearBufferfv },
{ "glClearBufferiv", (QFunctionPointer) ::glClearBufferiv },
{ "glClearBufferuiv", (QFunctionPointer) ::glClearBufferuiv },
{ "glClientWaitSync", (QFunctionPointer) ::glClientWaitSync },
{ "glCompressedTexImage3D", (QFunctionPointer) ::glCompressedTexImage3D },
{ "glCompressedTexSubImage3D", (QFunctionPointer) ::glCompressedTexSubImage3D },
{ "glCopyBufferSubData", (QFunctionPointer) ::glCopyBufferSubData },
{ "glCopyTexSubImage3D", (QFunctionPointer) ::glCopyTexSubImage3D },
{ "glDeleteQueries", (QFunctionPointer) ::glDeleteQueries },
{ "glDeleteSamplers", (QFunctionPointer) ::glDeleteSamplers },
{ "glDeleteSync", (QFunctionPointer) ::glDeleteSync },
{ "glDeleteTransformFeedbacks", (QFunctionPointer) ::glDeleteTransformFeedbacks },
{ "glDeleteVertexArrays", (QFunctionPointer) ::glDeleteVertexArrays },
{ "glDrawArraysInstanced", (QFunctionPointer) ::glDrawArraysInstanced },
{ "glDrawBuffers", (QFunctionPointer) ::glDrawBuffers },
{ "glDrawElementsInstanced", (QFunctionPointer) ::glDrawElementsInstanced },
{ "glDrawRangeElements", (QFunctionPointer) ::glDrawRangeElements },
{ "glEndQuery", (QFunctionPointer) ::glEndQuery },
{ "glEndTransformFeedback", (QFunctionPointer) ::glEndTransformFeedback },
{ "glFenceSync", (QFunctionPointer) ::glFenceSync },
{ "glFlushMappedBufferRange", (QFunctionPointer) ::glFlushMappedBufferRange },
{ "glFramebufferTextureLayer", (QFunctionPointer) ::glFramebufferTextureLayer },
{ "glGenQueries", (QFunctionPointer) ::glGenQueries },
{ "glGenSamplers", (QFunctionPointer) ::glGenSamplers },
{ "glGenTransformFeedbacks", (QFunctionPointer) ::glGenTransformFeedbacks },
{ "glGenVertexArrays", (QFunctionPointer) ::glGenVertexArrays },
{ "glGetActiveUniformBlockName", (QFunctionPointer) ::glGetActiveUniformBlockName },
{ "glGetActiveUniformBlockiv", (QFunctionPointer) ::glGetActiveUniformBlockiv },
{ "glGetActiveUniformsiv", (QFunctionPointer) ::glGetActiveUniformsiv },
{ "glGetBufferParameteri64v", (QFunctionPointer) ::glGetBufferParameteri64v },
{ "glGetBufferPointerv", (QFunctionPointer) ::glGetBufferPointerv },
{ "glGetFragDataLocation", (QFunctionPointer) ::glGetFragDataLocation },
{ "glGetInteger64i_v", (QFunctionPointer) ::glGetInteger64i_v },
{ "glGetInteger64v", (QFunctionPointer) ::glGetInteger64v },
{ "glGetIntegeri_v", (QFunctionPointer) ::glGetIntegeri_v },
{ "glGetInternalformativ", (QFunctionPointer) ::glGetInternalformativ },
{ "glGetProgramBinary", (QFunctionPointer) ::glGetProgramBinary },
{ "glGetQueryObjectuiv", (QFunctionPointer) ::glGetQueryObjectuiv },
{ "glGetQueryiv", (QFunctionPointer) ::glGetQueryiv },
{ "glGetSamplerParameterfv", (QFunctionPointer) ::glGetSamplerParameterfv },
{ "glGetSamplerParameteriv", (QFunctionPointer) ::glGetSamplerParameteriv },
{ "glGetStringi", (QFunctionPointer) ::glGetStringi },
{ "glGetSynciv", (QFunctionPointer) ::glGetSynciv },
{ "glGetTransformFeedbackVarying", (QFunctionPointer) ::glGetTransformFeedbackVarying },
{ "glGetUniformBlockIndex", (QFunctionPointer) ::glGetUniformBlockIndex },
{ "glGetUniformIndices", (QFunctionPointer) ::glGetUniformIndices },
{ "glGetUniformuiv", (QFunctionPointer) ::glGetUniformuiv },
{ "glGetVertexAttribIiv", (QFunctionPointer) ::glGetVertexAttribIiv },
{ "glGetVertexAttribIuiv", (QFunctionPointer) ::glGetVertexAttribIuiv },
{ "glInvalidateFramebuffer", (QFunctionPointer) ::glInvalidateFramebuffer },
{ "glInvalidateSubFramebuffer", (QFunctionPointer) ::glInvalidateSubFramebuffer },
{ "glIsQuery", (QFunctionPointer) ::glIsQuery },
{ "glIsSampler", (QFunctionPointer) ::glIsSampler },
{ "glIsSync", (QFunctionPointer) ::glIsSync },
{ "glIsTransformFeedback", (QFunctionPointer) ::glIsTransformFeedback },
{ "glIsVertexArray", (QFunctionPointer) ::glIsVertexArray },
{ "glMapBufferRange", (QFunctionPointer) ::glMapBufferRange },
{ "glPauseTransformFeedback", (QFunctionPointer) ::glPauseTransformFeedback },
{ "glProgramBinary", (QFunctionPointer) ::glProgramBinary },
{ "glProgramParameteri", (QFunctionPointer) ::glProgramParameteri },
{ "glReadBuffer", (QFunctionPointer) ::glReadBuffer },
{ "glRenderbufferStorageMultisample", (QFunctionPointer) ::glRenderbufferStorageMultisample },
{ "glResumeTransformFeedback", (QFunctionPointer) ::glResumeTransformFeedback },
{ "glSamplerParameterf", (QFunctionPointer) ::glSamplerParameterf },
{ "glSamplerParameterfv", (QFunctionPointer) ::glSamplerParameterfv },
{ "glSamplerParameteri", (QFunctionPointer) ::glSamplerParameteri },
{ "glSamplerParameteriv", (QFunctionPointer) ::glSamplerParameteriv },
{ "glTexImage3D", (QFunctionPointer) ::glTexImage3D },
{ "glTexStorage2D", (QFunctionPointer) ::glTexStorage2D },
{ "glTexStorage3D", (QFunctionPointer) ::glTexStorage3D },
{ "glTexSubImage3D", (QFunctionPointer) ::glTexSubImage3D },
{ "glTransformFeedbackVaryings", (QFunctionPointer) ::glTransformFeedbackVaryings },
{ "glUniform1ui", (QFunctionPointer) ::glUniform1ui },
{ "glUniform1uiv", (QFunctionPointer) ::glUniform1uiv },
{ "glUniform2ui", (QFunctionPointer) ::glUniform2ui },
{ "glUniform2uiv", (QFunctionPointer) ::glUniform2uiv },
{ "glUniform3ui", (QFunctionPointer) ::glUniform3ui },
{ "glUniform3uiv", (QFunctionPointer) ::glUniform3uiv },
{ "glUniform4ui", (QFunctionPointer) ::glUniform4ui },
{ "glUniform4uiv", (QFunctionPointer) ::glUniform4uiv },
{ "glUniformBlockBinding", (QFunctionPointer) ::glUniformBlockBinding },
{ "glUniformMatrix2x3fv", (QFunctionPointer) ::glUniformMatrix2x3fv },
{ "glUniformMatrix2x4fv", (QFunctionPointer) ::glUniformMatrix2x4fv },
{ "glUniformMatrix3x2fv", (QFunctionPointer) ::glUniformMatrix3x2fv },
{ "glUniformMatrix3x4fv", (QFunctionPointer) ::glUniformMatrix3x4fv },
{ "glUniformMatrix4x2fv", (QFunctionPointer) ::glUniformMatrix4x2fv },
{ "glUniformMatrix4x3fv", (QFunctionPointer) ::glUniformMatrix4x3fv },
{ "glUnmapBuffer", (QFunctionPointer) ::glUnmapBuffer },
{ "glVertexAttribDivisor", (QFunctionPointer) ::glVertexAttribDivisor },
{ "glVertexAttribI4i", (QFunctionPointer) ::glVertexAttribI4i },
{ "glVertexAttribI4iv", (QFunctionPointer) ::glVertexAttribI4iv },
{ "glVertexAttribI4ui", (QFunctionPointer) ::glVertexAttribI4ui },
{ "glVertexAttribI4uiv", (QFunctionPointer) ::glVertexAttribI4uiv },
{ "glVertexAttribIPointer", (QFunctionPointer) ::glVertexAttribIPointer },
{ "glWaitSync", (QFunctionPointer) ::glWaitSync },
#endif // QT_OPENGL_ES_3
#ifdef QT_OPENGL_ES_3_1
{ "glActiveShaderProgram", (QFunctionPointer) ::glActiveShaderProgram },
{ "glBindImageTexture", (QFunctionPointer) ::glBindImageTexture },
{ "glBindProgramPipeline", (QFunctionPointer) ::glBindProgramPipeline },
{ "glBindVertexBuffer", (QFunctionPointer) ::glBindVertexBuffer },
{ "glCreateShaderProgramv", (QFunctionPointer) ::glCreateShaderProgramv },
{ "glDeleteProgramPipelines", (QFunctionPointer) ::glDeleteProgramPipelines },
{ "glDispatchCompute", (QFunctionPointer) ::glDispatchCompute },
{ "glDispatchComputeIndirect", (QFunctionPointer) ::glDispatchComputeIndirect },
{ "glDrawArraysIndirect", (QFunctionPointer) ::glDrawArraysIndirect },
{ "glDrawElementsIndirect", (QFunctionPointer) ::glDrawElementsIndirect },
{ "glFramebufferParameteri", (QFunctionPointer) ::glFramebufferParameteri },
{ "glGenProgramPipelines", (QFunctionPointer) ::glGenProgramPipelines },
{ "glGetBooleani_v", (QFunctionPointer) ::glGetBooleani_v },
{ "glGetFramebufferParameteriv", (QFunctionPointer) ::glGetFramebufferParameteriv },
{ "glGetMultisamplefv", (QFunctionPointer) ::glGetMultisamplefv },
{ "glGetProgramInterfaceiv", (QFunctionPointer) ::glGetProgramInterfaceiv },
{ "glGetProgramPipelineInfoLog", (QFunctionPointer) ::glGetProgramPipelineInfoLog },
{ "glGetProgramPipelineiv", (QFunctionPointer) ::glGetProgramPipelineiv },
{ "glGetProgramResourceIndex", (QFunctionPointer) ::glGetProgramResourceIndex },
{ "glGetProgramResourceLocation", (QFunctionPointer) ::glGetProgramResourceLocation },
{ "glGetProgramResourceName", (QFunctionPointer) ::glGetProgramResourceName },
{ "glGetProgramResourceiv", (QFunctionPointer) ::glGetProgramResourceiv },
{ "glGetTexLevelParameterfv", (QFunctionPointer) ::glGetTexLevelParameterfv },
{ "glGetTexLevelParameteriv", (QFunctionPointer) ::glGetTexLevelParameteriv },
{ "glIsProgramPipeline", (QFunctionPointer) ::glIsProgramPipeline },
{ "glMemoryBarrier", (QFunctionPointer) ::glMemoryBarrier },
{ "glMemoryBarrierByRegion", (QFunctionPointer) ::glMemoryBarrierByRegion },
{ "glProgramUniform1f", (QFunctionPointer) ::glProgramUniform1f },
{ "glProgramUniform1fv", (QFunctionPointer) ::glProgramUniform1fv },
{ "glProgramUniform1i", (QFunctionPointer) ::glProgramUniform1i },
{ "glProgramUniform1iv", (QFunctionPointer) ::glProgramUniform1iv },
{ "glProgramUniform1ui", (QFunctionPointer) ::glProgramUniform1ui },
{ "glProgramUniform1uiv", (QFunctionPointer) ::glProgramUniform1uiv },
{ "glProgramUniform2f", (QFunctionPointer) ::glProgramUniform2f },
{ "glProgramUniform2fv", (QFunctionPointer) ::glProgramUniform2fv },
{ "glProgramUniform2i", (QFunctionPointer) ::glProgramUniform2i },
{ "glProgramUniform2iv", (QFunctionPointer) ::glProgramUniform2iv },
{ "glProgramUniform2ui", (QFunctionPointer) ::glProgramUniform2ui },
{ "glProgramUniform2uiv", (QFunctionPointer) ::glProgramUniform2uiv },
{ "glProgramUniform3f", (QFunctionPointer) ::glProgramUniform3f },
{ "glProgramUniform3fv", (QFunctionPointer) ::glProgramUniform3fv },
{ "glProgramUniform3i", (QFunctionPointer) ::glProgramUniform3i },
{ "glProgramUniform3iv", (QFunctionPointer) ::glProgramUniform3iv },
{ "glProgramUniform3ui", (QFunctionPointer) ::glProgramUniform3ui },
{ "glProgramUniform3uiv", (QFunctionPointer) ::glProgramUniform3uiv },
{ "glProgramUniform4f", (QFunctionPointer) ::glProgramUniform4f },
{ "glProgramUniform4fv", (QFunctionPointer) ::glProgramUniform4fv },
{ "glProgramUniform4i", (QFunctionPointer) ::glProgramUniform4i },
{ "glProgramUniform4iv", (QFunctionPointer) ::glProgramUniform4iv },
{ "glProgramUniform4ui", (QFunctionPointer) ::glProgramUniform4ui },
{ "glProgramUniform4uiv", (QFunctionPointer) ::glProgramUniform4uiv },
{ "glProgramUniformMatrix2fv", (QFunctionPointer) ::glProgramUniformMatrix2fv },
{ "glProgramUniformMatrix2x3fv", (QFunctionPointer) ::glProgramUniformMatrix2x3fv },
{ "glProgramUniformMatrix2x4fv", (QFunctionPointer) ::glProgramUniformMatrix2x4fv },
{ "glProgramUniformMatrix3fv", (QFunctionPointer) ::glProgramUniformMatrix3fv },
{ "glProgramUniformMatrix3x2fv", (QFunctionPointer) ::glProgramUniformMatrix3x2fv },
{ "glProgramUniformMatrix3x4fv", (QFunctionPointer) ::glProgramUniformMatrix3x4fv },
{ "glProgramUniformMatrix4fv", (QFunctionPointer) ::glProgramUniformMatrix4fv },
{ "glProgramUniformMatrix4x2fv", (QFunctionPointer) ::glProgramUniformMatrix4x2fv },
{ "glProgramUniformMatrix4x3fv", (QFunctionPointer) ::glProgramUniformMatrix4x3fv },
{ "glSampleMaski", (QFunctionPointer) ::glSampleMaski },
{ "glTexStorage2DMultisample", (QFunctionPointer) ::glTexStorage2DMultisample },
{ "glUseProgramStages", (QFunctionPointer) ::glUseProgramStages },
{ "glValidateProgramPipeline", (QFunctionPointer) ::glValidateProgramPipeline },
{ "glVertexAttribBinding", (QFunctionPointer) ::glVertexAttribBinding },
{ "glVertexAttribFormat", (QFunctionPointer) ::glVertexAttribFormat },
{ "glVertexAttribIFormat", (QFunctionPointer) ::glVertexAttribIFormat },
{ "glVertexBindingDivisor", (QFunctionPointer) ::glVertexBindingDivisor },
#endif // QT_OPENGL_ES_3_1
};
for (size_t i = 0; i < sizeof(standardFuncs) / sizeof(StdFunc); ++i) {
if (!qstrcmp(procName, standardFuncs[i].name)) {
proc = standardFuncs[i].func;
break;
}
}
}
#endif
return proc;
}