/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2020 - Raw Material Software Limited JUCE is an open source library subject to commercial or open-source licensing. By using JUCE, you agree to the terms of both the JUCE 6 End-User License Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020). End User License Agreement: www.juce.com/juce-6-licence Privacy Policy: www.juce.com/juce-privacy-policy Or: You may also use this code under the terms of the GPL v3 (see www.gnu.org/licenses). JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE DISCLAIMED. ============================================================================== */ namespace juce { /** @internal This macro contains a list of GL extension functions that need to be dynamically loaded on Windows/Linux. @see OpenGLExtensionFunctions */ #define JUCE_GL_BASE_FUNCTIONS \ X (glActiveTexture) \ X (glBindBuffer) \ X (glDeleteBuffers) \ X (glGenBuffers) \ X (glBufferData) \ X (glBufferSubData) \ X (glCreateProgram) \ X (glDeleteProgram) \ X (glCreateShader) \ X (glDeleteShader) \ X (glShaderSource) \ X (glCompileShader) \ X (glAttachShader) \ X (glLinkProgram) \ X (glUseProgram) \ X (glGetShaderiv) \ X (glGetShaderInfoLog) \ X (glGetProgramInfoLog) \ X (glGetProgramiv) \ X (glGetUniformLocation) \ X (glGetAttribLocation) \ X (glVertexAttribPointer) \ X (glEnableVertexAttribArray) \ X (glDisableVertexAttribArray) \ X (glUniform1f) \ X (glUniform1i) \ X (glUniform2f) \ X (glUniform3f) \ X (glUniform4f) \ X (glUniform4i) \ X (glUniform1fv) \ X (glUniformMatrix2fv) \ X (glUniformMatrix3fv) \ X (glUniformMatrix4fv) \ X (glBindAttribLocation) /** @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 \ X (glIsRenderbuffer) \ X (glBindRenderbuffer) \ X (glDeleteRenderbuffers) \ X (glGenRenderbuffers) \ X (glRenderbufferStorage) \ X (glGetRenderbufferParameteriv) \ X (glIsFramebuffer) \ X (glBindFramebuffer) \ X (glDeleteFramebuffers) \ X (glGenFramebuffers) \ X (glCheckFramebufferStatus) \ X (glFramebufferTexture2D) \ X (glFramebufferRenderbuffer) \ X (glGetFramebufferAttachmentParameteriv) /** @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 \ X (glGenVertexArrays) \ X (glDeleteVertexArrays) \ X (glBindVertexArray) /** 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. This class is provided for backwards compatibility. In new code, you should prefer to use functions from the juce::gl namespace. By importing all these symbols with `using namespace ::juce::gl;`, all GL enumerations and functions will be made available at global scope. This may be helpful if you need to write code with C source compatibility, or which is compatible with a different extension-loading library. All the normal guidance about `using namespace` should still apply - don't do this in a header, or at all if you can possibly avoid it! @tags{OpenGL} */ struct OpenGLExtensionFunctions { //============================================================================== #ifndef DOXYGEN [[deprecated ("A more complete set of GL commands can be found in the juce::gl namespace. " "You should use juce::gl::loadFunctions() to load GL functions.")]] static void initialise(); #endif #if JUCE_WINDOWS && ! defined (DOXYGEN) typedef char GLchar; typedef pointer_sized_int GLsizeiptr; typedef pointer_sized_int GLintptr; #endif #define X(name) static decltype (::juce::gl::name)& name; JUCE_GL_BASE_FUNCTIONS JUCE_GL_EXTENSION_FUNCTIONS JUCE_GL_VERTEXBUFFER_FUNCTIONS #undef X }; enum MissingOpenGLDefinitions { #if JUCE_ANDROID JUCE_RGBA_FORMAT = ::juce::gl::GL_RGBA, #else JUCE_RGBA_FORMAT = ::juce::gl::GL_BGRA_EXT, #endif }; } // namespace juce