1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00
JUCE/modules/juce_opengl/native/juce_OpenGLExtensions.h

187 lines
7.9 KiB
C

/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-11 by Raw Material Software Ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the GNU General
Public License (Version 2), as published by the Free Software Foundation.
A copy of the license is included in the JUCE distribution, or can be found
online at www.gnu.org/licenses.
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
------------------------------------------------------------------------------
To release a closed-source product which uses JUCE, commercial licenses are
available: visit www.rawmaterialsoftware.com/juce for more information.
==============================================================================
*/
namespace
{
#if JUCE_WINDOWS
#define JUCE_DECLARE_GL_EXTENSION_FUNCTION(name, returnType, params) \
typedef returnType (__stdcall *type_ ## name) params; static type_ ## name name = nullptr;
#else
#define JUCE_DECLARE_GL_EXTENSION_FUNCTION(name, returnType, params) \
typedef returnType (*type_ ## name) params; static type_ ## name name = nullptr;
#endif
#ifndef GL_BGRA_EXT
enum { GL_BGRA_EXT = 0x80e1 };
#endif
#ifndef GL_CLAMP_TO_EDGE
enum { GL_CLAMP_TO_EDGE = 0x812f };
#endif
#ifndef GL_RGBA8
#define GL_RGBA8 GL_RGBA
#endif
#ifndef GL_DEPTH24_STENCIL8
#define GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_OES
#endif
#if JUCE_WINDOWS
enum
{
WGL_NUMBER_PIXEL_FORMATS_ARB = 0x2000,
WGL_DRAW_TO_WINDOW_ARB = 0x2001,
WGL_ACCELERATION_ARB = 0x2003,
WGL_SWAP_METHOD_ARB = 0x2007,
WGL_SUPPORT_OPENGL_ARB = 0x2010,
WGL_PIXEL_TYPE_ARB = 0x2013,
WGL_DOUBLE_BUFFER_ARB = 0x2011,
WGL_COLOR_BITS_ARB = 0x2014,
WGL_RED_BITS_ARB = 0x2015,
WGL_GREEN_BITS_ARB = 0x2017,
WGL_BLUE_BITS_ARB = 0x2019,
WGL_ALPHA_BITS_ARB = 0x201B,
WGL_DEPTH_BITS_ARB = 0x2022,
WGL_STENCIL_BITS_ARB = 0x2023,
WGL_FULL_ACCELERATION_ARB = 0x2027,
WGL_ACCUM_RED_BITS_ARB = 0x201E,
WGL_ACCUM_GREEN_BITS_ARB = 0x201F,
WGL_ACCUM_BLUE_BITS_ARB = 0x2020,
WGL_ACCUM_ALPHA_BITS_ARB = 0x2021,
WGL_STEREO_ARB = 0x2012,
WGL_SAMPLE_BUFFERS_ARB = 0x2041,
WGL_SAMPLES_ARB = 0x2042,
WGL_TYPE_RGBA_ARB = 0x202B,
GL_OPERAND0_RGB = 0x8590,
GL_OPERAND1_RGB = 0x8591,
GL_OPERAND0_ALPHA = 0x8598,
GL_OPERAND1_ALPHA = 0x8599,
GL_SRC0_RGB = 0x8580,
GL_SRC1_RGB = 0x8581,
GL_SRC0_ALPHA = 0x8588,
GL_SRC1_ALPHA = 0x8589,
GL_TEXTURE0 = 0x84C0,
GL_TEXTURE1 = 0x84C1,
GL_TEXTURE2 = 0x84C2,
GL_COMBINE = 0x8570,
GL_COMBINE_RGB = 0x8571,
GL_COMBINE_ALPHA = 0x8572,
GL_PREVIOUS = 0x8578,
GL_COMPILE_STATUS = 0x8B81,
GL_LINK_STATUS = 0x8B82,
GL_SHADING_LANGUAGE_VERSION = 0x8B8C,
GL_FRAGMENT_SHADER = 0x8B30,
GL_FRAMEBUFFER = 0x8D40,
GL_RENDERBUFFER = 0x8D41,
GL_FRAMEBUFFER_BINDING = 0x8CA6,
GL_COLOR_ATTACHMENT0 = 0x8CE0,
GL_DEPTH_ATTACHMENT = 0x8D00,
GL_STENCIL_ATTACHMENT = 0x8D20,
GL_FRAMEBUFFER_COMPLETE = 0x8CD5,
GL_DEPTH24_STENCIL8 = 0x88F0,
GL_RENDERBUFFER_DEPTH_SIZE = 0x8D54
};
typedef char GLchar;
#define WGL_FUNCTION_LIST(USE_FUNCTION) \
USE_FUNCTION (wglChoosePixelFormatARB, BOOL, (HDC, const int*, const FLOAT*, UINT, int*, UINT*))\
USE_FUNCTION (wglSwapIntervalEXT, BOOL, (int))\
USE_FUNCTION (wglGetSwapIntervalEXT, int, ())\
WGL_FUNCTION_LIST (JUCE_DECLARE_GL_EXTENSION_FUNCTION)
#endif
#if JUCE_WINDOWS || JUCE_LINUX
#define GL_EXTENSIONS_LIST(USE_FUNCTION) \
USE_FUNCTION (glActiveTexture, void, (GLenum))\
USE_FUNCTION (glClientActiveTexture, void, (GLenum))\
USE_FUNCTION (glCreateProgram, GLuint, ())\
USE_FUNCTION (glDeleteProgram, void, (GLuint))\
USE_FUNCTION (glCreateShader, GLuint, (GLenum))\
USE_FUNCTION (glDeleteShader, void, (GLuint))\
USE_FUNCTION (glShaderSource, void, (GLuint, GLsizei, const GLchar**, const GLint*))\
USE_FUNCTION (glCompileShader, void, (GLuint))\
USE_FUNCTION (glAttachShader, void, (GLuint, GLuint))\
USE_FUNCTION (glLinkProgram, void, (GLuint))\
USE_FUNCTION (glUseProgram, void, (GLuint))\
USE_FUNCTION (glGetShaderiv, void, (GLuint, GLenum, GLint*))\
USE_FUNCTION (glGetShaderInfoLog, void, (GLuint, GLsizei, GLsizei*, GLchar*))\
USE_FUNCTION (glGetProgramiv, void, (GLuint, GLenum, GLint*))\
USE_FUNCTION (glGetUniformLocation, GLint, (GLuint, const GLchar*))\
USE_FUNCTION (glUniform1f, void, (GLint, GLfloat))\
USE_FUNCTION (glUniform1i, void, (GLint, GLint))\
USE_FUNCTION (glUniform2f, void, (GLint, GLfloat, GLfloat))\
USE_FUNCTION (glUniform3f, void, (GLint, GLfloat, GLfloat, GLfloat))\
USE_FUNCTION (glUniform4f, void, (GLint, GLfloat, GLfloat, GLfloat, GLfloat))\
USE_FUNCTION (glUniform4i, void, (GLint, GLint, GLint, GLint, GLint))\
USE_FUNCTION (glUniform1fv, void, (GLint, GLsizei, const GLfloat*))\
USE_FUNCTION (glIsRenderbuffer, GLboolean, (GLuint))\
USE_FUNCTION (glBindRenderbuffer, void, (GLenum, GLuint))\
USE_FUNCTION (glDeleteRenderbuffers, void, (GLsizei, const GLuint*))\
USE_FUNCTION (glGenRenderbuffers, void, (GLsizei, GLuint*))\
USE_FUNCTION (glRenderbufferStorage, void, (GLenum, GLenum, GLsizei, GLsizei))\
USE_FUNCTION (glGetRenderbufferParameteriv, void, (GLenum, GLenum, GLint*))\
USE_FUNCTION (glIsFramebuffer, GLboolean, (GLuint))\
USE_FUNCTION (glBindFramebuffer, void, (GLenum, GLuint))\
USE_FUNCTION (glDeleteFramebuffers, void, (GLsizei, const GLuint*))\
USE_FUNCTION (glGenFramebuffers, void, (GLsizei, GLuint*))\
USE_FUNCTION (glCheckFramebufferStatus, GLenum, (GLenum))\
USE_FUNCTION (glFramebufferTexture1D, void, (GLenum, GLenum, GLenum, GLuint, GLint))\
USE_FUNCTION (glFramebufferTexture2D, void, (GLenum, GLenum, GLenum, GLuint, GLint))\
USE_FUNCTION (glFramebufferTexture3D, void, (GLenum, GLenum, GLenum, GLuint, GLint, GLint))\
USE_FUNCTION (glFramebufferRenderbuffer, void, (GLenum, GLenum, GLenum, GLuint))\
USE_FUNCTION (glGetFramebufferAttachmentParameteriv, void, (GLenum, GLenum, GLenum, GLint*))\
GL_EXTENSIONS_LIST (JUCE_DECLARE_GL_EXTENSION_FUNCTION)
void initialiseGLExtensions()
{
if (glActiveTexture == nullptr)
{
#define FIND_FUNCTION(name, returnType, params) name = (type_ ## name) OpenGLHelpers::getExtensionFunction (#name);
#if JUCE_WINDOWS
WGL_FUNCTION_LIST (FIND_FUNCTION)
#endif
GL_EXTENSIONS_LIST (FIND_FUNCTION)
#undef FIND_FUNCTION
}
}
#undef GL_EXTENSIONS_LIST
#undef WGL_FUNCTION_LIST
#else
void initialiseGLExtensions() {}
#endif
}