Move GL interface code out of the OpenGL video backend.

This commit is contained in:
Scott Mansell
2015-09-19 04:40:00 +12:00
parent 3df83e5717
commit 95f3c956a8
83 changed files with 367 additions and 323 deletions

View File

@ -0,0 +1,12 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLCLEARDEPTHFPROC glClearDepthf;
extern PFNGLDEPTHRANGEFPROC glDepthRangef;
extern PFNGLGETSHADERPRECISIONFORMATPROC glGetShaderPrecisionFormat;
extern PFNGLRELEASESHADERCOMPILERPROC glReleaseShaderCompiler;
extern PFNGLSHADERBINARYPROC glShaderBinary;

View File

@ -0,0 +1,9 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glBindFragDataLocationIndexed;
extern PFNGLGETFRAGDATAINDEXPROC glGetFragDataIndex;

View File

@ -0,0 +1,9 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLBUFFERSTORAGEPROC glBufferStorage;
extern PFNGLNAMEDBUFFERSTORAGEEXTPROC glNamedBufferStorageEXT;

View File

@ -0,0 +1,8 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLCLIPCONTROLPROC glClipControl;

View File

@ -0,0 +1,10 @@
// Copyright 2015 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
typedef void (GLAPIENTRY * PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);
extern PFNGLCOPYIMAGESUBDATAPROC glCopyImageSubData;

View File

@ -0,0 +1,11 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLDEBUGMESSAGECALLBACKARBPROC glDebugMessageCallbackARB;
extern PFNGLDEBUGMESSAGECONTROLARBPROC glDebugMessageControlARB;
extern PFNGLDEBUGMESSAGEINSERTARBPROC glDebugMessageInsertARB;
extern PFNGLGETDEBUGMESSAGELOGARBPROC glGetDebugMessageLogARB;

View File

@ -0,0 +1,11 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLDRAWELEMENTSBASEVERTEXPROC glDrawElementsBaseVertex;
extern PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glDrawElementsInstancedBaseVertex;
extern PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glDrawRangeElementsBaseVertex;
extern PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glMultiDrawElementsBaseVertex;

View File

@ -0,0 +1,27 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
extern PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer;
extern PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
extern PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
extern PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
extern PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
extern PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer;
extern PFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D;
extern PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
extern PFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D;
extern PFNGLFRAMEBUFFERTEXTURELAYERPROC glFramebufferTextureLayer;
extern PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
extern PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers;
extern PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
extern PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv;
extern PFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv;
extern PFNGLISFRAMEBUFFERPROC glIsFramebuffer;
extern PFNGLISRENDERBUFFERPROC glIsRenderbuffer;
extern PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;
extern PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample;

View File

@ -0,0 +1,10 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLGETPROGRAMBINARYPROC glGetProgramBinary;
extern PFNGLPROGRAMBINARYPROC glProgramBinary;
extern PFNGLPROGRAMPARAMETERIPROC glProgramParameteri;

View File

@ -0,0 +1,9 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLFLUSHMAPPEDBUFFERRANGEPROC glFlushMappedBufferRange;
extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange;

View File

@ -0,0 +1,8 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLMINSAMPLESHADINGARBPROC glMinSampleShading;

View File

@ -0,0 +1,21 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLBINDSAMPLERPROC glBindSampler;
extern PFNGLDELETESAMPLERSPROC glDeleteSamplers;
extern PFNGLGENSAMPLERSPROC glGenSamplers;
extern PFNGLGETSAMPLERPARAMETERIIVPROC glGetSamplerParameterIiv;
extern PFNGLGETSAMPLERPARAMETERIUIVPROC glGetSamplerParameterIuiv;
extern PFNGLGETSAMPLERPARAMETERFVPROC glGetSamplerParameterfv;
extern PFNGLGETSAMPLERPARAMETERIVPROC glGetSamplerParameteriv;
extern PFNGLISSAMPLERPROC glIsSampler;
extern PFNGLSAMPLERPARAMETERIIVPROC glSamplerParameterIiv;
extern PFNGLSAMPLERPARAMETERIUIVPROC glSamplerParameterIuiv;
extern PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf;
extern PFNGLSAMPLERPARAMETERFVPROC glSamplerParameterfv;
extern PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri;
extern PFNGLSAMPLERPARAMETERIVPROC glSamplerParameteriv;

View File

@ -0,0 +1,14 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLCLIENTWAITSYNCPROC glClientWaitSync;
extern PFNGLDELETESYNCPROC glDeleteSync;
extern PFNGLFENCESYNCPROC glFenceSync;
extern PFNGLGETINTEGER64VPROC glGetInteger64v;
extern PFNGLGETSYNCIVPROC glGetSynciv;
extern PFNGLISSYNCPROC glIsSync;
extern PFNGLWAITSYNCPROC glWaitSync;

View File

@ -0,0 +1,10 @@
// Copyright 2014 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLTEXIMAGE2DMULTISAMPLEPROC glTexImage2DMultisample;
extern PFNGLTEXIMAGE3DMULTISAMPLEPROC glTexImage3DMultisample;
extern PFNGLGETMULTISAMPLEFVPROC glGetMultisamplefv;
extern PFNGLSAMPLEMASKIPROC glSampleMaski;

View File

@ -0,0 +1,11 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
typedef void (*PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
typedef void (*PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
extern PFNGLTEXSTORAGE2DMULTISAMPLEPROC glTexStorage2DMultisample;
extern PFNGLTEXSTORAGE3DMULTISAMPLEPROC glTexStorage3DMultisample;

View File

@ -0,0 +1,17 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLBINDBUFFERBASEPROC glBindBufferBase;
extern PFNGLBINDBUFFERRANGEPROC glBindBufferRange;
extern PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glGetActiveUniformBlockName;
extern PFNGLGETACTIVEUNIFORMBLOCKIVPROC glGetActiveUniformBlockiv;
extern PFNGLGETACTIVEUNIFORMNAMEPROC glGetActiveUniformName;
extern PFNGLGETACTIVEUNIFORMSIVPROC glGetActiveUniformsiv;
extern PFNGLGETINTEGERI_VPROC glGetIntegeri_v;
extern PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex;
extern PFNGLGETUNIFORMINDICESPROC glGetUniformIndices;
extern PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;

View File

@ -0,0 +1,11 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
extern PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
extern PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
extern PFNGLISVERTEXARRAYPROC glIsVertexArray;

View File

@ -0,0 +1,17 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLDEPTHRANGEARRAYVPROC glDepthRangeArrayv;
extern PFNGLDEPTHRANGEINDEXEDPROC glDepthRangeIndexed;
extern PFNGLGETDOUBLEI_VPROC glGetDoublei_v;
extern PFNGLGETFLOATI_VPROC glGetFloati_v;
extern PFNGLSCISSORARRAYVPROC glScissorArrayv;
extern PFNGLSCISSORINDEXEDPROC glScissorIndexed;
extern PFNGLSCISSORINDEXEDVPROC glScissorIndexedv;
extern PFNGLVIEWPORTARRAYVPROC glViewportArrayv;
extern PFNGLVIEWPORTINDEXEDFPROC glViewportIndexedf;
extern PFNGLVIEWPORTINDEXEDFVPROC glViewportIndexedfv;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,51 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include <string>
#include "Common/CommonTypes.h"
#include "Common/GL/GLExtensions/ARB_blend_func_extended.h"
#include "Common/GL/GLExtensions/ARB_buffer_storage.h"
#include "Common/GL/GLExtensions/ARB_clip_control.h"
#include "Common/GL/GLExtensions/ARB_copy_image.h"
#include "Common/GL/GLExtensions/ARB_debug_output.h"
#include "Common/GL/GLExtensions/ARB_draw_elements_base_vertex.h"
#include "Common/GL/GLExtensions/ARB_ES2_compatibility.h"
#include "Common/GL/GLExtensions/ARB_framebuffer_object.h"
#include "Common/GL/GLExtensions/ARB_get_program_binary.h"
#include "Common/GL/GLExtensions/ARB_map_buffer_range.h"
#include "Common/GL/GLExtensions/ARB_sample_shading.h"
#include "Common/GL/GLExtensions/ARB_sampler_objects.h"
#include "Common/GL/GLExtensions/ARB_sync.h"
#include "Common/GL/GLExtensions/ARB_texture_multisample.h"
#include "Common/GL/GLExtensions/ARB_texture_storage_multisample.h"
#include "Common/GL/GLExtensions/ARB_uniform_buffer_object.h"
#include "Common/GL/GLExtensions/ARB_vertex_array_object.h"
#include "Common/GL/GLExtensions/ARB_viewport_array.h"
#include "Common/GL/GLExtensions/gl_1_1.h"
#include "Common/GL/GLExtensions/gl_1_2.h"
#include "Common/GL/GLExtensions/gl_1_3.h"
#include "Common/GL/GLExtensions/gl_1_4.h"
#include "Common/GL/GLExtensions/gl_1_5.h"
#include "Common/GL/GLExtensions/gl_2_0.h"
#include "Common/GL/GLExtensions/gl_3_0.h"
#include "Common/GL/GLExtensions/gl_3_1.h"
#include "Common/GL/GLExtensions/gl_3_2.h"
#include "Common/GL/GLExtensions/KHR_debug.h"
#include "Common/GL/GLExtensions/NV_occlusion_query_samples.h"
#include "Common/GL/GLExtensions/NV_primitive_restart.h"
namespace GLExtensions
{
// Initializes the interface
bool Init();
// Function for checking if the hardware supports an extension
// example: if (GLExtensions::Supports("GL_ARB_multi_map"))
bool Supports(const std::string& name);
// Returns OpenGL version in format 430
u32 Version();
}

View File

@ -0,0 +1,75 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
#ifndef GL_VERSION_4_3
#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002
#define GL_STACK_OVERFLOW 0x0503
#define GL_STACK_UNDERFLOW 0x0504
#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
#define GL_DEBUG_CALLBACK_FUNCTION 0x8244
#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245
#define GL_DEBUG_SOURCE_API 0x8246
#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247
#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248
#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249
#define GL_DEBUG_SOURCE_APPLICATION 0x824A
#define GL_DEBUG_SOURCE_OTHER 0x824B
#define GL_DEBUG_TYPE_ERROR 0x824C
#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E
#define GL_DEBUG_TYPE_PORTABILITY 0x824F
#define GL_DEBUG_TYPE_PERFORMANCE 0x8250
#define GL_DEBUG_TYPE_OTHER 0x8251
#define GL_DEBUG_TYPE_MARKER 0x8268
#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269
#define GL_DEBUG_TYPE_POP_GROUP 0x826A
#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B
#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C
#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D
#define GL_BUFFER 0x82E0
#define GL_SHADER 0x82E1
#define GL_PROGRAM 0x82E2
#define GL_QUERY 0x82E3
#define GL_PROGRAM_PIPELINE 0x82E4
#define GL_SAMPLER 0x82E6
#define GL_DISPLAY_LIST 0x82E7
#define GL_MAX_LABEL_LENGTH 0x82E8
#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143
#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144
#define GL_DEBUG_LOGGED_MESSAGES 0x9145
#define GL_DEBUG_SEVERITY_HIGH 0x9146
#define GL_DEBUG_SEVERITY_MEDIUM 0x9147
#define GL_DEBUG_SEVERITY_LOW 0x9148
#define GL_DEBUG_OUTPUT 0x92E0
typedef void (APIENTRY *GLDEBUGPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam);
typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const GLvoid *userParam);
typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled);
typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf);
typedef GLuint (GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufsize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog);
typedef void (GLAPIENTRY * PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei* length, GLchar *label);
typedef void (GLAPIENTRY * PFNGLGETOBJECTPTRLABELPROC) (void* ptr, GLsizei bufSize, GLsizei* length, GLchar *label);
typedef void (GLAPIENTRY * PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar* label);
typedef void (GLAPIENTRY * PFNGLOBJECTPTRLABELPROC) (void* ptr, GLsizei length, const GLchar* label);
typedef void (GLAPIENTRY * PFNGLPOPDEBUGGROUPPROC) (void);
typedef void (GLAPIENTRY * PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar * message);
#endif
extern PFNGLDEBUGMESSAGECALLBACKPROC glDebugMessageCallback;
extern PFNGLDEBUGMESSAGECONTROLPROC glDebugMessageControl;
extern PFNGLDEBUGMESSAGEINSERTPROC glDebugMessageInsert;
extern PFNGLGETDEBUGMESSAGELOGPROC glGetDebugMessageLog;
extern PFNGLGETOBJECTLABELPROC glGetObjectLabel;
extern PFNGLGETOBJECTPTRLABELPROC glGetObjectPtrLabel;
extern PFNGLOBJECTLABELPROC glObjectLabel;
extern PFNGLOBJECTPTRLABELPROC glObjectPtrLabel;
extern PFNGLPOPDEBUGGROUPPROC glPopDebugGroup;
extern PFNGLPUSHDEBUGGROUPPROC glPushDebugGroup;

View File

@ -0,0 +1,13 @@
// Copyright 2015 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLGENOCCLUSIONQUERIESNVPROC glGenOcclusionQueriesNV;
extern PFNGLDELETEOCCLUSIONQUERIESNVPROC glDeleteOcclusionQueriesNV;
extern PFNGLISOCCLUSIONQUERYNVPROC glIsOcclusionQueryNV;
extern PFNGLBEGINOCCLUSIONQUERYNVPROC glBeginOcclusionQueryNV;
extern PFNGLENDOCCLUSIONQUERYNVPROC glEndOcclusionQueryNV;
extern PFNGLGETOCCLUSIONQUERYIVNVPROC glGetOcclusionQueryivNV;
extern PFNGLGETOCCLUSIONQUERYUIVNVPROC glGetOcclusionQueryuivNV;

View File

@ -0,0 +1,15 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
#define GL_PRIMITIVE_RESTART_NV 0x8558
#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559
typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index);
typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTNVPROC) (void);
extern PFNGLPRIMITIVERESTARTINDEXNVPROC glPrimitiveRestartIndexNV;
extern PFNGLPRIMITIVERESTARTNVPROC glPrimitiveRestartNV;

View File

