From 8b6c4b97e66ed05fff349a58db84e3782806d060 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Sun, 6 Jul 2025 21:34:59 +1000 Subject: [PATCH] Windows: Fix OpenGL build not working with builtin 1.1 software renderer anymore --- misc/windows/min-imagehlp.h | 10 +++++++--- src/Window_Win.c | 13 +++++-------- src/_GLShared.h | 2 +- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/misc/windows/min-imagehlp.h b/misc/windows/min-imagehlp.h index 5d9ca76a6..5f660fb07 100644 --- a/misc/windows/min-imagehlp.h +++ b/misc/windows/min-imagehlp.h @@ -5,6 +5,10 @@ /*Not available on older SDKs */ typedef cc_uintptr _DWORD_PTR; +typedef PVOID (WINAPI *_PFUNCTION_TABLE_ACCESS_ROUTINE)(HANDLE process, _DWORD_PTR addrBase); +typedef _DWORD_PTR (WINAPI *_PGET_MODULE_BASE_ROUTINE)(HANDLE process, _DWORD_PTR address); +typedef BOOL (WINAPI *_PREAD_PROCESS_MEMORY_ROUTINE)(HANDLE process, _DWORD_PTR baseAddress, PVOID buffer, DWORD size, DWORD* numRead); + CC_IMAGEHLP_FUNC _DWORD_PTR (WINAPI *_SymGetModuleBase)(HANDLE process, _DWORD_PTR addr); CC_IMAGEHLP_FUNC PVOID (WINAPI *_SymFunctionTableAccess)(HANDLE process, _DWORD_PTR addr); CC_IMAGEHLP_FUNC BOOL (WINAPI *_SymInitialize)(HANDLE process, PCSTR userSearchPath, BOOL fInvadeProcess); @@ -16,8 +20,8 @@ CC_IMAGEHLP_FUNC BOOL (WINAPI *_SymGetLineFromAddr)(HANDLE hProcess, _DWOR CC_IMAGEHLP_FUNC BOOL (WINAPI *_EnumerateLoadedModules)(HANDLE process, PENUMLOADED_MODULES_CALLBACK callback, PVOID userContext); CC_IMAGEHLP_FUNC BOOL (WINAPI *_StackWalk)(DWORD machineType, HANDLE process, HANDLE thread, STACKFRAME* stackFrame, PVOID contextRecord, - PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine, PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine, - PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine, PTRANSLATE_ADDRESS_ROUTINE TranslateAddress); + _PREAD_PROCESS_MEMORY_ROUTINE readMemory, _PFUNCTION_TABLE_ACCESS_ROUTINE functionTableAccess, + _PGET_MODULE_BASE_ROUTINE getModuleBase, PTRANSLATE_ADDRESS_ROUTINE translateAddress); static void ImageHlp_LoadDynamicFuncs(void) { static const struct DynamicLibSym funcs[] = { @@ -45,4 +49,4 @@ static void ImageHlp_LoadDynamicFuncs(void) { static const cc_string imagehlp = String_FromConst("IMAGEHLP.DLL"); void* lib; DynamicLib_LoadAll(&imagehlp, funcs, Array_Elems(funcs), &lib); -} \ No newline at end of file +} diff --git a/src/Window_Win.c b/src/Window_Win.c index 06c22970b..bb834eae7 100644 --- a/src/Window_Win.c +++ b/src/Window_Win.c @@ -881,19 +881,19 @@ static PROC (WINAPI *_wglGetProcAddress)(LPCSTR func); typedef BOOL (WINAPI *FP_SWAPINTERVAL)(int interval); static FP_SWAPINTERVAL _wglSwapIntervalEXT; -static void GLContext_SelectGraphicsMode(struct GraphicsMode* mode) { +static void GLContext_SelectPixelFormat(void) { PIXELFORMATDESCRIPTOR pfd = { 0 }; - int modeIndex; + int modeIndex, bpp = DisplayInfo.Depth; pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); pfd.nVersion = 1; pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER; /* TODO: PFD_SUPPORT_COMPOSITION FLAG? CHECK IF IT WORKS ON XP */ - pfd.cColorBits = mode->R + mode->G + mode->B; + pfd.cColorBits = bpp == 32 ? 24 : bpp; /* number of R + G + B bits */ pfd.cDepthBits = GLCONTEXT_DEFAULT_DEPTH; pfd.iPixelType = PFD_TYPE_RGBA; - pfd.cAlphaBits = mode->A; /* TODO not needed? test on Intel */ + pfd.cAlphaBits = bpp == 32 ? 8 : 0; /* TODO not needed? test on Intel */ modeIndex = ChoosePixelFormat(win_DC, &pfd); if (modeIndex == 0) { Process_Abort("Requested graphics mode not available"); } @@ -918,11 +918,8 @@ void GLContext_Create(void) { DynamicLib_OptSym(wglGetProcAddress) }; static const cc_string glPath = String_FromConst("OPENGL32.dll"); - struct GraphicsMode mode; - - InitGraphicsMode(&mode); - GLContext_SelectGraphicsMode(&mode); DynamicLib_LoadAll(&glPath, funcs, Array_Elems(funcs), &gl_lib); + GLContext_SelectPixelFormat(); ctx_handle = _wglCreateContext(win_DC); if (!ctx_handle) { diff --git a/src/_GLShared.h b/src/_GLShared.h index 721ced8f1..55845f95a 100644 --- a/src/_GLShared.h +++ b/src/_GLShared.h @@ -69,7 +69,7 @@ static void* FastAllocTempMem(int size) { *#########################################################################################################################*/ static cc_bool convert_rgba; -static void ConvertRGBA(void* dst, void* src, int numPixels) { +static void ConvertRGBA(void* dst, const void* src, int numPixels) { cc_uint8* d = (cc_uint8*)dst; cc_uint8* s = (cc_uint8*)src; int i;