diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-09-22 16:24:48 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-09-22 16:24:48 +0200 |
| commit | d2aecc041215fa3c5218d1d11cdb52b4f0e75a67 (patch) | |
| tree | cae1d496ce0e35e0137aa7cf124f3174153a97ea /src/wrapped32/wrappedlibgl.c | |
| parent | 710d537f3949d55944bc96e73927c9d30bdf13c2 (diff) | |
| download | box64-d2aecc041215fa3c5218d1d11cdb52b4f0e75a67.tar.gz box64-d2aecc041215fa3c5218d1d11cdb52b4f0e75a67.zip | |
[BOX32][wrapper] Added some basic 32bits X11 wrapping, fixed 32bits sem_XXX wrapping, and more 32bits wrapped functions
Diffstat (limited to 'src/wrapped32/wrappedlibgl.c')
| -rw-r--r-- | src/wrapped32/wrappedlibgl.c | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/src/wrapped32/wrappedlibgl.c b/src/wrapped32/wrappedlibgl.c index 9d18fe23..d0599197 100644 --- a/src/wrapped32/wrappedlibgl.c +++ b/src/wrapped32/wrappedlibgl.c @@ -19,7 +19,10 @@ extern const char* libglName; #define LIBNAME libgl -static library_t* my_lib = NULL; + +#include "generated/wrappedlibgltypes32.h" + +#include "wrappercallback32.h" // FIXME: old wrapped* type of file, cannot use generated/wrappedlibgltypes.h void* getGLProcAddress32(x64emu_t* emu, glprocaddress_t procaddr, const char* rname); @@ -36,6 +39,7 @@ typedef void (*vFpp_t)(void*, void*); typedef void (*vFppp_t)(void*, void*, void*); typedef void (*vFppi_t)(void*, void*, int); typedef void*(*pFp_t)(void*); +typedef void (*vFuipp_t)(uint32_t, int, void*, void*); typedef void (*debugProc_t)(int32_t, int32_t, uint32_t, int32_t, int32_t, void*, void*); typedef struct gl_wrappers_s { @@ -408,6 +412,31 @@ static void* find_glGetVkProcAddrNV_Fct(void* fct) printf_log(LOG_NONE, "Warning, no more slot for libGL glGetVkProcAddrNV callback\n"); return NULL; } +// glShaderSource ... +#define GO(A) \ +static vFuipp_t my32_glShaderSource_fct_##A = NULL; \ +static void my32_glShaderSource_##A(x64emu_t* emu, uint32_t shader, int count, ptr_t* string, int* length) \ +{ \ + if(!my32_glShaderSource_fct_##A) \ + return; \ + char* str[count]; \ + if(string) for(int i=0; i<count; ++i) str[i] = from_ptrv(string[i]); \ + my32_glShaderSource_fct_##A (shader, count, string?str:NULL, length); \ +} +SUPER() +#undef GO +static void* find_glShaderSource_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(my32_glShaderSource_fct_##A == (vFuipp_t)fct) return my32_glShaderSource_##A; + SUPER() + #undef GO + #define GO(A) if(my32_glShaderSource_fct_##A == 0) {my32_glShaderSource_fct_##A = (vFuipp_t)fct; return my32_glShaderSource_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL glShaderSource callback\n"); + return NULL; +} #undef SUPER #define PRE_INIT if(box64_libGL) {lib->w.lib = dlopen(box64_libGL, RTLD_LAZY | RTLD_GLOBAL); lib->path = strdup(box64_libGL);} else @@ -436,6 +465,14 @@ static void* find_glGetVkProcAddrNV_Fct(void* fct) s->addr = AddBridge(lib->w.bridge, s->w, find_glXSwapIntervalEXT_Fct(symb), 0, "glXSwapIntervalEXT"); \ } \ +// creating function for direct access, just in case +EXPORT void my32_glShaderSource(x64emu_t* emu, uint32_t shader, int count, ptr_t* string, int* length) +{ + char* str[count]; + if(string) for(int i=0; i<count; ++i) str[i] = from_ptrv(string[i]); + my->glShaderSource(shader, count, string?str:NULL, length); +} + #include "wrappedlib_init32.h" #define SUPER() \ @@ -449,6 +486,7 @@ static void* find_glGetVkProcAddrNV_Fct(void* fct) GO(vFpp_t, glProgramCallbackMESA) \ GO(pFp_t, glGetVkProcAddrNV) \ GO(vFppp_t, eglSetBlobCacheFuncsANDROID) \ + GO(vFuipp_t, glShaderSource) \ gl_wrappers_t* getGLProcWrapper32(box64context_t* context, glprocaddress_t procaddress) |