@ -0,0 +1,680 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
typedef void (GLAPIENTRY * PFNGLCLEARINDEXPROC) ( GLfloat c );
typedef void (GLAPIENTRY * PFNGLCLEARCOLORPROC) ( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha );
typedef void (GLAPIENTRY * PFNGLCLEARPROC) ( GLbitfield mask );
typedef void (GLAPIENTRY * PFNGLINDEXMASKPROC) ( GLuint mask );
typedef void (GLAPIENTRY * PFNGLCOLORMASKPROC) ( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha );
typedef void (GLAPIENTRY * PFNGLALPHAFUNCPROC) ( GLenum func, GLclampf ref );
typedef void (GLAPIENTRY * PFNGLBLENDFUNCPROC) ( GLenum sfactor, GLenum dfactor );
typedef void (GLAPIENTRY * PFNGLLOGICOPPROC) ( GLenum opcode );
typedef void (GLAPIENTRY * PFNGLCULLFACEPROC) ( GLenum mode );
typedef void (GLAPIENTRY * PFNGLFRONTFACEPROC) ( GLenum mode );
typedef void (GLAPIENTRY * PFNGLPOINTSIZEPROC) ( GLfloat size );
typedef void (GLAPIENTRY * PFNGLLINEWIDTHPROC) ( GLfloat width );
typedef void (GLAPIENTRY * PFNGLLINESTIPPLEPROC) ( GLint factor, GLushort pattern );
typedef void (GLAPIENTRY * PFNGLPOLYGONMODEPROC) ( GLenum face, GLenum mode );
typedef void (GLAPIENTRY * PFNGLPOLYGONOFFSETPROC) ( GLfloat factor, GLfloat units );
typedef void (GLAPIENTRY * PFNGLPOLYGONSTIPPLEPROC) ( const GLubyte *mask );
typedef void (GLAPIENTRY * PFNGLGETPOLYGONSTIPPLEPROC) ( GLubyte *mask );
typedef void (GLAPIENTRY * PFNGLEDGEFLAGPROC) ( GLboolean flag );
typedef void (GLAPIENTRY * PFNGLEDGEFLAGVPROC) ( const GLboolean *flag );
typedef void (GLAPIENTRY * PFNGLSCISSORPROC) ( GLint x, GLint y, GLsizei width, GLsizei height);
typedef void (GLAPIENTRY * PFNGLCLIPPLANEPROC) ( GLenum plane, const GLdouble *equation );
typedef void (GLAPIENTRY * PFNGLGETCLIPPLANEPROC) ( GLenum plane, GLdouble *equation );
typedef void (GLAPIENTRY * PFNGLDRAWBUFFERPROC) ( GLenum mode );
typedef void (GLAPIENTRY * PFNGLREADBUFFERPROC) ( GLenum mode );
typedef void (GLAPIENTRY * PFNGLENABLEPROC) ( GLenum cap );
typedef void (GLAPIENTRY * PFNGLDISABLEPROC) ( GLenum cap );
typedef GLboolean (GLAPIENTRY * PFNGLISENABLEDPROC) ( GLenum cap );
typedef void (GLAPIENTRY * PFNGLENABLECLIENTSTATEPROC) ( GLenum cap ); /* 1.1 */
typedef void (GLAPIENTRY * PFNGLDISABLECLIENTSTATEPROC) ( GLenum cap ); /* 1.1 */
typedef void (GLAPIENTRY * PFNGLGETBOOLEANVPROC) ( GLenum pname, GLboolean *params );
typedef void (GLAPIENTRY * PFNGLGETDOUBLEVPROC) ( GLenum pname, GLdouble *params );
typedef void (GLAPIENTRY * PFNGLGETFLOATVPROC) ( GLenum pname, GLfloat *params );
typedef void (GLAPIENTRY * PFNGLGETINTEGERVPROC) ( GLenum pname, GLint *params );
typedef void (GLAPIENTRY * PFNGLPUSHATTRIBPROC) ( GLbitfield mask );
typedef void (GLAPIENTRY * PFNGLPOPATTRIBPROC) ( void );
typedef void (GLAPIENTRY * PFNGLPUSHCLIENTATTRIBPROC) ( GLbitfield mask ); /* 1.1 */
typedef void (GLAPIENTRY * PFNGLPOPCLIENTATTRIBPROC) ( void ); /* 1.1 */
typedef GLint (GLAPIENTRY * PFNGLRENDERMODEPROC) ( GLenum mode );
typedef GLenum (GLAPIENTRY * PFNGLGETERRORPROC) ( void );
typedef const GLubyte* (GLAPIENTRY * PFNGLGETSTRINGPROC) ( GLenum name );
typedef void (GLAPIENTRY * PFNGLFINISHPROC) ( void );
typedef void (GLAPIENTRY * PFNGLFLUSHPROC) ( void );
typedef void (GLAPIENTRY * PFNGLHINTPROC) ( GLenum target, GLenum mode );
typedef void (GLAPIENTRY * PFNGLCLEARDEPTHPROC) ( GLclampd depth );
typedef void (GLAPIENTRY * PFNGLDEPTHFUNCPROC) ( GLenum func );
typedef void (GLAPIENTRY * PFNGLDEPTHMASKPROC) ( GLboolean flag );
typedef void (GLAPIENTRY * PFNGLDEPTHRANGEPROC) ( GLclampd near_val, GLclampd far_val );
typedef void (GLAPIENTRY * PFNGLCLEARACCUMPROC) ( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );
typedef void (GLAPIENTRY * PFNGLACCUMPROC) ( GLenum op, GLfloat value );
typedef void (GLAPIENTRY * PFNGLMATRIXMODEPROC) ( GLenum mode );
typedef void (GLAPIENTRY * PFNGLORTHOPROC) ( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );
typedef void (GLAPIENTRY * PFNGLFRUSTUMPROC) ( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );
typedef void (GLAPIENTRY * PFNGLVIEWPORTPROC) ( GLint x, GLint y, GLsizei width, GLsizei height );
typedef void (GLAPIENTRY * PFNGLPUSHMATRIXPROC) ( void );
typedef void (GLAPIENTRY * PFNGLPOPMATRIXPROC) ( void );
typedef void (GLAPIENTRY * PFNGLLOADIDENTITYPROC) ( void );
typedef void (GLAPIENTRY * PFNGLLOADMATRIXDPROC) ( const GLdouble *m );
typedef void (GLAPIENTRY * PFNGLLOADMATRIXFPROC) ( const GLfloat *m );
typedef void (GLAPIENTRY * PFNGLMULTMATRIXDPROC) ( const GLdouble *m );
typedef void (GLAPIENTRY * PFNGLMULTMATRIXFPROC) ( const GLfloat *m );
typedef void (GLAPIENTRY * PFNGLROTATEDPROC) ( GLdouble angle, GLdouble x, GLdouble y, GLdouble z );
typedef void (GLAPIENTRY * PFNGLROTATEFPROC) ( GLfloat angle, GLfloat x, GLfloat y, GLfloat z );
typedef void (GLAPIENTRY * PFNGLSCALEDPROC) ( GLdouble x, GLdouble y, GLdouble z );
typedef void (GLAPIENTRY * PFNGLSCALEFPROC) ( GLfloat x, GLfloat y, GLfloat z );
typedef void (GLAPIENTRY * PFNGLTRANSLATEDPROC) ( GLdouble x, GLdouble y, GLdouble z );
typedef void (GLAPIENTRY * PFNGLTRANSLATEFPROC) ( GLfloat x, GLfloat y, GLfloat z );
typedef GLboolean (GLAPIENTRY * PFNGLISLISTPROC) ( GLuint list );
typedef void (GLAPIENTRY * PFNGLDELETELISTSPROC) ( GLuint list, GLsizei range );
typedef GLuint (GLAPIENTRY * PFNGLGENLISTSPROC) ( GLsizei range );
typedef void (GLAPIENTRY * PFNGLNEWLISTPROC) ( GLuint list, GLenum mode );
typedef void (GLAPIENTRY * PFNGLENDLISTPROC) ( void );
typedef void (GLAPIENTRY * PFNGLCALLLISTPROC) ( GLuint list );
typedef void (GLAPIENTRY * PFNGLCALLLISTSPROC) ( GLsizei n, GLenum type, const GLvoid *lists );
typedef void (GLAPIENTRY * PFNGLLISTBASEPROC) ( GLuint base );
typedef void (GLAPIENTRY * PFNGLBEGINPROC) ( GLenum mode );
typedef void (GLAPIENTRY * PFNGLENDPROC) ( void );
typedef void (GLAPIENTRY * PFNGLVERTEX2DPROC) ( GLdouble x, GLdouble y );
typedef void (GLAPIENTRY * PFNGLVERTEX2FPROC) ( GLfloat x, GLfloat y );
typedef void (GLAPIENTRY * PFNGLVERTEX2IPROC) ( GLint x, GLint y );
typedef void (GLAPIENTRY * PFNGLVERTEX2SPROC) ( GLshort x, GLshort y );
typedef void (GLAPIENTRY * PFNGLVERTEX3DPROC) ( GLdouble x, GLdouble y, GLdouble z );
typedef void (GLAPIENTRY * PFNGLVERTEX3FPROC) ( GLfloat x, GLfloat y, GLfloat z );
typedef void (GLAPIENTRY * PFNGLVERTEX3IPROC) ( GLint x, GLint y, GLint z );
typedef void (GLAPIENTRY * PFNGLVERTEX3SPROC) ( GLshort x, GLshort y, GLshort z );
typedef void (GLAPIENTRY * PFNGLVERTEX4DPROC) ( GLdouble x, GLdouble y, GLdouble z, GLdouble w );
typedef void (GLAPIENTRY * PFNGLVERTEX4FPROC) ( GLfloat x, GLfloat y, GLfloat z, GLfloat w );
typedef void (GLAPIENTRY * PFNGLVERTEX4IPROC) ( GLint x, GLint y, GLint z, GLint w );
typedef void (GLAPIENTRY * PFNGLVERTEX4SPROC) ( GLshort x, GLshort y, GLshort z, GLshort w );
typedef void (GLAPIENTRY * PFNGLVERTEX2DVPROC) ( const GLdouble *v );
typedef void (GLAPIENTRY * PFNGLVERTEX2FVPROC) ( const GLfloat *v );
typedef void (GLAPIENTRY * PFNGLVERTEX2IVPROC) ( const GLint *v );
typedef void (GLAPIENTRY * PFNGLVERTEX2SVPROC) ( const GLshort *v );
typedef void (GLAPIENTRY * PFNGLVERTEX3DVPROC) ( const GLdouble *v );
typedef void (GLAPIENTRY * PFNGLVERTEX3FVPROC) ( const GLfloat *v );
typedef void (GLAPIENTRY * PFNGLVERTEX3IVPROC) ( const GLint *v );
typedef void (GLAPIENTRY * PFNGLVERTEX3SVPROC) ( const GLshort *v );
typedef void (GLAPIENTRY * PFNGLVERTEX4DVPROC) ( const GLdouble *v );
typedef void (GLAPIENTRY * PFNGLVERTEX4FVPROC) ( const GLfloat *v );
typedef void (GLAPIENTRY * PFNGLVERTEX4IVPROC) ( const GLint *v );
typedef void (GLAPIENTRY * PFNGLVERTEX4SVPROC) ( const GLshort *v );
typedef void (GLAPIENTRY * PFNGLNORMAL3BPROC) ( GLbyte nx, GLbyte ny, GLbyte nz );
typedef void (GLAPIENTRY * PFNGLNORMAL3DPROC) ( GLdouble nx, GLdouble ny, GLdouble nz );
typedef void (GLAPIENTRY * PFNGLNORMAL3FPROC) ( GLfloat nx, GLfloat ny, GLfloat nz );
typedef void (GLAPIENTRY * PFNGLNORMAL3IPROC) ( GLint nx, GLint ny, GLint nz );
typedef void (GLAPIENTRY * PFNGLNORMAL3SPROC) ( GLshort nx, GLshort ny, GLshort nz );
typedef void (GLAPIENTRY * PFNGLNORMAL3BVPROC) ( const GLbyte *v );
typedef void (GLAPIENTRY * PFNGLNORMAL3DVPROC) ( const GLdouble *v );
typedef void (GLAPIENTRY * PFNGLNORMAL3FVPROC) ( const GLfloat *v );
typedef void (GLAPIENTRY * PFNGLNORMAL3IVPROC) ( const GLint *v );
typedef void (GLAPIENTRY * PFNGLNORMAL3SVPROC) ( const GLshort *v );
typedef void (GLAPIENTRY * PFNGLINDEXDPROC) ( GLdouble c );
typedef void (GLAPIENTRY * PFNGLINDEXFPROC) ( GLfloat c );
typedef void (GLAPIENTRY * PFNGLINDEXIPROC) ( GLint c );
typedef void (GLAPIENTRY * PFNGLINDEXSPROC) ( GLshort c );
typedef void (GLAPIENTRY * PFNGLINDEXUBPROC) ( GLubyte c ); /* 1.1 */
typedef void (GLAPIENTRY * PFNGLINDEXDVPROC) ( const GLdouble *c );
typedef void (GLAPIENTRY * PFNGLINDEXFVPROC) ( const GLfloat *c );
typedef void (GLAPIENTRY * PFNGLINDEXIVPROC) ( const GLint *c );
typedef void (GLAPIENTRY * PFNGLINDEXSVPROC) ( const GLshort *c );
typedef void (GLAPIENTRY * PFNGLINDEXUBVPROC) ( const GLubyte *c ); /* 1.1 */
typedef void (GLAPIENTRY * PFNGLCOLOR3BPROC) ( GLbyte red, GLbyte green, GLbyte blue );
typedef void (GLAPIENTRY * PFNGLCOLOR3DPROC) ( GLdouble red, GLdouble green, GLdouble blue );
typedef void (GLAPIENTRY * PFNGLCOLOR3FPROC) ( GLfloat red, GLfloat green, GLfloat blue );
typedef void (GLAPIENTRY * PFNGLCOLOR3IPROC) ( GLint red, GLint green, GLint blue );
typedef void (GLAPIENTRY * PFNGLCOLOR3SPROC) ( GLshort red, GLshort green, GLshort blue );
typedef void (GLAPIENTRY * PFNGLCOLOR3UBPROC) ( GLubyte red, GLubyte green, GLubyte blue );
typedef void (GLAPIENTRY * PFNGLCOLOR3UIPROC) ( GLuint red, GLuint green, GLuint blue );
typedef void (GLAPIENTRY * PFNGLCOLOR3USPROC) ( GLushort red, GLushort green, GLushort blue );
typedef void (GLAPIENTRY * PFNGLCOLOR4BPROC) ( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha );
typedef void (GLAPIENTRY * PFNGLCOLOR4DPROC) ( GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha );
typedef void (GLAPIENTRY * PFNGLCOLOR4FPROC) ( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );
typedef void (GLAPIENTRY * PFNGLCOLOR4IPROC) ( GLint red, GLint green, GLint blue, GLint alpha );
typedef void (GLAPIENTRY * PFNGLCOLOR4SPROC) ( GLshort red, GLshort green, GLshort blue, GLshort alpha );
typedef void (GLAPIENTRY * PFNGLCOLOR4UBPROC) ( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );
typedef void (GLAPIENTRY * PFNGLCOLOR4UIPROC) ( GLuint red, GLuint green, GLuint blue, GLuint alpha );
typedef void (GLAPIENTRY * PFNGLCOLOR4USPROC) ( GLushort red, GLushort green, GLushort blue, GLushort alpha );
typedef void (GLAPIENTRY * PFNGLCOLOR3BVPROC) ( const GLbyte *v );
typedef void (GLAPIENTRY * PFNGLCOLOR3DVPROC) ( const GLdouble *v );
typedef void (GLAPIENTRY * PFNGLCOLOR3FVPROC) ( const GLfloat *v );
typedef void (GLAPIENTRY * PFNGLCOLOR3IVPROC) ( const GLint *v );
typedef void (GLAPIENTRY * PFNGLCOLOR3SVPROC) ( const GLshort *v );
typedef void (GLAPIENTRY * PFNGLCOLOR3UBVPROC) ( const GLubyte *v );
typedef void (GLAPIENTRY * PFNGLCOLOR3UIVPROC) ( const GLuint *v );
typedef void (GLAPIENTRY * PFNGLCOLOR3USVPROC) ( const GLushort *v );
typedef void (GLAPIENTRY * PFNGLCOLOR4BVPROC) ( const GLbyte *v );
typedef void (GLAPIENTRY * PFNGLCOLOR4DVPROC) ( const GLdouble *v );
typedef void (GLAPIENTRY * PFNGLCOLOR4FVPROC) ( const GLfloat *v );
typedef void (GLAPIENTRY * PFNGLCOLOR4IVPROC) ( const GLint *v );
typedef void (GLAPIENTRY * PFNGLCOLOR4SVPROC) ( const GLshort *v );
typedef void (GLAPIENTRY * PFNGLCOLOR4UBVPROC) ( const GLubyte *v );
typedef void (GLAPIENTRY * PFNGLCOLOR4UIVPROC) ( const GLuint *v );
typedef void (GLAPIENTRY * PFNGLCOLOR4USVPROC) ( const GLushort *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD1DPROC) ( GLdouble s );
typedef void (GLAPIENTRY * PFNGLTEXCOORD1FPROC) ( GLfloat s );
typedef void (GLAPIENTRY * PFNGLTEXCOORD1IPROC) ( GLint s );
typedef void (GLAPIENTRY * PFNGLTEXCOORD1SPROC) ( GLshort s );
typedef void (GLAPIENTRY * PFNGLTEXCOORD2DPROC) ( GLdouble s, GLdouble t );
typedef void (GLAPIENTRY * PFNGLTEXCOORD2FPROC) ( GLfloat s, GLfloat t );
typedef void (GLAPIENTRY * PFNGLTEXCOORD2IPROC) ( GLint s, GLint t );
typedef void (GLAPIENTRY * PFNGLTEXCOORD2SPROC) ( GLshort s, GLshort t );
typedef void (GLAPIENTRY * PFNGLTEXCOORD3DPROC) ( GLdouble s, GLdouble t, GLdouble r );
typedef void (GLAPIENTRY * PFNGLTEXCOORD3FPROC) ( GLfloat s, GLfloat t, GLfloat r );
typedef void (GLAPIENTRY * PFNGLTEXCOORD3IPROC) ( GLint s, GLint t, GLint r );
typedef void (GLAPIENTRY * PFNGLTEXCOORD3SPROC) ( GLshort s, GLshort t, GLshort r );
typedef void (GLAPIENTRY * PFNGLTEXCOORD4DPROC) ( GLdouble s, GLdouble t, GLdouble r, GLdouble q );
typedef void (GLAPIENTRY * PFNGLTEXCOORD4FPROC) ( GLfloat s, GLfloat t, GLfloat r, GLfloat q );
typedef void (GLAPIENTRY * PFNGLTEXCOORD4IPROC) ( GLint s, GLint t, GLint r, GLint q );
typedef void (GLAPIENTRY * PFNGLTEXCOORD4SPROC) ( GLshort s, GLshort t, GLshort r, GLshort q );
typedef void (GLAPIENTRY * PFNGLTEXCOORD1DVPROC) ( const GLdouble *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD1FVPROC) ( const GLfloat *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD1IVPROC) ( const GLint *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD1SVPROC) ( const GLshort *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD2DVPROC) ( const GLdouble *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD2FVPROC) ( const GLfloat *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD2IVPROC) ( const GLint *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD2SVPROC) ( const GLshort *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD3DVPROC) ( const GLdouble *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD3FVPROC) ( const GLfloat *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD3IVPROC) ( const GLint *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD3SVPROC) ( const GLshort *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD4DVPROC) ( const GLdouble *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD4FVPROC) ( const GLfloat *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD4IVPROC) ( const GLint *v );
typedef void (GLAPIENTRY * PFNGLTEXCOORD4SVPROC) ( const GLshort *v );
typedef void (GLAPIENTRY * PFNGLRASTERPOS2DPROC) ( GLdouble x, GLdouble y );
typedef void (GLAPIENTRY * PFNGLRASTERPOS2FPROC) ( GLfloat x, GLfloat y );
typedef void (GLAPIENTRY * PFNGLRASTERPOS2IPROC) ( GLint x, GLint y );
typedef void (GLAPIENTRY * PFNGLRASTERPOS2SPROC) ( GLshort x, GLshort y );
typedef void (GLAPIENTRY * PFNGLRASTERPOS3DPROC) ( GLdouble x, GLdouble y, GLdouble z );
typedef void (GLAPIENTRY * PFNGLRASTERPOS3FPROC) ( GLfloat x, GLfloat y, GLfloat z );
typedef void (GLAPIENTRY * PFNGLRASTERPOS3IPROC) ( GLint x, GLint y, GLint z );
typedef void (GLAPIENTRY * PFNGLRASTERPOS3SPROC) ( GLshort x, GLshort y, GLshort z );
typedef void (GLAPIENTRY * PFNGLRASTERPOS4DPROC) ( GLdouble x, GLdouble y, GLdouble z, GLdouble w );
typedef void (GLAPIENTRY * PFNGLRASTERPOS4FPROC) ( GLfloat x, GLfloat y, GLfloat z, GLfloat w );
typedef void (GLAPIENTRY * PFNGLRASTERPOS4IPROC) ( GLint x, GLint y, GLint z, GLint w );
typedef void (GLAPIENTRY * PFNGLRASTERPOS4SPROC) ( GLshort x, GLshort y, GLshort z, GLshort w );
typedef void (GLAPIENTRY * PFNGLRASTERPOS2DVPROC) ( const GLdouble *v );
typedef void (GLAPIENTRY * PFNGLRASTERPOS2FVPROC) ( const GLfloat *v );
typedef void (GLAPIENTRY * PFNGLRASTERPOS2IVPROC) ( const GLint *v );
typedef void (GLAPIENTRY * PFNGLRASTERPOS2SVPROC) ( const GLshort *v );
typedef void (GLAPIENTRY * PFNGLRASTERPOS3DVPROC) ( const GLdouble *v );
typedef void (GLAPIENTRY * PFNGLRASTERPOS3FVPROC) ( const GLfloat *v );
typedef void (GLAPIENTRY * PFNGLRASTERPOS3IVPROC) ( const GLint *v );
typedef void (GLAPIENTRY * PFNGLRASTERPOS3SVPROC) ( const GLshort *v );
typedef void (GLAPIENTRY * PFNGLRASTERPOS4DVPROC) ( const GLdouble *v );
typedef void (GLAPIENTRY * PFNGLRASTERPOS4FVPROC) ( const GLfloat *v );
typedef void (GLAPIENTRY * PFNGLRASTERPOS4IVPROC) ( const GLint *v );
typedef void (GLAPIENTRY * PFNGLRASTERPOS4SVPROC) ( const GLshort *v );
typedef void (GLAPIENTRY * PFNGLRECTDPROC) ( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 );
typedef void (GLAPIENTRY * PFNGLRECTFPROC) ( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 );
typedef void (GLAPIENTRY * PFNGLRECTIPROC) ( GLint x1, GLint y1, GLint x2, GLint y2 );
typedef void (GLAPIENTRY * PFNGLRECTSPROC) ( GLshort x1, GLshort y1, GLshort x2, GLshort y2 );
typedef void (GLAPIENTRY * PFNGLRECTDVPROC) ( const GLdouble *v1, const GLdouble *v2 );
typedef void (GLAPIENTRY * PFNGLRECTFVPROC) ( const GLfloat *v1, const GLfloat *v2 );
typedef void (GLAPIENTRY * PFNGLRECTIVPROC) ( const GLint *v1, const GLint *v2 );
typedef void (GLAPIENTRY * PFNGLRECTSVPROC) ( const GLshort *v1, const GLshort *v2 );
typedef void (GLAPIENTRY * PFNGLVERTEXPOINTERPROC) ( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );
typedef void (GLAPIENTRY * PFNGLNORMALPOINTERPROC) ( GLenum type, GLsizei stride, const GLvoid *ptr );
typedef void (GLAPIENTRY * PFNGLCOLORPOINTERPROC) ( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );
typedef void (GLAPIENTRY * PFNGLINDEXPOINTERPROC) ( GLenum type, GLsizei stride, const GLvoid *ptr );
typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTERPROC) ( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );
typedef void (GLAPIENTRY * PFNGLEDGEFLAGPOINTERPROC) ( GLsizei stride, const GLvoid *ptr );
typedef void (GLAPIENTRY * PFNGLGETPOINTERVPROC) ( GLenum pname, GLvoid **params );
typedef void (GLAPIENTRY * PFNGLARRAYELEMENTPROC) ( GLint i );
typedef void (GLAPIENTRY * PFNGLDRAWARRAYSPROC) ( GLenum mode, GLint first, GLsizei count );
typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSPROC) ( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices );
typedef void (GLAPIENTRY * PFNGLINTERLEAVEDARRAYSPROC) ( GLenum format, GLsizei stride, const GLvoid *pointer );
typedef void (GLAPIENTRY * PFNGLSHADEMODELPROC) ( GLenum mode );
typedef void (GLAPIENTRY * PFNGLLIGHTFPROC) ( GLenum light, GLenum pname, GLfloat param );
typedef void (GLAPIENTRY * PFNGLLIGHTIPROC) ( GLenum light, GLenum pname, GLint param );
typedef void (GLAPIENTRY * PFNGLLIGHTFVPROC) ( GLenum light, GLenum pname, const GLfloat *params );
typedef void (GLAPIENTRY * PFNGLLIGHTIVPROC) ( GLenum light, GLenum pname, const GLint *params );
typedef void (GLAPIENTRY * PFNGLGETLIGHTFVPROC) ( GLenum light, GLenum pname, GLfloat *params );
typedef void (GLAPIENTRY * PFNGLGETLIGHTIVPROC) ( GLenum light, GLenum pname, GLint *params );
typedef void (GLAPIENTRY * PFNGLLIGHTMODELFPROC) ( GLenum pname, GLfloat param );
typedef void (GLAPIENTRY * PFNGLLIGHTMODELIPROC) ( GLenum pname, GLint param );
typedef void (GLAPIENTRY * PFNGLLIGHTMODELFVPROC) ( GLenum pname, const GLfloat *params );
typedef void (GLAPIENTRY * PFNGLLIGHTMODELIVPROC) ( GLenum pname, const GLint *params );
typedef void (GLAPIENTRY * PFNGLMATERIALFPROC) ( GLenum face, GLenum pname, GLfloat param );
typedef void (GLAPIENTRY * PFNGLMATERIALIPROC) ( GLenum face, GLenum pname, GLint param );
typedef void (GLAPIENTRY * PFNGLMATERIALFVPROC) ( GLenum face, GLenum pname, const GLfloat *params );
typedef void (GLAPIENTRY * PFNGLMATERIALIVPROC) ( GLenum face, GLenum pname, const GLint *params );
typedef void (GLAPIENTRY * PFNGLGETMATERIALFVPROC) ( GLenum face, GLenum pname, GLfloat *params );
typedef void (GLAPIENTRY * PFNGLGETMATERIALIVPROC) ( GLenum face, GLenum pname, GLint *params );
typedef void (GLAPIENTRY * PFNGLCOLORMATERIALPROC) ( GLenum face, GLenum mode );
typedef void (GLAPIENTRY * PFNGLPIXELZOOMPROC) ( GLfloat xfactor, GLfloat yfactor );
typedef void (GLAPIENTRY * PFNGLPIXELSTOREFPROC) ( GLenum pname, GLfloat param );
typedef void (GLAPIENTRY * PFNGLPIXELSTOREIPROC) ( GLenum pname, GLint param );
typedef void (GLAPIENTRY * PFNGLPIXELTRANSFERFPROC) ( GLenum pname, GLfloat param );
typedef void (GLAPIENTRY * PFNGLPIXELTRANSFERIPROC) ( GLenum pname, GLint param );
typedef void (GLAPIENTRY * PFNGLPIXELMAPFVPROC) ( GLenum map, GLsizei mapsize, const GLfloat *values );
typedef void (GLAPIENTRY * PFNGLPIXELMAPUIVPROC) ( GLenum map, GLsizei mapsize, const GLuint *values );
typedef void (GLAPIENTRY * PFNGLPIXELMAPUSVPROC) ( GLenum map, GLsizei mapsize, const GLushort *values );
typedef void (GLAPIENTRY * PFNGLGETPIXELMAPFVPROC) ( GLenum map, GLfloat *values );
typedef void (GLAPIENTRY * PFNGLGETPIXELMAPUIVPROC) ( GLenum map, GLuint *values );
typedef void (GLAPIENTRY * PFNGLGETPIXELMAPUSVPROC) ( GLenum map, GLushort *values );
typedef void (GLAPIENTRY * PFNGLBITMAPPROC) ( GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap );
typedef void (GLAPIENTRY * PFNGLREADPIXELSPROC) ( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels );
typedef void (GLAPIENTRY * PFNGLDRAWPIXELSPROC) ( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels );
typedef void (GLAPIENTRY * PFNGLCOPYPIXELSPROC) ( GLint x, GLint y, GLsizei width, GLsizei height, GLenum type );
typedef void (GLAPIENTRY * PFNGLSTENCILFUNCPROC) ( GLenum func, GLint ref, GLuint mask );
typedef void (GLAPIENTRY * PFNGLSTENCILMASKPROC) ( GLuint mask );
typedef void (GLAPIENTRY * PFNGLSTENCILOPPROC) ( GLenum fail, GLenum zfail, GLenum zpass );
typedef void (GLAPIENTRY * PFNGLCLEARSTENCILPROC) ( GLint s );
typedef void (GLAPIENTRY * PFNGLTEXGENDPROC) ( GLenum coord, GLenum pname, GLdouble param );
typedef void (GLAPIENTRY * PFNGLTEXGENFPROC) ( GLenum coord, GLenum pname, GLfloat param );
typedef void (GLAPIENTRY * PFNGLTEXGENIPROC) ( GLenum coord, GLenum pname, GLint param );
typedef void (GLAPIENTRY * PFNGLTEXGENDVPROC) ( GLenum coord, GLenum pname, const GLdouble *params );
typedef void (GLAPIENTRY * PFNGLTEXGENFVPROC) ( GLenum coord, GLenum pname, const GLfloat *params );
typedef void (GLAPIENTRY * PFNGLTEXGENIVPROC) ( GLenum coord, GLenum pname, const GLint *params );
typedef void (GLAPIENTRY * PFNGLGETTEXGENDVPROC) ( GLenum coord, GLenum pname, GLdouble *params );
typedef void (GLAPIENTRY * PFNGLGETTEXGENFVPROC) ( GLenum coord, GLenum pname, GLfloat *params );
typedef void (GLAPIENTRY * PFNGLGETTEXGENIVPROC) ( GLenum coord, GLenum pname, GLint *params );
typedef void (GLAPIENTRY * PFNGLTEXENVFPROC) ( GLenum target, GLenum pname, GLfloat param );
typedef void (GLAPIENTRY * PFNGLTEXENVIPROC) ( GLenum target, GLenum pname, GLint param );
typedef void (GLAPIENTRY * PFNGLTEXENVFVPROC) ( GLenum target, GLenum pname, const GLfloat *params );
typedef void (GLAPIENTRY * PFNGLTEXENVIVPROC) ( GLenum target, GLenum pname, const GLint *params );
typedef void (GLAPIENTRY * PFNGLGETTEXENVFVPROC) ( GLenum target, GLenum pname, GLfloat *params );
typedef void (GLAPIENTRY * PFNGLGETTEXENVIVPROC) ( GLenum target, GLenum pname, GLint *params );
typedef void (GLAPIENTRY * PFNGLTEXPARAMETERFPROC) ( GLenum target, GLenum pname, GLfloat param );
typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIPROC) ( GLenum target, GLenum pname, GLint param );
typedef void (GLAPIENTRY * PFNGLTEXPARAMETERFVPROC) ( GLenum target, GLenum pname, const GLfloat *params );
typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIVPROC) ( GLenum target, GLenum pname, const GLint *params );
typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERFVPROC) ( GLenum target, GLenum pname, GLfloat *params);
typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIVPROC) ( GLenum target, GLenum pname, GLint *params );
typedef void (GLAPIENTRY * PFNGLGETTEXLEVELPARAMETERFVPROC) ( GLenum target, GLint level, GLenum pname, GLfloat *params );
typedef void (GLAPIENTRY * PFNGLGETTEXLEVELPARAMETERIVPROC) ( GLenum target, GLint level, GLenum pname, GLint *params );
typedef void (GLAPIENTRY * PFNGLTEXIMAGE1DPROC) ( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels );
typedef void (GLAPIENTRY * PFNGLTEXIMAGE2DPROC) ( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels );
typedef void (GLAPIENTRY * PFNGLGETTEXIMAGEPROC) ( GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels );
typedef void (GLAPIENTRY * PFNGLGENTEXTURESPROC) ( GLsizei n, GLuint *textures );
typedef void (GLAPIENTRY * PFNGLDELETETEXTURESPROC) ( GLsizei n, const GLuint *textures);
typedef void (GLAPIENTRY * PFNGLBINDTEXTUREPROC) ( GLenum target, GLuint texture );
typedef void (GLAPIENTRY * PFNGLPRIORITIZETEXTURESPROC) ( GLsizei n, const GLuint *textures, const GLclampf *priorities );
typedef GLboolean (GLAPIENTRY * PFNGLARETEXTURESRESIDENTPROC) ( GLsizei n, const GLuint *textures, GLboolean *residences );
typedef GLboolean (GLAPIENTRY * PFNGLISTEXTUREPROC) ( GLuint texture );
typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE1DPROC) ( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels );
typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE2DPROC) ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels );
typedef void (GLAPIENTRY * PFNGLCOPYTEXIMAGE1DPROC) ( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border );
typedef void (GLAPIENTRY * PFNGLCOPYTEXIMAGE2DPROC) ( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border );
typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE1DPROC) ( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width );
typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE2DPROC) ( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height );
typedef void (GLAPIENTRY * PFNGLMAP1DPROC) ( GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points );
typedef void (GLAPIENTRY * PFNGLMAP1FPROC) ( GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points );
typedef void (GLAPIENTRY * PFNGLMAP2DPROC) ( GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points );
typedef void (GLAPIENTRY * PFNGLMAP2FPROC) ( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points );
typedef void (GLAPIENTRY * PFNGLGETMAPDVPROC) ( GLenum target, GLenum query, GLdouble *v );
typedef void (GLAPIENTRY * PFNGLGETMAPFVPROC) ( GLenum target, GLenum query, GLfloat *v );
typedef void (GLAPIENTRY * PFNGLGETMAPIVPROC) ( GLenum target, GLenum query, GLint *v );
typedef void (GLAPIENTRY * PFNGLEVALCOORD1DPROC) ( GLdouble u );
typedef void (GLAPIENTRY * PFNGLEVALCOORD1FPROC) ( GLfloat u );
typedef void (GLAPIENTRY * PFNGLEVALCOORD1DVPROC) ( const GLdouble *u );
typedef void (GLAPIENTRY * PFNGLEVALCOORD1FVPROC) ( const GLfloat *u );
typedef void (GLAPIENTRY * PFNGLEVALCOORD2DPROC) ( GLdouble u, GLdouble v );
typedef void (GLAPIENTRY * PFNGLEVALCOORD2FPROC) ( GLfloat u, GLfloat v );
typedef void (GLAPIENTRY * PFNGLEVALCOORD2DVPROC) ( const GLdouble *u );
typedef void (GLAPIENTRY * PFNGLEVALCOORD2FVPROC) ( const GLfloat *u );
typedef void (GLAPIENTRY * PFNGLMAPGRID1DPROC) ( GLint un, GLdouble u1, GLdouble u2 );
typedef void (GLAPIENTRY * PFNGLMAPGRID1FPROC) ( GLint un, GLfloat u1, GLfloat u2 );
typedef void (GLAPIENTRY * PFNGLMAPGRID2DPROC) ( GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2 );
typedef void (GLAPIENTRY * PFNGLMAPGRID2FPROC) ( GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2 );
typedef void (GLAPIENTRY * PFNGLEVALPOINT1PROC) ( GLint i );
typedef void (GLAPIENTRY * PFNGLEVALPOINT2PROC) ( GLint i, GLint j );
typedef void (GLAPIENTRY * PFNGLEVALMESH1PROC) ( GLenum mode, GLint i1, GLint i2 );
typedef void (GLAPIENTRY * PFNGLEVALMESH2PROC) ( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );
typedef void (GLAPIENTRY * PFNGLFOGFPROC) ( GLenum pname, GLfloat param );
typedef void (GLAPIENTRY * PFNGLFOGIPROC) ( GLenum pname, GLint param );
typedef void (GLAPIENTRY * PFNGLFOGFVPROC) ( GLenum pname, const GLfloat *params );
typedef void (GLAPIENTRY * PFNGLFOGIVPROC) ( GLenum pname, const GLint *params );
typedef void (GLAPIENTRY * PFNGLFEEDBACKBUFFERPROC) ( GLsizei size, GLenum type, GLfloat *buffer );
typedef void (GLAPIENTRY * PFNGLPASSTHROUGHPROC) ( GLfloat token );
typedef void (GLAPIENTRY * PFNGLSELECTBUFFERPROC) ( GLsizei size, GLuint *buffer );
typedef void (GLAPIENTRY * PFNGLINITNAMESPROC) ( void );
typedef void (GLAPIENTRY * PFNGLLOADNAMEPROC) ( GLuint name );
typedef void (GLAPIENTRY * PFNGLPUSHNAMEPROC) ( GLuint name );
typedef void (GLAPIENTRY * PFNGLPOPNAMEPROC) ( void );
extern PFNGLCLEARINDEXPROC glClearIndex;
extern PFNGLCLEARCOLORPROC glClearColor;
extern PFNGLCLEARPROC glClear;
extern PFNGLINDEXMASKPROC glIndexMask;
extern PFNGLCOLORMASKPROC glColorMask;
extern PFNGLALPHAFUNCPROC glAlphaFunc;
extern PFNGLBLENDFUNCPROC glBlendFunc;
extern PFNGLLOGICOPPROC glLogicOp;
extern PFNGLCULLFACEPROC glCullFace;
extern PFNGLFRONTFACEPROC glFrontFace;
extern PFNGLPOINTSIZEPROC glPointSize;
extern PFNGLLINEWIDTHPROC glLineWidth;
extern PFNGLLINESTIPPLEPROC glLineStipple;
extern PFNGLPOLYGONMODEPROC glPolygonMode;
extern PFNGLPOLYGONOFFSETPROC glPolygonOffset;
extern PFNGLPOLYGONSTIPPLEPROC glPolygonStipple;
extern PFNGLGETPOLYGONSTIPPLEPROC glGetPolygonStipple;
extern PFNGLEDGEFLAGPROC glEdgeFlag;
extern PFNGLEDGEFLAGVPROC glEdgeFlagv;
extern PFNGLSCISSORPROC glScissor;
extern PFNGLCLIPPLANEPROC glClipPlane;
extern PFNGLGETCLIPPLANEPROC glGetClipPlane;
extern PFNGLDRAWBUFFERPROC glDrawBuffer;
extern PFNGLREADBUFFERPROC glReadBuffer;
extern PFNGLENABLEPROC glEnable;
extern PFNGLDISABLEPROC glDisable;
extern PFNGLISENABLEDPROC glIsEnabled;
extern PFNGLENABLECLIENTSTATEPROC glEnableClientState;
extern PFNGLDISABLECLIENTSTATEPROC glDisableClientState;
extern PFNGLGETBOOLEANVPROC glGetBooleanv;
extern PFNGLGETDOUBLEVPROC glGetDoublev;
extern PFNGLGETFLOATVPROC glGetFloatv;
extern PFNGLGETINTEGERVPROC glGetIntegerv;
extern PFNGLPUSHATTRIBPROC glPushAttrib;
extern PFNGLPOPATTRIBPROC glPopAttrib;
extern PFNGLPUSHCLIENTATTRIBPROC glPushClientAttrib;
extern PFNGLPOPCLIENTATTRIBPROC glPopClientAttrib;
extern PFNGLRENDERMODEPROC glRenderMode;
extern PFNGLGETERRORPROC glGetError;
extern PFNGLGETSTRINGPROC glGetString;
extern PFNGLFINISHPROC glFinish;
extern PFNGLFLUSHPROC glFlush;
extern PFNGLHINTPROC glHint;
extern PFNGLCLEARDEPTHPROC glClearDepth;
extern PFNGLDEPTHFUNCPROC glDepthFunc;
extern PFNGLDEPTHMASKPROC glDepthMask;
extern PFNGLDEPTHRANGEPROC glDepthRange;
extern PFNGLCLEARACCUMPROC glClearAccum;
extern PFNGLACCUMPROC glAccum;
extern PFNGLMATRIXMODEPROC glMatrixMode;
extern PFNGLORTHOPROC glOrtho;
extern PFNGLFRUSTUMPROC glFrustum;
extern PFNGLVIEWPORTPROC glViewport;
extern PFNGLPUSHMATRIXPROC glPushMatrix;
extern PFNGLPOPMATRIXPROC glPopMatrix;
extern PFNGLLOADIDENTITYPROC glLoadIdentity;
extern PFNGLLOADMATRIXDPROC glLoadMatrixd;
extern PFNGLLOADMATRIXFPROC glLoadMatrixf;
extern PFNGLMULTMATRIXDPROC glMultMatrixd;
extern PFNGLMULTMATRIXFPROC glMultMatrixf;
extern PFNGLROTATEDPROC glRotated;
extern PFNGLROTATEFPROC glRotatef;
extern PFNGLSCALEDPROC glScaled;
extern PFNGLSCALEFPROC glScalef;
extern PFNGLTRANSLATEDPROC glTranslated;
extern PFNGLTRANSLATEFPROC glTranslatef;
extern PFNGLISLISTPROC glIsList;
extern PFNGLDELETELISTSPROC glDeleteLists;
extern PFNGLGENLISTSPROC glGenLists;
extern PFNGLNEWLISTPROC glNewList;
extern PFNGLENDLISTPROC glEndList;
extern PFNGLCALLLISTPROC glCallList;
extern PFNGLCALLLISTSPROC glCallLists;
extern PFNGLLISTBASEPROC glListBase;
extern PFNGLBEGINPROC glBegin;
extern PFNGLENDPROC glEnd;
extern PFNGLVERTEX2DPROC glVertex2d;
extern PFNGLVERTEX2FPROC glVertex2f;
extern PFNGLVERTEX2IPROC glVertex2i;
extern PFNGLVERTEX2SPROC glVertex2s;
extern PFNGLVERTEX3DPROC glVertex3d;
extern PFNGLVERTEX3FPROC glVertex3f;
extern PFNGLVERTEX3IPROC glVertex3i;
extern PFNGLVERTEX3SPROC glVertex3s;
extern PFNGLVERTEX4DPROC glVertex4d;
extern PFNGLVERTEX4FPROC glVertex4f;
extern PFNGLVERTEX4IPROC glVertex4i;
extern PFNGLVERTEX4SPROC glVertex4s;
extern PFNGLVERTEX2DVPROC glVertex2dv;
extern PFNGLVERTEX2FVPROC glVertex2fv;
extern PFNGLVERTEX2IVPROC glVertex2iv;
extern PFNGLVERTEX2SVPROC glVertex2sv;
extern PFNGLVERTEX3DVPROC glVertex3dv;
extern PFNGLVERTEX3FVPROC glVertex3fv;
extern PFNGLVERTEX3IVPROC glVertex3iv;
extern PFNGLVERTEX3SVPROC glVertex3sv;
extern PFNGLVERTEX4DVPROC glVertex4dv;
extern PFNGLVERTEX4FVPROC glVertex4fv;
extern PFNGLVERTEX4IVPROC glVertex4iv;
extern PFNGLVERTEX4SVPROC glVertex4sv;
extern PFNGLNORMAL3BPROC glNormal3b;
extern PFNGLNORMAL3DPROC glNormal3d;
extern PFNGLNORMAL3FPROC glNormal3f;
extern PFNGLNORMAL3IPROC glNormal3i;
extern PFNGLNORMAL3SPROC glNormal3s;
extern PFNGLNORMAL3BVPROC glNormal3bv;
extern PFNGLNORMAL3DVPROC glNormal3dv;
extern PFNGLNORMAL3FVPROC glNormal3fv;
extern PFNGLNORMAL3IVPROC glNormal3iv;
extern PFNGLNORMAL3SVPROC glNormal3sv;
extern PFNGLINDEXDPROC glIndexd;
extern PFNGLINDEXFPROC glIndexf;
extern PFNGLINDEXIPROC glIndexi;
extern PFNGLINDEXSPROC glIndexs;
extern PFNGLINDEXUBPROC glIndexub;
extern PFNGLINDEXDVPROC glIndexdv;
extern PFNGLINDEXFVPROC glIndexfv;
extern PFNGLINDEXIVPROC glIndexiv;
extern PFNGLINDEXSVPROC glIndexsv;
extern PFNGLINDEXUBVPROC glIndexubv;
extern PFNGLCOLOR3BPROC glColor3b;
extern PFNGLCOLOR3DPROC glColor3d;
extern PFNGLCOLOR3FPROC glColor3f;
extern PFNGLCOLOR3IPROC glColor3i;
extern PFNGLCOLOR3SPROC glColor3s;
extern PFNGLCOLOR3UBPROC glColor3ub;
extern PFNGLCOLOR3UIPROC glColor3ui;
extern PFNGLCOLOR3USPROC glColor3us;
extern PFNGLCOLOR4BPROC glColor4b;
extern PFNGLCOLOR4DPROC glColor4d;
extern PFNGLCOLOR4FPROC glColor4f;
extern PFNGLCOLOR4IPROC glColor4i;
extern PFNGLCOLOR4SPROC glColor4s;
extern PFNGLCOLOR4UBPROC glColor4ub;
extern PFNGLCOLOR4UIPROC glColor4ui;
extern PFNGLCOLOR4USPROC glColor4us;
extern PFNGLCOLOR3BVPROC glColor3bv;
extern PFNGLCOLOR3DVPROC glColor3dv;
extern PFNGLCOLOR3FVPROC glColor3fv;
extern PFNGLCOLOR3IVPROC glColor3iv;
extern PFNGLCOLOR3SVPROC glColor3sv;
extern PFNGLCOLOR3UBVPROC glColor3ubv;
extern PFNGLCOLOR3UIVPROC glColor3uiv;
extern PFNGLCOLOR3USVPROC glColor3usv;
extern PFNGLCOLOR4BVPROC glColor4bv;
extern PFNGLCOLOR4DVPROC glColor4dv;
extern PFNGLCOLOR4FVPROC glColor4fv;
extern PFNGLCOLOR4IVPROC glColor4iv;
extern PFNGLCOLOR4SVPROC glColor4sv;
extern PFNGLCOLOR4UBVPROC glColor4ubv;
extern PFNGLCOLOR4UIVPROC glColor4uiv;
extern PFNGLCOLOR4USVPROC glColor4usv;
extern PFNGLTEXCOORD1DPROC glTexCoord1d;
extern PFNGLTEXCOORD1FPROC glTexCoord1f;
extern PFNGLTEXCOORD1IPROC glTexCoord1i;
extern PFNGLTEXCOORD1SPROC glTexCoord1s;
extern PFNGLTEXCOORD2DPROC glTexCoord2d;
extern PFNGLTEXCOORD2FPROC glTexCoord2f;
extern PFNGLTEXCOORD2IPROC glTexCoord2i;
extern PFNGLTEXCOORD2SPROC glTexCoord2s;
extern PFNGLTEXCOORD3DPROC glTexCoord3d;
extern PFNGLTEXCOORD3FPROC glTexCoord3f;
extern PFNGLTEXCOORD3IPROC glTexCoord3i;
extern PFNGLTEXCOORD3SPROC glTexCoord3s;
extern PFNGLTEXCOORD4DPROC glTexCoord4d;
extern PFNGLTEXCOORD4FPROC glTexCoord4f;
extern PFNGLTEXCOORD4IPROC glTexCoord4i;
extern PFNGLTEXCOORD4SPROC glTexCoord4s;
extern PFNGLTEXCOORD1DVPROC glTexCoord1dv;
extern PFNGLTEXCOORD1FVPROC glTexCoord1fv;
extern PFNGLTEXCOORD1IVPROC glTexCoord1iv;
extern PFNGLTEXCOORD1SVPROC glTexCoord1sv;
extern PFNGLTEXCOORD2DVPROC glTexCoord2dv;
extern PFNGLTEXCOORD2FVPROC glTexCoord2fv;
extern PFNGLTEXCOORD2IVPROC glTexCoord2iv;
extern PFNGLTEXCOORD2SVPROC glTexCoord2sv;
extern PFNGLTEXCOORD3DVPROC glTexCoord3dv;
extern PFNGLTEXCOORD3FVPROC glTexCoord3fv;
extern PFNGLTEXCOORD3IVPROC glTexCoord3iv;
extern PFNGLTEXCOORD3SVPROC glTexCoord3sv;
extern PFNGLTEXCOORD4DVPROC glTexCoord4dv;
extern PFNGLTEXCOORD4FVPROC glTexCoord4fv;
extern PFNGLTEXCOORD4IVPROC glTexCoord4iv;
extern PFNGLTEXCOORD4SVPROC glTexCoord4sv;
extern PFNGLRASTERPOS2DPROC glRasterPos2d;
extern PFNGLRASTERPOS2FPROC glRasterPos2f;
extern PFNGLRASTERPOS2IPROC glRasterPos2i;
extern PFNGLRASTERPOS2SPROC glRasterPos2s;
extern PFNGLRASTERPOS3DPROC glRasterPos3d;
extern PFNGLRASTERPOS3FPROC glRasterPos3f;
extern PFNGLRASTERPOS3IPROC glRasterPos3i;
extern PFNGLRASTERPOS3SPROC glRasterPos3s;
extern PFNGLRASTERPOS4DPROC glRasterPos4d;
extern PFNGLRASTERPOS4FPROC glRasterPos4f;
extern PFNGLRASTERPOS4IPROC glRasterPos4i;
extern PFNGLRASTERPOS4SPROC glRasterPos4s;
extern PFNGLRASTERPOS2DVPROC glRasterPos2dv;
extern PFNGLRASTERPOS2FVPROC glRasterPos2fv;
extern PFNGLRASTERPOS2IVPROC glRasterPos2iv;
extern PFNGLRASTERPOS2SVPROC glRasterPos2sv;
extern PFNGLRASTERPOS3DVPROC glRasterPos3dv;
extern PFNGLRASTERPOS3FVPROC glRasterPos3fv;
extern PFNGLRASTERPOS3IVPROC glRasterPos3iv;
extern PFNGLRASTERPOS3SVPROC glRasterPos3sv;
extern PFNGLRASTERPOS4DVPROC glRasterPos4dv;
extern PFNGLRASTERPOS4FVPROC glRasterPos4fv;
extern PFNGLRASTERPOS4IVPROC glRasterPos4iv;
extern PFNGLRASTERPOS4SVPROC glRasterPos4sv;
extern PFNGLRECTDPROC glRectd;
extern PFNGLRECTFPROC glRectf;
extern PFNGLRECTIPROC glRecti;
extern PFNGLRECTSPROC glRects;
extern PFNGLRECTDVPROC glRectdv;
extern PFNGLRECTFVPROC glRectfv;
extern PFNGLRECTIVPROC glRectiv;
extern PFNGLRECTSVPROC glRectsv;
extern PFNGLVERTEXPOINTERPROC glVertexPointer;
extern PFNGLNORMALPOINTERPROC glNormalPointer;
extern PFNGLCOLORPOINTERPROC glColorPointer;
extern PFNGLINDEXPOINTERPROC glIndexPointer;
extern PFNGLTEXCOORDPOINTERPROC glTexCoordPointer;
extern PFNGLEDGEFLAGPOINTERPROC glEdgeFlagPointer;
extern PFNGLGETPOINTERVPROC glGetPointerv;
extern PFNGLARRAYELEMENTPROC glArrayElement;
extern PFNGLDRAWARRAYSPROC glDrawArrays;
extern PFNGLDRAWELEMENTSPROC glDrawElements;
extern PFNGLINTERLEAVEDARRAYSPROC glInterleavedArrays;
extern PFNGLSHADEMODELPROC glShadeModel;
extern PFNGLLIGHTFPROC glLightf;
extern PFNGLLIGHTIPROC glLighti;
extern PFNGLLIGHTFVPROC glLightfv;
extern PFNGLLIGHTIVPROC glLightiv;
extern PFNGLGETLIGHTFVPROC glGetLightfv;
extern PFNGLGETLIGHTIVPROC glGetLightiv;
extern PFNGLLIGHTMODELFPROC glLightModelf;
extern PFNGLLIGHTMODELIPROC glLightModeli;
extern PFNGLLIGHTMODELFVPROC glLightModelfv;
extern PFNGLLIGHTMODELIVPROC glLightModeliv;
extern PFNGLMATERIALFPROC glMaterialf;
extern PFNGLMATERIALIPROC glMateriali;
extern PFNGLMATERIALFVPROC glMaterialfv;
extern PFNGLMATERIALIVPROC glMaterialiv;
extern PFNGLGETMATERIALFVPROC glGetMaterialfv;
extern PFNGLGETMATERIALIVPROC glGetMaterialiv;
extern PFNGLCOLORMATERIALPROC glColorMaterial;
extern PFNGLPIXELZOOMPROC glPixelZoom;
extern PFNGLPIXELSTOREFPROC glPixelStoref;
extern PFNGLPIXELSTOREIPROC glPixelStorei;
extern PFNGLPIXELTRANSFERFPROC glPixelTransferf;
extern PFNGLPIXELTRANSFERIPROC glPixelTransferi;
extern PFNGLPIXELMAPFVPROC glPixelMapfv;
extern PFNGLPIXELMAPUIVPROC glPixelMapuiv;
extern PFNGLPIXELMAPUSVPROC glPixelMapusv;
extern PFNGLGETPIXELMAPFVPROC glGetPixelMapfv;
extern PFNGLGETPIXELMAPUIVPROC glGetPixelMapuiv;
extern PFNGLGETPIXELMAPUSVPROC glGetPixelMapusv;
extern PFNGLBITMAPPROC glBitmap;
extern PFNGLREADPIXELSPROC glReadPixels;
extern PFNGLDRAWPIXELSPROC glDrawPixels;
extern PFNGLCOPYPIXELSPROC glCopyPixels;
extern PFNGLSTENCILFUNCPROC glStencilFunc;
extern PFNGLSTENCILMASKPROC glStencilMask;
extern PFNGLSTENCILOPPROC glStencilOp;
extern PFNGLCLEARSTENCILPROC glClearStencil;
extern PFNGLTEXGENDPROC glTexGend;
extern PFNGLTEXGENFPROC glTexGenf;
extern PFNGLTEXGENIPROC glTexGeni;
extern PFNGLTEXGENDVPROC glTexGendv;
extern PFNGLTEXGENFVPROC glTexGenfv;
extern PFNGLTEXGENIVPROC glTexGeniv;
extern PFNGLGETTEXGENDVPROC glGetTexGendv;
extern PFNGLGETTEXGENFVPROC glGetTexGenfv;
extern PFNGLGETTEXGENIVPROC glGetTexGeniv;
extern PFNGLTEXENVFPROC glTexEnvf;
extern PFNGLTEXENVIPROC glTexEnvi;
extern PFNGLTEXENVFVPROC glTexEnvfv;
extern PFNGLTEXENVIVPROC glTexEnviv;
extern PFNGLGETTEXENVFVPROC glGetTexEnvfv;
extern PFNGLGETTEXENVIVPROC glGetTexEnviv;
extern PFNGLTEXPARAMETERFPROC glTexParameterf;
extern PFNGLTEXPARAMETERIPROC glTexParameteri;
extern PFNGLTEXPARAMETERFVPROC glTexParameterfv;
extern PFNGLTEXPARAMETERIVPROC glTexParameteriv;
extern PFNGLGETTEXPARAMETERFVPROC glGetTexParameterfv;
extern PFNGLGETTEXPARAMETERIVPROC glGetTexParameteriv;
extern PFNGLGETTEXLEVELPARAMETERFVPROC glGetTexLevelParameterfv;
extern PFNGLGETTEXLEVELPARAMETERIVPROC glGetTexLevelParameteriv;
extern PFNGLTEXIMAGE1DPROC glTexImage1D;
extern PFNGLTEXIMAGE2DPROC glTexImage2D;
extern PFNGLGETTEXIMAGEPROC glGetTexImage;
extern PFNGLGENTEXTURESPROC glGenTextures;
extern PFNGLDELETETEXTURESPROC glDeleteTextures;
extern PFNGLBINDTEXTUREPROC glBindTexture;
extern PFNGLPRIORITIZETEXTURESPROC glPrioritizeTextures;
extern PFNGLARETEXTURESRESIDENTPROC glAreTexturesResident;
extern PFNGLISTEXTUREPROC glIsTexture;
extern PFNGLTEXSUBIMAGE1DPROC glTexSubImage1D;
extern PFNGLTEXSUBIMAGE2DPROC glTexSubImage2D;
extern PFNGLCOPYTEXIMAGE1DPROC glCopyTexImage1D;
extern PFNGLCOPYTEXIMAGE2DPROC glCopyTexImage2D;
extern PFNGLCOPYTEXSUBIMAGE1DPROC glCopyTexSubImage1D;
extern PFNGLCOPYTEXSUBIMAGE2DPROC glCopyTexSubImage2D;
extern PFNGLMAP1DPROC glMap1d;
extern PFNGLMAP1FPROC glMap1f;
extern PFNGLMAP2DPROC glMap2d;
extern PFNGLMAP2FPROC glMap2f;
extern PFNGLGETMAPDVPROC glGetMapdv;
extern PFNGLGETMAPFVPROC glGetMapfv;
extern PFNGLGETMAPIVPROC glGetMapiv;
extern PFNGLEVALCOORD1DPROC glEvalCoord1d;
extern PFNGLEVALCOORD1FPROC glEvalCoord1f;
extern PFNGLEVALCOORD1DVPROC glEvalCoord1dv;
extern PFNGLEVALCOORD1FVPROC glEvalCoord1fv;
extern PFNGLEVALCOORD2DPROC glEvalCoord2d;
extern PFNGLEVALCOORD2FPROC glEvalCoord2f;
extern PFNGLEVALCOORD2DVPROC glEvalCoord2dv;
extern PFNGLEVALCOORD2FVPROC glEvalCoord2fv;
extern PFNGLMAPGRID1DPROC glMapGrid1d;
extern PFNGLMAPGRID1FPROC glMapGrid1f;
extern PFNGLMAPGRID2DPROC glMapGrid2d;
extern PFNGLMAPGRID2FPROC glMapGrid2f;
extern PFNGLEVALPOINT1PROC glEvalPoint1;
extern PFNGLEVALPOINT2PROC glEvalPoint2;
extern PFNGLEVALMESH1PROC glEvalMesh1;
extern PFNGLEVALMESH2PROC glEvalMesh2;
extern PFNGLFOGFPROC glFogf;
extern PFNGLFOGIPROC glFogi;
extern PFNGLFOGFVPROC glFogfv;
extern PFNGLFOGIVPROC glFogiv;
extern PFNGLFEEDBACKBUFFERPROC glFeedbackBuffer;
extern PFNGLPASSTHROUGHPROC glPassThrough;
extern PFNGLSELECTBUFFERPROC glSelectBuffer;
extern PFNGLINITNAMESPROC glInitNames;
extern PFNGLLOADNAMEPROC glLoadName;
extern PFNGLPUSHNAMEPROC glPushName;
extern PFNGLPOPNAMEPROC glPopName;

