diff options
author | Michael Lutz <michi@icosahedron.de> | 2021-04-12 21:44:32 +0200 |
---|---|---|
committer | Michael Lutz <michi@icosahedron.de> | 2021-04-12 22:40:40 +0200 |
commit | 433602b072aaf6a2c07a9989e7989f2dd0bb8317 (patch) | |
tree | 7589171ad762105b4470fe6168c89f412e2455e3 | |
parent | 468b1c6c5d1949f4d8aad90dad0f3d8770973113 (diff) | |
download | openttd-433602b072aaf6a2c07a9989e7989f2dd0bb8317.tar.xz |
Fix #9028: [OpenGL] Clear cursor cache on destroying the OpenGL backend.
-rw-r--r-- | src/video/opengl.cpp | 22 | ||||
-rw-r--r-- | src/video/opengl.h | 2 |
2 files changed, 17 insertions, 7 deletions
diff --git a/src/video/opengl.cpp b/src/video/opengl.cpp index c1c1afaae..bb509bcd7 100644 --- a/src/video/opengl.cpp +++ b/src/video/opengl.cpp @@ -510,7 +510,7 @@ OpenGLBackend::~OpenGLBackend() _glDeleteBuffers(1, &this->anim_pbo); } if (_glDeleteTextures != nullptr) { - ClearCursorCache(); + this->InternalClearCursorCache(); OpenGLSprite::Destroy(); _glDeleteTextures(1, &this->vid_texture); @@ -1082,12 +1082,7 @@ void OpenGLBackend::PopulateCursorCache() this->clear_cursor_cache = false; this->last_sprite_pal = (PaletteID)-1; - Sprite *sp; - while ((sp = this->cursor_cache.Pop()) != nullptr) { - OpenGLSprite *sprite = (OpenGLSprite *)sp->data; - sprite->~OpenGLSprite(); - free(sp); - } + this->InternalClearCursorCache(); } this->cursor_pos = _cursor.pos; @@ -1113,6 +1108,19 @@ void OpenGLBackend::PopulateCursorCache() /** * Clear all cached cursor sprites. */ +void OpenGLBackend::InternalClearCursorCache() +{ + Sprite *sp; + while ((sp = this->cursor_cache.Pop()) != nullptr) { + OpenGLSprite *sprite = (OpenGLSprite *)sp->data; + sprite->~OpenGLSprite(); + free(sp); + } +} + +/** + * Queue a request for cursor cache clear. + */ void OpenGLBackend::ClearCursorCache() { /* If the game loop is threaded, this function might be called diff --git a/src/video/opengl.h b/src/video/opengl.h index 7e42b20be..b0318f988 100644 --- a/src/video/opengl.h +++ b/src/video/opengl.h @@ -77,6 +77,8 @@ private: const char *Init(); bool InitShaders(); + void InternalClearCursorCache(); + void RenderOglSprite(OpenGLSprite *gl_sprite, PaletteID pal, int x, int y, ZoomLevel zoom); public: |