From dccc26d532241d9b0d98f9abc8ea3d1895c55e3c Mon Sep 17 00:00:00 2001 From: bruceleeto Date: Sat, 24 May 2025 05:32:04 +0100 Subject: [PATCH] Fix compiler ICE with double-to-float macro conversion --- GL/attributes.c | 51 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/GL/attributes.c b/GL/attributes.c index 8222d2e..aedb27e 100644 --- a/GL/attributes.c +++ b/GL/attributes.c @@ -205,10 +205,41 @@ static void _readColour3ubARGB(const GLubyte* __restrict__ input, GLubyte* __res } DEF_READ_COLOUR_4_ARGB_FP(4f, float) -DEF_READ_COLOUR_4_ARGB_FP(4d, double) DEF_READ_COLOUR_3_ARGB_FP(3f, float) -DEF_READ_COLOUR_3_ARGB_FP(3d, double) + + + +static void _readColour4dARGB(const GLubyte* __restrict__ in, GLubyte* __restrict__ out) { + const double* input = (const double*) in; + + // Convert to float first + float r = (float)input[0]; + float g = (float)input[1]; + float b = (float)input[2]; + float a = (float)input[3]; + + out[R8IDX] = (GLubyte) clamp(r * 255.0f, 0, 255); + out[G8IDX] = (GLubyte) clamp(g * 255.0f, 0, 255); + out[B8IDX] = (GLubyte) clamp(b * 255.0f, 0, 255); + out[A8IDX] = (GLubyte) clamp(a * 255.0f, 0, 255); +} + +static void _readColour3dARGB(const GLubyte* __restrict__ in, GLubyte* __restrict__ out) { + const double* input = (const double*) in; + + // Convert to float first + float r = (float)input[0]; + float g = (float)input[1]; + float b = (float)input[2]; + + out[R8IDX] = (GLubyte) clamp(r * 255.0f, 0, 255); + out[G8IDX] = (GLubyte) clamp(g * 255.0f, 0, 255); + out[B8IDX] = (GLubyte) clamp(b * 255.0f, 0, 255); + out[A8IDX] = 255; +} + + static void _readColour4ubRevARGB(const GLubyte* __restrict__ input, GLubyte* __restrict__ output) { argbcpy(output, input); @@ -226,10 +257,16 @@ static void _readColour4fRevARGB(const GLubyte* __restrict__ in, GLubyte* __rest static void _readColour4dRevARGB(const GLubyte* __restrict__ in, GLubyte* __restrict__ output) { const double* input = (const double*) in; - output[0] = (GLubyte) clamp(input[0] * 255.0f, 0, 255); - output[1] = (GLubyte) clamp(input[1] * 255.0f, 0, 255); - output[2] = (GLubyte) clamp(input[2] * 255.0f, 0, 255); - output[3] = (GLubyte) clamp(input[3] * 255.0f, 0, 255); + // Convert to float first + float r = (float)input[0]; + float g = (float)input[1]; + float b = (float)input[2]; + float a = (float)input[3]; + + output[0] = (GLubyte) clamp(r * 255.0f, 0, 255); + output[1] = (GLubyte) clamp(g * 255.0f, 0, 255); + output[2] = (GLubyte) clamp(b * 255.0f, 0, 255); + output[3] = (GLubyte) clamp(a * 255.0f, 0, 255); } #define DEF_READ_COLOUR_N_ARGB_INT(prefix, intype, max, alpha, i0, i1, i2, i3) \ @@ -721,4 +758,4 @@ void _glUpdateAttributes(void) { ATTRIB_LIST.fast_path = _glIsVertexDataFastPathCompatible(); ATTRIB_LIST.dirty = 0; -} +} \ No newline at end of file