View File

@ -0,0 +1,11 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLCOPYTEXSUBIMAGE3DPROC glCopyTexSubImage3D;
extern PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements;
extern PFNGLTEXIMAGE3DPROC glTexImage3D;
extern PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D;

View File

@ -0,0 +1,53 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLACTIVETEXTUREARBPROC glActiveTexture;
extern PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTexture;
extern PFNGLCOMPRESSEDTEXIMAGE1DPROC glCompressedTexImage1D;
extern PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D;
extern PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D;
extern PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glCompressedTexSubImage1D;
extern PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D;
extern PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D;
extern PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage;
extern PFNGLLOADTRANSPOSEMATRIXDARBPROC glLoadTransposeMatrixd;
extern PFNGLLOADTRANSPOSEMATRIXFARBPROC glLoadTransposeMatrixf;
extern PFNGLMULTTRANSPOSEMATRIXDARBPROC glMultTransposeMatrixd;
extern PFNGLMULTTRANSPOSEMATRIXFARBPROC glMultTransposeMatrixf;
extern PFNGLMULTITEXCOORD1DARBPROC glMultiTexCoord1d;
extern PFNGLMULTITEXCOORD1DVARBPROC glMultiTexCoord1dv;
extern PFNGLMULTITEXCOORD1FARBPROC glMultiTexCoord1f;
extern PFNGLMULTITEXCOORD1FVARBPROC glMultiTexCoord1fv;
extern PFNGLMULTITEXCOORD1IARBPROC glMultiTexCoord1i;
extern PFNGLMULTITEXCOORD1IVARBPROC glMultiTexCoord1iv;
extern PFNGLMULTITEXCOORD1SARBPROC glMultiTexCoord1s;
extern PFNGLMULTITEXCOORD1SVARBPROC glMultiTexCoord1sv;
extern PFNGLMULTITEXCOORD2DARBPROC glMultiTexCoord2d;
extern PFNGLMULTITEXCOORD2DVARBPROC glMultiTexCoord2dv;
extern PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2f;
extern PFNGLMULTITEXCOORD2FVARBPROC glMultiTexCoord2fv;
extern PFNGLMULTITEXCOORD2IARBPROC glMultiTexCoord2i;
extern PFNGLMULTITEXCOORD2IVARBPROC glMultiTexCoord2iv;
extern PFNGLMULTITEXCOORD2SARBPROC glMultiTexCoord2s;
extern PFNGLMULTITEXCOORD2SVARBPROC glMultiTexCoord2sv;
extern PFNGLMULTITEXCOORD3DARBPROC glMultiTexCoord3d;
extern PFNGLMULTITEXCOORD3DVARBPROC glMultiTexCoord3dv;
extern PFNGLMULTITEXCOORD3FARBPROC glMultiTexCoord3f;
extern PFNGLMULTITEXCOORD3FVARBPROC glMultiTexCoord3fv;
extern PFNGLMULTITEXCOORD3IARBPROC glMultiTexCoord3i;
extern PFNGLMULTITEXCOORD3IVARBPROC glMultiTexCoord3iv;
extern PFNGLMULTITEXCOORD3SARBPROC glMultiTexCoord3s;
extern PFNGLMULTITEXCOORD3SVARBPROC glMultiTexCoord3sv;
extern PFNGLMULTITEXCOORD4DARBPROC glMultiTexCoord4d;
extern PFNGLMULTITEXCOORD4DVARBPROC glMultiTexCoord4dv;
extern PFNGLMULTITEXCOORD4FARBPROC glMultiTexCoord4f;
extern PFNGLMULTITEXCOORD4FVARBPROC glMultiTexCoord4fv;
extern PFNGLMULTITEXCOORD4IARBPROC glMultiTexCoord4i;
extern PFNGLMULTITEXCOORD4IVARBPROC glMultiTexCoord4iv;
extern PFNGLMULTITEXCOORD4SARBPROC glMultiTexCoord4s;
extern PFNGLMULTITEXCOORD4SVARBPROC glMultiTexCoord4sv;
extern PFNGLSAMPLECOVERAGEARBPROC glSampleCoverage;

