141 lines
4.7 KiB
C
141 lines
4.7 KiB
C
|
/*
|
||
|
==============================================================================
|
||
|
|
||
|
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
|