remove flickering during tileindex loading

by restoring framebuffer, shader & viewport state/bindings after
rendering text.
This commit is contained in:
Joakim Kilby
2023-05-11 11:24:48 +02:00
parent 3c4c362683
commit 2268802978
@@ -70,8 +70,9 @@ Tile TextTileProvider::renderTile(const TileIndex& tileIndex, const std::string&
if (!tile.texture) {
ghoul::opengl::Texture* texture = tileCache->texture(initData);
// Keep track of defaultFBO and viewport to be able to reset state when done
GLint defaultFBO = global::renderEngine->openglStateCache().defaultFramebuffer();
GLint prevProgram, prevFBO;
glGetIntegerv(GL_CURRENT_PROGRAM, &prevProgram);
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &prevFBO);
// Render to texture
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
@@ -91,11 +92,13 @@ Tile TextTileProvider::renderTile(const TileIndex& tileIndex, const std::string&
fontRenderer->render(*font, position, text, color);
glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO);
global::renderEngine->openglStateCache().resetViewportState();
tile = Tile{ texture, std::nullopt, Tile::Status::OK };
tileCache->put(key, initData.hashKey, tile);
// Reset FBO, shader program and viewport
glUseProgram(prevProgram);
glBindFramebuffer(GL_FRAMEBUFFER, prevFBO);
global::renderEngine->openglStateCache().resetViewportState();
}
return tile;
}