View File

@ -0,0 +1,55 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
// These two are provided by ARB_imaging as well
extern PFNGLBLENDCOLORPROC glBlendColor;
extern PFNGLBLENDEQUATIONPROC glBlendEquation;
extern PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate;
extern PFNGLFOGCOORDPOINTERPROC glFogCoordPointer;
extern PFNGLFOGCOORDDPROC glFogCoordd;
extern PFNGLFOGCOORDDVPROC glFogCoorddv;
extern PFNGLFOGCOORDFPROC glFogCoordf;
extern PFNGLFOGCOORDFVPROC glFogCoordfv;
extern PFNGLMULTIDRAWARRAYSPROC glMultiDrawArrays;
extern PFNGLMULTIDRAWELEMENTSPROC glMultiDrawElements;
extern PFNGLPOINTPARAMETERFPROC glPointParameterf;
extern PFNGLPOINTPARAMETERFVPROC glPointParameterfv;
extern PFNGLPOINTPARAMETERIPROC glPointParameteri;
extern PFNGLPOINTPARAMETERIVPROC glPointParameteriv;
extern PFNGLSECONDARYCOLOR3BPROC glSecondaryColor3b;
extern PFNGLSECONDARYCOLOR3BVPROC glSecondaryColor3bv;
extern PFNGLSECONDARYCOLOR3DPROC glSecondaryColor3d;
extern PFNGLSECONDARYCOLOR3DVPROC glSecondaryColor3dv;
extern PFNGLSECONDARYCOLOR3FPROC glSecondaryColor3f;
extern PFNGLSECONDARYCOLOR3FVPROC glSecondaryColor3fv;
extern PFNGLSECONDARYCOLOR3IPROC glSecondaryColor3i;
extern PFNGLSECONDARYCOLOR3IVPROC glSecondaryColor3iv;
extern PFNGLSECONDARYCOLOR3SPROC glSecondaryColor3s;
extern PFNGLSECONDARYCOLOR3SVPROC glSecondaryColor3sv;
extern PFNGLSECONDARYCOLOR3UBPROC glSecondaryColor3ub;
extern PFNGLSECONDARYCOLOR3UBVPROC glSecondaryColor3ubv;
extern PFNGLSECONDARYCOLOR3UIPROC glSecondaryColor3ui;
extern PFNGLSECONDARYCOLOR3UIVPROC glSecondaryColor3uiv;
extern PFNGLSECONDARYCOLOR3USPROC glSecondaryColor3us;
extern PFNGLSECONDARYCOLOR3USVPROC glSecondaryColor3usv;
extern PFNGLSECONDARYCOLORPOINTERPROC glSecondaryColorPointer;
extern PFNGLWINDOWPOS2DPROC glWindowPos2d;
extern PFNGLWINDOWPOS2DVPROC glWindowPos2dv;
extern PFNGLWINDOWPOS2FPROC glWindowPos2f;
extern PFNGLWINDOWPOS2FVPROC glWindowPos2fv;
extern PFNGLWINDOWPOS2IPROC glWindowPos2i;
extern PFNGLWINDOWPOS2IVPROC glWindowPos2iv;
extern PFNGLWINDOWPOS2SPROC glWindowPos2s;
extern PFNGLWINDOWPOS2SVPROC glWindowPos2sv;
extern PFNGLWINDOWPOS3DPROC glWindowPos3d;
extern PFNGLWINDOWPOS3DVPROC glWindowPos3dv;
extern PFNGLWINDOWPOS3FPROC glWindowPos3f;
extern PFNGLWINDOWPOS3FVPROC glWindowPos3fv;
extern PFNGLWINDOWPOS3IPROC glWindowPos3i;
extern PFNGLWINDOWPOS3IVPROC glWindowPos3iv;
extern PFNGLWINDOWPOS3SPROC glWindowPos3s;
extern PFNGLWINDOWPOS3SVPROC glWindowPos3sv;

