about summary refs log tree commit diff stats
path: root/src/wrapped32
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-10-09 11:48:22 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-10-09 11:48:22 +0200
commit84f3c104b201e433c6f31a82211d8a646ca20c41 (patch)
tree18d8b85b875ff00f97ee18cc0727aab8478bd78f /src/wrapped32
parent761f7e40de1f6ff859b4bbdcd60674f2de9dbf0d (diff)
downloadbox64-84f3c104b201e433c6f31a82211d8a646ca20c41.tar.gz
box64-84f3c104b201e433c6f31a82211d8a646ca20c41.zip
[BOX32] Improved handlong of XImage
Diffstat (limited to 'src/wrapped32')
-rw-r--r--src/wrapped32/wrappedlibx11.c6
-rw-r--r--src/wrapped32/wrappedlibxext.c15
2 files changed, 9 insertions, 12 deletions
diff --git a/src/wrapped32/wrappedlibx11.c b/src/wrapped32/wrappedlibx11.c
index 7f333e94..b696a91d 100644
--- a/src/wrapped32/wrappedlibx11.c
+++ b/src/wrapped32/wrappedlibx11.c
@@ -566,6 +566,7 @@ static iFp_t my32_rev_destroy_image_fct_##A = NULL;                 \
 static int my32_rev_destroy_image_##A(void* a)                      \
 {                                                                   \
     UnwrapXImage(a, a);                                             \
+    to_hash_d((uintptr_t)((XImage*)a)->obdata);                     \
     return my32_rev_destroy_image_fct_##A (a);                      \
 }
 SUPER()
@@ -1361,7 +1362,7 @@ void WrapXImage(void* d, void* s)
     dst->red_mask = to_ulong(src->red_mask);
     dst->green_mask = to_ulong(src->green_mask);
     dst->blue_mask = to_ulong(src->blue_mask);
-    dst->obdata = to_ptrv(src->obdata);
+    dst->obdata = to_hash((uintptr_t)src->obdata);
 
     #define GO(A, W) \
     dst->f.A = to_ptrv((W##_t)reverse_##A##_Fct(my_lib, src->f.A));
@@ -1393,7 +1394,7 @@ void UnwrapXImage(void* d, void* s)
     GO(create_image, pFXpuiipuuii)
     #undef GO
 
-    dst->obdata = from_ptrv(src->obdata);
+    dst->obdata = (void*)from_hash(src->obdata);
     dst->blue_mask = from_ulong(src->blue_mask);
     dst->green_mask = from_ulong(src->green_mask);
     dst->red_mask = from_ulong(src->red_mask);
@@ -1481,6 +1482,7 @@ EXPORT void my32_XDestroyImage(x64emu_t* emu, void* image)
 {
 
     UnwrapXImage(image, image);
+    to_hash_d((uintptr_t)((XImage*)image)->obdata);
     my->XDestroyImage(image);
 }
 #if 0
diff --git a/src/wrapped32/wrappedlibxext.c b/src/wrapped32/wrappedlibxext.c
index efd390ba..31d7092b 100644
--- a/src/wrapped32/wrappedlibxext.c
+++ b/src/wrapped32/wrappedlibxext.c
@@ -335,10 +335,7 @@ EXPORT void* my32_XShmCreateImage(x64emu_t* emu, void* disp, void* vis, uint32_t
                     , void* data, void* shminfo, uint32_t w, uint32_t h)
 {
     XImage *img = my->XShmCreateImage(disp, vis, depth, fmt, data, shminfo, w, h);
-    if(!img)
-        return img;
-    // bridge all access functions...
-    BridgeImageFunc(emu, img);
+    inplace_XImage_shrink(img);
     return img;
 }
 
@@ -346,19 +343,17 @@ EXPORT int32_t my32_XShmPutImage(x64emu_t* emu, void* disp, size_t drawable, voi
                     , int32_t src_x, int32_t src_y, int32_t dst_x, int32_t dst_y
                     , uint32_t w, uint32_t h, int32_t sendevt)
 {
-    UnbridgeImageFunc(emu, (XImage*)image);
+    inplace_XImage_enlarge(image);
     int32_t r = my->XShmPutImage(disp, drawable, gc, image, src_x, src_y, dst_x, dst_y, w, h, sendevt);
-    // bridge all access functions...
-    BridgeImageFunc(emu, (XImage*)image);
+    inplace_XImage_shrink(image);
     return r;
 }
 
 EXPORT int32_t my32_XShmGetImage(x64emu_t* emu, void* disp, size_t drawable, void* image, int32_t x, int32_t y, size_t plane)
 {
-    UnbridgeImageFunc(emu, (XImage*)image);
+    inplace_XImage_enlarge(image);
     int32_t r = my->XShmGetImage(disp, drawable, image, x, y, plane);
-    // bridge all access functions...
-    BridgeImageFunc(emu, (XImage*)image);
+    inplace_XImage_shrink(image);
     return r;
 }