diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-09-30 17:41:47 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-09-30 17:41:47 +0200 |
| commit | 2b0c8d45faa03b31802b797df2094add702dc20c (patch) | |
| tree | 1eb0d67ee6782a0e02a2f9d36d290894d8ef0d6f /src/wrapped32/wrappedsdl2image.c | |
| parent | c88cf6359e4968bd5449c85f2ca7890f2b0c473f (diff) | |
| download | box64-2b0c8d45faa03b31802b797df2094add702dc20c.tar.gz box64-2b0c8d45faa03b31802b797df2094add702dc20c.zip | |
[BOX32][WRAPPER] Added 32bits wrapping for SDL2_image
Diffstat (limited to 'src/wrapped32/wrappedsdl2image.c')
| -rw-r--r-- | src/wrapped32/wrappedsdl2image.c | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/src/wrapped32/wrappedsdl2image.c b/src/wrapped32/wrappedsdl2image.c new file mode 100644 index 00000000..29daec70 --- /dev/null +++ b/src/wrapped32/wrappedsdl2image.c @@ -0,0 +1,127 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include <dlfcn.h> + +#include "wrappedlibs.h" + +#include "debug.h" +#include "wrapper32.h" +#include "bridge.h" +#include "librarian/library_private.h" +#include "x64emu.h" +#include "emu/x64emu_private.h" +#include "box32context.h" +#include "sdl2rwops.h" +#include "sdl2align32.h" + +static const char* sdl2imageName = "libSDL2_image-2.0.so.0"; +#define LIBNAME sdl2image + +#define ADDED_FUNCTIONS() \ + +#include "generated/wrappedsdl2imagetypes32.h" + +#include "wrappercallback32.h" + +#define GO(A) \ +EXPORT void *my32_2_##A(x64emu_t* emu, void* a) \ +{ \ + inplace_SDL2_RWops_to_64(a); \ + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); \ + void* r = my->A(rw); \ + RWNativeEnd2(rw); \ + inplace_SDL2_RWops_to_32(a); \ + inplace_SDL2_Surface_to_32(r); \ + return r; \ +} +GO(IMG_LoadBMP_RW) +GO(IMG_LoadCUR_RW) +GO(IMG_LoadGIF_RW) +GO(IMG_LoadICO_RW) +GO(IMG_LoadJPG_RW) +GO(IMG_LoadLBM_RW) +GO(IMG_LoadPCX_RW) +GO(IMG_LoadPNG_RW) +GO(IMG_LoadPNM_RW) +GO(IMG_LoadTGA_RW) +GO(IMG_LoadTIF_RW) +GO(IMG_LoadWEBP_RW) +GO(IMG_LoadXCF_RW) +GO(IMG_LoadXPM_RW) +GO(IMG_LoadXV_RW) +#undef GO + + EXPORT void *my32_2_IMG_LoadTyped_RW(x64emu_t* emu, void* a, int32_t b, void* c) +{ + inplace_SDL2_RWops_to_64(a); + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + void* r = my->IMG_LoadTyped_RW(rw, b, c); + if(b==0) { + RWNativeEnd2(rw); + inplace_SDL2_RWops_to_32(a); + } + inplace_SDL2_Surface_to_32(r); + return r; +} +EXPORT void *my32_2_IMG_Load_RW(x64emu_t* emu, void* a, int32_t b) +{ + inplace_SDL2_RWops_to_64(a); + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + void* r = my->IMG_Load_RW(rw, b); + if(b==0) { + RWNativeEnd2(rw); + inplace_SDL2_RWops_to_32(a); + } + inplace_SDL2_Surface_to_32(r); + return r; +} +//EXPORT int32_t my32_2_IMG_SavePNG_RW(x64emu_t* emu, void* s, void* a, int32_t b) +//{ +// // some old? fuction signature use IMG_SavePNG_RW(dst, surf, compression) instead of the IMG_SavePNG_RW(surf, dst, freedst) +// // need to try detect if s is in fact a RWops +// int32_t r; +// if(isRWops32((my_SDL2_RWops_32_t*)s) && !isRWops32((my_SDL2_RWops_32_t*)a)) { +// inplace_SDL2_RWops_to_64(s); +// SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)s); +// r = my->IMG_SavePNG_RW(a, rw, 0); +// RWNativeEnd2(rw); +// } else { +// SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); +// r = my->IMG_SavePNG_RW(s, rw, b); +// if(b==0) +// RWNativeEnd2(rw); +// } +// return r; +//} + +EXPORT void* my32_2_IMG_LoadTexture_RW(x64emu_t* emu, void* rend, void* a, int32_t b) +{ + inplace_SDL2_RWops_to_64(a); + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + void* r = my->IMG_LoadTexture_RW(rend, rw, b); + if(b==0) { + RWNativeEnd2(rw); + inplace_SDL2_RWops_to_32(a); + } + return r; +} + +EXPORT void* my32_2_IMG_LoadTextureTyped_RW(x64emu_t* emu, void* rend, void* a, int32_t b, void* type) +{ + inplace_SDL2_RWops_to_64(a); + SDL2_RWops_t *rw = RWNativeStart2(emu, (SDL2_RWops_t*)a); + void* r = my->IMG_LoadTextureTyped_RW(rend, rw, b, type); + if(b==0) { + RWNativeEnd2(rw); + inplace_SDL2_RWops_to_32(a); + } + return r; +} + +#define ALTMY my32_2_ + +#define NEEDED_LIBS "libSDL2-2.0.so.0" + +#include "wrappedlib_init32.h" |