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:
@@ -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);
|
||||
|
||||
|
||||
@@ -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__ */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user