diff --git a/include/Nazara/OpenGLRenderer/Wrapper/CoreFunctions.hpp b/include/Nazara/OpenGLRenderer/Wrapper/CoreFunctions.hpp index f3faa890d..372e230fd 100644 --- a/include/Nazara/OpenGLRenderer/Wrapper/CoreFunctions.hpp +++ b/include/Nazara/OpenGLRenderer/Wrapper/CoreFunctions.hpp @@ -19,9 +19,9 @@ #define GL_FILL 0x1B02 #define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551 #define GL_SPIR_V_BINARY_ARB 0x9552 -typedef void (GL_APIENTRYP PFNGLPOLYGONMODEPROC) (GLenum face, GLenum mode); -typedef void (GL_APIENTRYP PFNGLSPECIALIZESHADERARBPROC) (GLuint shader, const GLchar* pEntryPoint, GLuint numSpecializationConstants, const GLuint* pConstantIndex, const GLuint* pConstantValue); typedef void (GL_APIENTRYP PFNGLDRAWBUFFERPROC) (GLenum buf); +typedef void (GL_APIENTRYP PFNGLPOLYGONMODEPROC) (GLenum face, GLenum mode); +typedef void (GL_APIENTRYP PFNGLSPECIALIZESHADERPROC) (GLuint shader, const GLchar* pEntryPoint, GLuint numSpecializationConstants, const GLuint* pConstantIndex, const GLuint* pConstantValue); // OpenGL core #define NAZARA_OPENGLRENDERER_FOREACH_GLES_FUNC(cb, extCb) \ @@ -169,22 +169,19 @@ typedef void (GL_APIENTRYP PFNGLDRAWBUFFERPROC) (GLenum buf); cb(glVertexAttribIPointer, PFNGLVERTEXATTRIBIPOINTERPROC) \ cb(glVertexAttribPointer, PFNGLVERTEXATTRIBPOINTERPROC) \ cb(glViewport, PFNGLVIEWPORTPROC) \ - \ - extCb(glCopyImageSubData, PFNGLCOPYIMAGESUBDATAPROC) \ - \ - extCb(glDebugMessageCallback, PFNGLDEBUGMESSAGECALLBACKPROC) \ - \ + /* Core OpenGL (extension in OpenGL ES) */ \ extCb(glDrawBuffer, PFNGLDRAWBUFFERPROC) \ - \ extCb(glPolygonMode, PFNGLPOLYGONMODEPROC) \ - \ + /* OpenGL 4.2 - OpenGL ES 3.1 */\ extCb(glMemoryBarrier, PFNGLMEMORYBARRIERPROC) \ extCb(glMemoryBarrierByRegion, PFNGLMEMORYBARRIERBYREGIONPROC) \ - \ + /* OpenGL 4.3 - OpenGL ES 3.2 */\ + extCb(glCopyImageSubData, PFNGLCOPYIMAGESUBDATAPROC) \ + extCb(glDebugMessageCallback, PFNGLDEBUGMESSAGECALLBACKPROC) \ extCb(glObjectLabel, PFNGLOBJECTLABELPROC) \ extCb(glPopDebugGroup, PFNGLPOPDEBUGGROUPPROC) \ extCb(glPushDebugGroup, PFNGLPUSHDEBUGGROUPPROC) \ - \ - extCb(glSpecializeShaderARB, PFNGLSPECIALIZESHADERARBPROC) \ + /* OpenGL 4.6 - GL_ARB_spirv_extensions */\ + extCb(glSpecializeShader, PFNGLSPECIALIZESHADERPROC) \ #endif // NAZARA_OPENGLRENDERER_WRAPPER_COREFUNCTIONS_HPP diff --git a/include/Nazara/OpenGLRenderer/Wrapper/Shader.inl b/include/Nazara/OpenGLRenderer/Wrapper/Shader.inl index 39cdc94cb..04182b63f 100644 --- a/include/Nazara/OpenGLRenderer/Wrapper/Shader.inl +++ b/include/Nazara/OpenGLRenderer/Wrapper/Shader.inl @@ -90,9 +90,9 @@ namespace Nz::GL { assert(m_objectId); const Context& context = EnsureDeviceContext(); - assert(context.glSpecializeShaderARB); + assert(context.glSpecializeShader); - context.glSpecializeShaderARB(m_objectId, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue); + context.glSpecializeShader(m_objectId, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue); } inline GLuint Shader::CreateHelper(OpenGLDevice& /*device*/, const Context& context, GLenum shaderStage) diff --git a/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp b/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp index 25dbcf08a..7cf525e60 100644 --- a/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp +++ b/src/Nazara/OpenGLRenderer/Wrapper/Context.cpp @@ -804,6 +804,11 @@ namespace Nz::GL return loader.Load(glPolygonMode, "glPolygonModeNV", false); //< from GL_NV_polygon_mode } + else if (function == "glSpecializeShader") + { + constexpr std::size_t functionIndex = UnderlyingCast(FunctionIndex::glSpecializeShader); + return loader.Load(glSpecializeShader, "glSpecializeShaderARB", false); //< from GL_ARB_spirv_extensions + } return false; }