diff --git a/src/Magnum/Platform/CMakeLists.txt b/src/Magnum/Platform/CMakeLists.txt index 54ebc3b58..7c2731979 100644 --- a/src/Magnum/Platform/CMakeLists.txt +++ b/src/Magnum/Platform/CMakeLists.txt @@ -468,13 +468,24 @@ if(NEED_EGLCONTEXTHANDLER) endif() # Platform-specific sources for context library -set(MagnumContext_SRCS Implementation/OpenGLFunctionLoader.cpp) +set(MagnumContext_SRCS ) +if(NOT CORRADE_TARGET_IOS) + list(APPEND MagnumContext_SRCS Implementation/OpenGLFunctionLoader.cpp) +endif() if(NOT MAGNUM_TARGET_GLES) list(APPEND MagnumContext_SRCS ../../MagnumExternal/OpenGL/GL/flextGLPlatform.cpp) elseif(MAGNUM_TARGET_GLES AND MAGNUM_TARGET_GLES2) - list(APPEND MagnumContext_SRCS ../../MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp) + if(CORRADE_TARGET_IOS) + list(APPEND MagnumContext_SRCS ../../MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp) + else() + list(APPEND MagnumContext_SRCS ../../MagnumExternal/OpenGL/GLES2/flextGLPlatform.cpp) + endif() elseif(MAGNUM_TARGET_GLES AND NOT MAGNUM_TARGET_GLES2) - list(APPEND MagnumContext_SRCS ../../MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp) + if(CORRADE_TARGET_IOS) + list(APPEND MagnumContext_SRCS ../../MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp) + else() + list(APPEND MagnumContext_SRCS ../../MagnumExternal/OpenGL/GLES3/flextGLPlatform.cpp) + endif() endif() # CGL context diff --git a/src/MagnumExternal/OpenGL/GLES2/README.md b/src/MagnumExternal/OpenGL/GLES2/README.md index fb7ce33a1..b4f73b127 100644 --- a/src/MagnumExternal/OpenGL/GLES2/README.md +++ b/src/MagnumExternal/OpenGL/GLES2/README.md @@ -7,7 +7,8 @@ files for generic GLES2 implementations: .../flextGLgen.py -D . -t . extensions.txt -It will generate `flextGL.h` and `flextGL.cpp` files. +It will generate `flextGL.h`, `flextGL.cpp`, `flextGLPlatform.cpp` and +`flextGLPlatformIOS.cpp` files. NaCl and Emscripten don't have the ability to manually load extension pointers, thus they have only header files: diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp new file mode 100644 index 000000000..d94dd06d4 --- /dev/null +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp @@ -0,0 +1,419 @@ +#include "flextGL.h" + +#undef glBlitFramebufferANGLE +#undef glRenderbufferStorageMultisampleANGLE +#undef glDrawArraysInstancedANGLE +#undef glDrawElementsInstancedANGLE +#undef glVertexAttribDivisorANGLE +#undef glRenderbufferStorageMultisampleAPPLE +#undef glResolveMultisampleFramebufferAPPLE +#undef glGetObjectLabelEXT +#undef glLabelObjectEXT +#undef glInsertEventMarkerEXT +#undef glPopGroupMarkerEXT +#undef glPushGroupMarkerEXT +#undef glDiscardFramebufferEXT +#undef glGetQueryObjecti64vEXT +#undef glGetQueryObjectivEXT +#undef glGetQueryObjectui64vEXT +#undef glQueryCounterEXT +#undef glDrawBuffersEXT +#undef glBlendEquationSeparateiEXT +#undef glBlendEquationiEXT +#undef glBlendFuncSeparateiEXT +#undef glBlendFunciEXT +#undef glColorMaskiEXT +#undef glDisableiEXT +#undef glEnableiEXT +#undef glIsEnablediEXT +#undef glDrawArraysInstancedEXT +#undef glDrawElementsInstancedEXT +#undef glVertexAttribDivisorEXT +#undef glFlushMappedBufferRangeEXT +#undef glMapBufferRangeEXT +#undef glMultiDrawArraysEXT +#undef glMultiDrawElementsEXT +#undef glFramebufferTexture2DMultisampleEXT +#undef glRenderbufferStorageMultisampleEXT +#undef glBeginQueryEXT +#undef glDeleteQueriesEXT +#undef glEndQueryEXT +#undef glGenQueriesEXT +#undef glGetQueryObjectuivEXT +#undef glGetQueryivEXT +#undef glIsQueryEXT +#undef glGetGraphicsResetStatusEXT +#undef glGetnUniformfvEXT +#undef glGetnUniformivEXT +#undef glReadnPixelsEXT +#undef glActiveShaderProgramEXT +#undef glBindProgramPipelineEXT +#undef glCreateShaderProgramvEXT +#undef glDeleteProgramPipelinesEXT +#undef glGenProgramPipelinesEXT +#undef glGetProgramPipelineInfoLogEXT +#undef glGetProgramPipelineivEXT +#undef glIsProgramPipelineEXT +#undef glProgramParameteriEXT +#undef glProgramUniform1fEXT +#undef glProgramUniform1fvEXT +#undef glProgramUniform1iEXT +#undef glProgramUniform1ivEXT +#undef glProgramUniform1uiEXT +#undef glProgramUniform1uivEXT +#undef glProgramUniform2fEXT +#undef glProgramUniform2fvEXT +#undef glProgramUniform2iEXT +#undef glProgramUniform2ivEXT +#undef glProgramUniform2uiEXT +#undef glProgramUniform2uivEXT +#undef glProgramUniform3fEXT +#undef glProgramUniform3fvEXT +#undef glProgramUniform3iEXT +#undef glProgramUniform3ivEXT +#undef glProgramUniform3uiEXT +#undef glProgramUniform3uivEXT +#undef glProgramUniform4fEXT +#undef glProgramUniform4fvEXT +#undef glProgramUniform4iEXT +#undef glProgramUniform4ivEXT +#undef glProgramUniform4uiEXT +#undef glProgramUniform4uivEXT +#undef glProgramUniformMatrix2fvEXT +#undef glProgramUniformMatrix2x3fvEXT +#undef glProgramUniformMatrix2x4fvEXT +#undef glProgramUniformMatrix3fvEXT +#undef glProgramUniformMatrix3x2fvEXT +#undef glProgramUniformMatrix3x4fvEXT +#undef glProgramUniformMatrix4fvEXT +#undef glProgramUniformMatrix4x2fvEXT +#undef glProgramUniformMatrix4x3fvEXT +#undef glUseProgramStagesEXT +#undef glValidateProgramPipelineEXT +#undef glGetSamplerParameterIivEXT +#undef glGetSamplerParameterIuivEXT +#undef glGetTexParameterIivEXT +#undef glGetTexParameterIuivEXT +#undef glSamplerParameterIivEXT +#undef glSamplerParameterIuivEXT +#undef glTexParameterIivEXT +#undef glTexParameterIuivEXT +#undef glTexStorage1DEXT +#undef glTexStorage2DEXT +#undef glTexStorage3DEXT +#undef glTextureStorage1DEXT +#undef glTextureStorage2DEXT +#undef glTextureStorage3DEXT +#undef glBlendBarrierKHR +#undef glDebugMessageCallbackKHR +#undef glDebugMessageControlKHR +#undef glDebugMessageInsertKHR +#undef glGetDebugMessageLogKHR +#undef glGetObjectLabelKHR +#undef glGetObjectPtrLabelKHR +#undef glGetPointervKHR +#undef glObjectLabelKHR +#undef glObjectPtrLabelKHR +#undef glPopDebugGroupKHR +#undef glPushDebugGroupKHR +#undef glGetGraphicsResetStatusKHR +#undef glGetnUniformfvKHR +#undef glGetnUniformivKHR +#undef glGetnUniformuivKHR +#undef glReadnPixelsKHR +#undef glDrawBuffersNV +#undef glDrawArraysInstancedNV +#undef glDrawElementsInstancedNV +#undef glBlitFramebufferNV +#undef glRenderbufferStorageMultisampleNV +#undef glVertexAttribDivisorNV +#undef glPolygonModeNV +#undef glReadBufferNV +#undef glGetBufferPointervOES +#undef glMapBufferOES +#undef glUnmapBufferOES +#undef glCompressedTexImage3DOES +#undef glCompressedTexSubImage3DOES +#undef glCopyTexSubImage3DOES +#undef glFramebufferTexture3DOES +#undef glTexImage3DOES +#undef glTexSubImage3DOES +#undef glBindVertexArrayOES +#undef glDeleteVertexArraysOES +#undef glGenVertexArraysOES +#undef glIsVertexArrayOES + +#include + +void flextGLInit() { + + /* GL_ANGLE_framebuffer_blit */ + #if GL_ANGLE_framebuffer_blit + flextglBlitFramebufferANGLE = reinterpret_cast(glBlitFramebufferANGLE); + #endif + + /* GL_ANGLE_framebuffer_multisample */ + #if GL_ANGLE_framebuffer_multisample + flextglRenderbufferStorageMultisampleANGLE = reinterpret_cast(glRenderbufferStorageMultisampleANGLE); + #endif + + /* GL_ANGLE_instanced_arrays */ + #if GL_ANGLE_instanced_arrays + flextglDrawArraysInstancedANGLE = reinterpret_cast(glDrawArraysInstancedANGLE); + flextglDrawElementsInstancedANGLE = reinterpret_cast(glDrawElementsInstancedANGLE); + flextglVertexAttribDivisorANGLE = reinterpret_cast(glVertexAttribDivisorANGLE); + #endif + + /* GL_APPLE_framebuffer_multisample */ + #if GL_APPLE_framebuffer_multisample + flextglRenderbufferStorageMultisampleAPPLE = reinterpret_cast(glRenderbufferStorageMultisampleAPPLE); + flextglResolveMultisampleFramebufferAPPLE = reinterpret_cast(glResolveMultisampleFramebufferAPPLE); + #endif + + /* GL_EXT_debug_label */ + #if GL_EXT_debug_label + flextglGetObjectLabelEXT = reinterpret_cast(glGetObjectLabelEXT); + flextglLabelObjectEXT = reinterpret_cast(glLabelObjectEXT); + #endif + + /* GL_EXT_debug_marker */ + #if GL_EXT_debug_marker + flextglInsertEventMarkerEXT = reinterpret_cast(glInsertEventMarkerEXT); + flextglPopGroupMarkerEXT = reinterpret_cast(glPopGroupMarkerEXT); + flextglPushGroupMarkerEXT = reinterpret_cast(glPushGroupMarkerEXT); + #endif + + /* GL_EXT_discard_framebuffer */ + #if GL_EXT_discard_framebuffer + flextglDiscardFramebufferEXT = reinterpret_cast(glDiscardFramebufferEXT); + #endif + + /* GL_EXT_disjoint_timer_query */ + #if GL_EXT_disjoint_timer_query + flextglGetQueryObjecti64vEXT = reinterpret_cast(glGetQueryObjecti64vEXT); + flextglGetQueryObjectivEXT = reinterpret_cast(glGetQueryObjectivEXT); + flextglGetQueryObjectui64vEXT = reinterpret_cast(glGetQueryObjectui64vEXT); + flextglQueryCounterEXT = reinterpret_cast(glQueryCounterEXT); + #endif + + /* GL_EXT_draw_buffers */ + #if GL_EXT_draw_buffers + flextglDrawBuffersEXT = reinterpret_cast(glDrawBuffersEXT); + #endif + + /* GL_EXT_draw_buffers_indexed */ + #if GL_EXT_draw_buffers_indexed + flextglBlendEquationSeparateiEXT = reinterpret_cast(glBlendEquationSeparateiEXT); + flextglBlendEquationiEXT = reinterpret_cast(glBlendEquationiEXT); + flextglBlendFuncSeparateiEXT = reinterpret_cast(glBlendFuncSeparateiEXT); + flextglBlendFunciEXT = reinterpret_cast(glBlendFunciEXT); + flextglColorMaskiEXT = reinterpret_cast(glColorMaskiEXT); + flextglDisableiEXT = reinterpret_cast(glDisableiEXT); + flextglEnableiEXT = reinterpret_cast(glEnableiEXT); + flextglIsEnablediEXT = reinterpret_cast(glIsEnablediEXT); + #endif + + /* GL_EXT_instanced_arrays */ + #if GL_EXT_instanced_arrays + flextglDrawArraysInstancedEXT = reinterpret_cast(glDrawArraysInstancedEXT); + flextglDrawElementsInstancedEXT = reinterpret_cast(glDrawElementsInstancedEXT); + flextglVertexAttribDivisorEXT = reinterpret_cast(glVertexAttribDivisorEXT); + #endif + + /* GL_EXT_map_buffer_range */ + #if GL_EXT_map_buffer_range + flextglFlushMappedBufferRangeEXT = reinterpret_cast(glFlushMappedBufferRangeEXT); + flextglMapBufferRangeEXT = reinterpret_cast(glMapBufferRangeEXT); + #endif + + /* GL_EXT_multi_draw_arrays */ + #if GL_EXT_multi_draw_arrays + flextglMultiDrawArraysEXT = reinterpret_cast(glMultiDrawArraysEXT); + flextglMultiDrawElementsEXT = reinterpret_cast(glMultiDrawElementsEXT); + #endif + + /* GL_EXT_multisampled_render_to_texture */ + #if GL_EXT_multisampled_render_to_texture + flextglFramebufferTexture2DMultisampleEXT = reinterpret_cast(glFramebufferTexture2DMultisampleEXT); + flextglRenderbufferStorageMultisampleEXT = reinterpret_cast(glRenderbufferStorageMultisampleEXT); + #endif + + /* GL_EXT_occlusion_query_boolean */ + #if GL_EXT_occlusion_query_boolean + flextglBeginQueryEXT = reinterpret_cast(glBeginQueryEXT); + flextglDeleteQueriesEXT = reinterpret_cast(glDeleteQueriesEXT); + flextglEndQueryEXT = reinterpret_cast(glEndQueryEXT); + flextglGenQueriesEXT = reinterpret_cast(glGenQueriesEXT); + flextglGetQueryObjectuivEXT = reinterpret_cast(glGetQueryObjectuivEXT); + flextglGetQueryivEXT = reinterpret_cast(glGetQueryivEXT); + flextglIsQueryEXT = reinterpret_cast(glIsQueryEXT); + #endif + + /* GL_EXT_robustness */ + #if GL_EXT_robustness + flextglGetGraphicsResetStatusEXT = reinterpret_cast(glGetGraphicsResetStatusEXT); + flextglGetnUniformfvEXT = reinterpret_cast(glGetnUniformfvEXT); + flextglGetnUniformivEXT = reinterpret_cast(glGetnUniformivEXT); + flextglReadnPixelsEXT = reinterpret_cast(glReadnPixelsEXT); + #endif + + /* GL_EXT_separate_shader_objects */ + #if GL_EXT_separate_shader_objects + flextglActiveShaderProgramEXT = reinterpret_cast(glActiveShaderProgramEXT); + flextglBindProgramPipelineEXT = reinterpret_cast(glBindProgramPipelineEXT); + flextglCreateShaderProgramvEXT = reinterpret_cast(glCreateShaderProgramvEXT); + flextglDeleteProgramPipelinesEXT = reinterpret_cast(glDeleteProgramPipelinesEXT); + flextglGenProgramPipelinesEXT = reinterpret_cast(glGenProgramPipelinesEXT); + flextglGetProgramPipelineInfoLogEXT = reinterpret_cast(glGetProgramPipelineInfoLogEXT); + flextglGetProgramPipelineivEXT = reinterpret_cast(glGetProgramPipelineivEXT); + flextglIsProgramPipelineEXT = reinterpret_cast(glIsProgramPipelineEXT); + flextglProgramParameteriEXT = reinterpret_cast(glProgramParameteriEXT); + flextglProgramUniform1fEXT = reinterpret_cast(glProgramUniform1fEXT); + flextglProgramUniform1fvEXT = reinterpret_cast(glProgramUniform1fvEXT); + flextglProgramUniform1iEXT = reinterpret_cast(glProgramUniform1iEXT); + flextglProgramUniform1ivEXT = reinterpret_cast(glProgramUniform1ivEXT); + flextglProgramUniform1uiEXT = reinterpret_cast(glProgramUniform1uiEXT); + flextglProgramUniform1uivEXT = reinterpret_cast(glProgramUniform1uivEXT); + flextglProgramUniform2fEXT = reinterpret_cast(glProgramUniform2fEXT); + flextglProgramUniform2fvEXT = reinterpret_cast(glProgramUniform2fvEXT); + flextglProgramUniform2iEXT = reinterpret_cast(glProgramUniform2iEXT); + flextglProgramUniform2ivEXT = reinterpret_cast(glProgramUniform2ivEXT); + flextglProgramUniform2uiEXT = reinterpret_cast(glProgramUniform2uiEXT); + flextglProgramUniform2uivEXT = reinterpret_cast(glProgramUniform2uivEXT); + flextglProgramUniform3fEXT = reinterpret_cast(glProgramUniform3fEXT); + flextglProgramUniform3fvEXT = reinterpret_cast(glProgramUniform3fvEXT); + flextglProgramUniform3iEXT = reinterpret_cast(glProgramUniform3iEXT); + flextglProgramUniform3ivEXT = reinterpret_cast(glProgramUniform3ivEXT); + flextglProgramUniform3uiEXT = reinterpret_cast(glProgramUniform3uiEXT); + flextglProgramUniform3uivEXT = reinterpret_cast(glProgramUniform3uivEXT); + flextglProgramUniform4fEXT = reinterpret_cast(glProgramUniform4fEXT); + flextglProgramUniform4fvEXT = reinterpret_cast(glProgramUniform4fvEXT); + flextglProgramUniform4iEXT = reinterpret_cast(glProgramUniform4iEXT); + flextglProgramUniform4ivEXT = reinterpret_cast(glProgramUniform4ivEXT); + flextglProgramUniform4uiEXT = reinterpret_cast(glProgramUniform4uiEXT); + flextglProgramUniform4uivEXT = reinterpret_cast(glProgramUniform4uivEXT); + flextglProgramUniformMatrix2fvEXT = reinterpret_cast(glProgramUniformMatrix2fvEXT); + flextglProgramUniformMatrix2x3fvEXT = reinterpret_cast(glProgramUniformMatrix2x3fvEXT); + flextglProgramUniformMatrix2x4fvEXT = reinterpret_cast(glProgramUniformMatrix2x4fvEXT); + flextglProgramUniformMatrix3fvEXT = reinterpret_cast(glProgramUniformMatrix3fvEXT); + flextglProgramUniformMatrix3x2fvEXT = reinterpret_cast(glProgramUniformMatrix3x2fvEXT); + flextglProgramUniformMatrix3x4fvEXT = reinterpret_cast(glProgramUniformMatrix3x4fvEXT); + flextglProgramUniformMatrix4fvEXT = reinterpret_cast(glProgramUniformMatrix4fvEXT); + flextglProgramUniformMatrix4x2fvEXT = reinterpret_cast(glProgramUniformMatrix4x2fvEXT); + flextglProgramUniformMatrix4x3fvEXT = reinterpret_cast(glProgramUniformMatrix4x3fvEXT); + flextglUseProgramStagesEXT = reinterpret_cast(glUseProgramStagesEXT); + flextglValidateProgramPipelineEXT = reinterpret_cast(glValidateProgramPipelineEXT); + #endif + + /* GL_EXT_texture_border_clamp */ + #if GL_EXT_texture_border_clamp + flextglGetSamplerParameterIivEXT = reinterpret_cast(glGetSamplerParameterIivEXT); + flextglGetSamplerParameterIuivEXT = reinterpret_cast(glGetSamplerParameterIuivEXT); + flextglGetTexParameterIivEXT = reinterpret_cast(glGetTexParameterIivEXT); + flextglGetTexParameterIuivEXT = reinterpret_cast(glGetTexParameterIuivEXT); + flextglSamplerParameterIivEXT = reinterpret_cast(glSamplerParameterIivEXT); + flextglSamplerParameterIuivEXT = reinterpret_cast(glSamplerParameterIuivEXT); + flextglTexParameterIivEXT = reinterpret_cast(glTexParameterIivEXT); + flextglTexParameterIuivEXT = reinterpret_cast(glTexParameterIuivEXT); + #endif + + /* GL_EXT_texture_storage */ + #if GL_EXT_texture_storage + flextglTexStorage1DEXT = reinterpret_cast(glTexStorage1DEXT); + flextglTexStorage2DEXT = reinterpret_cast(glTexStorage2DEXT); + flextglTexStorage3DEXT = reinterpret_cast(glTexStorage3DEXT); + flextglTextureStorage1DEXT = reinterpret_cast(glTextureStorage1DEXT); + flextglTextureStorage2DEXT = reinterpret_cast(glTextureStorage2DEXT); + flextglTextureStorage3DEXT = reinterpret_cast(glTextureStorage3DEXT); + #endif + + /* GL_KHR_blend_equation_advanced */ + #if GL_KHR_blend_equation_advanced + flextglBlendBarrierKHR = reinterpret_cast(glBlendBarrierKHR); + #endif + + /* GL_KHR_debug */ + #if GL_KHR_debug + flextglDebugMessageCallbackKHR = reinterpret_cast(glDebugMessageCallbackKHR); + flextglDebugMessageControlKHR = reinterpret_cast(glDebugMessageControlKHR); + flextglDebugMessageInsertKHR = reinterpret_cast(glDebugMessageInsertKHR); + flextglGetDebugMessageLogKHR = reinterpret_cast(glGetDebugMessageLogKHR); + flextglGetObjectLabelKHR = reinterpret_cast(glGetObjectLabelKHR); + flextglGetObjectPtrLabelKHR = reinterpret_cast(glGetObjectPtrLabelKHR); + flextglGetPointervKHR = reinterpret_cast(glGetPointervKHR); + flextglObjectLabelKHR = reinterpret_cast(glObjectLabelKHR); + flextglObjectPtrLabelKHR = reinterpret_cast(glObjectPtrLabelKHR); + flextglPopDebugGroupKHR = reinterpret_cast(glPopDebugGroupKHR); + flextglPushDebugGroupKHR = reinterpret_cast(glPushDebugGroupKHR); + #endif + + /* GL_KHR_robustness */ + #if GL_KHR_robustness + flextglGetGraphicsResetStatusKHR = reinterpret_cast(glGetGraphicsResetStatusKHR); + flextglGetnUniformfvKHR = reinterpret_cast(glGetnUniformfvKHR); + flextglGetnUniformivKHR = reinterpret_cast(glGetnUniformivKHR); + flextglGetnUniformuivKHR = reinterpret_cast(glGetnUniformuivKHR); + flextglReadnPixelsKHR = reinterpret_cast(glReadnPixelsKHR); + #endif + + /* GL_NV_draw_buffers */ + #if GL_NV_draw_buffers + flextglDrawBuffersNV = reinterpret_cast(glDrawBuffersNV); + #endif + + /* GL_NV_draw_instanced */ + #if GL_NV_draw_instanced + flextglDrawArraysInstancedNV = reinterpret_cast(glDrawArraysInstancedNV); + flextglDrawElementsInstancedNV = reinterpret_cast(glDrawElementsInstancedNV); + #endif + + /* GL_NV_framebuffer_blit */ + #if GL_NV_framebuffer_blit + flextglBlitFramebufferNV = reinterpret_cast(glBlitFramebufferNV); + #endif + + /* GL_NV_framebuffer_multisample */ + #if GL_NV_framebuffer_multisample + flextglRenderbufferStorageMultisampleNV = reinterpret_cast(glRenderbufferStorageMultisampleNV); + #endif + + /* GL_NV_instanced_arrays */ + #if GL_NV_instanced_arrays + flextglVertexAttribDivisorNV = reinterpret_cast(glVertexAttribDivisorNV); + #endif + + /* GL_NV_polygon_mode */ + #if GL_NV_polygon_mode + flextglPolygonModeNV = reinterpret_cast(glPolygonModeNV); + #endif + + /* GL_NV_read_buffer */ + #if GL_NV_read_buffer + flextglReadBufferNV = reinterpret_cast(glReadBufferNV); + #endif + + /* GL_OES_mapbuffer */ + #if GL_OES_mapbuffer + flextglGetBufferPointervOES = reinterpret_cast(glGetBufferPointervOES); + flextglMapBufferOES = reinterpret_cast(glMapBufferOES); + flextglUnmapBufferOES = reinterpret_cast(glUnmapBufferOES); + #endif + + /* GL_OES_texture_3D */ + #if GL_OES_texture_3D + flextglCompressedTexImage3DOES = reinterpret_cast(glCompressedTexImage3DOES); + flextglCompressedTexSubImage3DOES = reinterpret_cast(glCompressedTexSubImage3DOES); + flextglCopyTexSubImage3DOES = reinterpret_cast(glCopyTexSubImage3DOES); + flextglFramebufferTexture3DOES = reinterpret_cast(glFramebufferTexture3DOES); + flextglTexImage3DOES = reinterpret_cast(glTexImage3DOES); + flextglTexSubImage3DOES = reinterpret_cast(glTexSubImage3DOES); + #endif + + /* GL_OES_vertex_array_object */ + #if GL_OES_vertex_array_object + flextglBindVertexArrayOES = reinterpret_cast(glBindVertexArrayOES); + flextglDeleteVertexArraysOES = reinterpret_cast(glDeleteVertexArraysOES); + flextglGenVertexArraysOES = reinterpret_cast(glGenVertexArraysOES); + flextglIsVertexArrayOES = reinterpret_cast(glIsVertexArrayOES); + #endif +} diff --git a/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp.template b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp.template new file mode 100644 index 000000000..2d5982016 --- /dev/null +++ b/src/MagnumExternal/OpenGL/GLES2/flextGLPlatformIOS.cpp.template @@ -0,0 +1,27 @@ +@require(passthru, functions, enums, options, version, extensions) +#include "flextGL.h" + +@for category,funcs in functions: +@if funcs and category not in ['ES_VERSION_2_0']: +@for f in funcs: +#undef gl@f.name +@end +@end +@end + +#include + +void flextGLInit() { + @for category,funcs in functions: + @if funcs and category not in ['ES_VERSION_2_0']: + + /* GL_@category */ + #if GL_@category + @for f in funcs: + flextgl@f.name = reinterpret_cast<@f.returntype\ +(APIENTRY*)(@f.param_type_list_string())>(gl@f.name); + @end + #endif + @end + @end +} diff --git a/src/MagnumExternal/OpenGL/GLES3/README.md b/src/MagnumExternal/OpenGL/GLES3/README.md index 4ab311da7..680618870 100644 --- a/src/MagnumExternal/OpenGL/GLES3/README.md +++ b/src/MagnumExternal/OpenGL/GLES3/README.md @@ -6,7 +6,8 @@ Call `flextGLgen.py` in this directory with the following arguments: .../flextGLgen.py -D . -t . extensions.txt -It will generate `flextGL.h` and `flextGL.cpp` files. +It will generate `flextGL.h`, `flextGL.cpp`, `flextGLPlatform.cpp` and +`flextGLPlatformIOS.cpp` files. Emscripten doesn't have the ability to manually load extension pointers, thus it has only header files: diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp new file mode 100644 index 000000000..ae8d7f1dd --- /dev/null +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp @@ -0,0 +1,457 @@ +#include "flextGL.h" + +#undef glActiveShaderProgram +#undef glBindImageTexture +#undef glBindProgramPipeline +#undef glBindVertexBuffer +#undef glCreateShaderProgramv +#undef glDeleteProgramPipelines +#undef glDispatchCompute +#undef glDispatchComputeIndirect +#undef glDrawArraysIndirect +#undef glDrawElementsIndirect +#undef glFramebufferParameteri +#undef glGenProgramPipelines +#undef glGetBooleani_v +#undef glGetFramebufferParameteriv +#undef glGetMultisamplefv +#undef glGetProgramInterfaceiv +#undef glGetProgramPipelineInfoLog +#undef glGetProgramPipelineiv +#undef glGetProgramResourceIndex +#undef glGetProgramResourceLocation +#undef glGetProgramResourceName +#undef glGetProgramResourceiv +#undef glGetTexLevelParameterfv +#undef glGetTexLevelParameteriv +#undef glIsProgramPipeline +#undef glMemoryBarrier +#undef glMemoryBarrierByRegion +#undef glProgramUniform1f +#undef glProgramUniform1fv +#undef glProgramUniform1i +#undef glProgramUniform1iv +#undef glProgramUniform1ui +#undef glProgramUniform1uiv +#undef glProgramUniform2f +#undef glProgramUniform2fv +#undef glProgramUniform2i +#undef glProgramUniform2iv +#undef glProgramUniform2ui +#undef glProgramUniform2uiv +#undef glProgramUniform3f +#undef glProgramUniform3fv +#undef glProgramUniform3i +#undef glProgramUniform3iv +#undef glProgramUniform3ui +#undef glProgramUniform3uiv +#undef glProgramUniform4f +#undef glProgramUniform4fv +#undef glProgramUniform4i +#undef glProgramUniform4iv +#undef glProgramUniform4ui +#undef glProgramUniform4uiv +#undef glProgramUniformMatrix2fv +#undef glProgramUniformMatrix2x3fv +#undef glProgramUniformMatrix2x4fv +#undef glProgramUniformMatrix3fv +#undef glProgramUniformMatrix3x2fv +#undef glProgramUniformMatrix3x4fv +#undef glProgramUniformMatrix4fv +#undef glProgramUniformMatrix4x2fv +#undef glProgramUniformMatrix4x3fv +#undef glSampleMaski +#undef glTexStorage2DMultisample +#undef glUseProgramStages +#undef glValidateProgramPipeline +#undef glVertexAttribBinding +#undef glVertexAttribFormat +#undef glVertexAttribIFormat +#undef glVertexBindingDivisor +#undef glCopyImageSubDataEXT +#undef glGetObjectLabelEXT +#undef glLabelObjectEXT +#undef glInsertEventMarkerEXT +#undef glPopGroupMarkerEXT +#undef glPushGroupMarkerEXT +#undef glBeginQueryEXT +#undef glDeleteQueriesEXT +#undef glEndQueryEXT +#undef glGenQueriesEXT +#undef glGetQueryObjecti64vEXT +#undef glGetQueryObjectivEXT +#undef glGetQueryObjectui64vEXT +#undef glGetQueryObjectuivEXT +#undef glGetQueryivEXT +#undef glIsQueryEXT +#undef glQueryCounterEXT +#undef glBlendEquationSeparateiEXT +#undef glBlendEquationiEXT +#undef glBlendFuncSeparateiEXT +#undef glBlendFunciEXT +#undef glColorMaskiEXT +#undef glDisableiEXT +#undef glEnableiEXT +#undef glIsEnablediEXT +#undef glFramebufferTextureEXT +#undef glMultiDrawArraysEXT +#undef glMultiDrawElementsEXT +#undef glFramebufferTexture2DMultisampleEXT +#undef glRenderbufferStorageMultisampleEXT +#undef glPrimitiveBoundingBoxEXT +#undef glGetGraphicsResetStatusEXT +#undef glGetnUniformfvEXT +#undef glGetnUniformivEXT +#undef glReadnPixelsEXT +#undef glActiveShaderProgramEXT +#undef glBindProgramPipelineEXT +#undef glCreateShaderProgramvEXT +#undef glDeleteProgramPipelinesEXT +#undef glGenProgramPipelinesEXT +#undef glGetProgramPipelineInfoLogEXT +#undef glGetProgramPipelineivEXT +#undef glIsProgramPipelineEXT +#undef glProgramParameteriEXT +#undef glProgramUniform1fEXT +#undef glProgramUniform1fvEXT +#undef glProgramUniform1iEXT +#undef glProgramUniform1ivEXT +#undef glProgramUniform1uiEXT +#undef glProgramUniform1uivEXT +#undef glProgramUniform2fEXT +#undef glProgramUniform2fvEXT +#undef glProgramUniform2iEXT +#undef glProgramUniform2ivEXT +#undef glProgramUniform2uiEXT +#undef glProgramUniform2uivEXT +#undef glProgramUniform3fEXT +#undef glProgramUniform3fvEXT +#undef glProgramUniform3iEXT +#undef glProgramUniform3ivEXT +#undef glProgramUniform3uiEXT +#undef glProgramUniform3uivEXT +#undef glProgramUniform4fEXT +#undef glProgramUniform4fvEXT +#undef glProgramUniform4iEXT +#undef glProgramUniform4ivEXT +#undef glProgramUniform4uiEXT +#undef glProgramUniform4uivEXT +#undef glProgramUniformMatrix2fvEXT +#undef glProgramUniformMatrix2x3fvEXT +#undef glProgramUniformMatrix2x4fvEXT +#undef glProgramUniformMatrix3fvEXT +#undef glProgramUniformMatrix3x2fvEXT +#undef glProgramUniformMatrix3x4fvEXT +#undef glProgramUniformMatrix4fvEXT +#undef glProgramUniformMatrix4x2fvEXT +#undef glProgramUniformMatrix4x3fvEXT +#undef glUseProgramStagesEXT +#undef glValidateProgramPipelineEXT +#undef glPatchParameteriEXT +#undef glGetSamplerParameterIivEXT +#undef glGetSamplerParameterIuivEXT +#undef glGetTexParameterIivEXT +#undef glGetTexParameterIuivEXT +#undef glSamplerParameterIivEXT +#undef glSamplerParameterIuivEXT +#undef glTexParameterIivEXT +#undef glTexParameterIuivEXT +#undef glTexBufferEXT +#undef glTexBufferRangeEXT +#undef glBlendBarrierKHR +#undef glDebugMessageCallbackKHR +#undef glDebugMessageControlKHR +#undef glDebugMessageInsertKHR +#undef glGetDebugMessageLogKHR +#undef glGetObjectLabelKHR +#undef glGetObjectPtrLabelKHR +#undef glGetPointervKHR +#undef glObjectLabelKHR +#undef glObjectPtrLabelKHR +#undef glPopDebugGroupKHR +#undef glPushDebugGroupKHR +#undef glGetGraphicsResetStatusKHR +#undef glGetnUniformfvKHR +#undef glGetnUniformivKHR +#undef glGetnUniformuivKHR +#undef glReadnPixelsKHR +#undef glPolygonModeNV +#undef glGetBufferPointervOES +#undef glMapBufferOES +#undef glUnmapBufferOES +#undef glMinSampleShadingOES +#undef glTexStorage3DMultisampleOES + +#include + +void flextGLInit() { + + /* GL_ES_VERSION_3_1 */ + #if GL_ES_VERSION_3_1 + flextglActiveShaderProgram = reinterpret_cast(glActiveShaderProgram); + flextglBindImageTexture = reinterpret_cast(glBindImageTexture); + flextglBindProgramPipeline = reinterpret_cast(glBindProgramPipeline); + flextglBindVertexBuffer = reinterpret_cast(glBindVertexBuffer); + flextglCreateShaderProgramv = reinterpret_cast(glCreateShaderProgramv); + flextglDeleteProgramPipelines = reinterpret_cast(glDeleteProgramPipelines); + flextglDispatchCompute = reinterpret_cast(glDispatchCompute); + flextglDispatchComputeIndirect = reinterpret_cast(glDispatchComputeIndirect); + flextglDrawArraysIndirect = reinterpret_cast(glDrawArraysIndirect); + flextglDrawElementsIndirect = reinterpret_cast(glDrawElementsIndirect); + flextglFramebufferParameteri = reinterpret_cast(glFramebufferParameteri); + flextglGenProgramPipelines = reinterpret_cast(glGenProgramPipelines); + flextglGetBooleani_v = reinterpret_cast(glGetBooleani_v); + flextglGetFramebufferParameteriv = reinterpret_cast(glGetFramebufferParameteriv); + flextglGetMultisamplefv = reinterpret_cast(glGetMultisamplefv); + flextglGetProgramInterfaceiv = reinterpret_cast(glGetProgramInterfaceiv); + flextglGetProgramPipelineInfoLog = reinterpret_cast(glGetProgramPipelineInfoLog); + flextglGetProgramPipelineiv = reinterpret_cast(glGetProgramPipelineiv); + flextglGetProgramResourceIndex = reinterpret_cast(glGetProgramResourceIndex); + flextglGetProgramResourceLocation = reinterpret_cast(glGetProgramResourceLocation); + flextglGetProgramResourceName = reinterpret_cast(glGetProgramResourceName); + flextglGetProgramResourceiv = reinterpret_cast(glGetProgramResourceiv); + flextglGetTexLevelParameterfv = reinterpret_cast(glGetTexLevelParameterfv); + flextglGetTexLevelParameteriv = reinterpret_cast(glGetTexLevelParameteriv); + flextglIsProgramPipeline = reinterpret_cast(glIsProgramPipeline); + flextglMemoryBarrier = reinterpret_cast(glMemoryBarrier); + flextglMemoryBarrierByRegion = reinterpret_cast(glMemoryBarrierByRegion); + flextglProgramUniform1f = reinterpret_cast(glProgramUniform1f); + flextglProgramUniform1fv = reinterpret_cast(glProgramUniform1fv); + flextglProgramUniform1i = reinterpret_cast(glProgramUniform1i); + flextglProgramUniform1iv = reinterpret_cast(glProgramUniform1iv); + flextglProgramUniform1ui = reinterpret_cast(glProgramUniform1ui); + flextglProgramUniform1uiv = reinterpret_cast(glProgramUniform1uiv); + flextglProgramUniform2f = reinterpret_cast(glProgramUniform2f); + flextglProgramUniform2fv = reinterpret_cast(glProgramUniform2fv); + flextglProgramUniform2i = reinterpret_cast(glProgramUniform2i); + flextglProgramUniform2iv = reinterpret_cast(glProgramUniform2iv); + flextglProgramUniform2ui = reinterpret_cast(glProgramUniform2ui); + flextglProgramUniform2uiv = reinterpret_cast(glProgramUniform2uiv); + flextglProgramUniform3f = reinterpret_cast(glProgramUniform3f); + flextglProgramUniform3fv = reinterpret_cast(glProgramUniform3fv); + flextglProgramUniform3i = reinterpret_cast(glProgramUniform3i); + flextglProgramUniform3iv = reinterpret_cast(glProgramUniform3iv); + flextglProgramUniform3ui = reinterpret_cast(glProgramUniform3ui); + flextglProgramUniform3uiv = reinterpret_cast(glProgramUniform3uiv); + flextglProgramUniform4f = reinterpret_cast(glProgramUniform4f); + flextglProgramUniform4fv = reinterpret_cast(glProgramUniform4fv); + flextglProgramUniform4i = reinterpret_cast(glProgramUniform4i); + flextglProgramUniform4iv = reinterpret_cast(glProgramUniform4iv); + flextglProgramUniform4ui = reinterpret_cast(glProgramUniform4ui); + flextglProgramUniform4uiv = reinterpret_cast(glProgramUniform4uiv); + flextglProgramUniformMatrix2fv = reinterpret_cast(glProgramUniformMatrix2fv); + flextglProgramUniformMatrix2x3fv = reinterpret_cast(glProgramUniformMatrix2x3fv); + flextglProgramUniformMatrix2x4fv = reinterpret_cast(glProgramUniformMatrix2x4fv); + flextglProgramUniformMatrix3fv = reinterpret_cast(glProgramUniformMatrix3fv); + flextglProgramUniformMatrix3x2fv = reinterpret_cast(glProgramUniformMatrix3x2fv); + flextglProgramUniformMatrix3x4fv = reinterpret_cast(glProgramUniformMatrix3x4fv); + flextglProgramUniformMatrix4fv = reinterpret_cast(glProgramUniformMatrix4fv); + flextglProgramUniformMatrix4x2fv = reinterpret_cast(glProgramUniformMatrix4x2fv); + flextglProgramUniformMatrix4x3fv = reinterpret_cast(glProgramUniformMatrix4x3fv); + flextglSampleMaski = reinterpret_cast(glSampleMaski); + flextglTexStorage2DMultisample = reinterpret_cast(glTexStorage2DMultisample); + flextglUseProgramStages = reinterpret_cast(glUseProgramStages); + flextglValidateProgramPipeline = reinterpret_cast(glValidateProgramPipeline); + flextglVertexAttribBinding = reinterpret_cast(glVertexAttribBinding); + flextglVertexAttribFormat = reinterpret_cast(glVertexAttribFormat); + flextglVertexAttribIFormat = reinterpret_cast(glVertexAttribIFormat); + flextglVertexBindingDivisor = reinterpret_cast(glVertexBindingDivisor); + #endif + + /* GL_EXT_copy_image */ + #if GL_EXT_copy_image + flextglCopyImageSubDataEXT = reinterpret_cast(glCopyImageSubDataEXT); + #endif + + /* GL_EXT_debug_label */ + #if GL_EXT_debug_label + flextglGetObjectLabelEXT = reinterpret_cast(glGetObjectLabelEXT); + flextglLabelObjectEXT = reinterpret_cast(glLabelObjectEXT); + #endif + + /* GL_EXT_debug_marker */ + #if GL_EXT_debug_marker + flextglInsertEventMarkerEXT = reinterpret_cast(glInsertEventMarkerEXT); + flextglPopGroupMarkerEXT = reinterpret_cast(glPopGroupMarkerEXT); + flextglPushGroupMarkerEXT = reinterpret_cast(glPushGroupMarkerEXT); + #endif + + /* GL_EXT_disjoint_timer_query */ + #if GL_EXT_disjoint_timer_query + flextglBeginQueryEXT = reinterpret_cast(glBeginQueryEXT); + flextglDeleteQueriesEXT = reinterpret_cast(glDeleteQueriesEXT); + flextglEndQueryEXT = reinterpret_cast(glEndQueryEXT); + flextglGenQueriesEXT = reinterpret_cast(glGenQueriesEXT); + flextglGetQueryObjecti64vEXT = reinterpret_cast(glGetQueryObjecti64vEXT); + flextglGetQueryObjectivEXT = reinterpret_cast(glGetQueryObjectivEXT); + flextglGetQueryObjectui64vEXT = reinterpret_cast(glGetQueryObjectui64vEXT); + flextglGetQueryObjectuivEXT = reinterpret_cast(glGetQueryObjectuivEXT); + flextglGetQueryivEXT = reinterpret_cast(glGetQueryivEXT); + flextglIsQueryEXT = reinterpret_cast(glIsQueryEXT); + flextglQueryCounterEXT = reinterpret_cast(glQueryCounterEXT); + #endif + + /* GL_EXT_draw_buffers_indexed */ + #if GL_EXT_draw_buffers_indexed + flextglBlendEquationSeparateiEXT = reinterpret_cast(glBlendEquationSeparateiEXT); + flextglBlendEquationiEXT = reinterpret_cast(glBlendEquationiEXT); + flextglBlendFuncSeparateiEXT = reinterpret_cast(glBlendFuncSeparateiEXT); + flextglBlendFunciEXT = reinterpret_cast(glBlendFunciEXT); + flextglColorMaskiEXT = reinterpret_cast(glColorMaskiEXT); + flextglDisableiEXT = reinterpret_cast(glDisableiEXT); + flextglEnableiEXT = reinterpret_cast(glEnableiEXT); + flextglIsEnablediEXT = reinterpret_cast(glIsEnablediEXT); + #endif + + /* GL_EXT_geometry_shader */ + #if GL_EXT_geometry_shader + flextglFramebufferTextureEXT = reinterpret_cast(glFramebufferTextureEXT); + #endif + + /* GL_EXT_multi_draw_arrays */ + #if GL_EXT_multi_draw_arrays + flextglMultiDrawArraysEXT = reinterpret_cast(glMultiDrawArraysEXT); + flextglMultiDrawElementsEXT = reinterpret_cast(glMultiDrawElementsEXT); + #endif + + /* GL_EXT_multisampled_render_to_texture */ + #if GL_EXT_multisampled_render_to_texture + flextglFramebufferTexture2DMultisampleEXT = reinterpret_cast(glFramebufferTexture2DMultisampleEXT); + flextglRenderbufferStorageMultisampleEXT = reinterpret_cast(glRenderbufferStorageMultisampleEXT); + #endif + + /* GL_EXT_primitive_bounding_box */ + #if GL_EXT_primitive_bounding_box + flextglPrimitiveBoundingBoxEXT = reinterpret_cast(glPrimitiveBoundingBoxEXT); + #endif + + /* GL_EXT_robustness */ + #if GL_EXT_robustness + flextglGetGraphicsResetStatusEXT = reinterpret_cast(glGetGraphicsResetStatusEXT); + flextglGetnUniformfvEXT = reinterpret_cast(glGetnUniformfvEXT); + flextglGetnUniformivEXT = reinterpret_cast(glGetnUniformivEXT); + flextglReadnPixelsEXT = reinterpret_cast(glReadnPixelsEXT); + #endif + + /* GL_EXT_separate_shader_objects */ + #if GL_EXT_separate_shader_objects + flextglActiveShaderProgramEXT = reinterpret_cast(glActiveShaderProgramEXT); + flextglBindProgramPipelineEXT = reinterpret_cast(glBindProgramPipelineEXT); + flextglCreateShaderProgramvEXT = reinterpret_cast(glCreateShaderProgramvEXT); + flextglDeleteProgramPipelinesEXT = reinterpret_cast(glDeleteProgramPipelinesEXT); + flextglGenProgramPipelinesEXT = reinterpret_cast(glGenProgramPipelinesEXT); + flextglGetProgramPipelineInfoLogEXT = reinterpret_cast(glGetProgramPipelineInfoLogEXT); + flextglGetProgramPipelineivEXT = reinterpret_cast(glGetProgramPipelineivEXT); + flextglIsProgramPipelineEXT = reinterpret_cast(glIsProgramPipelineEXT); + flextglProgramParameteriEXT = reinterpret_cast(glProgramParameteriEXT); + flextglProgramUniform1fEXT = reinterpret_cast(glProgramUniform1fEXT); + flextglProgramUniform1fvEXT = reinterpret_cast(glProgramUniform1fvEXT); + flextglProgramUniform1iEXT = reinterpret_cast(glProgramUniform1iEXT); + flextglProgramUniform1ivEXT = reinterpret_cast(glProgramUniform1ivEXT); + flextglProgramUniform1uiEXT = reinterpret_cast(glProgramUniform1uiEXT); + flextglProgramUniform1uivEXT = reinterpret_cast(glProgramUniform1uivEXT); + flextglProgramUniform2fEXT = reinterpret_cast(glProgramUniform2fEXT); + flextglProgramUniform2fvEXT = reinterpret_cast(glProgramUniform2fvEXT); + flextglProgramUniform2iEXT = reinterpret_cast(glProgramUniform2iEXT); + flextglProgramUniform2ivEXT = reinterpret_cast(glProgramUniform2ivEXT); + flextglProgramUniform2uiEXT = reinterpret_cast(glProgramUniform2uiEXT); + flextglProgramUniform2uivEXT = reinterpret_cast(glProgramUniform2uivEXT); + flextglProgramUniform3fEXT = reinterpret_cast(glProgramUniform3fEXT); + flextglProgramUniform3fvEXT = reinterpret_cast(glProgramUniform3fvEXT); + flextglProgramUniform3iEXT = reinterpret_cast(glProgramUniform3iEXT); + flextglProgramUniform3ivEXT = reinterpret_cast(glProgramUniform3ivEXT); + flextglProgramUniform3uiEXT = reinterpret_cast(glProgramUniform3uiEXT); + flextglProgramUniform3uivEXT = reinterpret_cast(glProgramUniform3uivEXT); + flextglProgramUniform4fEXT = reinterpret_cast(glProgramUniform4fEXT); + flextglProgramUniform4fvEXT = reinterpret_cast(glProgramUniform4fvEXT); + flextglProgramUniform4iEXT = reinterpret_cast(glProgramUniform4iEXT); + flextglProgramUniform4ivEXT = reinterpret_cast(glProgramUniform4ivEXT); + flextglProgramUniform4uiEXT = reinterpret_cast(glProgramUniform4uiEXT); + flextglProgramUniform4uivEXT = reinterpret_cast(glProgramUniform4uivEXT); + flextglProgramUniformMatrix2fvEXT = reinterpret_cast(glProgramUniformMatrix2fvEXT); + flextglProgramUniformMatrix2x3fvEXT = reinterpret_cast(glProgramUniformMatrix2x3fvEXT); + flextglProgramUniformMatrix2x4fvEXT = reinterpret_cast(glProgramUniformMatrix2x4fvEXT); + flextglProgramUniformMatrix3fvEXT = reinterpret_cast(glProgramUniformMatrix3fvEXT); + flextglProgramUniformMatrix3x2fvEXT = reinterpret_cast(glProgramUniformMatrix3x2fvEXT); + flextglProgramUniformMatrix3x4fvEXT = reinterpret_cast(glProgramUniformMatrix3x4fvEXT); + flextglProgramUniformMatrix4fvEXT = reinterpret_cast(glProgramUniformMatrix4fvEXT); + flextglProgramUniformMatrix4x2fvEXT = reinterpret_cast(glProgramUniformMatrix4x2fvEXT); + flextglProgramUniformMatrix4x3fvEXT = reinterpret_cast(glProgramUniformMatrix4x3fvEXT); + flextglUseProgramStagesEXT = reinterpret_cast(glUseProgramStagesEXT); + flextglValidateProgramPipelineEXT = reinterpret_cast(glValidateProgramPipelineEXT); + #endif + + /* GL_EXT_tessellation_shader */ + #if GL_EXT_tessellation_shader + flextglPatchParameteriEXT = reinterpret_cast(glPatchParameteriEXT); + #endif + + /* GL_EXT_texture_border_clamp */ + #if GL_EXT_texture_border_clamp + flextglGetSamplerParameterIivEXT = reinterpret_cast(glGetSamplerParameterIivEXT); + flextglGetSamplerParameterIuivEXT = reinterpret_cast(glGetSamplerParameterIuivEXT); + flextglGetTexParameterIivEXT = reinterpret_cast(glGetTexParameterIivEXT); + flextglGetTexParameterIuivEXT = reinterpret_cast(glGetTexParameterIuivEXT); + flextglSamplerParameterIivEXT = reinterpret_cast(glSamplerParameterIivEXT); + flextglSamplerParameterIuivEXT = reinterpret_cast(glSamplerParameterIuivEXT); + flextglTexParameterIivEXT = reinterpret_cast(glTexParameterIivEXT); + flextglTexParameterIuivEXT = reinterpret_cast(glTexParameterIuivEXT); + #endif + + /* GL_EXT_texture_buffer */ + #if GL_EXT_texture_buffer + flextglTexBufferEXT = reinterpret_cast(glTexBufferEXT); + flextglTexBufferRangeEXT = reinterpret_cast(glTexBufferRangeEXT); + #endif + + /* GL_KHR_blend_equation_advanced */ + #if GL_KHR_blend_equation_advanced + flextglBlendBarrierKHR = reinterpret_cast(glBlendBarrierKHR); + #endif + + /* GL_KHR_debug */ + #if GL_KHR_debug + flextglDebugMessageCallbackKHR = reinterpret_cast(glDebugMessageCallbackKHR); + flextglDebugMessageControlKHR = reinterpret_cast(glDebugMessageControlKHR); + flextglDebugMessageInsertKHR = reinterpret_cast(glDebugMessageInsertKHR); + flextglGetDebugMessageLogKHR = reinterpret_cast(glGetDebugMessageLogKHR); + flextglGetObjectLabelKHR = reinterpret_cast(glGetObjectLabelKHR); + flextglGetObjectPtrLabelKHR = reinterpret_cast(glGetObjectPtrLabelKHR); + flextglGetPointervKHR = reinterpret_cast(glGetPointervKHR); + flextglObjectLabelKHR = reinterpret_cast(glObjectLabelKHR); + flextglObjectPtrLabelKHR = reinterpret_cast(glObjectPtrLabelKHR); + flextglPopDebugGroupKHR = reinterpret_cast(glPopDebugGroupKHR); + flextglPushDebugGroupKHR = reinterpret_cast(glPushDebugGroupKHR); + #endif + + /* GL_KHR_robustness */ + #if GL_KHR_robustness + flextglGetGraphicsResetStatusKHR = reinterpret_cast(glGetGraphicsResetStatusKHR); + flextglGetnUniformfvKHR = reinterpret_cast(glGetnUniformfvKHR); + flextglGetnUniformivKHR = reinterpret_cast(glGetnUniformivKHR); + flextglGetnUniformuivKHR = reinterpret_cast(glGetnUniformuivKHR); + flextglReadnPixelsKHR = reinterpret_cast(glReadnPixelsKHR); + #endif + + /* GL_NV_polygon_mode */ + #if GL_NV_polygon_mode + flextglPolygonModeNV = reinterpret_cast(glPolygonModeNV); + #endif + + /* GL_OES_mapbuffer */ + #if GL_OES_mapbuffer + flextglGetBufferPointervOES = reinterpret_cast(glGetBufferPointervOES); + flextglMapBufferOES = reinterpret_cast(glMapBufferOES); + flextglUnmapBufferOES = reinterpret_cast(glUnmapBufferOES); + #endif + + /* GL_OES_sample_shading */ + #if GL_OES_sample_shading + flextglMinSampleShadingOES = reinterpret_cast(glMinSampleShadingOES); + #endif + + /* GL_OES_texture_storage_multisample_2d_array */ + #if GL_OES_texture_storage_multisample_2d_array + flextglTexStorage3DMultisampleOES = reinterpret_cast(glTexStorage3DMultisampleOES); + #endif +} diff --git a/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp.template b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp.template new file mode 100644 index 000000000..98a29513b --- /dev/null +++ b/src/MagnumExternal/OpenGL/GLES3/flextGLPlatformIOS.cpp.template @@ -0,0 +1,27 @@ +@require(passthru, functions, enums, options, version, extensions) +#include "flextGL.h" + +@for category,funcs in functions: +@if funcs and category not in ['ES_VERSION_2_0', 'ES_VERSION_3_0']: +@for f in funcs: +#undef gl@f.name +@end +@end +@end + +#include + +void flextGLInit() { + @for category,funcs in functions: + @if funcs and category not in ['ES_VERSION_2_0', 'ES_VERSION_3_0']: + + /* GL_@category */ + #if GL_@category + @for f in funcs: + flextgl@f.name = reinterpret_cast<@f.returntype\ +(APIENTRY*)(@f.param_type_list_string())>(gl@f.name); + @end + #endif + @end + @end +}