Merge pull request #1163 from ps5-payload-dev/master

Simplify compiling for targets that lack GL drivers
This commit is contained in:
Yamagi 2024-11-23 14:52:46 +01:00 committed by GitHub
commit 6ff7413b65
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 80 additions and 11 deletions

View file

@ -65,6 +65,11 @@ option(CURL_SUPPORT "cURL support" ON)
option(OPENAL_SUPPORT "OpenAL support" ON)
option(SYSTEMWIDE_SUPPORT "Enable systemwide installation of game assets" OFF)
option(SDL3_SUPPORT "Build against SDL 3 instead of SDL2" OFF)
option(GL1_RENDERER "Build the GL3 renderer" ON)
option(GL3_RENDERER "Build the GL3 renderer" ON)
option(GLES1_RENDERER "Build the GLES1 renderer" OFF)
option(GLES3_RENDERER "Build the GLES3 renderer" ON)
option(SOFT_RENDERER "Build the software renderer" ON)
set(SYSTEMDIR "" CACHE STRING "Override the system default directory")
@ -189,11 +194,13 @@ else()
list(APPEND yquake2SDLLinkerFlags ${SDL2_LIBRARY})
endif()
# We need an OpenGL implementation.
set(OpenGL_GL_PREFERENCE GLVND)
find_package(OpenGL REQUIRED)
list(APPEND yquake2IncludeDirectories ${OPENGL_INCLUDE_DIR})
list(APPEND yquake2OpenGLLinkerFlags ${OPENGL_LIBRARIES})
if(GL1_RENDERER)
# We need an OpenGL implementation.
set(OpenGL_GL_PREFERENCE GLVND)
find_package(OpenGL REQUIRED)
list(APPEND yquake2IncludeDirectories ${OPENGL_INCLUDE_DIR})
list(APPEND yquake2OpenGLLinkerFlags ${OPENGL_LIBRARIES})
endif()
# backtrace lookup
# Some systems like Linux has it within the libc some like the BSD, Haiku ...
@ -781,6 +788,8 @@ else() # single-config, like normal Makefiles
endif()
target_link_libraries(game ${yquake2LinkerFlags})
if(${GL1_RENDERER})
# Build the GL1 dynamic library
add_library(ref_gl1 MODULE ${GL1-Source} ${GL1-Header} ${REF-Platform-Specific-Source})
set_target_properties(ref_gl1 PROPERTIES
@ -795,6 +804,10 @@ if(SDL3_SUPPORT)
target_link_libraries(ref_gl1 SDL3::SDL3)
endif()
endif()
if(${GL3_RENDERER})
# Build the GL3 dynamic library
add_library(ref_gl3 MODULE ${GL3-Source} ${Glad-GL3-Source} ${GL3-Header} ${Glad-GL3-Header} ${REF-Platform-Specific-Source})
set_target_properties(ref_gl3 PROPERTIES
@ -809,6 +822,10 @@ if(SDL3_SUPPORT)
target_link_libraries(ref_gl3 SDL3::SDL3)
endif()
endif()
if(${GLES3_RENDERER})
# Build the GLES3 dynamic library
add_library(ref_gles3 MODULE ${GL3-Source} ${Glad-GLES3-Source} ${GL3-Header} ${Glad-GLES3-Header} ${REF-Platform-Specific-Source})
set_target_properties(ref_gles3 PROPERTIES
@ -825,6 +842,10 @@ if(SDL3_SUPPORT)
target_link_libraries(ref_gles3 SDL3::SDL3)
endif()
endif()
if(${SOFT_RENDERER})
# Build the soft renderer dynamic library
add_library(ref_soft MODULE ${SOFT-Source} ${SOFT-Header} ${REF-Platform-Specific-Source})
set_target_properties(ref_soft PROPERTIES
@ -838,7 +859,9 @@ if(SDL3_SUPPORT)
target_link_libraries(ref_soft SDL3::SDL3)
endif()
if(FALSE)
endif()
if(${GLES1_RENDERER})
# Build the GLES1 dynamic library
add_library(ref_gles1 MODULE ${GL1-Source} ${Glad-GLES1-Source} ${GL1-Header} ${Glad-GLES1-Header} ${REF-Platform-Specific-Source})

View file

@ -29,7 +29,7 @@
#include "../../common/header/shared.h"
#if defined(__linux) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__sun)
#if defined(__linux) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__sun) || defined(__APPLE__)
#include <unistd.h> // readlink(), amongst others
#endif
@ -39,6 +39,7 @@
#ifdef _WIN32
#include <windows.h> // GetModuleFileNameA()
#include <wchar.h> // _wgetcwd()
#endif
#ifdef __APPLE__
@ -145,6 +146,31 @@ static void SetExecutablePath(char* exePath)
#endif
}
qboolean Sys_GetCwd(char *buf, size_t size)
{
#ifdef _WIN32
WCHAR wpath[PATH_MAX];
DWORD len;
if (_wgetcwd(wpath, PATH_MAX) == NULL)
{
return false;
}
len = WideCharToMultiByte(CP_UTF8, 0, wpath, -1, buf, size, NULL, NULL);
if (len <= 0 || len == size)
{
return false;
}
#else
if (getcwd(buf, size) == NULL)
{
return false;
}
#endif
return Q_strlcat(buf, "/", size) == 1;
}
const char *Sys_GetBinaryDir(void)
{
static char exeDir[PATH_MAX] = {0};
@ -156,8 +182,11 @@ const char *Sys_GetBinaryDir(void)
SetExecutablePath(exeDir);
if (exeDir[0] == '\0') {
Com_Printf("Couldn't determine executable path. Using ./ instead.\n");
Q_strlcpy(exeDir, "./", sizeof(exeDir));
if (Sys_GetCwd(exeDir, sizeof(exeDir)) == false)
{
Q_strlcpy(exeDir, "./", sizeof(exeDir));
}
Com_Printf("Couldn't determine executable path. Using %s instead.\n", exeDir);
} else {
// cut off executable name
char *lastSlash = strrchr(exeDir, '/');

View file

@ -1914,6 +1914,10 @@ RE_InitContext(void *win)
SDL_SetRenderVSync(renderer, 1);
#else
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if(!renderer)
{
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE | SDL_RENDERER_PRESENTVSYNC);
}
#endif
}
else
@ -1922,8 +1926,16 @@ RE_InitContext(void *win)
renderer = SDL_CreateRenderer(window, NULL);
#else
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if(!renderer)
{
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE);
}
#endif
}
if(!renderer) {
Com_Printf("Can't create renderer: %s\n", SDL_GetError());
return false;
}
/* Select the color for drawing. It is set to black here. */
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
@ -1966,7 +1978,10 @@ RE_InitContext(void *win)
#endif
SDL_TEXTUREACCESS_STREAMING,
vid_buffer_width, vid_buffer_height);
if(!texture) {
Com_Printf("Can't create texture: %s\n", SDL_GetError());
return false;
}
R_InitGraphics(vid_buffer_width, vid_buffer_height);
SWimp_CreateRender(vid_buffer_width, vid_buffer_height);

View file

@ -720,13 +720,15 @@ GLimp_ShutdownGraphics(void)
void
GLimp_GrabInput(qboolean grab)
{
static qboolean seen_error = false;
if(window != NULL)
{
SDL_SetWindowGrab(window, grab ? SDL_TRUE : SDL_FALSE);
}
if(SDL_SetRelativeMouseMode(grab ? SDL_TRUE : SDL_FALSE) < 0)
if(SDL_SetRelativeMouseMode(grab ? SDL_TRUE : SDL_FALSE) < 0 && !seen_error)
{
seen_error = true;
Com_Printf("WARNING: Setting Relative Mousemode failed, reason: %s\n", SDL_GetError());
Com_Printf(" You should probably update to SDL 2.0.3 or newer!\n");
}