mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-04-24 13:08:49 -05:00
remove flickering during tileindex loading
by restoring framebuffer, shader & viewport state/bindings after rendering text.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user