From 9e595439f609eb8cb9923f305fb8d46d8f59396f Mon Sep 17 00:00:00 2001 From: jules Date: Mon, 1 Feb 2016 12:54:47 +0000 Subject: [PATCH] Refactored some openGL function declarations to fix a couple of build problems --- modules/juce_opengl/juce_opengl.cpp | 18 ++-- .../native/juce_OpenGLExtensions.h | 84 ++++++++++++------- 2 files changed, 68 insertions(+), 34 deletions(-) diff --git a/modules/juce_opengl/juce_opengl.cpp b/modules/juce_opengl/juce_opengl.cpp index ba3adadf8c..7590bdb9e2 100644 --- a/modules/juce_opengl/juce_opengl.cpp +++ b/modules/juce_opengl/juce_opengl.cpp @@ -79,22 +79,28 @@ void OpenGLExtensionFunctions::initialise() #if JUCE_WINDOWS || JUCE_LINUX #define JUCE_INIT_GL_FUNCTION(name, returnType, params, callparams) \ name = (type_ ## name) OpenGLHelpers::getExtensionFunction (#name); - #define JUCE_INIT_GL_FUNCTION_EXT(name, returnType, params, callparams) \ + JUCE_GL_BASE_FUNCTIONS (JUCE_INIT_GL_FUNCTION) + #undef JUCE_INIT_GL_FUNCTION + + #define JUCE_INIT_GL_FUNCTION(name, returnType, params, callparams) \ name = (type_ ## name) OpenGLHelpers::getExtensionFunction (#name); \ if (name == nullptr) \ name = (type_ ## name) OpenGLHelpers::getExtensionFunction (JUCE_STRINGIFY (name ## EXT)); - - JUCE_GL_EXTENSION_FUNCTIONS (JUCE_INIT_GL_FUNCTION, JUCE_INIT_GL_FUNCTION_EXT) + JUCE_GL_EXTENSION_FUNCTIONS (JUCE_INIT_GL_FUNCTION) #undef JUCE_INIT_GL_FUNCTION - #undef JUCE_INIT_GL_FUNCTION_EXT #endif } #if JUCE_OPENGL_ES #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) \ - returnType OpenGLExtensionFunctions::name params { return ::name callparams; } + returnType OpenGLExtensionFunctions::name params noexcept { return ::name callparams; } + + JUCE_GL_BASE_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) + JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) +#if JUCE_OPENGL3 + JUCE_GL_VERTEXBUFFER_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) +#endif - JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION, JUCE_DECLARE_GL_FUNCTION) #undef JUCE_DECLARE_GL_FUNCTION #endif diff --git a/modules/juce_opengl/native/juce_OpenGLExtensions.h b/modules/juce_opengl/native/juce_OpenGLExtensions.h index 57ebb469ea..3eb6e13af4 100644 --- a/modules/juce_opengl/native/juce_OpenGLExtensions.h +++ b/modules/juce_opengl/native/juce_OpenGLExtensions.h @@ -29,27 +29,13 @@ /** @internal This macro contains a list of GL extension functions that need to be dynamically loaded on Windows/Linux. @see OpenGLExtensionFunctions */ -#define JUCE_GL_EXTENSION_FUNCTIONS(USE_FUNCTION, EXT_FUNCTION) \ +#define JUCE_GL_BASE_FUNCTIONS(USE_FUNCTION) \ USE_FUNCTION (glActiveTexture, void, (GLenum p1), (p1))\ USE_FUNCTION (glBindBuffer, void, (GLenum p1, GLuint p2), (p1, p2))\ USE_FUNCTION (glDeleteBuffers, void, (GLsizei p1, const GLuint* p2), (p1, p2))\ USE_FUNCTION (glGenBuffers, void, (GLsizei p1, GLuint* p2), (p1, p2))\ USE_FUNCTION (glBufferData, void, (GLenum p1, GLsizeiptr p2, const GLvoid* p3, GLenum p4), (p1, p2, p3, p4))\ USE_FUNCTION (glBufferSubData, void, (GLenum p1, GLintptr p2, GLsizeiptr p3, const GLvoid* p4), (p1, p2, p3, p4))\ - EXT_FUNCTION (glIsRenderbuffer, GLboolean, (GLuint p1), (p1))\ - EXT_FUNCTION (glBindRenderbuffer, void, (GLenum p1, GLuint p2), (p1, p2))\ - EXT_FUNCTION (glDeleteRenderbuffers, void, (GLsizei p1, const GLuint* p2), (p1, p2))\ - EXT_FUNCTION (glGenRenderbuffers, void, (GLsizei p1, GLuint* p2), (p1, p2))\ - EXT_FUNCTION (glRenderbufferStorage, void, (GLenum p1, GLenum p2, GLsizei p3, GLsizei p4), (p1, p2, p3, p4))\ - EXT_FUNCTION (glGetRenderbufferParameteriv, void, (GLenum p1, GLenum p2, GLint* p3), (p1, p2, p3))\ - EXT_FUNCTION (glIsFramebuffer, GLboolean, (GLuint p1), (p1))\ - EXT_FUNCTION (glBindFramebuffer, void, (GLenum p1, GLuint p2), (p1, p2))\ - EXT_FUNCTION (glDeleteFramebuffers, void, (GLsizei p1, const GLuint* p2), (p1, p2))\ - EXT_FUNCTION (glGenFramebuffers, void, (GLsizei p1, GLuint* p2), (p1, p2))\ - EXT_FUNCTION (glCheckFramebufferStatus, GLenum, (GLenum p1), (p1))\ - EXT_FUNCTION (glFramebufferTexture2D, void, (GLenum p1, GLenum p2, GLenum p3, GLuint p4, GLint p5), (p1, p2, p3, p4, p5))\ - EXT_FUNCTION (glFramebufferRenderbuffer, void, (GLenum p1, GLenum p2, GLenum p3, GLuint p4), (p1, p2, p3, p4))\ - EXT_FUNCTION (glGetFramebufferAttachmentParameteriv, void, (GLenum p1, GLenum p2, GLenum p3, GLint* p4), (p1, p2, p3, p4))\ USE_FUNCTION (glCreateProgram, GLuint, (), ())\ USE_FUNCTION (glDeleteProgram, void, (GLuint p1), (p1))\ USE_FUNCTION (glCreateShader, GLuint, (GLenum p1), (p1))\ @@ -68,9 +54,6 @@ USE_FUNCTION (glVertexAttribPointer, void, (GLuint p1, GLint p2, GLenum p3, GLboolean p4, GLsizei p5, const GLvoid* p6), (p1, p2, p3, p4, p5, p6))\ USE_FUNCTION (glEnableVertexAttribArray, void, (GLuint p1), (p1))\ USE_FUNCTION (glDisableVertexAttribArray, void, (GLuint p1), (p1))\ - USE_FUNCTION (glGenVertexArrays, void, (GLsizei p1, GLuint* p2), (p1, p2))\ - USE_FUNCTION (glDeleteVertexArrays, void, (GLsizei p1, const GLuint* p2), (p1, p2))\ - USE_FUNCTION (glBindVertexArray, void, (GLuint p1), (p1))\ USE_FUNCTION (glUniform1f, void, (GLint p1, GLfloat p2), (p1, p2))\ USE_FUNCTION (glUniform1i, void, (GLint p1, GLint p2), (p1, p2))\ USE_FUNCTION (glUniform2f, void, (GLint p1, GLfloat p2, GLfloat p3), (p1, p2, p3))\ @@ -82,6 +65,33 @@ USE_FUNCTION (glUniformMatrix3fv, void, (GLint p1, GLsizei p2, GLboolean p3, const GLfloat* p4), (p1, p2, p3, p4))\ USE_FUNCTION (glUniformMatrix4fv, void, (GLint p1, GLsizei p2, GLboolean p3, const GLfloat* p4), (p1, p2, p3, p4)) +/** @internal This macro contains a list of GL extension functions that need to be dynamically loaded on Windows/Linux. + @see OpenGLExtensionFunctions +*/ +#define JUCE_GL_EXTENSION_FUNCTIONS(USE_FUNCTION) \ + USE_FUNCTION (glIsRenderbuffer, GLboolean, (GLuint p1), (p1))\ + USE_FUNCTION (glBindRenderbuffer, void, (GLenum p1, GLuint p2), (p1, p2))\ + USE_FUNCTION (glDeleteRenderbuffers, void, (GLsizei p1, const GLuint* p2), (p1, p2))\ + USE_FUNCTION (glGenRenderbuffers, void, (GLsizei p1, GLuint* p2), (p1, p2))\ + USE_FUNCTION (glRenderbufferStorage, void, (GLenum p1, GLenum p2, GLsizei p3, GLsizei p4), (p1, p2, p3, p4))\ + USE_FUNCTION (glGetRenderbufferParameteriv, void, (GLenum p1, GLenum p2, GLint* p3), (p1, p2, p3))\ + USE_FUNCTION (glIsFramebuffer, GLboolean, (GLuint p1), (p1))\ + USE_FUNCTION (glBindFramebuffer, void, (GLenum p1, GLuint p2), (p1, p2))\ + USE_FUNCTION (glDeleteFramebuffers, void, (GLsizei p1, const GLuint* p2), (p1, p2))\ + USE_FUNCTION (glGenFramebuffers, void, (GLsizei p1, GLuint* p2), (p1, p2))\ + USE_FUNCTION (glCheckFramebufferStatus, GLenum, (GLenum p1), (p1))\ + USE_FUNCTION (glFramebufferTexture2D, void, (GLenum p1, GLenum p2, GLenum p3, GLuint p4, GLint p5), (p1, p2, p3, p4, p5))\ + USE_FUNCTION (glFramebufferRenderbuffer, void, (GLenum p1, GLenum p2, GLenum p3, GLuint p4), (p1, p2, p3, p4))\ + USE_FUNCTION (glGetFramebufferAttachmentParameteriv, void, (GLenum p1, GLenum p2, GLenum p3, GLint* p4), (p1, p2, p3, p4)) + +/** @internal This macro contains a list of GL extension functions that need to be dynamically loaded on Windows/Linux. + @see OpenGLExtensionFunctions +*/ +#define JUCE_GL_VERTEXBUFFER_FUNCTIONS(USE_FUNCTION) \ + USE_FUNCTION (glGenVertexArrays, void, (GLsizei p1, GLuint* p2), (p1, p2))\ + USE_FUNCTION (glDeleteVertexArrays, void, (GLsizei p1, const GLuint* p2), (p1, p2))\ + USE_FUNCTION (glBindVertexArray, void, (GLuint p1), (p1)) + /** This class contains a generated list of OpenGL extension functions, which are either dynamically loaded for a specific GL context, or simply call-through to the appropriate OS function where available. @@ -99,24 +109,42 @@ struct OpenGLExtensionFunctions //============================================================================== #if JUCE_WINDOWS #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) typedef returnType (__stdcall *type_ ## name) params; type_ ## name name; - JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION, JUCE_DECLARE_GL_FUNCTION) + JUCE_GL_BASE_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) + JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) + #if JUCE_OPENGL3 + JUCE_GL_VERTEXBUFFER_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) + #endif + //============================================================================== #elif JUCE_LINUX #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) typedef returnType (*type_ ## name) params; type_ ## name name; - JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION, JUCE_DECLARE_GL_FUNCTION) + JUCE_GL_BASE_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) + JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) + //============================================================================== #elif JUCE_OPENGL_ES - #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) static returnType name params; - JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION, JUCE_DECLARE_GL_FUNCTION) + #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) static returnType name params noexcept; + JUCE_GL_BASE_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) + JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) + JUCE_GL_VERTEXBUFFER_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) + //============================================================================== #else - #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) inline static returnType name params { return ::name callparams; } + #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) inline static returnType name params noexcept { return ::name callparams; } + JUCE_GL_BASE_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) + + #ifndef GL3_PROTOTYPES + #undef JUCE_DECLARE_GL_FUNCTION + #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) inline static returnType name params noexcept { return ::name ## EXT callparams; } + #endif + JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) + #if JUCE_OPENGL3 - JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION, JUCE_DECLARE_GL_FUNCTION) - #else - #define JUCE_DECLARE_GL_FUNCTION_EXT(name, returnType, params, callparams) inline static returnType name params { return ::name ## EXT callparams; } - JUCE_GL_EXTENSION_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION, JUCE_DECLARE_GL_FUNCTION_EXT) - #undef JUCE_DECLARE_GL_FUNCTION_EXT + #ifndef GL3_PROTOTYPES + #undef JUCE_DECLARE_GL_FUNCTION + #define JUCE_DECLARE_GL_FUNCTION(name, returnType, params, callparams) inline static returnType name params noexcept { return ::name ## APPLE callparams; } + #endif + JUCE_GL_VERTEXBUFFER_FUNCTIONS (JUCE_DECLARE_GL_FUNCTION) #endif #endif