mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-08 14:16:52 +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:
committed by
GitHub
parent
51374e77f7
commit
f1a5768ac0
111
src/gapi/gl.h
111
src/gapi/gl.h
@@ -65,50 +65,64 @@
|
|||||||
#elif defined(__SDL2__)
|
#elif defined(__SDL2__)
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
|
|
||||||
#if defined(_GAPI_GLES)
|
#if defined(_GAPI_GLES) // Default in SDL2 is GLES3. If we want GLES2, pass -D_GAPI_GLES2.
|
||||||
#include <SDL2/SDL_opengles2.h>
|
#if defined (_GAPI_GLES2) // We want GLES2 on SDL2
|
||||||
#include <SDL2/SDL_opengles2_gl2ext.h>
|
#include <SDL2/SDL_opengles2.h>
|
||||||
|
#include <SDL2/SDL_opengles2_gl2ext.h>
|
||||||
|
|
||||||
#define GL_CLAMP_TO_BORDER 0x812D
|
#define GL_CLAMP_TO_BORDER 0x812D
|
||||||
#define GL_TEXTURE_BORDER_COLOR 0x1004
|
#define GL_TEXTURE_BORDER_COLOR 0x1004
|
||||||
|
|
||||||
#define GL_TEXTURE_COMPARE_MODE 0x884C
|
#define GL_TEXTURE_COMPARE_MODE 0x884C
|
||||||
#define GL_TEXTURE_COMPARE_FUNC 0x884D
|
#define GL_TEXTURE_COMPARE_FUNC 0x884D
|
||||||
#define GL_COMPARE_REF_TO_TEXTURE 0x884E
|
#define GL_COMPARE_REF_TO_TEXTURE 0x884E
|
||||||
|
|
||||||
#undef GL_RG
|
#undef GL_RG
|
||||||
#undef GL_RG32F
|
#undef GL_RG32F
|
||||||
#undef GL_RG16F
|
#undef GL_RG16F
|
||||||
#undef GL_RGBA32F
|
#undef GL_RGBA32F
|
||||||
#undef GL_RGBA16F
|
#undef GL_RGBA16F
|
||||||
#undef GL_HALF_FLOAT
|
#undef GL_HALF_FLOAT
|
||||||
|
|
||||||
#define GL_RG GL_RGBA
|
#define GL_RG GL_RGBA
|
||||||
#define GL_RGBA32F GL_RGBA
|
#define GL_RGBA32F GL_RGBA
|
||||||
#define GL_RGBA16F GL_RGBA
|
#define GL_RGBA16F GL_RGBA
|
||||||
#define GL_RG32F GL_RGBA
|
#define GL_RG32F GL_RGBA
|
||||||
#define GL_RG16F GL_RGBA
|
#define GL_RG16F GL_RGBA
|
||||||
#define GL_HALF_FLOAT GL_HALF_FLOAT_OES
|
#define GL_HALF_FLOAT GL_HALF_FLOAT_OES
|
||||||
|
|
||||||
#define GL_TEXTURE_WRAP_R 0
|
#define GL_TEXTURE_WRAP_R 0
|
||||||
#define GL_DEPTH_STENCIL GL_DEPTH_STENCIL_OES
|
#define GL_DEPTH_STENCIL GL_DEPTH_STENCIL_OES
|
||||||
#define GL_UNSIGNED_INT_24_8 GL_UNSIGNED_INT_24_8_OES
|
#define GL_UNSIGNED_INT_24_8 GL_UNSIGNED_INT_24_8_OES
|
||||||
//We need this on GLES2, too.
|
//We need this on GLES2, too.
|
||||||
#define GL_TEXTURE_MAX_LEVEL GL_TEXTURE_MAX_LEVEL_APPLE
|
#define GL_TEXTURE_MAX_LEVEL GL_TEXTURE_MAX_LEVEL_APPLE
|
||||||
|
|
||||||
#define glTexImage3D(...) 0
|
#define glTexImage3D(...) 0
|
||||||
#ifndef GL_TEXTURE_3D // WUUUUUT!?
|
#ifndef GL_TEXTURE_3D // WUUUUUT!?
|
||||||
#define GL_TEXTURE_3D GL_TEXTURE_3D_OES
|
#define GL_TEXTURE_3D GL_TEXTURE_3D_OES
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define glGenVertexArrays(...)
|
#define GL_PROGRAM_BINARY_LENGTH GL_PROGRAM_BINARY_LENGTH_OES
|
||||||
#define glDeleteVertexArrays(...)
|
#else // We want GLES3 on SDL2
|
||||||
#define glBindVertexArray(...)
|
#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
|
// These are needed for both GLES2 and GLES3 on SDL2
|
||||||
#define glGetProgramBinary(...)
|
#define glGenVertexArrays(...)
|
||||||
#define glProgramBinary(...)
|
#define glDeleteVertexArrays(...)
|
||||||
#else
|
#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.h>
|
||||||
#include <SDL2/SDL_opengl_glext.h>
|
#include <SDL2/SDL_opengl_glext.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -292,13 +306,15 @@
|
|||||||
#define glProgramBinary(...)
|
#define glProgramBinary(...)
|
||||||
#endif
|
#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) {
|
void* GetProc(const char *name) {
|
||||||
#ifdef _OS_WIN
|
#ifdef _OS_WIN
|
||||||
return (void*)wglGetProcAddress(name);
|
return (void*)wglGetProcAddress(name);
|
||||||
#elif _OS_LINUX
|
#elif _OS_LINUX
|
||||||
return (void*)glXGetProcAddress((GLubyte*)name);
|
return (void*)glXGetProcAddress((GLubyte*)name);
|
||||||
|
#elif __SDL2__
|
||||||
|
return (void*)SDL_GL_GetProcAddress(name);
|
||||||
#else // EGL
|
#else // EGL
|
||||||
return (void*)eglGetProcAddress(name);
|
return (void*)eglGetProcAddress(name);
|
||||||
#endif
|
#endif
|
||||||
@@ -322,7 +338,7 @@
|
|||||||
PFNGLXSWAPINTERVALSGIPROC glXSwapIntervalSGI;
|
PFNGLXSWAPINTERVALSGIPROC glXSwapIntervalSGI;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_OS_WIN) || defined(_OS_LINUX)
|
#if defined(_OS_WIN) || defined(_OS_LINUX) || (defined(__SDL2__) && !defined(_GAPI_GLES2))
|
||||||
PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
|
PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
|
||||||
#ifdef _OS_WIN
|
#ifdef _OS_WIN
|
||||||
PFNGLTEXIMAGE3DPROC glTexImage3D;
|
PFNGLTEXIMAGE3DPROC glTexImage3D;
|
||||||
@@ -1114,7 +1130,11 @@ namespace GAPI {
|
|||||||
//void *libGL = dlopen("libGLESv2.so", RTLD_LAZY);
|
//void *libGL = dlopen("libGLESv2.so", RTLD_LAZY);
|
||||||
#endif
|
#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
|
#ifdef _OS_WIN
|
||||||
GetProcOGL(glActiveTexture);
|
GetProcOGL(glActiveTexture);
|
||||||
#endif
|
#endif
|
||||||
@@ -1125,7 +1145,7 @@ namespace GAPI {
|
|||||||
GetProcOGL(glXSwapIntervalSGI);
|
GetProcOGL(glXSwapIntervalSGI);
|
||||||
#endif
|
#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);
|
GetProcOGL(glGenerateMipmap);
|
||||||
#ifdef _OS_WIN
|
#ifdef _OS_WIN
|
||||||
GetProcOGL(glTexImage3D);
|
GetProcOGL(glTexImage3D);
|
||||||
@@ -1485,11 +1505,14 @@ namespace GAPI {
|
|||||||
if (color) discard[count++] = Core::active.target ? GL_COLOR_ATTACHMENT0 : GL_COLOR_EXT;
|
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 (depth) discard[count++] = Core::active.target ? GL_DEPTH_ATTACHMENT : GL_DEPTH_EXT;
|
||||||
if (count) {
|
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);
|
glInvalidateFramebuffer(GL_FRAMEBUFFER, count, discard);
|
||||||
#elif !defined(__SDL2__) && !defined(_OS_WEB)
|
#elif !defined(_OS_WEB) || (defined(__SDL2__) && defined(_GAPI_GLES2))
|
||||||
/* SDL2 typically uses MESA which does not have glDiscardFramebufferEXT() implemented
|
/* glDiscardFramebufferEXT() is available even in GLES2 MESA implementations,
|
||||||
for some drivers, like Gallium VC4. */
|
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);
|
glDiscardFramebufferEXT(GL_FRAMEBUFFER, count, discard);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,10 @@
|
|||||||
set -e
|
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
|
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
|
# 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
|
#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
|
||||||
|
Reference in New Issue
Block a user