mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
187 lines
7.9 KiB
C
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
|
|
|
|
}
|