View File

@ -0,0 +1,26 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLBEGINQUERYPROC glBeginQuery;
extern PFNGLBINDBUFFERPROC glBindBuffer;
extern PFNGLBUFFERDATAPROC glBufferData;
extern PFNGLBUFFERSUBDATAPROC glBufferSubData;
extern PFNGLDELETEBUFFERSPROC glDeleteBuffers;
extern PFNGLDELETEQUERIESPROC glDeleteQueries;
extern PFNGLENDQUERYPROC glEndQuery;
extern PFNGLGENBUFFERSPROC glGenBuffers;
extern PFNGLGENQUERIESPROC glGenQueries;
extern PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv;
extern PFNGLGETBUFFERPOINTERVPROC glGetBufferPointerv;
extern PFNGLGETBUFFERSUBDATAPROC glGetBufferSubData;
extern PFNGLGETQUERYOBJECTIVPROC glGetQueryObjectiv;
extern PFNGLGETQUERYOBJECTUIVPROC glGetQueryObjectuiv;
extern PFNGLGETQUERYIVPROC glGetQueryiv;
extern PFNGLISBUFFERPROC glIsBuffer;
extern PFNGLISQUERYPROC glIsQuery;
extern PFNGLMAPBUFFERPROC glMapBuffer;
extern PFNGLUNMAPBUFFERPROC glUnmapBuffer;

