mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-06 06:32:56 +01:00
fix scrolling text
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -376,6 +376,11 @@ public:
|
||||
return DEF_DIRTY_OPTIMISATIONS;
|
||||
}
|
||||
|
||||
void InvalidateImage(uint32 image) override
|
||||
{
|
||||
// Not applicable for this engine
|
||||
}
|
||||
|
||||
rct_drawpixelinfo * GetDPI()
|
||||
{
|
||||
return &_bitsDPI;
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user