Codechange: Add a container to index data by zoom level.

This commit is contained in:
frosch
2025-05-03 18:35:50 +02:00
committed by frosch
parent 7055ea0aee
commit c0d4ab69d0
14 changed files with 58 additions and 37 deletions
+10 -6
View File
@@ -1397,9 +1397,14 @@ void OpenGLBackend::RenderOglSprite(OpenGLSprite *gl_sprite, PaletteID pal, int
* Create an OpenGL sprite with a palette remap part.
* @param sprite The sprite to create the OpenGL sprite for
*/
OpenGLSprite::OpenGLSprite(SpriteType sprite_type, const SpriteLoader::SpriteCollection &sprite) :
dim(sprite[ZOOM_LVL_MIN].width, sprite[ZOOM_LVL_MIN].height), x_offs(sprite[ZOOM_LVL_MIN].x_offs), y_offs(sprite[ZOOM_LVL_MIN].y_offs)
OpenGLSprite::OpenGLSprite(SpriteType sprite_type, const SpriteLoader::SpriteCollection &sprite)
{
const auto &root_sprite = sprite.Root();
this->dim.width = root_sprite.width;
this->dim.height = root_sprite.height;
this->x_offs = root_sprite.x_offs;
this->y_offs = root_sprite.y_offs;
int levels = sprite_type == SpriteType::Font ? 1 : ZOOM_LVL_END;
assert(levels > 0);
(void)_glGetError();
@@ -1408,7 +1413,6 @@ OpenGLSprite::OpenGLSprite(SpriteType sprite_type, const SpriteLoader::SpriteCol
_glActiveTexture(GL_TEXTURE0);
_glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
const auto &root_sprite = sprite[ZOOM_LVL_MIN];
for (int t = TEX_RGBA; t < NUM_TEX; t++) {
/* Sprite component present? */
if (t == TEX_RGBA && root_sprite.colours == SpriteComponent::Palette) continue;
@@ -1436,9 +1440,9 @@ OpenGLSprite::OpenGLSprite(SpriteType sprite_type, const SpriteLoader::SpriteCol
}
/* Upload texture data. */
for (int i = 0; i < (sprite_type == SpriteType::Font ? 1 : ZOOM_LVL_END); i++) {
const auto &src_sprite = sprite[i];
this->Update(src_sprite.width, src_sprite.height, i, src_sprite.data);
for (ZoomLevel zoom = ZOOM_LVL_MIN; zoom <= (sprite_type == SpriteType::Font ? ZOOM_LVL_MIN : ZOOM_LVL_MAX); ++zoom) {
const auto &src_sprite = sprite[zoom];
this->Update(src_sprite.width, src_sprite.height, zoom, src_sprite.data);
}
assert(_glGetError() == GL_NO_ERROR);