From bb340c3b2b46242a77891b34fcf6dfe9436f386f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Ko=C5=82odziejski?= Date: Sat, 4 Dec 2021 11:47:03 +0100 Subject: [PATCH] TINYGL: Moved static global array to dynamic array --- graphics/tinygl/texture.cpp | 63 +++++++++++++++++-------------------- graphics/tinygl/zgl.h | 6 ++++ 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/graphics/tinygl/texture.cpp b/graphics/tinygl/texture.cpp index ba14ff3b4bb..56267d71ea8 100644 --- a/graphics/tinygl/texture.cpp +++ b/graphics/tinygl/texture.cpp @@ -32,28 +32,6 @@ #include "graphics/tinygl/zgl.h" -struct tglColorAssociation { - Graphics::PixelFormat pf; - TGLuint format; - TGLuint type; -}; - -static const struct tglColorAssociation colorAssociationList[] = { -#if defined(SCUMM_LITTLE_ENDIAN) - {Graphics::PixelFormat(4, 8, 8, 8, 8, 0, 8, 16, 24), TGL_RGBA, TGL_UNSIGNED_BYTE}, - {Graphics::PixelFormat(4, 8, 8, 8, 8, 16, 8, 0, 24), TGL_BGRA, TGL_UNSIGNED_BYTE}, - {Graphics::PixelFormat(3, 8, 8, 8, 0, 0, 8, 16, 0), TGL_RGB, TGL_UNSIGNED_BYTE}, -#else - {Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0), TGL_RGBA, TGL_UNSIGNED_BYTE}, - {Graphics::PixelFormat(4, 8, 8, 8, 8, 8, 16, 24, 0), TGL_BGRA, TGL_UNSIGNED_BYTE}, - {Graphics::PixelFormat(3, 8, 8, 8, 0, 16, 8, 0, 0), TGL_RGB, TGL_UNSIGNED_BYTE}, -#endif - {Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0), TGL_RGB, TGL_UNSIGNED_SHORT_5_6_5}, - {Graphics::PixelFormat(2, 5, 5, 5, 1, 11, 6, 1, 0), TGL_RGBA, TGL_UNSIGNED_SHORT_5_5_5_1}, - {Graphics::PixelFormat(2, 4, 4, 4, 4, 12, 8, 4, 0), TGL_RGBA, TGL_UNSIGNED_SHORT_4_4_4_4} -}; -#define COLOR_ASSOCIATION_LIST_LENGTH (sizeof(colorAssociationList) / sizeof(*colorAssociationList)) - namespace TinyGL { static GLTexture *find_texture(GLContext *c, unsigned int h) { @@ -122,6 +100,19 @@ void glInitTextures(GLContext *c) { c->current_texture = find_texture(c, 0); c->texture_mag_filter = TGL_LINEAR; c->texture_min_filter = TGL_NEAREST_MIPMAP_LINEAR; +#if defined(SCUMM_LITTLE_ENDIAN) + c->colorAssociationList.push_back({Graphics::PixelFormat(4, 8, 8, 8, 8, 0, 8, 16, 24), TGL_RGBA, TGL_UNSIGNED_BYTE}); + c->colorAssociationList.push_back({Graphics::PixelFormat(4, 8, 8, 8, 8, 0, 8, 16, 24), TGL_RGBA, TGL_UNSIGNED_BYTE}); + c->colorAssociationList.push_back({Graphics::PixelFormat(4, 8, 8, 8, 8, 16, 8, 0, 24), TGL_BGRA, TGL_UNSIGNED_BYTE}); + c->colorAssociationList.push_back({Graphics::PixelFormat(3, 8, 8, 8, 0, 0, 8, 16, 0), TGL_RGB, TGL_UNSIGNED_BYTE}); +#else + c->colorAssociationList.push_back({Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0), TGL_RGBA, TGL_UNSIGNED_BYTE}); + c->colorAssociationList.push_back({Graphics::PixelFormat(4, 8, 8, 8, 8, 8, 16, 24, 0), TGL_BGRA, TGL_UNSIGNED_BYTE}); + c->colorAssociationList.push_back({Graphics::PixelFormat(3, 8, 8, 8, 0, 16, 8, 0, 0), TGL_RGB, TGL_UNSIGNED_BYTE}); +#endif + c->colorAssociationList.push_back({Graphics::PixelFormat(2, 5, 6, 5, 0, 11, 5, 0, 0), TGL_RGB, TGL_UNSIGNED_SHORT_5_6_5}); + c->colorAssociationList.push_back({Graphics::PixelFormat(2, 5, 5, 5, 1, 11, 6, 1, 0), TGL_RGBA, TGL_UNSIGNED_SHORT_5_5_5_1}); + c->colorAssociationList.push_back({Graphics::PixelFormat(2, 4, 4, 4, 4, 12, 8, 4, 0), TGL_RGBA, TGL_UNSIGNED_SHORT_4_4_4_4}); } void glopBindTexture(GLContext *c, GLParam *p) { @@ -138,15 +129,6 @@ void glopBindTexture(GLContext *c, GLParam *p) { c->current_texture = t; } -static inline const Graphics::PixelFormat formatType2PixelFormat(TGLuint format, TGLuint type) { - for (unsigned int i = 0; i < COLOR_ASSOCIATION_LIST_LENGTH; i++) { - if (colorAssociationList[i].format == format && - colorAssociationList[i].type == type) - return colorAssociationList[i].pf; - } - error("TinyGL texture: format 0x%04x and type 0x%04x combination not supported", format, type); -} - void glopTexImage2D(GLContext *c, GLParam *p) { int target = p[1].i; int level = p[2].i; @@ -155,8 +137,8 @@ void glopTexImage2D(GLContext *c, GLParam *p) { int width = p[4].i; int height = p[5].i; int border = p[6].i; - int format = p[7].i; - int type = p[8].i; + uint format = (uint)p[7].i; + uint type = (uint)p[8].i; byte *pixels = (byte *)p[9].p; GLImage *im; @@ -180,7 +162,20 @@ void glopTexImage2D(GLContext *c, GLParam *p) { } if (pixels != NULL) { unsigned int filter; - Graphics::PixelBuffer src(formatType2PixelFormat(format, type), pixels); + Graphics::PixelFormat pf; + bool found = false; + Common::Array::const_iterator it = c->colorAssociationList.begin(); + for (; it != c->colorAssociationList.end(); it++) { + if (it->format == format && + it->type == type) { + pf = it->pf; + found = true; + break; + } + } + if (!found) + error("TinyGL texture: format 0x%04x and type 0x%04x combination not supported", format, type); + Graphics::PixelBuffer src(pf, pixels); if (width > c->_textureSize || height > c->_textureSize) filter = c->texture_mag_filter; else diff --git a/graphics/tinygl/zgl.h b/graphics/tinygl/zgl.h index 551ef1e4a60..9a09d593e48 100644 --- a/graphics/tinygl/zgl.h +++ b/graphics/tinygl/zgl.h @@ -191,6 +191,11 @@ struct GLTexture { bool disposed; }; +struct tglColorAssociation { + Graphics::PixelFormat pf; + TGLuint format; + TGLuint type; +}; // shared state @@ -284,6 +289,7 @@ struct GLContext { int texture_min_filter; unsigned int texture_wrap_s; unsigned int texture_wrap_t; + Common::Array colorAssociationList; // shared state GLSharedState shared_state;