1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 11:03:00 +01:00

Rework OpenGL API declarations

This commit is contained in:
LRFLEW
2017-10-10 02:27:31 -05:00
committed by Michał Janiszewski
parent a4c8d402ad
commit 0868902f11
4 changed files with 106 additions and 166 deletions

View File

@@ -853,6 +853,7 @@
D41B741C1C210A7A0080A7B9 /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; };
D41B74721C2125E50080A7B9 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = distribution/macos/Assets.xcassets; sourceTree = SOURCE_ROOT; };
D43407E11D0E14CE00C2B3D4 /* shaders */ = {isa = PBXFileReference; lastKnownFileType = folder; name = shaders; path = data/shaders; sourceTree = SOURCE_ROOT; };
D43BAB921F8C2B2B00A9E362 /* OpenGLAPIProc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OpenGLAPIProc.h; sourceTree = "<group>"; };
D45A38B31CF3006400659A24 /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libcrypto.dylib; sourceTree = "<group>"; };
D45A38B41CF3006400659A24 /* libfreetype.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libfreetype.dylib; sourceTree = "<group>"; };
D45A38B51CF3006400659A24 /* libjansson.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = libjansson.dylib; sourceTree = "<group>"; };
@@ -2667,6 +2668,7 @@
F76C859A1EC4E82600FA49E2 /* GLSLTypes.h */,
F76C859B1EC4E82600FA49E2 /* OpenGLAPI.cpp */,
F76C859C1EC4E82600FA49E2 /* OpenGLAPI.h */,
D43BAB921F8C2B2B00A9E362 /* OpenGLAPIProc.h */,
F76C859D1EC4E82600FA49E2 /* OpenGLDrawingEngine.cpp */,
F76C859E1EC4E82600FA49E2 /* OpenGLFramebuffer.cpp */,
F76C859F1EC4E82600FA49E2 /* OpenGLFramebuffer.h */,

View File