View File

@ -0,0 +1,100 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLATTACHSHADERPROC glAttachShader;
extern PFNGLBINDATTRIBLOCATIONPROC glBindAttribLocation;
extern PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate;
extern PFNGLCOMPILESHADERPROC glCompileShader;
extern PFNGLCREATEPROGRAMPROC glCreateProgram;
extern PFNGLCREATESHADERPROC glCreateShader;
extern PFNGLDELETEPROGRAMPROC glDeleteProgram;
extern PFNGLDELETESHADERPROC glDeleteShader;
extern PFNGLDETACHSHADERPROC glDetachShader;
extern PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
extern PFNGLDRAWBUFFERSPROC glDrawBuffers;
extern PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
extern PFNGLGETACTIVEATTRIBPROC glGetActiveAttrib;
extern PFNGLGETACTIVEUNIFORMPROC glGetActiveUniform;
extern PFNGLGETATTACHEDSHADERSPROC glGetAttachedShaders;
extern PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation;
extern PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
extern PFNGLGETPROGRAMIVPROC glGetProgramiv;
extern PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
extern PFNGLGETSHADERSOURCEPROC glGetShaderSource;
extern PFNGLGETSHADERIVPROC glGetShaderiv;
extern PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
extern PFNGLGETUNIFORMFVPROC glGetUniformfv;
extern PFNGLGETUNIFORMIVPROC glGetUniformiv;
extern PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv;
extern PFNGLGETVERTEXATTRIBDVPROC glGetVertexAttribdv;
extern PFNGLGETVERTEXATTRIBFVPROC glGetVertexAttribfv;
extern PFNGLGETVERTEXATTRIBIVPROC glGetVertexAttribiv;
extern PFNGLISPROGRAMPROC glIsProgram;
extern PFNGLISSHADERPROC glIsShader;
extern PFNGLLINKPROGRAMPROC glLinkProgram;
extern PFNGLSHADERSOURCEPROC glShaderSource;
extern PFNGLSTENCILFUNCSEPARATEPROC glStencilFuncSeparate;
extern PFNGLSTENCILMASKSEPARATEPROC glStencilMaskSeparate;
extern PFNGLSTENCILOPSEPARATEPROC glStencilOpSeparate;
extern PFNGLUNIFORM1FPROC glUniform1f;
extern PFNGLUNIFORM1FVPROC glUniform1fv;
extern PFNGLUNIFORM1IPROC glUniform1i;
extern PFNGLUNIFORM1IVPROC glUniform1iv;
extern PFNGLUNIFORM2FPROC glUniform2f;
extern PFNGLUNIFORM2FVPROC glUniform2fv;
extern PFNGLUNIFORM2IPROC glUniform2i;
extern PFNGLUNIFORM2IVPROC glUniform2iv;
extern PFNGLUNIFORM3FPROC glUniform3f;
extern PFNGLUNIFORM3FVPROC glUniform3fv;
extern PFNGLUNIFORM3IPROC glUniform3i;
extern PFNGLUNIFORM3IVPROC glUniform3iv;
extern PFNGLUNIFORM4FPROC glUniform4f;
extern PFNGLUNIFORM4FVPROC glUniform4fv;
extern PFNGLUNIFORM4IPROC glUniform4i;
extern PFNGLUNIFORM4IVPROC glUniform4iv;
extern PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv;
extern PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv;
extern PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
extern PFNGLUSEPROGRAMPROC glUseProgram;
extern PFNGLVALIDATEPROGRAMPROC glValidateProgram;
extern PFNGLVERTEXATTRIB1DPROC glVertexAttrib1d;
extern PFNGLVERTEXATTRIB1DVPROC glVertexAttrib1dv;
extern PFNGLVERTEXATTRIB1FPROC glVertexAttrib1f;
extern PFNGLVERTEXATTRIB1FVPROC glVertexAttrib1fv;
extern PFNGLVERTEXATTRIB1SPROC glVertexAttrib1s;
extern PFNGLVERTEXATTRIB1SVPROC glVertexAttrib1sv;
extern PFNGLVERTEXATTRIB2DPROC glVertexAttrib2d;
extern PFNGLVERTEXATTRIB2DVPROC glVertexAttrib2dv;
extern PFNGLVERTEXATTRIB2FPROC glVertexAttrib2f;
extern PFNGLVERTEXATTRIB2FVPROC glVertexAttrib2fv;
extern PFNGLVERTEXATTRIB2SPROC glVertexAttrib2s;
extern PFNGLVERTEXATTRIB2SVPROC glVertexAttrib2sv;
extern PFNGLVERTEXATTRIB3DPROC glVertexAttrib3d;
extern PFNGLVERTEXATTRIB3DVPROC glVertexAttrib3dv;
extern PFNGLVERTEXATTRIB3FPROC glVertexAttrib3f;
extern PFNGLVERTEXATTRIB3FVPROC glVertexAttrib3fv;
extern PFNGLVERTEXATTRIB3SPROC glVertexAttrib3s;
extern PFNGLVERTEXATTRIB3SVPROC glVertexAttrib3sv;
extern PFNGLVERTEXATTRIB4NBVPROC glVertexAttrib4Nbv;
extern PFNGLVERTEXATTRIB4NIVPROC glVertexAttrib4Niv;
extern PFNGLVERTEXATTRIB4NSVPROC glVertexAttrib4Nsv;
extern PFNGLVERTEXATTRIB4NUBPROC glVertexAttrib4Nub;
extern PFNGLVERTEXATTRIB4NUBVPROC glVertexAttrib4Nubv;
extern PFNGLVERTEXATTRIB4NUIVPROC glVertexAttrib4Nuiv;
extern PFNGLVERTEXATTRIB4NUSVPROC glVertexAttrib4Nusv;
extern PFNGLVERTEXATTRIB4BVPROC glVertexAttrib4bv;
extern PFNGLVERTEXATTRIB4DPROC glVertexAttrib4d;
extern PFNGLVERTEXATTRIB4DVPROC glVertexAttrib4dv;
extern PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f;
extern PFNGLVERTEXATTRIB4FVPROC glVertexAttrib4fv;
extern PFNGLVERTEXATTRIB4IVPROC glVertexAttrib4iv;
extern PFNGLVERTEXATTRIB4SPROC glVertexAttrib4s;
extern PFNGLVERTEXATTRIB4SVPROC glVertexAttrib4sv;
extern PFNGLVERTEXATTRIB4UBVPROC glVertexAttrib4ubv;
extern PFNGLVERTEXATTRIB4UIVPROC glVertexAttrib4uiv;
extern PFNGLVERTEXATTRIB4USVPROC glVertexAttrib4usv;
extern PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;

View File

@ -0,0 +1,62 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLBEGINCONDITIONALRENDERPROC glBeginConditionalRender;
extern PFNGLBEGINTRANSFORMFEEDBACKPROC glBeginTransformFeedback;
extern PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation;
extern PFNGLCLAMPCOLORPROC glClampColor;
extern PFNGLCLEARBUFFERFIPROC glClearBufferfi;
extern PFNGLCLEARBUFFERFVPROC glClearBufferfv;
extern PFNGLCLEARBUFFERIVPROC glClearBufferiv;
extern PFNGLCLEARBUFFERUIVPROC glClearBufferuiv;
extern PFNGLCOLORMASKIPROC glColorMaski;
extern PFNGLDISABLEIPROC glDisablei;
extern PFNGLENABLEIPROC glEnablei;
extern PFNGLENDCONDITIONALRENDERPROC glEndConditionalRender;
extern PFNGLENDTRANSFORMFEEDBACKPROC glEndTransformFeedback;
extern PFNGLGETBOOLEANI_VPROC glGetBooleani_v;
extern PFNGLGETFRAGDATALOCATIONPROC glGetFragDataLocation;
extern PFNGLGETSTRINGIPROC glGetStringi;
extern PFNGLGETTEXPARAMETERIIVPROC glGetTexParameterIiv;
extern PFNGLGETTEXPARAMETERIUIVPROC glGetTexParameterIuiv;
extern PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glGetTransformFeedbackVarying;
extern PFNGLGETUNIFORMUIVPROC glGetUniformuiv;
extern PFNGLGETVERTEXATTRIBIIVPROC glGetVertexAttribIiv;
extern PFNGLGETVERTEXATTRIBIUIVPROC glGetVertexAttribIuiv;
extern PFNGLISENABLEDIPROC glIsEnabledi;
extern PFNGLTEXPARAMETERIIVPROC glTexParameterIiv;
extern PFNGLTEXPARAMETERIUIVPROC glTexParameterIuiv;
extern PFNGLTRANSFORMFEEDBACKVARYINGSPROC glTransformFeedbackVaryings;
extern PFNGLUNIFORM1UIPROC glUniform1ui;
extern PFNGLUNIFORM1UIVPROC glUniform1uiv;
extern PFNGLUNIFORM2UIPROC glUniform2ui;
extern PFNGLUNIFORM2UIVPROC glUniform2uiv;
extern PFNGLUNIFORM3UIPROC glUniform3ui;
extern PFNGLUNIFORM3UIVPROC glUniform3uiv;
extern PFNGLUNIFORM4UIPROC glUniform4ui;
extern PFNGLUNIFORM4UIVPROC glUniform4uiv;
extern PFNGLVERTEXATTRIBI1IPROC glVertexAttribI1i;
extern PFNGLVERTEXATTRIBI1IVPROC glVertexAttribI1iv;
extern PFNGLVERTEXATTRIBI1UIPROC glVertexAttribI1ui;
extern PFNGLVERTEXATTRIBI1UIVPROC glVertexAttribI1uiv;
extern PFNGLVERTEXATTRIBI2IPROC glVertexAttribI2i;
extern PFNGLVERTEXATTRIBI2IVPROC glVertexAttribI2iv;
extern PFNGLVERTEXATTRIBI2UIPROC glVertexAttribI2ui;
extern PFNGLVERTEXATTRIBI2UIVPROC glVertexAttribI2uiv;
extern PFNGLVERTEXATTRIBI3IPROC glVertexAttribI3i;
extern PFNGLVERTEXATTRIBI3IVPROC glVertexAttribI3iv;
extern PFNGLVERTEXATTRIBI3UIPROC glVertexAttribI3ui;
extern PFNGLVERTEXATTRIBI3UIVPROC glVertexAttribI3uiv;
extern PFNGLVERTEXATTRIBI4BVPROC glVertexAttribI4bv;
extern PFNGLVERTEXATTRIBI4IPROC glVertexAttribI4i;
extern PFNGLVERTEXATTRIBI4IVPROC glVertexAttribI4iv;
extern PFNGLVERTEXATTRIBI4SVPROC glVertexAttribI4sv;
extern PFNGLVERTEXATTRIBI4UBVPROC glVertexAttribI4ubv;
extern PFNGLVERTEXATTRIBI4UIPROC glVertexAttribI4ui;
extern PFNGLVERTEXATTRIBI4UIVPROC glVertexAttribI4uiv;
extern PFNGLVERTEXATTRIBI4USVPROC glVertexAttribI4usv;
extern PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer;

View File

@ -0,0 +1,11 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced;
extern PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced;
extern PFNGLPRIMITIVERESTARTINDEXPROC glPrimitiveRestartIndex;
extern PFNGLTEXBUFFERPROC glTexBuffer;

View File

@ -0,0 +1,10 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLExtensions/gl_common.h"
extern PFNGLFRAMEBUFFERTEXTUREPROC glFramebufferTexture;
extern PFNGLGETBUFFERPARAMETERI64VPROC glGetBufferParameteri64v;
extern PFNGLGETINTEGER64I_VPROC glGetInteger64i_v;

View File

@ -0,0 +1,7 @@
// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include <GL/gl.h>
#include <GL/glext.h>

View File

@ -0,0 +1,109 @@
// Copyright 2012 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLInterface/AGL.h"
#include "VideoCommon/RenderBase.h"
#include "VideoCommon/VertexShaderManager.h"
#include "VideoCommon/VideoConfig.h"
void cInterfaceAGL::Swap()
{
[cocoaCtx flushBuffer];
}
// Create rendering window.
// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
bool cInterfaceAGL::Create(void *window_handle, bool core)
{
cocoaWin = reinterpret_cast<NSView*>(window_handle);
NSSize size = [cocoaWin frame].size;
// Enable high-resolution display support.
[cocoaWin setWantsBestResolutionOpenGLSurface:YES];
NSWindow *window = [cocoaWin window];
float scale = [window backingScaleFactor];
size.width *= scale;
size.height *= scale;
// Control window size and picture scaling
s_backbuffer_width = size.width;
s_backbuffer_height = size.height;
NSOpenGLPixelFormatAttribute attr[] = { NSOpenGLPFADoubleBuffer, NSOpenGLPFAOpenGLProfile, core ? NSOpenGLProfileVersion3_2Core : NSOpenGLProfileVersionLegacy, NSOpenGLPFAAccelerated, 0 };
NSOpenGLPixelFormat *fmt = [[NSOpenGLPixelFormat alloc]
initWithAttributes: attr];
if (fmt == nil)
{
ERROR_LOG(VIDEO, "failed to create pixel format");
return false;
}
cocoaCtx = [[NSOpenGLContext alloc] initWithFormat: fmt shareContext: nil];
[fmt release];
if (cocoaCtx == nil)
{
ERROR_LOG(VIDEO, "failed to create context");
return false;
}
if (cocoaWin == nil)
{
ERROR_LOG(VIDEO, "failed to create window");
return false;
}
[window makeFirstResponder:cocoaWin];
[cocoaCtx setView: cocoaWin];
[window makeKeyAndOrderFront: nil];
return true;
}
bool cInterfaceAGL::MakeCurrent()
{
[cocoaCtx makeCurrentContext];
return true;
}
bool cInterfaceAGL::ClearCurrent()
{
[NSOpenGLContext clearCurrentContext];
return true;
}
// Close backend
void cInterfaceAGL::Shutdown()
{
[cocoaCtx clearDrawable];
[cocoaCtx release];
cocoaCtx = nil;
}
void cInterfaceAGL::Update()
{
NSWindow *window = [cocoaWin window];
NSSize size = [cocoaWin frame].size;
float scale = [window backingScaleFactor];
size.width *= scale;
size.height *= scale;
if (s_backbuffer_width == size.width &&
s_backbuffer_height == size.height)
return;
s_backbuffer_width = size.width;
s_backbuffer_height = size.height;
[cocoaCtx update];
}
void cInterfaceAGL::SwapInterval(int interval)
{
[cocoaCtx setValues:(GLint *)&interval forParameter:NSOpenGLCPSwapInterval];
}

View File

@ -0,0 +1,27 @@
// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
#ifdef __APPLE__
#import <AppKit/AppKit.h>
#endif
#include "Common/GL/GLInterfaceBase.h"
class cInterfaceAGL : public cInterfaceBase
{
private:
NSView *cocoaWin;
NSOpenGLContext *cocoaCtx;
public:
void Swap();
bool Create(void *window_handle, bool core);
bool MakeCurrent();
bool ClearCurrent();
void Shutdown();
void Update();
void SwapInterval(int interval);
};

View File

