mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-08 14:56:12 -04:00
Add register dumping for Darwin ARM64, simplify opengl function loading code slightly
This commit is contained in:
parent
2c59a9ebf7
commit
bbf185fdcc
@ -457,6 +457,12 @@ static void PrintRegisters(cc_string* str, void* ctx) {
|
||||
#elif defined __x86_64__
|
||||
#define REG_GET(reg, ign) &r->__ss.__r##reg
|
||||
Dump_X64()
|
||||
#elif defined __aarch64__
|
||||
#define REG_GNUM(num) &r->__ss.__x[num]
|
||||
#define REG_GET_SP() &r->__ss.__sp
|
||||
#define REG_GET_IP() &r->__ss.__pc
|
||||
/* TODO this reads invalid memory */
|
||||
Dump_ARM64()
|
||||
#elif defined __arm__
|
||||
#define REG_GNUM(num) &r->__ss.__r[num]
|
||||
#define REG_GET(reg, ign) &r->__ss.__ ## reg
|
||||
|
@ -798,11 +798,9 @@ void GLContext_Free(void) {
|
||||
void* GLContext_GetAddress(const char* function) {
|
||||
static const cc_string glPath = String_FromConst("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL");
|
||||
static void* lib;
|
||||
void* addr;
|
||||
|
||||
if (!lib) lib = DynamicLib_Load2(&glPath);
|
||||
addr = DynamicLib_Get2(lib, function);
|
||||
return GLContext_IsInvalidAddress(addr) ? NULL : addr;
|
||||
return DynamicLib_Get2(lib, function);
|
||||
}
|
||||
|
||||
cc_bool GLContext_SwapBuffers(void) {
|
||||
|
@ -651,16 +651,19 @@ void GLContext_Free(void) {
|
||||
ctx_handle = NULL;
|
||||
}
|
||||
|
||||
/* 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);
|
||||
if (!GLContext_IsInvalidAddress(addr)) return addr;
|
||||
|
||||
/* Some drivers return NULL from wglGetProcAddress for core OpenGL functions */
|
||||
if (!lib) lib = DynamicLib_Load2(&glPath);
|
||||
addr = DynamicLib_Get2(lib, function);
|
||||
return GLContext_IsInvalidAddress(addr) ? NULL : addr;
|
||||
return DynamicLib_Get2(lib, function);
|
||||
}
|
||||
|
||||
cc_bool GLContext_SwapBuffers(void) {
|
||||
|
@ -1159,8 +1159,7 @@ void GLContext_Free(void) {
|
||||
}
|
||||
|
||||
void* GLContext_GetAddress(const char* function) {
|
||||
void* addr = (void*)glXGetProcAddress((const GLubyte*)function);
|
||||
return GLContext_IsInvalidAddress(addr) ? NULL : addr;
|
||||
return (void*)glXGetProcAddress((const GLubyte*)function);
|
||||
}
|
||||
|
||||
cc_bool GLContext_SwapBuffers(void) {
|
||||
|
@ -99,7 +99,6 @@ static void InitGraphicsMode(struct GraphicsMode* m) {
|
||||
#ifdef CC_BUILD_GL
|
||||
/* OpenGL contexts are heavily tied to the window, so for simplicitly are also included here */
|
||||
/* EGL is window system agnostic, other OpenGL context backends are tied to one windowing system. */
|
||||
#define GLContext_IsInvalidAddress(ptr) (ptr == (void*)0 || ptr == (void*)1 || ptr == (void*)-1 || ptr == (void*)2)
|
||||
|
||||
void GLContext_GetAll(const struct DynamicLibSym* syms, int count) {
|
||||
int i;
|
||||
|
@ -606,11 +606,9 @@ void GLContext_Free(void) {
|
||||
void* GLContext_GetAddress(const char* function) {
|
||||
static const cc_string glPath = String_FromConst("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL");
|
||||
static void* lib;
|
||||
void* addr;
|
||||
|
||||
if (!lib) lib = DynamicLib_Load2(&glPath);
|
||||
addr = DynamicLib_Get2(lib, function);
|
||||
return GLContext_IsInvalidAddress(addr) ? NULL : addr;
|
||||
return DynamicLib_Get2(lib, function);
|
||||
}
|
||||
|
||||
cc_bool GLContext_SwapBuffers(void) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user