@@ -16,105 +16,30 @@
#ifndef DISABLE_OPENGL
#define NO_EXTERN_GLAPI
#include "OpenGLAPI.h"
#if OPENGL_NO_LINK
#define OPENGL_PROC(TYPE, PROC) TYPE PROC = nullptr;
#include "OpenGLAPIProc.h"
#undef OPENGL_PROC
#include <SDL_video.h>
#include <openrct2/core/Console.hpp>
template <typename T>
static inline bool SetProc(T * func, const char * name)
{
T address = (T)SDL_GL_GetProcAddress(name);
if (address == nullptr)
{
return false;
}
*func = address;
return true;
}
#define SetupOpenGLFunction(func) \
{ \
if (!SetProc(&func, "" #func "")) \
{ \
return "" #func ""; \
} \
}
static const char * TryLoadAllProcAddresses()
{
// 1.1 functions
SetupOpenGLFunction(glActiveTexture);
SetupOpenGLFunction(glBegin);
SetupOpenGLFunction(glBindTexture);
SetupOpenGLFunction(glBlendFunc);
SetupOpenGLFunction(glClear);
SetupOpenGLFunction(glClearColor);
SetupOpenGLFunction(glCullFace);
SetupOpenGLFunction(glDeleteTextures);
SetupOpenGLFunction(glDisable);
SetupOpenGLFunction(glDrawArrays);
SetupOpenGLFunction(glEnable);
SetupOpenGLFunction(glEnd);
SetupOpenGLFunction(glGenTextures);
SetupOpenGLFunction(glGetError);
SetupOpenGLFunction(glPixelStorei);
SetupOpenGLFunction(glReadPixels);
SetupOpenGLFunction(glTexImage2D);
SetupOpenGLFunction(glTexParameteri);
SetupOpenGLFunction(glViewport);
SetupOpenGLFunction(glTexSubImage3D);
SetupOpenGLFunction(glTexImage3D);
SetupOpenGLFunction(glGetIntegerv);
SetupOpenGLFunction(glGetTexImage);
// 2.0+ functions
SetupOpenGLFunction(glAttachShader);
SetupOpenGLFunction(glBindBuffer);
SetupOpenGLFunction(glBindFragDataLocation);
SetupOpenGLFunction(glBindFramebuffer);
SetupOpenGLFunction(glBindVertexArray);
SetupOpenGLFunction(glBufferData);
SetupOpenGLFunction(glCompileShader);
SetupOpenGLFunction(glCreateProgram);
SetupOpenGLFunction(glCreateShader);
SetupOpenGLFunction(glDeleteBuffers);
SetupOpenGLFunction(glDeleteFramebuffers);
SetupOpenGLFunction(glDeleteProgram);
SetupOpenGLFunction(glDeleteShader);
SetupOpenGLFunction(glDeleteVertexArrays);
SetupOpenGLFunction(glDetachShader);
SetupOpenGLFunction(glEnableVertexAttribArray);
SetupOpenGLFunction(glFramebufferTexture2D);
SetupOpenGLFunction(glGetAttribLocation);
SetupOpenGLFunction(glGenBuffers);
SetupOpenGLFunction(glGenFramebuffers);
SetupOpenGLFunction(glGetProgramInfoLog);
SetupOpenGLFunction(glGetProgramiv);
SetupOpenGLFunction(glGetShaderInfoLog);
SetupOpenGLFunction(glGetShaderiv);
SetupOpenGLFunction(glGetUniformLocation);
SetupOpenGLFunction(glGenVertexArrays);
SetupOpenGLFunction(glLinkProgram);
SetupOpenGLFunction(glShaderSource);
SetupOpenGLFunction(glUniform1i);
SetupOpenGLFunction(glUniform1iv);
SetupOpenGLFunction(glUniform2i);
SetupOpenGLFunction(glUniform2f);
SetupOpenGLFunction(glUniform4f);
SetupOpenGLFunction(glUniform4i);
SetupOpenGLFunction(glUniform4fv);
SetupOpenGLFunction(glUseProgram);
SetupOpenGLFunction(glVertexAttribIPointer);
SetupOpenGLFunction(glVertexAttribPointer);
SetupOpenGLFunction(glDrawArraysInstanced);
SetupOpenGLFunction(glVertexAttribDivisor);
SetupOpenGLFunction(glBlendFuncSeparate);
#define OPENGL_PROC(TYPE, PROC) \
{ \
PROC = (TYPE)SDL_GL_GetProcAddress(#PROC); \
if (PROC == nullptr) \
{ \
return #PROC; \
} \
}
#include "OpenGLAPIProc.h"
#undef OPENGL_PROC
return nullptr;
}

View File

@@ -100,83 +100,9 @@ typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC )(GLenum target, GLint level, G
typedef void (APIENTRYP PFNGLGETINTERGERVPROC )(GLenum pname, GLint * data);
typedef void (APIENTRYP PFNGLGETTEXIMAGEPROC )(GLenum target, GLint level, GLenum format, GLenum type, GLvoid * img);
#ifdef NO_EXTERN_GLAPI
// Defines the function pointers
#define GLAPI_DECL
#define GLAPI_SET = nullptr
#else
// Defines the functions as "extern"
#define GLAPI_DECL extern
#define GLAPI_SET
#endif
// 1.1 function pointers
GLAPI_DECL PFNGLACTIVETEXTUREPROC glActiveTexture GLAPI_SET;
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 PFNGLCULLFACEPROC glCullFace GLAPI_SET;
GLAPI_DECL PFNGLDELETETEXTURESPROC glDeleteTextures GLAPI_SET;
GLAPI_DECL PFNGLDISABLEPROC glDisable GLAPI_SET;
GLAPI_DECL PFNGLDRAWARRAYSPROC glDrawArrays GLAPI_SET;
GLAPI_DECL PFNGLENABLEPROC glEnable GLAPI_SET;
GLAPI_DECL PFNGLENDPROC glEnd GLAPI_SET;
GLAPI_DECL PFNGLGENTEXTURESPROC glGenTextures GLAPI_SET;
GLAPI_DECL PFNGLGETERRORPROC glGetError GLAPI_SET;
GLAPI_DECL PFNGLPIXELSTOREIPROC glPixelStorei GLAPI_SET;
GLAPI_DECL PFNGLREADPIXELSPROC glReadPixels GLAPI_SET;
GLAPI_DECL PFNGLTEXIMAGE2DPROC glTexImage2D GLAPI_SET;
GLAPI_DECL PFNGLTEXPARAMETERIPROC glTexParameteri GLAPI_SET;
GLAPI_DECL PFNGLVIEWPORTPROC glViewport GLAPI_SET;
GLAPI_DECL PFNGLTEXSUBIMAGE3DPROC glTexSubImage3D GLAPI_SET;
GLAPI_DECL PFNGLTEXIMAGE3DPROC glTexImage3D GLAPI_SET;
GLAPI_DECL PFNGLGETINTERGERVPROC glGetIntegerv GLAPI_SET;
GLAPI_DECL PFNGLGETTEXIMAGEPROC glGetTexImage GLAPI_SET;
// 2.0+ function pointers
GLAPI_DECL PFNGLATTACHSHADERPROC glAttachShader GLAPI_SET;
GLAPI_DECL PFNGLBINDBUFFERPROC glBindBuffer GLAPI_SET;
GLAPI_DECL PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation GLAPI_SET;
GLAPI_DECL PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer GLAPI_SET;
GLAPI_DECL PFNGLBINDVERTEXARRAYPROC glBindVertexArray GLAPI_SET;
GLAPI_DECL PFNGLBUFFERDATAPROC glBufferData GLAPI_SET;
GLAPI_DECL PFNGLCOMPILESHADERPROC glCompileShader GLAPI_SET;
GLAPI_DECL PFNGLCREATEPROGRAMPROC glCreateProgram GLAPI_SET;
GLAPI_DECL PFNGLCREATESHADERPROC glCreateShader GLAPI_SET;
GLAPI_DECL PFNGLDELETEBUFFERSPROC glDeleteBuffers GLAPI_SET;
GLAPI_DECL PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers GLAPI_SET;
GLAPI_DECL PFNGLDELETEPROGRAMPROC glDeleteProgram GLAPI_SET;
GLAPI_DECL PFNGLDELETESHADERPROC glDeleteShader GLAPI_SET;
GLAPI_DECL PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays GLAPI_SET;
GLAPI_DECL PFNGLDETACHSHADERPROC glDetachShader GLAPI_SET;
GLAPI_DECL PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray GLAPI_SET;
GLAPI_DECL PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D GLAPI_SET;
GLAPI_DECL PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation GLAPI_SET;
GLAPI_DECL PFNGLGENBUFFERSPROC glGenBuffers GLAPI_SET;
GLAPI_DECL PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers GLAPI_SET;
GLAPI_DECL PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog GLAPI_SET;
GLAPI_DECL PFNGLGETPROGRAMIVPROC glGetProgramiv GLAPI_SET;
GLAPI_DECL PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog GLAPI_SET;
GLAPI_DECL PFNGLGETSHADERIVPROC glGetShaderiv GLAPI_SET;
GLAPI_DECL PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation GLAPI_SET;
GLAPI_DECL PFNGLGENVERTEXARRAYSPROC glGenVertexArrays GLAPI_SET;
GLAPI_DECL PFNGLLINKPROGRAMPROC glLinkProgram GLAPI_SET;
GLAPI_DECL PFNGLSHADERSOURCEPROC glShaderSource GLAPI_SET;
GLAPI_DECL PFNGLUNIFORM1IPROC glUniform1i GLAPI_SET;
GLAPI_DECL PFNGLUNIFORM1IVPROC glUniform1iv GLAPI_SET;
GLAPI_DECL PFNGLUNIFORM2IPROC glUniform2i GLAPI_SET;
GLAPI_DECL PFNGLUNIFORM2FPROC glUniform2f GLAPI_SET;
GLAPI_DECL PFNGLUNIFORM4FPROC glUniform4f GLAPI_SET;
GLAPI_DECL PFNGLUNIFORM4IPROC glUniform4i GLAPI_SET;
GLAPI_DECL PFNGLUNIFORM4FVPROC glUniform4fv GLAPI_SET;
GLAPI_DECL PFNGLUSEPROGRAMPROC glUseProgram GLAPI_SET;
GLAPI_DECL PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer GLAPI_SET;
GLAPI_DECL PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer GLAPI_SET;
GLAPI_DECL PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced GLAPI_SET;
GLAPI_DECL PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor GLAPI_SET;
GLAPI_DECL PFNGLBLENDFUNCSEPARATEPROC glBlendFuncSeparate GLAPI_SET;
#define OPENGL_PROC(TYPE, PROC) extern TYPE PROC;
#include "OpenGLAPIProc.h"
#undef OPENGL_PROC
#endif /* OPENGL_NO_LINK */

View File

@@ -0,0 +1,87 @@
#pragma region Copyright (c) 2014-2017 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#ifndef OPENGL_PROC
#error "Do not include OpenGLAPIProc.h directly. Include OpenGLAPI.h instead."
#endif
// 1.1 function pointers
OPENGL_PROC(PFNGLACTIVETEXTUREPROC, glActiveTexture)
OPENGL_PROC(PFNGLBEGINPROC, glBegin)
OPENGL_PROC(PFNGLBINDTEXTUREPROC, glBindTexture)
OPENGL_PROC(PFNGLBLENDFUNCPROC, glBlendFunc)
OPENGL_PROC(PFNGLCLEARPROC, glClear)
OPENGL_PROC(PFNGLCLEARCOLORPROC, glClearColor)
OPENGL_PROC(PFNGLCULLFACEPROC, glCullFace)
OPENGL_PROC(PFNGLDELETETEXTURESPROC, glDeleteTextures)
OPENGL_PROC(PFNGLDISABLEPROC, glDisable)
OPENGL_PROC(PFNGLDRAWARRAYSPROC, glDrawArrays)
OPENGL_PROC(PFNGLENABLEPROC, glEnable)
OPENGL_PROC(PFNGLENDPROC, glEnd)
OPENGL_PROC(PFNGLGENTEXTURESPROC, glGenTextures)
OPENGL_PROC(PFNGLGETERRORPROC, glGetError)
OPENGL_PROC(PFNGLPIXELSTOREIPROC, glPixelStorei)
OPENGL_PROC(PFNGLREADPIXELSPROC, glReadPixels)
OPENGL_PROC(PFNGLTEXIMAGE2DPROC, glTexImage2D)
OPENGL_PROC(PFNGLTEXPARAMETERIPROC, glTexParameteri)
OPENGL_PROC(PFNGLVIEWPORTPROC, glViewport)
OPENGL_PROC(PFNGLTEXSUBIMAGE3DPROC, glTexSubImage3D)
OPENGL_PROC(PFNGLTEXIMAGE3DPROC, glTexImage3D)
OPENGL_PROC(PFNGLGETINTERGERVPROC, glGetIntegerv)
OPENGL_PROC(PFNGLGETTEXIMAGEPROC, glGetTexImage)
// 2.0+ function pointers
OPENGL_PROC(PFNGLATTACHSHADERPROC, glAttachShader)
OPENGL_PROC(PFNGLBINDBUFFERPROC, glBindBuffer)
OPENGL_PROC(PFNGLBINDFRAGDATALOCATIONPROC, glBindFragDataLocation)
OPENGL_PROC(PFNGLBINDFRAMEBUFFERPROC, glBindFramebuffer)
OPENGL_PROC(PFNGLBINDVERTEXARRAYPROC, glBindVertexArray)
OPENGL_PROC(PFNGLBUFFERDATAPROC, glBufferData)
OPENGL_PROC(PFNGLCOMPILESHADERPROC, glCompileShader)
OPENGL_PROC(PFNGLCREATEPROGRAMPROC, glCreateProgram)
OPENGL_PROC(PFNGLCREATESHADERPROC, glCreateShader)
OPENGL_PROC(PFNGLDELETEBUFFERSPROC, glDeleteBuffers)
OPENGL_PROC(PFNGLDELETEFRAMEBUFFERSPROC, glDeleteFramebuffers)
OPENGL_PROC(PFNGLDELETEPROGRAMPROC, glDeleteProgram)
OPENGL_PROC(PFNGLDELETESHADERPROC, glDeleteShader)
OPENGL_PROC(PFNGLDELETEVERTEXARRAYSPROC, glDeleteVertexArrays)
OPENGL_PROC(PFNGLDETACHSHADERPROC, glDetachShader)
OPENGL_PROC(PFNGLENABLEVERTEXATTRIBARRAYPROC, glEnableVertexAttribArray)
OPENGL_PROC(PFNGLFRAMEBUFFERTEXTURE2DPROC, glFramebufferTexture2D)
OPENGL_PROC(PFNGLGETATTRIBLOCATIONPROC, glGetAttribLocation)
OPENGL_PROC(PFNGLGENBUFFERSPROC, glGenBuffers)
OPENGL_PROC(PFNGLGENFRAMEBUFFERSPROC, glGenFramebuffers)
OPENGL_PROC(PFNGLGETPROGRAMINFOLOGPROC, glGetProgramInfoLog)
OPENGL_PROC(PFNGLGETPROGRAMIVPROC, glGetProgramiv)
OPENGL_PROC(PFNGLGETSHADERINFOLOGPROC, glGetShaderInfoLog)
OPENGL_PROC(PFNGLGETSHADERIVPROC, glGetShaderiv)
OPENGL_PROC(PFNGLGETUNIFORMLOCATIONPROC, glGetUniformLocation)
OPENGL_PROC(PFNGLGENVERTEXARRAYSPROC, glGenVertexArrays)
OPENGL_PROC(PFNGLLINKPROGRAMPROC, glLinkProgram)
OPENGL_PROC(PFNGLSHADERSOURCEPROC, glShaderSource)
OPENGL_PROC(PFNGLUNIFORM1IPROC, glUniform1i)
OPENGL_PROC(PFNGLUNIFORM1IVPROC, glUniform1iv)
OPENGL_PROC(PFNGLUNIFORM2IPROC, glUniform2i)
OPENGL_PROC(PFNGLUNIFORM2FPROC, glUniform2f)
OPENGL_PROC(PFNGLUNIFORM4FPROC, glUniform4f)
OPENGL_PROC(PFNGLUNIFORM4IPROC, glUniform4i)
OPENGL_PROC(PFNGLUNIFORM4FVPROC, glUniform4fv)
OPENGL_PROC(PFNGLUSEPROGRAMPROC, glUseProgram)
OPENGL_PROC(PFNGLVERTEXATTRIBIPOINTERPROC, glVertexAttribIPointer)
OPENGL_PROC(PFNGLVERTEXATTRIBPOINTERPROC, glVertexAttribPointer)
OPENGL_PROC(PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstanced)
OPENGL_PROC(PFNGLVERTEXATTRIBDIVISORPROC, glVertexAttribDivisor)
OPENGL_PROC(PFNGLBLENDFUNCSEPARATEPROC, glBlendFuncSeparate)