1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-06 21:26:56 +02:00

Properly fix SDL2 GLES2/GLES3/OPENGL building. (#249)

* Properly fix SDL2 GLES2/GLES3/OPENGL building.

* Use parenthesis on SDL2-related ifdefs as required.
This commit is contained in:
Manuel Alfayate Corchete
2020-04-15 05:17:25 +02:00
committed by GitHub
parent 51374e77f7
commit f1a5768ac0
2 changed files with 73 additions and 47 deletions

View File

@@ -65,50 +65,64 @@
#elif defined(__SDL2__)
#include <SDL2/SDL.h>
#if defined(_GAPI_GLES)
#include <SDL2/SDL_opengles2.h>
#include <SDL2/SDL_opengles2_gl2ext.h>
#if defined(_GAPI_GLES) // Default in SDL2 is GLES3. If we want GLES2, pass -D_GAPI_GLES2.
#if defined (_GAPI_GLES2) // We want GLES2 on SDL2
#include <SDL2/SDL_opengles2.h>
#include <SDL2/SDL_opengles2_gl2ext.h>
#define GL_CLAMP_TO_BORDER 0x812D
#define GL_TEXTURE_BORDER_COLOR 0x1004
#define GL_CLAMP_TO_BORDER 0x812D
#define GL_TEXTURE_BORDER_COLOR 0x1004
#define GL_TEXTURE_COMPARE_MODE 0x884C
#define GL_TEXTURE_COMPARE_FUNC 0x884D
#define GL_COMPARE_REF_TO_TEXTURE 0x884E
#define GL_TEXTURE_COMPARE_MODE 0x884C
#define GL_TEXTURE_COMPARE_FUNC 0x884D
#define GL_COMPARE_REF_TO_TEXTURE 0x884E
#undef GL_RG
#undef GL_RG32F
#undef GL_RG16F
#undef GL_RGBA32F
#undef GL_RGBA16F
#undef GL_HALF_FLOAT
#undef GL_RG
#undef GL_RG32F
#undef GL_RG16F
#undef GL_RGBA32F
#undef GL_RGBA16F
#undef GL_HALF_FLOAT
#define GL_RG GL_RGBA
#define GL_RGBA32F GL_RGBA
#define GL_RGBA16F GL_RGBA
#define GL_RG32F GL_RGBA
#define GL_RG16F GL_RGBA
#define GL_HALF_FLOAT GL_HALF_FLOAT_OES
#define GL_RG GL_RGBA
#define GL_RGBA32F GL_RGBA
#define GL_RGBA16F GL_RGBA
#define GL_RG32F GL_RGBA
#define GL_RG16F GL_RGBA
#define GL_HALF_FLOAT GL_HALF_FLOAT_OES
#define GL_TEXTURE_WRAP_R 0
#define GL_DEPTH_STENCIL GL_DEPTH_STENCIL_OES
#define GL_UNSIGNED_INT_24_8 GL_UNSIGNED_INT_24_8_OES
//We need this on GLES2, too.
#define GL_TEXTURE_MAX_LEVEL GL_TEXTURE_MAX_LEVEL_APPLE
#define GL_TEXTURE_WRAP_R 0
#define GL_DEPTH_STENCIL GL_DEPTH_STENCIL_OES
#define GL_UNSIGNED_INT_24_8 GL_UNSIGNED_INT_24_8_OES
//We need this on GLES2, too.
#define GL_TEXTURE_MAX_LEVEL GL_TEXTURE_MAX_LEVEL_APPLE
#define glTexImage3D(...) 0
#ifndef GL_TEXTURE_3D // WUUUUUT!?
#define GL_TEXTURE_3D GL_TEXTURE_3D_OES
#endif
#define glTexImage3D(...) 0
#ifndef GL_TEXTURE_3D // WUUUUUT!?
#define GL_TEXTURE_3D GL_TEXTURE_3D_OES
#endif
#define glGenVertexArrays(...)
#define glDeleteVertexArrays(...)
#define glBindVertexArray(...)
#define GL_PROGRAM_BINARY_LENGTH GL_PROGRAM_BINARY_LENGTH_OES
#else // We want GLES3 on SDL2
#include <GLES3/gl3.h>
#include <GLES3/gl3ext.h>
#include <GLES2/gl2ext.h>
#endif //GAPI_GLES2
#define GL_PROGRAM_BINARY_LENGTH GL_PROGRAM_BINARY_LENGTH_OES
#define glGetProgramBinary(...)
#define glProgramBinary(...)
#else
// These are needed for both GLES2 and GLES3 on SDL2
#define glGenVertexArrays(...)
#define glDeleteVertexArrays(...)
#define glBindVertexArray(...)
#define glGetProgramBinary(...)
#define glProgramBinary(...)
#define PFNGLGENVERTEXARRAYSPROC PFNGLGENVERTEXARRAYSOESPROC
#define PFNGLDELETEVERTEXARRAYSPROC PFNGLDELETEVERTEXARRAYSOESPROC
#define PFNGLBINDVERTEXARRAYPROC PFNGLBINDVERTEXARRAYOESPROC
#define PFNGLGETPROGRAMBINARYPROC PFNGLGETPROGRAMBINARYOESPROC
#define PFNGLPROGRAMBINARYPROC PFNGLPROGRAMBINARYOESPROC
#else // We want OpenGL on SDL2, not GLES
#include <SDL2/SDL_opengl.h>
#include <SDL2/SDL_opengl_glext.h>
#endif
@@ -292,13 +306,15 @@
#define glProgramBinary(...)
#endif
#if defined(_OS_WIN) || defined(_OS_LINUX) || defined(_OS_GCW0)
#if defined(_OS_WIN) || defined(_OS_LINUX) || defined(_OS_GCW0) || (defined(__SDL2__) && (defined(_GAPI_GLES2) || defined(_SDL2_OPENGL)))
void* GetProc(const char *name) {
#ifdef _OS_WIN
return (void*)wglGetProcAddress(name);
#elif _OS_LINUX
return (void*)glXGetProcAddress((GLubyte*)name);
#elif __SDL2__
return (void*)SDL_GL_GetProcAddress(name);
#else // EGL
return (void*)eglGetProcAddress(name);
#endif
@@ -322,7 +338,7 @@
PFNGLXSWAPINTERVALSGIPROC glXSwapIntervalSGI;
#endif
#if defined(_OS_WIN) || defined(_OS_LINUX)
#if defined(_OS_WIN) || defined(_OS_LINUX) || (defined(__SDL2__) && !defined(_GAPI_GLES2))
PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
#ifdef _OS_WIN
PFNGLTEXIMAGE3DPROC glTexImage3D;
@@ -1114,7 +1130,11 @@ namespace GAPI {
//void *libGL = dlopen("libGLESv2.so", RTLD_LAZY);
#endif
#if defined(_OS_WIN) || defined(_OS_LINUX) || defined(_OS_GCW0)
#if (defined(__SDL2__) && defined(_GAPI_GLES2))
GetProcOGL(glDiscardFramebufferEXT);
#endif
#if defined(_OS_WIN) || defined(_OS_LINUX) || defined(_OS_GCW0) || (defined(__SDL2__) && !defined(_GAPI_GLES))
#ifdef _OS_WIN
GetProcOGL(glActiveTexture);
#endif
@@ -1125,7 +1145,7 @@ namespace GAPI {
GetProcOGL(glXSwapIntervalSGI);
#endif
#if defined(_OS_WIN) || defined(_OS_LINUX)
#if defined(_OS_WIN) || defined(_OS_LINUX) || (defined(__SDL2__) && (defined(_GAPI_GLES2) || defined(_SDL2_OPENGL)))
GetProcOGL(glGenerateMipmap);
#ifdef _OS_WIN
GetProcOGL(glTexImage3D);
@@ -1485,11 +1505,14 @@ namespace GAPI {
if (color) discard[count++] = Core::active.target ? GL_COLOR_ATTACHMENT0 : GL_COLOR_EXT;
if (depth) discard[count++] = Core::active.target ? GL_DEPTH_ATTACHMENT : GL_DEPTH_EXT;
if (count) {
#ifdef _OS_ANDROID
#if defined(_OS_ANDROID) || (defined(__SDL2__) && !defined(_GAPI_GLES2))
/* glInvalidateBuffer() is the GLES3 version of glDiscardFramebufferEXT(), also
available on Android. Not available in any GLES2 implementation, this is GLES3 stuff.*/
glInvalidateFramebuffer(GL_FRAMEBUFFER, count, discard);
#elif !defined(__SDL2__) && !defined(_OS_WEB)
/* SDL2 typically uses MESA which does not have glDiscardFramebufferEXT() implemented
for some drivers, like Gallium VC4. */
#elif !defined(_OS_WEB) || (defined(__SDL2__) && defined(_GAPI_GLES2))
/* glDiscardFramebufferEXT() is available even in GLES2 MESA implementations,
but we have to get the extension function pointer address to use it.
Not available in GLES3, which is SDL2 default GLES version. */
glDiscardFramebufferEXT(GL_FRAMEBUFFER, count, discard);
#endif
}

View File

@@ -1,7 +1,10 @@
set -e
# Use this compilation line to build SDL2/GLES version
# Use this compilation line to build SDL2/GLES version, GLES2 version.
#g++ -DSDL2_GLES -D_GAPI_GLES2 -std=c++11 `sdl2-config --cflags` -O3 -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -Wl,--gc-sections -DNDEBUG -D__SDL2__ main.cpp ../../libs/stb_vorbis/stb_vorbis.c ../../libs/minimp3/minimp3.cpp ../../libs/tinf/tinflate.c -I../../ -o OpenLara `sdl2-config --libs` -lGLESv2 -lEGL -lm -lrt -lpthread -lasound -ludev
# Use this compilation line to build SDL2/GLES version, GLES3, which is an extension to GLES2 so we use -lGLESv2, too.
g++ -DSDL2_GLES -std=c++11 `sdl2-config --cflags` -O3 -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -Wl,--gc-sections -DNDEBUG -D__SDL2__ main.cpp ../../libs/stb_vorbis/stb_vorbis.c ../../libs/minimp3/minimp3.cpp ../../libs/tinf/tinflate.c -I../../ -o OpenLara `sdl2-config --libs` -lGLESv2 -lEGL -lm -lrt -lpthread -lasound -ludev
# Use this compilation line to build SDL2/OpenGL version
#g++ -std=c++11 `sdl2-config --cflags` -O3 -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -Wl,--gc-sections -DNDEBUG -D__SDL2__ main.cpp ../../libs/stb_vorbis/stb_vorbis.c ../../libs/minimp3/minimp3.cpp ../../libs/tinf/tinflate.c -I../../ -o OpenLara `sdl2-config --libs` -lGL -lm -lrt -lpthread -lasound -ludev
# Use this compilation line to build SDL2/OpenGL version.
#g++ -std=c++11 `sdl2-config --cflags` -O3 -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -Wl,--gc-sections -DNDEBUG -D__SDL2__ -D_SDL2_OPENGL main.cpp ../../libs/stb_vorbis/stb_vorbis.c ../../libs/minimp3/minimp3.cpp ../../libs/tinf/tinflate.c -I../../ -o OpenLara `sdl2-config --libs` -lGL -lm -lrt -lpthread -lasound -ludev