1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-06 06:32:56 +01:00

dynamically import OpenGL functions

This commit is contained in:
Ted John
2016-06-06 19:03:18 +01:00
parent 79292b56ad
commit f14ea6873c
2 changed files with 124 additions and 4 deletions

View File

@@ -27,8 +27,6 @@
#include "../../core/Console.hpp"
#pragma comment(lib, "opengl32.lib")
template <typename T>
static inline bool SetProc(T * func, const char * name)
{
@@ -52,6 +50,31 @@ static inline bool SetProc(T * func, const char * name)
static const char * TryLoadAllProcAddresses()
{
// 1.1 functions
SetupOpenGLFunction(glBegin);
SetupOpenGLFunction(glBindTexture);
SetupOpenGLFunction(glBlendFunc);
SetupOpenGLFunction(glClear);
SetupOpenGLFunction(glClearColor);
SetupOpenGLFunction(glColor3f);
SetupOpenGLFunction(glColor4f);
SetupOpenGLFunction(glDeleteTextures);
SetupOpenGLFunction(glDisable);
SetupOpenGLFunction(glEnable);
SetupOpenGLFunction(glEnd);
SetupOpenGLFunction(glGenTextures);
SetupOpenGLFunction(glLoadIdentity);
SetupOpenGLFunction(glMatrixMode);
SetupOpenGLFunction(glOrtho);
SetupOpenGLFunction(glScalef);
SetupOpenGLFunction(glTexCoord2f);
SetupOpenGLFunction(glTexImage2D);
SetupOpenGLFunction(glTexParameteri);
SetupOpenGLFunction(glTranslatef);
SetupOpenGLFunction(glVertex2i);
SetupOpenGLFunction(glViewport);
// 2.0+ functions
SetupOpenGLFunction(glCreateShader);
SetupOpenGLFunction(glDeleteShader);

View File

@@ -16,8 +16,80 @@
#pragma once
// BEGIN [Do not define 1.1 function signatures]
#define glBegin __static__glBegin
#define glBindTexture __static__glBindTexture
#define glBlendFunc __static__glBlendFunc
#define glClear __static__glClear
#define glClearColor __static__glClearColor
#define glColor3f __static__glColor3f
#define glColor4f __static__glColor4f
#define glDeleteTextures __static__glDeleteTextures
#define glDisable __static__glDisable
#define glEnable __static__glEnable
#define glEnd __static__glEnd
#define glGenTextures __static__glGenTextures
#define glLoadIdentity __static__glLoadIdentity
#define glMatrixMode __static__glMatrixMode
#define glOrtho __static__glOrtho
#define glScalef __static__glScalef
#define glTexCoord2f __static__glTexCoord2f
#define glTexImage2D __static__glTexImage2D
#define glTexParameteri __static__glTexParameteri
#define glTranslatef __static__glTranslatef
#define glVertex2i __static__glVertex2i
#define glViewport __static__glViewport
#include <SDL_opengl.h>
// END [Do not define 1.1 function signatures]
#undef glBegin
#undef glBindTexture
#undef glBlendFunc
#undef glClear
#undef glClearColor
#undef glColor3f
#undef glColor4f
#undef glDeleteTextures
#undef glDisable
#undef glEnable
#undef glEnd
#undef glGenTextures
#undef glLoadIdentity
#undef glMatrixMode
#undef glOrtho
#undef glScalef
#undef glTexCoord2f
#undef glTexImage2D
#undef glTexParameteri
#undef glTranslatef
#undef glVertex2i
#undef glViewport
// 1.1 function signatures
typedef void (APIENTRYP PFNGLBEGINPROC )(GLenum mode);
typedef void (APIENTRYP PFNGLBINDTEXTUREPROC )(GLenum target, GLuint texture);
typedef void (APIENTRYP PFNGLBLENDFUNCPROC )(GLenum sfactor, GLenum dfactor);
typedef void (APIENTRYP PFNGLCLEARPROC )(GLbitfield mask);
typedef void (APIENTRYP PFNGLCLEARCOLORPROC )(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
typedef void (APIENTRYP PFNGLCOLOR3FPROC )(GLfloat red, GLfloat green, GLfloat blue);
typedef void (APIENTRYP PFNGLCOLOR4FPROC )(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
typedef void (APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint *textures);
typedef void (APIENTRYP PFNGLDISABLEPROC )(GLenum cap);
typedef void (APIENTRYP PFNGLENABLEPROC )(GLenum cap);
typedef void (APIENTRYP PFNGLENDPROC )(void);
typedef void (APIENTRYP PFNGLGENTEXTURESPROC )(GLsizei n, GLuint *textures);
typedef void (APIENTRYP PFNGLLOADIDENTITYPROC )(void);
typedef void (APIENTRYP PFNGLMATRIXMODEPROC )(GLenum mode);
typedef void (APIENTRYP PFNGLORTHOPROC )(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val);
typedef void (APIENTRYP PFNGLSCALEFPROC )(GLfloat x, GLfloat y, GLfloat z);
typedef void (APIENTRYP PFNGLTEXCOORD2FPROC )(GLfloat s, GLfloat t);
typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC )(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC )(GLenum target, GLenum pname, GLint param);
typedef void (APIENTRYP PFNGLTRANSLATEFPROC )(GLfloat x, GLfloat y, GLfloat z);
typedef void (APIENTRYP PFNGLVERTEX2IPROC )(GLint x, GLint y);
typedef void (APIENTRYP PFNGLVIEWPORTPROC )(GLint x, GLint y, GLsizei width, GLsizei height);
#if __WINDOWS__
#ifdef NO_EXTERN_GLAPI
@@ -28,8 +100,33 @@
#define GLAPI_SET
#endif
GLAPI_DECL PFNGLCREATESHADERPROC glCreateShader GLAPI_SET;
GLAPI_DECL PFNGLDELETESHADERPROC glDeleteShader GLAPI_SET;
// 1.1 function pointers
GLAPI_DECL PFNGLBEGINPROC glBegin GLAPI_SET;
GLAPI_DECL PFNGLBINDTEXTUREPROC glBindTexture GLAPI_SET;
GLAPI_DECL PFNGLBLENDFUNCPROC glBlendFunc GLAPI_SET;
GLAPI_DECL PFNGLCLEARPROC glClear GLAPI_SET;
GLAPI_DECL PFNGLCLEARCOLORPROC glClearColor GLAPI_SET;
GLAPI_DECL PFNGLCOLOR3FPROC glColor3f GLAPI_SET;
GLAPI_DECL PFNGLCOLOR4FPROC glColor4f GLAPI_SET;
GLAPI_DECL PFNGLDELETETEXTURESPROC glDeleteTextures GLAPI_SET;
GLAPI_DECL PFNGLDISABLEPROC glDisable GLAPI_SET;
GLAPI_DECL PFNGLENABLEPROC glEnable GLAPI_SET;
GLAPI_DECL PFNGLENDPROC glEnd GLAPI_SET;
GLAPI_DECL PFNGLGENTEXTURESPROC glGenTextures GLAPI_SET;
GLAPI_DECL PFNGLLOADIDENTITYPROC glLoadIdentity GLAPI_SET;
GLAPI_DECL PFNGLMATRIXMODEPROC glMatrixMode GLAPI_SET;
GLAPI_DECL PFNGLORTHOPROC glOrtho GLAPI_SET;
GLAPI_DECL PFNGLSCALEFPROC glScalef GLAPI_SET;
GLAPI_DECL PFNGLTEXCOORD2FPROC glTexCoord2f GLAPI_SET;
GLAPI_DECL PFNGLTEXIMAGE2DPROC glTexImage2D GLAPI_SET;
GLAPI_DECL PFNGLTEXPARAMETERIPROC glTexParameteri GLAPI_SET;
GLAPI_DECL PFNGLTRANSLATEFPROC glTranslatef GLAPI_SET;
GLAPI_DECL PFNGLVERTEX2IPROC glVertex2i GLAPI_SET;
GLAPI_DECL PFNGLVIEWPORTPROC glViewport GLAPI_SET;
// 2.0+ function pointers
GLAPI_DECL PFNGLCREATESHADERPROC glCreateShader GLAPI_SET;
GLAPI_DECL PFNGLDELETESHADERPROC glDeleteShader GLAPI_SET;
#endif /* __WINDOWS__ */