From 2ef374ff4aa58083ca7283e69f34fd8f9fc4e7d7 Mon Sep 17 00:00:00 2001 From: Max Parry <66670928+Buggem@users.noreply.github.com> Date: Sat, 6 Dec 2025 19:46:25 +1100 Subject: [PATCH] engine: imagelib: img_bmp: support for big endian RGB format Allows software rendering save screenshots --- engine/common/imagelib/img_bmp.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/engine/common/imagelib/img_bmp.c b/engine/common/imagelib/img_bmp.c index a3cb45f6..dc9a9c0e 100644 --- a/engine/common/imagelib/img_bmp.c +++ b/engine/common/imagelib/img_bmp.c @@ -359,9 +359,11 @@ qboolean Image_SaveBMP( const char *name, rgbdata_t *pix ) case PF_INDEXED_32: pixel_size = 1; break; + case PF_BGR_24: case PF_RGB_24: pixel_size = 3; break; + case PF_BGRA_32: case PF_RGBA_32: pixel_size = 4; break; @@ -438,9 +440,11 @@ qboolean Image_SaveBMP( const char *name, rgbdata_t *pix ) else { // 24 bit - pbBmpBits[i*pixel_size+0] = pb[x*pixel_size+2]; - pbBmpBits[i*pixel_size+1] = pb[x*pixel_size+1]; - pbBmpBits[i*pixel_size+2] = pb[x*pixel_size+0]; + qboolean be = !!( pix->type & (PF_BGR_24|PF_BGRA_32) ); // is it big endian RGB? + + pbBmpBits[i*pixel_size+(be?2:0)] = pb[x*pixel_size+2]; + pbBmpBits[i*pixel_size+(be?1:1)] = pb[x*pixel_size+1]; + pbBmpBits[i*pixel_size+(be?0:2)] = pb[x*pixel_size+0]; } if( pixel_size == 4 ) // write alpha channel