@ -0,0 +1,227 @@
// Copyright 2012 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLInterfaceBase.h"
#include "Common/GL/GLInterface/EGL.h"
#include "VideoCommon/DriverDetails.h"
#include "VideoCommon/RenderBase.h"
// Show the current FPS
void cInterfaceEGL::Swap()
{
eglSwapBuffers(egl_dpy, egl_surf);
}
void cInterfaceEGL::SwapInterval(int Interval)
{
if (!DriverDetails::HasBug(DriverDetails::BUG_BROKENVSYNC))
eglSwapInterval(egl_dpy, Interval);
}
void* cInterfaceEGL::GetFuncAddress(const std::string& name)
{
return (void*)eglGetProcAddress(name.c_str());
}
void cInterfaceEGL::DetectMode()
{
if (s_opengl_mode != MODE_DETECT)
return;
EGLint num_configs;
bool supportsGL = false, supportsGLES2 = false, supportsGLES3 = false;
std::array<int, 3> renderable_types = {
EGL_OPENGL_BIT,
(1 << 6), /* EGL_OPENGL_ES3_BIT_KHR */
EGL_OPENGL_ES2_BIT,
};
for (auto renderable_type : renderable_types)
{
// attributes for a visual in RGBA format with at least
// 8 bits per color
int attribs[] = {
EGL_RED_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_BLUE_SIZE, 8,
EGL_RENDERABLE_TYPE, renderable_type,
EGL_NONE
};
// Get how many configs there are
if (!eglChooseConfig( egl_dpy, attribs, nullptr, 0, &num_configs))
{
INFO_LOG(VIDEO, "Error: couldn't get an EGL visual config\n");
continue;
}
EGLConfig* config = new EGLConfig[num_configs];
// Get all the configurations
if (!eglChooseConfig(egl_dpy, attribs, config, num_configs, &num_configs))
{
INFO_LOG(VIDEO, "Error: couldn't get an EGL visual config\n");
delete[] config;
continue;
}
for (int i = 0; i < num_configs; ++i)
{
EGLint attribVal;
bool ret;
ret = eglGetConfigAttrib(egl_dpy, config[i], EGL_RENDERABLE_TYPE, &attribVal);
if (ret)
{
if (attribVal & EGL_OPENGL_BIT)
supportsGL = true;
if (attribVal & (1 << 6)) /* EGL_OPENGL_ES3_BIT_KHR */
supportsGLES3 = true;
if (attribVal & EGL_OPENGL_ES2_BIT)
supportsGLES2 = true;
}
}
delete[] config;
}
if (supportsGL)
s_opengl_mode = GLInterfaceMode::MODE_OPENGL;
else if (supportsGLES3)
s_opengl_mode = GLInterfaceMode::MODE_OPENGLES3;
else if (supportsGLES2)
s_opengl_mode = GLInterfaceMode::MODE_OPENGLES2;
if (s_opengl_mode == GLInterfaceMode::MODE_DETECT) // Errored before we found a mode
s_opengl_mode = GLInterfaceMode::MODE_OPENGL; // Fall back to OpenGL
}
// Create rendering window.
// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
bool cInterfaceEGL::Create(void *window_handle, bool core)
{
const char *s;
EGLint egl_major, egl_minor;
egl_dpy = OpenDisplay();
if (!egl_dpy)
{
INFO_LOG(VIDEO, "Error: eglGetDisplay() failed\n");
return false;
}
if (!eglInitialize(egl_dpy, &egl_major, &egl_minor))
{
INFO_LOG(VIDEO, "Error: eglInitialize() failed\n");
return false;
}
/* Detection code */
EGLConfig config;
EGLint num_configs;
DetectMode();
// attributes for a visual in RGBA format with at least
// 8 bits per color
int attribs[] = {
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_RED_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_BLUE_SIZE, 8,
EGL_NONE };
EGLint ctx_attribs[] = {
EGL_CONTEXT_CLIENT_VERSION, 2,
EGL_NONE
};
switch (s_opengl_mode)
{
case MODE_OPENGL:
attribs[1] = EGL_OPENGL_BIT;
ctx_attribs[0] = EGL_NONE;
break;
case MODE_OPENGLES2:
attribs[1] = EGL_OPENGL_ES2_BIT;
ctx_attribs[1] = 2;
break;
case MODE_OPENGLES3:
attribs[1] = (1 << 6); /* EGL_OPENGL_ES3_BIT_KHR */
ctx_attribs[1] = 3;
break;
default:
ERROR_LOG(VIDEO, "Unknown opengl mode set\n");
return false;
break;
}
if (!eglChooseConfig( egl_dpy, attribs, &config, 1, &num_configs))
{
INFO_LOG(VIDEO, "Error: couldn't get an EGL visual config\n");
exit(1);
}
if (s_opengl_mode == MODE_OPENGL)
eglBindAPI(EGL_OPENGL_API);
else
eglBindAPI(EGL_OPENGL_ES_API);
EGLNativeWindowType host_window = (EGLNativeWindowType) window_handle;
EGLNativeWindowType native_window = InitializePlatform(host_window, config);
s = eglQueryString(egl_dpy, EGL_VERSION);
INFO_LOG(VIDEO, "EGL_VERSION = %s\n", s);
s = eglQueryString(egl_dpy, EGL_VENDOR);
INFO_LOG(VIDEO, "EGL_VENDOR = %s\n", s);
s = eglQueryString(egl_dpy, EGL_EXTENSIONS);
INFO_LOG(VIDEO, "EGL_EXTENSIONS = %s\n", s);
s = eglQueryString(egl_dpy, EGL_CLIENT_APIS);
INFO_LOG(VIDEO, "EGL_CLIENT_APIS = %s\n", s);
egl_ctx = eglCreateContext(egl_dpy, config, EGL_NO_CONTEXT, ctx_attribs );
if (!egl_ctx)
{
INFO_LOG(VIDEO, "Error: eglCreateContext failed\n");
exit(1);
}
egl_surf = eglCreateWindowSurface(egl_dpy, config, native_window, nullptr);
if (!egl_surf)
{
INFO_LOG(VIDEO, "Error: eglCreateWindowSurface failed\n");
exit(1);
}
return true;
}
bool cInterfaceEGL::MakeCurrent()
{
return eglMakeCurrent(egl_dpy, egl_surf, egl_surf, egl_ctx);
}
bool cInterfaceEGL::ClearCurrent()
{
return eglMakeCurrent(egl_dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
}
// Close backend
void cInterfaceEGL::Shutdown()
{
ShutdownPlatform();
if (egl_ctx && !eglMakeCurrent(egl_dpy, egl_surf, egl_surf, egl_ctx))
NOTICE_LOG(VIDEO, "Could not release drawing context.");
if (egl_ctx)
{
eglMakeCurrent(egl_dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
if (!eglDestroyContext(egl_dpy, egl_ctx))
NOTICE_LOG(VIDEO, "Could not destroy drawing context.");
if (!eglDestroySurface(egl_dpy, egl_surf))
NOTICE_LOG(VIDEO, "Could not destroy window surface.");
if (!eglTerminate(egl_dpy))
NOTICE_LOG(VIDEO, "Could not destroy display connection.");
egl_ctx = nullptr;
}
}

View File

@ -0,0 +1,33 @@
// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
#include <string>
#include <EGL/egl.h>
#include "Common/GL/GLInterfaceBase.h"
#include "Core/ConfigManager.h"
class cInterfaceEGL : public cInterfaceBase
{
protected:
void DetectMode();
EGLSurface egl_surf;
EGLContext egl_ctx;
EGLDisplay egl_dpy;
virtual EGLDisplay OpenDisplay() = 0;
virtual EGLNativeWindowType InitializePlatform(EGLNativeWindowType host_window, EGLConfig config) = 0;
virtual void ShutdownPlatform() = 0;
public:
void SwapInterval(int Interval);
void Swap();
void SetMode(u32 mode) { s_opengl_mode = mode; }
void* GetFuncAddress(const std::string& name);
bool Create(void *window_handle, bool core);
bool MakeCurrent();
bool ClearCurrent();
void Shutdown();
};

View File

@ -0,0 +1,29 @@
// Copyright 2014 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLInterface/EGLAndroid.h"
#include "Core/Host.h"
EGLDisplay cInterfaceEGLAndroid::OpenDisplay()
{
return eglGetDisplay(EGL_DEFAULT_DISPLAY);
}
EGLNativeWindowType cInterfaceEGLAndroid::InitializePlatform(EGLNativeWindowType host_window, EGLConfig config)
{
EGLint format;
eglGetConfigAttrib(egl_dpy, config, EGL_NATIVE_VISUAL_ID, &format);
ANativeWindow_setBuffersGeometry(host_window, 0, 0, format);
const int width = ANativeWindow_getWidth(host_window);
const int height = ANativeWindow_getHeight(host_window);
GLInterface->SetBackBufferDimensions(width, height);
return host_window;
}
void cInterfaceEGLAndroid::ShutdownPlatform()
{
}

View File

@ -0,0 +1,15 @@
// Copyright 2014 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
#include "Common/GL/GLInterface/EGL.h"
class cInterfaceEGLAndroid : public cInterfaceEGL
{
protected:
EGLDisplay OpenDisplay() override;
EGLNativeWindowType InitializePlatform(EGLNativeWindowType host_window, EGLConfig config) override;
void ShutdownPlatform() override;
};

View File

@ -0,0 +1,44 @@
// Copyright 2014 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLInterface/EGLX11.h"
EGLDisplay cInterfaceEGLX11::OpenDisplay()
{
dpy = XOpenDisplay(nullptr);
XWindow.Initialize(dpy);
return eglGetDisplay(dpy);
}
EGLNativeWindowType cInterfaceEGLX11::InitializePlatform(EGLNativeWindowType host_window, EGLConfig config)
{
EGLint vid;
eglGetConfigAttrib(egl_dpy, config, EGL_NATIVE_VISUAL_ID, &vid);
XVisualInfo visTemplate;
visTemplate.visualid = vid;
XVisualInfo *vi;
int nVisuals;
vi = XGetVisualInfo(dpy, VisualIDMask, &visTemplate, &nVisuals);
XWindowAttributes attribs;
if (!XGetWindowAttributes(dpy, (Window)host_window, &attribs))
{
ERROR_LOG(VIDEO, "Window attribute retrieval failed");
return 0;
}
s_backbuffer_width = attribs.width;
s_backbuffer_height = attribs.height;
return (EGLNativeWindowType) XWindow.CreateXWindow((Window) host_window, vi);
}
void cInterfaceEGLX11::ShutdownPlatform()
{
XWindow.DestroyXWindow();
XCloseDisplay(dpy);
}

View File

@ -0,0 +1,21 @@
// Copyright 2014 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
#include <X11/Xlib.h>
#include "Common/GL/GLInterface/EGL.h"
#include "Common/GL/GLInterface/X11_Util.h"
class cInterfaceEGLX11 : public cInterfaceEGL
{
private:
cX11Window XWindow;
Display *dpy;
protected:
EGLDisplay OpenDisplay() override;
EGLNativeWindowType InitializePlatform(EGLNativeWindowType host_window, EGLConfig config) override;
void ShutdownPlatform() override;
};

View File

@ -0,0 +1,40 @@
// Copyright 2014 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/GL/GLInterfaceBase.h"
#ifdef ANDROID
#include "Common/GL/GLInterface/EGLAndroid.h"
#elif defined(__APPLE__)
#include "Common/GL/GLInterface/AGL.h"
#elif defined(_WIN32)
#include "Common/GL/GLInterface/WGL.h"
#elif HAVE_X11
#if defined(USE_EGL) && USE_EGL
#include "Common/GL/GLInterface/EGLX11.h"
#else
#include "Common/GL/GLInterface/GLX.h"
#endif
#else
#error Platform doesnt have a GLInterface
#endif
cInterfaceBase* HostGL_CreateGLInterface()
{
#ifdef ANDROID
return new cInterfaceEGLAndroid;
#elif defined(__APPLE__)
return new cInterfaceAGL;
#elif defined(_WIN32)
return new cInterfaceWGL;
#elif defined(HAVE_X11) && HAVE_X11
#if defined(USE_EGL) && USE_EGL
return new cInterfaceEGLX11;
#else
return new cInterfaceGLX;
#endif
#else
return nullptr;
#endif
}

View File

@ -0,0 +1,199 @@
// Copyright 2012 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include <string>
#include "Common/GL/GLInterface/GLX.h"
#include "VideoCommon/RenderBase.h"
#include "VideoCommon/VideoConfig.h"
#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
typedef GLXContext (*PFNGLXCREATECONTEXTATTRIBSPROC)(Display*, GLXFBConfig, GLXContext, Bool, const int*);
typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval);
static PFNGLXCREATECONTEXTATTRIBSPROC glXCreateContextAttribs = nullptr;
static PFNGLXSWAPINTERVALSGIPROC glXSwapIntervalSGI = nullptr;
static bool s_glxError;
static int ctxErrorHandler(Display *dpy, XErrorEvent *ev)
{
s_glxError = true;
return 0;
}
void cInterfaceGLX::SwapInterval(int Interval)
{
if (glXSwapIntervalSGI)
glXSwapIntervalSGI(Interval);
else
ERROR_LOG(VIDEO, "No support for SwapInterval (framerate clamped to monitor refresh rate).");
}
void* cInterfaceGLX::GetFuncAddress(const std::string& name)
{
return (void*)glXGetProcAddress((const GLubyte*)name.c_str());
}
void cInterfaceGLX::Swap()
{
glXSwapBuffers(dpy, win);
}
// Create rendering window.
// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
bool cInterfaceGLX::Create(void *window_handle, bool core)
{
dpy = XOpenDisplay(nullptr);
int screen = DefaultScreen(dpy);
// checking glx version
int glxMajorVersion, glxMinorVersion;
glXQueryVersion(dpy, &glxMajorVersion, &glxMinorVersion);
if (glxMajorVersion < 1 || (glxMajorVersion == 1 && glxMinorVersion < 4))
{
ERROR_LOG(VIDEO, "glX-Version %d.%d detected, but need at least 1.4",
glxMajorVersion, glxMinorVersion);
return false;
}
// loading core context creation function
glXCreateContextAttribs = (PFNGLXCREATECONTEXTATTRIBSPROC)GetFuncAddress("glXCreateContextAttribsARB");
if (!glXCreateContextAttribs)
{
ERROR_LOG(VIDEO, "glXCreateContextAttribsARB not found, do you support GLX_ARB_create_context?");
return false;
}
// choosing framebuffer
int visual_attribs[] =
{
GLX_X_RENDERABLE , True,
GLX_DRAWABLE_TYPE , GLX_WINDOW_BIT,
GLX_X_VISUAL_TYPE , GLX_TRUE_COLOR,
GLX_RED_SIZE , 8,
GLX_GREEN_SIZE , 8,
GLX_BLUE_SIZE , 8,
GLX_DEPTH_SIZE , 0,
GLX_STENCIL_SIZE , 0,
GLX_DOUBLEBUFFER , True,
None
};
int fbcount = 0;
GLXFBConfig* fbc = glXChooseFBConfig(dpy, screen, visual_attribs, &fbcount);
if (!fbc || !fbcount)
{
ERROR_LOG(VIDEO, "Failed to retrieve a framebuffer config");
return false;
}
fbconfig = *fbc;
XFree(fbc);
// Get an appropriate visual
XVisualInfo* vi = glXGetVisualFromFBConfig(dpy, fbconfig);
s_glxError = false;
XErrorHandler oldHandler = XSetErrorHandler(&ctxErrorHandler);
// Create a GLX context.
// We try to get a 4.0 core profile, else we try 3.3, else try it with anything we get.
int context_attribs[] =
{
GLX_CONTEXT_MAJOR_VERSION_ARB, 4,
GLX_CONTEXT_MINOR_VERSION_ARB, 0,
GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_CORE_PROFILE_BIT_ARB,
GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
None
};
ctx = nullptr;
if (core)
{
ctx = glXCreateContextAttribs(dpy, fbconfig, 0, True, context_attribs);
XSync(dpy, False);
}
if (core && (!ctx || s_glxError))
{
int context_attribs_33[] =
{
GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
GLX_CONTEXT_MINOR_VERSION_ARB, 3,
GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_CORE_PROFILE_BIT_ARB,
GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
None
};
s_glxError = false;
ctx = glXCreateContextAttribs(dpy, fbconfig, 0, True, context_attribs_33);
XSync(dpy, False);
}
if (!ctx || s_glxError)
{
int context_attribs_legacy[] =
{
GLX_CONTEXT_MAJOR_VERSION_ARB, 1,
GLX_CONTEXT_MINOR_VERSION_ARB, 0,
None
};
s_glxError = false;
ctx = glXCreateContextAttribs(dpy, fbconfig, 0, True, context_attribs_legacy);
XSync(dpy, False);
}
if (!ctx || s_glxError)
{
ERROR_LOG(VIDEO, "Unable to create GL context.");
return false;
}
XSetErrorHandler(oldHandler);
XWindow.Initialize(dpy);
Window parent = (Window)window_handle;
XWindowAttributes attribs;
if (!XGetWindowAttributes(dpy, parent, &attribs))
{
ERROR_LOG(VIDEO, "Window attribute retrieval failed");
return false;
}
s_backbuffer_width = attribs.width;
s_backbuffer_height = attribs.height;
win = XWindow.CreateXWindow(parent, vi);
XFree(vi);
return true;
}
bool cInterfaceGLX::MakeCurrent()
{
bool success = glXMakeCurrent(dpy, win, ctx);
if (success)
{
// load this function based on the current bound context
glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)GLInterface->GetFuncAddress("glXSwapIntervalSGI");
}
return success;
}
bool cInterfaceGLX::ClearCurrent()
{
return glXMakeCurrent(dpy, None, nullptr);
}
// Close backend
void cInterfaceGLX::Shutdown()
{
XWindow.DestroyXWindow();
if (ctx)
{
glXDestroyContext(dpy, ctx);
XCloseDisplay(dpy);
ctx = nullptr;
}
}

