Make it easier to switch Audio backends

This commit is contained in:
UnknownShadow200 2024-07-31 18:27:41 +10:00
parent 6da3ab1354
commit a31fec1973
5 changed files with 44 additions and 30 deletions

View File

@ -29,7 +29,7 @@ export AR := xenon-ar
#---------------------------------------------------------------------------------
TARGET := ClassiCube-xbox360
BUILD := build-360
SOURCES := src
SOURCES := src third_party/bearssl/src
#---------------------------------------------------------------------------------
# options for code generation
@ -68,7 +68,7 @@ export OFILES := $(CFILES:.c=.o) $(sFILES:.s=.o) $(SFILES:.S=.o)
#---------------------------------------------------------------------------------
# build a list of include paths
#---------------------------------------------------------------------------------
export INCLUDE := -I$(LIBXENON_INC)
export INCLUDE := -I$(LIBXENON_INC) -Ithird_party/bearssl/inc
#---------------------------------------------------------------------------------
# build a list of library paths

View File

@ -22,7 +22,7 @@ static void AudioBase_FreeChunks(struct AudioChunk* chunks, int numChunks);
/* achieve higher speed by playing samples at higher sample rate */
#define Audio_AdjustSampleRate(sampleRate, playbackRate) ((sampleRate * playbackRate) / 100)
#if defined CC_BUILD_OPENAL
#if CC_AUD_BACKEND == CC_AUD_BACKEND_OPENAL
/*########################################################################################################################*
*------------------------------------------------------OpenAL backend-----------------------------------------------------*
*#########################################################################################################################*/
@ -298,7 +298,7 @@ cc_result Audio_AllocChunks(cc_uint32 size, struct AudioChunk* chunks, int numCh
void Audio_FreeChunks(struct AudioChunk* chunks, int numChunks) {
AudioBase_FreeChunks(chunks, numChunks);
}
#elif defined CC_BUILD_WINMM
#elif CC_AUD_BACKEND == CC_AUD_BACKEND_WINMM
/*########################################################################################################################*
*------------------------------------------------------WinMM backend------------------------------------------------------*
*#########################################################################################################################*/
@ -503,7 +503,7 @@ cc_result Audio_AllocChunks(cc_uint32 size, struct AudioChunk* chunks, int numCh
void Audio_FreeChunks(struct AudioChunk* chunks, int numChunks) {
AudioBase_FreeChunks(chunks, numChunks);
}
#elif defined CC_BUILD_OPENSLES
#elif CC_AUD_BACKEND == CC_AUD_BACKEND_OPENSLES
/*########################################################################################################################*
*----------------------------------------------------OpenSL ES backend----------------------------------------------------*
*#########################################################################################################################*/

View File

@ -145,6 +145,10 @@ typedef cc_uint8 cc_bool;
#define CC_SSL_BACKEND_BEARSSL 2
#define CC_SSL_BACKEND_SCHANNEL 3
#define CC_AUD_BACKEND_OPENAL 1
#define CC_AUD_BACKEND_WINMM 2
#define CC_AUD_BACKEND_OPENSLES 3
#define CC_GFX_BACKEND_IS_GL() (CC_GFX_BACKEND == CC_GFX_BACKEND_GL1 || CC_GFX_BACKEND == CC_GFX_BACKEND_GL2)
#define CC_BUILD_NETWORKING
@ -180,9 +184,9 @@ typedef cc_uint8 cc_bool;
#elif defined _WIN32
#define CC_BUILD_WIN
#define CC_BUILD_HTTPCLIENT
#define CC_BUILD_WINMM
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_WINMM
#define DEFAULT_SSL_BACKEND CC_SSL_BACKEND_SCHANNEL
#define DEFAULT_GFX_BACKEND CC_GFX_BACKEND_D3D9
#define DEFAULT_GFX_BACKEND CC_GFX_BACKEND_GL1
#define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_WIN32
#elif defined __ANDROID__
#define CC_BUILD_ANDROID
@ -192,13 +196,14 @@ typedef cc_uint8 cc_bool;
#define CC_BUILD_EGL
#define CC_BUILD_TOUCH
#define CC_BUILD_OPENSLES
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENSLES
#define DEFAULT_GFX_BACKEND CC_GFX_BACKEND_GL2
#define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_ANDROID
#elif defined __serenity__
#define CC_BUILD_SERENITY
#define CC_BUILD_POSIX
#define CC_BUILD_CURL
#define CC_BUILD_OPENAL
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL
#define DEFAULT_GFX_BACKEND CC_GFX_BACKEND_GL1
#define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_SDL2
#elif defined __linux__
@ -206,7 +211,7 @@ typedef cc_uint8 cc_bool;
#define CC_BUILD_POSIX
#define CC_BUILD_XINPUT2
#define CC_BUILD_CURL
#define CC_BUILD_OPENAL
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL
#define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_X11
#if defined CC_BUILD_RPI
#define CC_BUILD_GLES
@ -231,7 +236,7 @@ typedef cc_uint8 cc_bool;
#define CC_BUILD_MACOS
#define CC_BUILD_CURL
#endif
#define CC_BUILD_OPENAL
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL
#elif defined Macintosh
#define DEFAULT_GFX_BACKEND CC_GFX_BACKEND_SOFTGPU
#define CC_BUILD_MACCLASSIC
@ -247,7 +252,7 @@ typedef cc_uint8 cc_bool;
#define CC_BUILD_POSIX
#define CC_BUILD_XINPUT2
#define CC_BUILD_CURL
#define CC_BUILD_OPENAL
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL
#define DEFAULT_GFX_BACKEND CC_GFX_BACKEND_GL1
#define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_X11
#elif defined __FreeBSD__ || defined __DragonFly__
@ -256,6 +261,7 @@ typedef cc_uint8 cc_bool;
#define CC_BUILD_BSD
#define CC_BUILD_XINPUT2
#define CC_BUILD_CURL
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL
#define DEFAULT_GFX_BACKEND CC_GFX_BACKEND_GL1
#define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_X11
#elif defined __OpenBSD__
@ -264,7 +270,7 @@ typedef cc_uint8 cc_bool;
#define CC_BUILD_BSD
#define CC_BUILD_XINPUT2
#define CC_BUILD_CURL
#define CC_BUILD_OPENAL
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL
#define DEFAULT_GFX_BACKEND CC_GFX_BACKEND_GL1
#define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_X11
#elif defined __NetBSD__
@ -273,15 +279,15 @@ typedef cc_uint8 cc_bool;
#define CC_BUILD_BSD
#define CC_BUILD_XINPUT2
#define CC_BUILD_CURL
#define CC_BUILD_OPENAL
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL
#define DEFAULT_GFX_BACKEND CC_GFX_BACKEND_GL1
#define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_X11
#elif defined __HAIKU__
#define CC_BUILD_HAIKU
#define CC_BUILD_POSIX
#define CC_BUILD_CURL
#define CC_BUILD_OPENAL
#define CC_BACKTRACE_BUILTIN
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL
#define DEFAULT_GFX_BACKEND CC_GFX_BACKEND_GL1
#define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_BEOS
#elif defined __BEOS__
@ -289,16 +295,16 @@ typedef cc_uint8 cc_bool;
#define CC_BUILD_POSIX
#define CC_BUILD_GL11
#define CC_BUILD_HTTPCLIENT
#define CC_BUILD_OPENAL
#define CC_BACKTRACE_BUILTIN
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL
#define DEFAULT_GFX_BACKEND CC_GFX_BACKEND_GL1
#define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_BEOS
#elif defined __sgi
#define CC_BUILD_IRIX
#define CC_BUILD_POSIX
#define CC_BUILD_CURL
#define CC_BUILD_OPENAL
#define CC_BIG_ENDIAN
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL
#define DEFAULT_GFX_BACKEND CC_GFX_BACKEND_GL1
#define DEFAULT_WIN_BACKEND CC_WIN_BACKEND_X11
#elif defined __EMSCRIPTEN__
@ -318,8 +324,8 @@ typedef cc_uint8 cc_bool;
#define CC_BUILD_CONSOLE
#define CC_BUILD_LOWMEM
#define CC_BUILD_COOPTHREADED
#define CC_BUILD_OPENAL
#define CC_BUILD_HTTPCLIENT
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL
#define DEFAULT_SSL_BACKEND CC_SSL_BACKEND_BEARSSL
#elif defined __3DS__
#define CC_BUILD_3DS
@ -342,9 +348,9 @@ typedef cc_uint8 cc_bool;
#elif defined __vita__
#define CC_BUILD_PSVITA
#define CC_BUILD_CONSOLE
#define CC_BUILD_OPENAL
#define CC_BUILD_HTTPCLIENT
#define CC_BUILD_TOUCH
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL
#define DEFAULT_SSL_BACKEND CC_SSL_BACKEND_BEARSSL
#elif defined _arch_dreamcast
#define CC_BUILD_DREAMCAST
@ -358,9 +364,9 @@ typedef cc_uint8 cc_bool;
#elif defined PLAT_PS3
#define CC_BUILD_PS3
#define CC_BUILD_CONSOLE
#define CC_BUILD_OPENAL
#define CC_BUILD_HTTPCLIENT
#define CC_BUILD_SPLITSCREEN
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL
#define DEFAULT_SSL_BACKEND CC_SSL_BACKEND_BEARSSL
#elif defined N64
#define CC_BIG_ENDIAN
@ -379,9 +385,9 @@ typedef cc_uint8 cc_bool;
#define CC_BUILD_CONSOLE
#define CC_BUILD_LOWMEM
#define CC_BUILD_COOPTHREADED
#define CC_BUILD_OPENAL
#define CC_BUILD_HTTPCLIENT
#define CC_BUILD_SPLITSCREEN
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL
#define DEFAULT_SSL_BACKEND CC_SSL_BACKEND_BEARSSL
#elif defined PLAT_NDS
#define CC_BUILD_NDS
@ -399,10 +405,10 @@ typedef cc_uint8 cc_bool;
#define CC_BUILD_WIIU
#define CC_BUILD_CONSOLE
#define CC_BUILD_COOPTHREADED
#define CC_BUILD_OPENAL
#define CC_BUILD_HTTPCLIENT
#define CC_BUILD_SPLITSCREEN
#define CC_BUILD_TOUCH
#define DEFAULT_AUD_BACKEND CC_AUD_BACKEND_OPENAL
#define DEFAULT_SSL_BACKEND CC_SSL_BACKEND_BEARSSL
#elif defined __SWITCH__
#define CC_BUILD_SWITCH
@ -463,6 +469,9 @@ typedef cc_uint8 cc_bool;
#if defined DEFAULT_SSL_BACKEND && !defined CC_SSL_BACKEND
#define CC_SSL_BACKEND DEFAULT_SSL_BACKEND
#endif
#if defined DEFAULT_AUD_BACKEND && !defined CC_AUD_BACKEND
#define CC_AUD_BACKEND DEFAULT_AUD_BACKEND
#endif
#ifdef CC_BUILD_CONSOLE
#undef CC_BUILD_FREETYPE

View File

@ -290,12 +290,12 @@ static DWORD_PTR (WINAPI *_SymGetModuleBase)(HANDLE process, DWORD_PTR addr);
static PVOID (WINAPI *_SymFunctionTableAccess)(HANDLE process, DWORD_PTR addr);
static BOOL (WINAPI *_SymInitialize)(HANDLE process, PCSTR userSearchPath, BOOL fInvadeProcess);
static PVOID FunctionTableAccessCallback(HANDLE process, DWORD_PTR addr) {
static PVOID WINAPI FunctionTableAccessCallback(HANDLE process, DWORD_PTR addr) {
if (!_SymFunctionTableAccess) return NULL;
return _SymFunctionTableAccess(process, addr);
}
static DWORD_PTR GetModuleBaseCallback(HANDLE process, DWORD_PTR addr) {
static DWORD_PTR WINAPI GetModuleBaseCallback(HANDLE process, DWORD_PTR addr) {
if (!_SymGetModuleBase) return 0;
return _SymGetModuleBase(process, addr);
}

View File

@ -812,6 +812,7 @@ static HGLRC ctx_handle;
static HDC ctx_DC;
typedef BOOL (WINAPI *FP_SWAPINTERVAL)(int interval);
static FP_SWAPINTERVAL wglSwapIntervalEXT;
static void* gl_lib;
static void GLContext_SelectGraphicsMode(struct GraphicsMode* mode) {
PIXELFORMATDESCRIPTOR pfd = { 0 };
@ -846,6 +847,9 @@ void GLContext_Create(void) {
InitGraphicsMode(&mode);
GLContext_SelectGraphicsMode(&mode);
static const cc_string glPath = String_FromConst("OPENGL32.dll");
gl_lib = DynamicLib_Load2(&glPath);
ctx_handle = wglCreateContext(win_DC);
if (!ctx_handle) {
Logger_Abort2(GetLastError(), "Failed to create OpenGL context");
@ -867,19 +871,20 @@ void GLContext_Free(void) {
ctx_handle = NULL;
}
static PROC (WINAPI *_wglGetProcAddress)(LPCSTR);
/* https://www.khronos.org/opengl/wiki/Load_OpenGL_Functions#Windows */
#define GLContext_IsInvalidAddress(ptr) (ptr == (void*)0 || ptr == (void*)1 || ptr == (void*)-1 || ptr == (void*)2)
void* GLContext_GetAddress(const char* function) {
static const cc_string glPath = String_FromConst("OPENGL32.dll");
static void* lib;
void* addr = (void*)wglGetProcAddress(function);
/* Not present on NT 3.5 */
if (!_wglGetProcAddress) _wglGetProcAddress = DynamicLib_Get2(gl_lib, "wglGetProcAddress");
if (_wglGetProcAddress) {
void* addr = (void*)_wglGetProcAddress(function);
if (!GLContext_IsInvalidAddress(addr)) return addr;
}
/* Some drivers return NULL from wglGetProcAddress for core OpenGL functions */
if (!lib) lib = DynamicLib_Load2(&glPath);
return DynamicLib_Get2(lib, function);
return DynamicLib_Get2(gl_lib, function);
}
cc_bool GLContext_SwapBuffers(void) {