From 3aa1f9749f62dd56d88b45c8ab2059edbae0f5f1 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Wed, 22 May 2024 18:35:43 +1000 Subject: [PATCH] Allow easily overriding default window backend --- src/Core.h | 32 +++++++++++++++++++++++--------- src/Window_SDL.c | 2 +- src/Window_SDL3.c | 2 +- src/Window_Terminal.c | 2 +- src/Window_Win.c | 2 +- src/Window_X11.c | 4 ++-- src/interop_BeOS.cpp | 2 +- src/interop_cocoa.m | 2 +- 8 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/Core.h b/src/Core.h index 9843b4318..304110bc6 100644 --- a/src/Core.h +++ b/src/Core.h @@ -117,6 +117,13 @@ typedef cc_uint8 cc_bool; #endif #endif +#define CC_WIN_BACKEND_X11 1 +#define CC_WIN_BACKEND_WIN32 2 +#define CC_WIN_BACKEND_COCOA 3 +#define CC_WIN_BACKEND_TERMINAL 4 +#define CC_WIN_BACKEND_SDL2 5 +#define CC_WIN_BACKEND_SDL3 6 +#define CC_WIN_BACKEND_BEOS 7 #define CC_BUILD_NETWORKING #define CC_BUILD_FREETYPE @@ -149,10 +156,10 @@ typedef cc_uint8 cc_bool; #elif defined _WIN32 #define CC_BUILD_WIN #define CC_BUILD_D3D9 - #define CC_BUILD_WINGUI #define CC_BUILD_HTTPCLIENT #define CC_BUILD_SCHANNEL #define CC_BUILD_WINMM + #define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_WIN32 #elif defined __ANDROID__ #define CC_BUILD_ANDROID #define CC_BUILD_MOBILE @@ -167,17 +174,17 @@ typedef cc_uint8 cc_bool; #define CC_BUILD_SERENITY #define CC_BUILD_POSIX #define CC_BUILD_GL - #define CC_BUILD_SDL #define CC_BUILD_CURL #define CC_BUILD_OPENAL + #define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_SDL2 #elif defined __linux__ #define CC_BUILD_LINUX #define CC_BUILD_POSIX #define CC_BUILD_GL - #define CC_BUILD_X11 #define CC_BUILD_XINPUT2 #define CC_BUILD_CURL #define CC_BUILD_OPENAL + #define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_X11 #if defined CC_BUILD_RPI #define CC_BUILD_GLMODERN #define CC_BUILD_GLES @@ -195,7 +202,7 @@ typedef cc_uint8 cc_bool; #define CC_BUILD_TOUCH #define CC_BUILD_CFNETWORK #else - #define CC_BUILD_COCOA + #define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_COCOA #define CC_BUILD_MACOS #define CC_BUILD_CURL #endif @@ -204,7 +211,7 @@ typedef cc_uint8 cc_bool; #define CC_BUILD_SOLARIS #define CC_BUILD_POSIX #define CC_BUILD_GL - #define CC_BUILD_X11 + #define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_X11 #define CC_BUILD_XINPUT2 #define CC_BUILD_CURL #define CC_BUILD_OPENAL @@ -213,28 +220,28 @@ typedef cc_uint8 cc_bool; #define CC_BUILD_POSIX #define CC_BUILD_BSD #define CC_BUILD_GL - #define CC_BUILD_X11 #define CC_BUILD_XINPUT2 #define CC_BUILD_CURL #define CC_BUILD_OPENAL + #define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_X11 #elif defined __OpenBSD__ #define CC_BUILD_OPENBSD #define CC_BUILD_POSIX #define CC_BUILD_BSD #define CC_BUILD_GL - #define CC_BUILD_X11 #define CC_BUILD_XINPUT2 #define CC_BUILD_CURL #define CC_BUILD_OPENAL + #define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_X11 #elif defined __NetBSD__ #define CC_BUILD_NETBSD #define CC_BUILD_POSIX #define CC_BUILD_BSD #define CC_BUILD_GL - #define CC_BUILD_X11 #define CC_BUILD_XINPUT2 #define CC_BUILD_CURL #define CC_BUILD_OPENAL + #define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_X11 #elif defined __HAIKU__ #define CC_BUILD_HAIKU #define CC_BUILD_POSIX @@ -242,6 +249,7 @@ typedef cc_uint8 cc_bool; #define CC_BUILD_CURL #define CC_BUILD_OPENAL #define CC_BACKTRACE_BUILTIN + #define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_BEOS #elif defined __BEOS__ #define CC_BUILD_BEOS #define CC_BUILD_POSIX @@ -250,14 +258,15 @@ typedef cc_uint8 cc_bool; #define CC_BUILD_HTTPCLIENT #define CC_BUILD_OPENAL #define CC_BACKTRACE_BUILTIN + #define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_BEOS #elif defined __sgi #define CC_BUILD_IRIX #define CC_BUILD_POSIX #define CC_BUILD_GL - #define CC_BUILD_X11 #define CC_BUILD_CURL #define CC_BUILD_OPENAL #define CC_BIG_ENDIAN + #define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_X11 #elif defined __EMSCRIPTEN__ #define CC_BUILD_WEB #define CC_BUILD_GL @@ -400,6 +409,11 @@ typedef cc_uint8 cc_bool; #endif #endif +/* Use platform default unless override is provided via command line/makefile/etc */ +#if defined DEFAULT_WIN_BACKEND && !defined CC_WIN_BACKEND + #define CC_WIN_BACKEND DEFAULT_WIN_BACKEND +#endif + #ifdef CC_BUILD_CONSOLE #undef CC_BUILD_FREETYPE #undef CC_BUILD_PLUGINS diff --git a/src/Window_SDL.c b/src/Window_SDL.c index 2ed6b905f..4fd8b0f5f 100644 --- a/src/Window_SDL.c +++ b/src/Window_SDL.c @@ -1,5 +1,5 @@ #include "Core.h" -#if defined CC_BUILD_SDL2 +#if CC_WIN_BACKEND == CC_WIN_BACKEND_SDL2 #include "_WindowBase.h" #include "Graphics.h" #include "String.h" diff --git a/src/Window_SDL3.c b/src/Window_SDL3.c index d744db409..4362c9c55 100644 --- a/src/Window_SDL3.c +++ b/src/Window_SDL3.c @@ -1,5 +1,5 @@ #include "Core.h" -#if defined CC_BUILD_SDL3 +#if CC_WIN_BACKEND == CC_WIN_BACKEND_SDL3 #include "_WindowBase.h" #include "Graphics.h" #include "String.h" diff --git a/src/Window_Terminal.c b/src/Window_Terminal.c index 35d4e6aa4..ea6aefc36 100644 --- a/src/Window_Terminal.c +++ b/src/Window_Terminal.c @@ -1,5 +1,5 @@ #include "Core.h" -#if defined CC_BUILD_TERMINAL +#if CC_WIN_BACKEND == CC_WIN_BACKEND_TERMINAL #include "_WindowBase.h" #include "String.h" #include "Funcs.h" diff --git a/src/Window_Win.c b/src/Window_Win.c index 30da7696d..760a81d10 100644 --- a/src/Window_Win.c +++ b/src/Window_Win.c @@ -1,5 +1,5 @@ #include "Core.h" -#if defined CC_BUILD_WINGUI && !defined CC_BUILD_SDL +#if CC_WIN_BACKEND == CC_WIN_BACKEND_WIN32 #include "_WindowBase.h" #include "String.h" #include "Funcs.h" diff --git a/src/Window_X11.c b/src/Window_X11.c index 3a04cbf9d..c8d4ebc34 100644 --- a/src/Window_X11.c +++ b/src/Window_X11.c @@ -1,5 +1,5 @@ #include "Core.h" -#if defined CC_BUILD_X11 && !defined CC_BUILD_SDL2 && !defined CC_BUILD_SDL3 +#if CC_WIN_BACKEND == CC_WIN_BACKEND_X11 #include "_WindowBase.h" #include "String.h" #include "Funcs.h" @@ -270,7 +270,7 @@ static void HookXErrors(void) { /*########################################################################################################################* *--------------------------------------------------Public implementation--------------------------------------------------* *#########################################################################################################################*/ -#ifdef CC_BUILD_EGL +#if defined CC_BUILD_EGL || !defined CC_BUILD_GL static XVisualInfo GLContext_SelectVisual(void) { XVisualInfo info; cc_result res; diff --git a/src/interop_BeOS.cpp b/src/interop_BeOS.cpp index 20fc57a42..499174619 100644 --- a/src/interop_BeOS.cpp +++ b/src/interop_BeOS.cpp @@ -1,5 +1,5 @@ #include "Core.h" -#if defined CC_BUILD_HAIKU || defined CC_BUILD_BEOS +#if CC_WIN_BACKEND == CC_WIN_BACKEND_BEOS extern "C" { #include "_WindowBase.h" #include "Graphics.h" diff --git a/src/interop_cocoa.m b/src/interop_cocoa.m index 6e31bf28a..17a4c02fa 100644 --- a/src/interop_cocoa.m +++ b/src/interop_cocoa.m @@ -1,6 +1,6 @@ #define GL_SILENCE_DEPRECATION #include "Core.h" -#ifdef CC_BUILD_COCOA +#if CC_WIN_BACKEND == CC_WIN_BACKEND_COCOA #include "_WindowBase.h" #include "ExtMath.h" #include "Funcs.h"