From 82566dabd264accc4993b58663890bfb6896956c Mon Sep 17 00:00:00 2001 From: John Lorentzson Date: Sat, 12 Apr 2025 17:22:49 +0200 Subject: [PATCH] Fix bugs on Sun (hopefully) --- src/Backends/Rendering/Software.cpp | 29 ++++++++++++++++--- .../Rendering/Window/Software/X11.cpp | 2 +- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/Backends/Rendering/Software.cpp b/src/Backends/Rendering/Software.cpp index f6237eaa..6fcfd94a 100644 --- a/src/Backends/Rendering/Software.cpp +++ b/src/Backends/Rendering/Software.cpp @@ -116,9 +116,15 @@ void RenderBackend_UploadSurface(RenderBackend_Surface *surface, const unsigned for (size_t x = 0; x < width; ++x) { int srcr = x * 3; int dstr = x * 4; - surface->pixels[dstl + dstr + 0] = pixels[srcl + srcr + 0]; +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + surface->pixels[dstl + dstr + 0] = pixels[srcl + srcr + 2]; surface->pixels[dstl + dstr + 1] = pixels[srcl + srcr + 1]; - surface->pixels[dstl + dstr + 2] = pixels[srcl + srcr + 2]; + surface->pixels[dstl + dstr + 2] = pixels[srcl + srcr + 0]; +#else + surface->pixels[dstl + dstr + 1] = pixels[srcl + srcr + 0]; + surface->pixels[dstl + dstr + 2] = pixels[srcl + srcr + 1]; + surface->pixels[dstl + dstr + 3] = pixels[srcl + srcr + 2]; +#endif } } } @@ -180,11 +186,19 @@ ATTRIBUTE_HOT void RenderBackend_Blit(RenderBackend_Surface *source_surface, con } else { +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ *destination_pointer++ = *source_pointer++; *destination_pointer++ = *source_pointer++; *destination_pointer++ = *source_pointer++; destination_pointer++; source_pointer++; +#else + destination_pointer++; + source_pointer++; + *destination_pointer++ = *source_pointer++; + *destination_pointer++ = *source_pointer++; + *destination_pointer++ = *source_pointer++; +#endif } } } @@ -244,10 +258,17 @@ ATTRIBUTE_HOT void RenderBackend_ColourFill(RenderBackend_Surface *surface, cons for (long i = 0; i < rect_clamped.right - rect_clamped.left; ++i) { - *destination_pointer++ = red; - *destination_pointer++ = green; +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ *destination_pointer++ = blue; + *destination_pointer++ = green; + *destination_pointer++ = red; destination_pointer++; +#else + destination_pointer++; + *destination_pointer++ = blue; + *destination_pointer++ = green; + *destination_pointer++ = red; +#endif } } } diff --git a/src/Backends/Rendering/Window/Software/X11.cpp b/src/Backends/Rendering/Window/Software/X11.cpp index 3b2d3bc3..e5f8f0dc 100644 --- a/src/Backends/Rendering/Window/Software/X11.cpp +++ b/src/Backends/Rendering/Window/Software/X11.cpp @@ -53,7 +53,7 @@ void createFramebuffer() { &seginfo, screenWidth, screenHeight); seginfo.shmid = shmget(IPC_PRIVATE, framebufferImage->bytes_per_line * framebufferImage->height, - IPC_CREAT); + IPC_CREAT | 0777); seginfo.shmaddr = xfriendlyFB = framebufferImage->data = (char*)shmat(seginfo.shmid, NULL, 0); XShmAttach(xDisplay, &seginfo); } else {