View File

@ -0,0 +1,30 @@
// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
#include <string>
#include <GL/glx.h>
#include "Common/GL/GLInterfaceBase.h"
#include "Common/GL/GLInterface/X11_Util.h"
class cInterfaceGLX : public cInterfaceBase
{
private:
cX11Window XWindow;
Display *dpy;
Window win;
GLXContext ctx;
GLXFBConfig fbconfig;
public:
friend class cX11Window;
void SwapInterval(int Interval) override;
void Swap() override;
void* GetFuncAddress(const std::string& name) override;
bool Create(void *window_handle, bool core) override;
bool MakeCurrent() override;
bool ClearCurrent() override;
void Shutdown() override;
};

View File

@ -0,0 +1,182 @@
// Copyright 2012 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include <string>
#include "Common/GL/GLInterface/WGL.h"
#include "Core/Host.h"
#include "VideoCommon/RenderBase.h"
#include "VideoCommon/VertexShaderManager.h"
#include "VideoCommon/VideoConfig.h"
static HDC hDC = nullptr; // Private GDI Device Context
static HGLRC hRC = nullptr; // Permanent Rendering Context
static HINSTANCE dllHandle = nullptr; // Handle to OpenGL32.dll
// typedef from wglext.h
typedef BOOL(WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);
static PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT = nullptr;
void cInterfaceWGL::SwapInterval(int Interval)
{
if (wglSwapIntervalEXT)
wglSwapIntervalEXT(Interval);
else
ERROR_LOG(VIDEO, "No support for SwapInterval (framerate clamped to monitor refresh rate).");
}
void cInterfaceWGL::Swap()
{
SwapBuffers(hDC);
}
void* cInterfaceWGL::GetFuncAddress(const std::string& name)
{
void* func = (void*)wglGetProcAddress((LPCSTR)name.c_str());
if (func == nullptr)
func = (void*)GetProcAddress(dllHandle, (LPCSTR)name.c_str());
return func;
}
// Draw messages on top of the screen
bool cInterfaceWGL::PeekMessages()
{
// TODO: peekmessage
MSG msg;
while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
return FALSE;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return TRUE;
}
// Create rendering window.
// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
bool cInterfaceWGL::Create(void *window_handle, bool core)
{
if (window_handle == nullptr)
return false;
HWND window_handle_reified = reinterpret_cast<HWND>(window_handle);
RECT window_rect = {0};
if (!GetClientRect(window_handle_reified, &window_rect))
return false;
// Control window size and picture scaling
int twidth = (window_rect.right - window_rect.left);
int theight = (window_rect.bottom - window_rect.top);
s_backbuffer_width = twidth;
s_backbuffer_height = theight;
m_window_handle = window_handle_reified;
#ifdef _WIN32
dllHandle = LoadLibrary(TEXT("OpenGL32.dll"));
#endif
PIXELFORMATDESCRIPTOR pfd = // pfd Tells Windows How We Want Things To Be
{
sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor
1, // Version Number
PFD_DRAW_TO_WINDOW | // Format Must Support Window
PFD_SUPPORT_OPENGL | // Format Must Support OpenGL
PFD_DOUBLEBUFFER, // Must Support Double Buffering
PFD_TYPE_RGBA, // Request An RGBA Format
32, // Select Our Color Depth
0, 0, 0, 0, 0, 0, // Color Bits Ignored
0, // 8bit Alpha Buffer
0, // Shift Bit Ignored
0, // No Accumulation Buffer
0, 0, 0, 0, // Accumulation Bits Ignored
0, // 0Bit Z-Buffer (Depth Buffer)
0, // 0bit Stencil Buffer
0, // No Auxiliary Buffer
PFD_MAIN_PLANE, // Main Drawing Layer
0, // Reserved
0, 0, 0 // Layer Masks Ignored
};
int PixelFormat; // Holds The Results After Searching For A Match
if (!(hDC = GetDC(window_handle_reified)))
{
PanicAlert("(1) Can't create an OpenGL Device context. Fail.");
return false;
}
if (!(PixelFormat = ChoosePixelFormat(hDC, &pfd)))
{
PanicAlert("(2) Can't find a suitable PixelFormat.");
return false;
}
if (!SetPixelFormat(hDC, PixelFormat, &pfd))
{
PanicAlert("(3) Can't set the PixelFormat.");
return false;
}
if (!(hRC = wglCreateContext(hDC)))
{
PanicAlert("(4) Can't create an OpenGL rendering context.");
return false;
}
return true;
}
bool cInterfaceWGL::MakeCurrent()
{
bool success = wglMakeCurrent(hDC, hRC) ? true : false;
if (success)
{
// Grab the swap interval function pointer
wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)GLInterface->GetFuncAddress("wglSwapIntervalEXT");
}
return success;
}
bool cInterfaceWGL::ClearCurrent()
{
return wglMakeCurrent(hDC, nullptr) ? true : false;
}
// Update window width, size and etc. Called from Render.cpp
void cInterfaceWGL::Update()
{
RECT rcWindow;
GetClientRect(m_window_handle, &rcWindow);
// Get the new window width and height
s_backbuffer_width = (rcWindow.right - rcWindow.left);
s_backbuffer_height = (rcWindow.bottom - rcWindow.top);
}
// Close backend
void cInterfaceWGL::Shutdown()
{
if (hRC)
{
if (!wglMakeCurrent(nullptr, nullptr))
NOTICE_LOG(VIDEO, "Could not release drawing context.");
if (!wglDeleteContext(hRC))
ERROR_LOG(VIDEO, "Attempt to release rendering context failed.");
hRC = nullptr;
}
if (hDC && !ReleaseDC(m_window_handle, hDC))
{
ERROR_LOG(VIDEO, "Attempt to release device context failed.");
hDC = nullptr;
}
}

View File

@ -0,0 +1,25 @@
// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
#include <string>
#include "Common/GL/GLInterfaceBase.h"
class cInterfaceWGL : public cInterfaceBase
{
public:
void SwapInterval(int Interval);
void Swap();
void* GetFuncAddress(const std::string& name);
bool Create(void *window_handle, bool core);
bool MakeCurrent();
bool ClearCurrent();
void Shutdown();
void Update();
bool PeekMessages();
HWND m_window_handle;
};

View File

@ -0,0 +1,77 @@
// Copyright 2012 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/Thread.h"
#include "Common/GL/GLInterfaceBase.h"
#include "Common/GL/GLInterface/X11_Util.h"
#include "Core/Host.h"
#include "VideoCommon/VideoConfig.h"
void cX11Window::Initialize(Display *_dpy)
{
dpy = _dpy;
}
Window cX11Window::CreateXWindow(Window parent, XVisualInfo *vi)
{
XSetWindowAttributes attr;
colormap = XCreateColormap(dpy, parent, vi->visual, AllocNone);
// Setup window attributes
attr.colormap = colormap;
XWindowAttributes attribs;
if (!XGetWindowAttributes(dpy, parent, &attribs))
{
ERROR_LOG(VIDEO, "Window attribute retrieval failed");
return 0;
}
// Create the window
win = XCreateWindow(dpy, parent,
0, 0, attribs.width, attribs.height, 0,
vi->depth, InputOutput, vi->visual,
CWColormap, &attr);
XSelectInput(dpy, parent, StructureNotifyMask);
XMapWindow(dpy, win);
XSync(dpy, True);
xEventThread = std::thread(&cX11Window::XEventThread, this);
return win;
}
void cX11Window::DestroyXWindow(void)
{
XUnmapWindow(dpy, win);
win = 0;
if (xEventThread.joinable())
xEventThread.join();
XFreeColormap(dpy, colormap);
}
void cX11Window::XEventThread()
{
while (win)
{
XEvent event;
for (int num_events = XPending(dpy); num_events > 0; num_events--)
{
XNextEvent(dpy, &event);
switch (event.type)
{
case ConfigureNotify:
XResizeWindow(dpy, win, event.xconfigure.width, event.xconfigure.height);
GLInterface->SetBackBufferDimensions(event.xconfigure.width, event.xconfigure.height);
break;
default:
break;
}
}
Common::SleepCurrentThread(20);
}
}

View File

@ -0,0 +1,26 @@
// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
#include <string>
#include <thread>
#include <X11/keysym.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
class cX11Window
{
private:
void XEventThread();
std::thread xEventThread;
Colormap colormap;
public:
void Initialize(Display *dpy);
Window CreateXWindow(Window parent, XVisualInfo *vi);
void DestroyXWindow();
Display *dpy;
Window win;
};

View File

@ -0,0 +1,49 @@
// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
#include <string>
#include "Common/CommonTypes.h"
enum GLInterfaceMode {
MODE_DETECT = 0,
MODE_OPENGL,
MODE_OPENGLES2,
MODE_OPENGLES3,
};
class cInterfaceBase
{
protected:
// Window dimensions.
u32 s_backbuffer_width;
u32 s_backbuffer_height;
u32 s_opengl_mode;
public:
virtual ~cInterfaceBase() {}
virtual void Swap() {}
virtual void SetMode(u32 mode) { s_opengl_mode = GLInterfaceMode::MODE_OPENGL; }
virtual u32 GetMode() { return s_opengl_mode; }
virtual void* GetFuncAddress(const std::string& name) { return nullptr; }
virtual bool Create(void *window_handle, bool core = true) { return true; }
virtual bool MakeCurrent() { return true; }
virtual bool ClearCurrent() { return true; }
virtual void Shutdown() {}
virtual void SwapInterval(int Interval) { }
virtual u32 GetBackBufferWidth() { return s_backbuffer_width; }
virtual u32 GetBackBufferHeight() { return s_backbuffer_height; }
virtual void SetBackBufferDimensions(u32 W, u32 H) {s_backbuffer_width = W; s_backbuffer_height = H; }
virtual void Update() { }
virtual bool PeekMessages() { return false; }
};
extern cInterfaceBase *GLInterface;
// This function has to be defined along the Host_ functions from Core/Host.h.
// Current canonical implementation: DolphinWX/GLInterface/GLInterface.cpp.
cInterfaceBase* HostGL_CreateGLInterface();

View File

@ -0,0 +1,154 @@
// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "Common/IniFile.h"
#include "Common/StringUtil.h"
#include "Common/GL/GLInterfaceBase.h"
#include "Common/GL/GLUtil.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "VideoBackends/OGL/Render.h"
#include "VideoBackends/OGL/VideoBackend.h"
#include "VideoCommon/VideoConfig.h"
cInterfaceBase *GLInterface;
static GLuint attributelessVAO = 0;
static GLuint attributelessVBO = 0;
namespace OGL
{
// Draw messages on top of the screen
unsigned int VideoBackend::PeekMessages()
{
return GLInterface->PeekMessages();
}
}
void InitInterface()
{
GLInterface = HostGL_CreateGLInterface();
}
GLuint OpenGL_CompileProgram(const char* vertexShader, const char* fragmentShader)
{
// generate objects
GLuint vertexShaderID = glCreateShader(GL_VERTEX_SHADER);
GLuint fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
GLuint programID = glCreateProgram();
// compile vertex shader
glShaderSource(vertexShaderID, 1, &vertexShader, nullptr);
glCompileShader(vertexShaderID);
#if defined(_DEBUG) || defined(DEBUGFAST) || defined(DEBUG_GLSL)
GLint Result = GL_FALSE;
char stringBuffer[1024];
GLsizei stringBufferUsage = 0;
glGetShaderiv(vertexShaderID, GL_COMPILE_STATUS, &Result);
glGetShaderInfoLog(vertexShaderID, 1024, &stringBufferUsage, stringBuffer);
if (Result && stringBufferUsage)
{
ERROR_LOG(VIDEO, "GLSL vertex shader warnings:\n%s%s", stringBuffer, vertexShader);
}
else if (!Result)
{
ERROR_LOG(VIDEO, "GLSL vertex shader error:\n%s%s", stringBuffer, vertexShader);
}
else
{
DEBUG_LOG(VIDEO, "GLSL vertex shader compiled:\n%s", vertexShader);
}
bool shader_errors = !Result;
#endif
// compile fragment shader
glShaderSource(fragmentShaderID, 1, &fragmentShader, nullptr);
glCompileShader(fragmentShaderID);
#if defined(_DEBUG) || defined(DEBUGFAST) || defined(DEBUG_GLSL)
glGetShaderiv(fragmentShaderID, GL_COMPILE_STATUS, &Result);
glGetShaderInfoLog(fragmentShaderID, 1024, &stringBufferUsage, stringBuffer);
if (Result && stringBufferUsage)
{
ERROR_LOG(VIDEO, "GLSL fragment shader warnings:\n%s%s", stringBuffer, fragmentShader);
}
else if (!Result)
{
ERROR_LOG(VIDEO, "GLSL fragment shader error:\n%s%s", stringBuffer, fragmentShader);
}
else
{
DEBUG_LOG(VIDEO, "GLSL fragment shader compiled:\n%s", fragmentShader);
}
shader_errors |= !Result;
#endif
// link them
glAttachShader(programID, vertexShaderID);
glAttachShader(programID, fragmentShaderID);
glLinkProgram(programID);
#if defined(_DEBUG) || defined(DEBUGFAST) || defined(DEBUG_GLSL)
glGetProgramiv(programID, GL_LINK_STATUS, &Result);
glGetProgramInfoLog(programID, 1024, &stringBufferUsage, stringBuffer);
if (Result && stringBufferUsage)
{
ERROR_LOG(VIDEO, "GLSL linker warnings:\n%s%s%s", stringBuffer, vertexShader, fragmentShader);
}
else if (!Result && !shader_errors)
{
ERROR_LOG(VIDEO, "GLSL linker error:\n%s%s%s", stringBuffer, vertexShader, fragmentShader);
}
#endif
// cleanup
glDeleteShader(vertexShaderID);
glDeleteShader(fragmentShaderID);
return programID;
}
void OpenGL_CreateAttributelessVAO()
{
glGenVertexArrays(1, &attributelessVAO);
_dbg_assert_msg_(VIDEO, attributelessVAO != 0, "Attributeless VAO should have been created successfully.")
// In a compatibility context, we require a valid, bound array buffer.
glGenBuffers(1, &attributelessVBO);
_dbg_assert_msg_(VIDEO, attributelessVBO != 0, "Attributeless VBO should have been created successfully.")
// Initialize the buffer with nothing. 16 floats is an arbitrary size that may work around driver issues.
glBindBuffer(GL_ARRAY_BUFFER, attributelessVBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * 16, nullptr, GL_STATIC_DRAW);
// We must also define vertex attribute 0.
glBindVertexArray(attributelessVAO);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, nullptr);
glEnableVertexAttribArray(0);
}
void OpenGL_BindAttributelessVAO()
{
_dbg_assert_msg_(VIDEO, attributelessVAO != 0, "Attributeless VAO should have already been created.")
glBindVertexArray(attributelessVAO);
}
void OpenGL_DeleteAttributelessVAO()
{
_dbg_assert_msg_(VIDEO, attributelessVAO != 0, "Attributeless VAO should have already been created.")
if (attributelessVAO != 0)
{
glDeleteVertexArrays(1, &attributelessVAO);
glDeleteBuffers(1, &attributelessVBO);
attributelessVAO = 0;
attributelessVBO = 0;
}
}

View File

@ -0,0 +1,33 @@
// Copyright 2008 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
#include "Common/MathUtil.h"
#include "Common/GL/GLExtensions/GLExtensions.h"
#ifndef _WIN32
#include <sys/types.h>
#endif
void InitInterface();
// Helpers
GLuint OpenGL_CompileProgram(const char *vertexShader, const char *fragmentShader);
// Creates and deletes a VAO and VBO suitable for attributeless rendering.
// Called by the Renderer.
void OpenGL_CreateAttributelessVAO();
void OpenGL_DeleteAttributelessVAO();
// Binds the VAO suitable for attributeless rendering.
void OpenGL_BindAttributelessVAO();
// this should be removed in future, but as long as glsl is unstable, we should really read this messages
#if defined(_DEBUG) || defined(DEBUGFAST)
#define DEBUG_GLSL 1
#else
#define DEBUG_GLSL 0
#endif