1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-06 06:32:56 +01:00

fix scrolling text

This commit is contained in:
Ted John
2016-06-05 19:03:48 +01:00
parent 5ca2b12f94
commit 18f3aa12a1
6 changed files with 38 additions and 2 deletions

View File

@@ -50,6 +50,8 @@ interface IDrawingEngine
virtual rct_drawpixelinfo * GetDrawingPixelInfo() abstract;
virtual DRAWING_ENGINE_FLAGS GetFlags() abstract;
virtual void InvalidateImage(uint32 image) abstract;
};
namespace DrawingEngineFactory

View File

@@ -90,6 +90,14 @@ extern "C"
return result;
}
void drawing_engine_invalidate_image(uint32 image)
{
if (_drawingEngine != nullptr)
{
_drawingEngine->InvalidateImage(image);
}
}
void gfx_set_dirty_blocks(sint16 left, sint16 top, sint16 right, sint16 bottom)
{
if (_drawingEngine != nullptr)

View File

@@ -30,6 +30,7 @@ void drawing_engine_dispose();
rct_drawpixelinfo * drawing_engine_get_dpi();
bool drawing_engine_has_dirty_optimisations();
void drawing_engine_invalidate_image(uint32 image);
#ifdef _cplusplus
}

View File

@@ -80,6 +80,7 @@ public:
void DrawSpriteRawMasked(sint32 x, sint32 y, uint32 maskImage, uint32 colourImage) override;
void SetDPI(rct_drawpixelinfo * dpi);
void InvalidateImage(uint32 image);
private:
GLuint GetOrLoadImageTexture(uint32 image);
@@ -217,6 +218,11 @@ public:
return DEF_NONE;
}
void InvalidateImage(uint32 image) override
{
_drawingContext->InvalidateImage(image);
}
rct_drawpixelinfo * GetDPI()
{
return &_bitsDPI;
@@ -590,6 +596,18 @@ void * OpenGLDrawingContext::GetImageAsARGB(uint32 image, uint32 tertiaryColour,
return pixels32;
}
void OpenGLDrawingContext::InvalidateImage(uint32 image)
{
auto kvp = _imageTextureMap.find(image);
if (kvp != _imageTextureMap.end())
{
GLuint texture = kvp->second;
glDeleteTextures(1, &texture);
_imageTextureMap.erase(kvp);
}
}
void OpenGLDrawingContext::FreeTextures()
{
glDeleteTextures(_textures.size(), _textures.data());

View File

@@ -376,6 +376,11 @@ public:
return DEF_DIRTY_OPTIMISATIONS;
}
void InvalidateImage(uint32 image) override
{
// Not applicable for this engine
}
rct_drawpixelinfo * GetDPI()
{
return &_bitsDPI;

View File

@@ -56,7 +56,7 @@ void scrolling_text_initialise_bitmaps()
for (int i = 0; i < 224; i++) {
memset(drawingSurface, 0, sizeof(drawingSurface));
gfx_draw_sprite(&dpi, i + 0x10D5, -1, 0, 0);
gfx_draw_sprite_software(&dpi, i + 0x10D5, -1, 0, 0);
for (int x = 0; x < 8; x++) {
uint8 val = 0;
@@ -179,7 +179,9 @@ int scrolling_text_setup(rct_string_id stringId, uint16 scroll, uint16 scrolling
scrolling_text_set_bitmap_for_sprite(scrollString, scroll, scrollText->bitmap, scrollingModePositions);
}
return scrollIndex + 0x606;
uint32 imageId = 0x606 + scrollIndex;
drawing_engine_invalidate_image(imageId);
return imageId;
}
void scrolling_text_set_bitmap_for_sprite(utf8 *text, int scroll, uint8 *bitmap, sint16 *scrollPositionOffsets)