diff --git a/include/llmr/renderer/painter.hpp b/include/llmr/renderer/painter.hpp index f93250236..0345c9c00 100644 --- a/include/llmr/renderer/painter.hpp +++ b/include/llmr/renderer/painter.hpp @@ -84,6 +84,9 @@ public: void renderIcon(IconBucket& bucket, const std::string& layer_name, const Tile::ID& id); void renderText(TextBucket& bucket, const std::string& layer_name, const Tile::ID& id); void renderRaster(RasterBucket& bucket, const std::string& layer_name, const Tile::ID& id); + + void preparePrerender(const GenericProperties &properties); + void finishPrerender(const GenericProperties &properties); void renderPrerenderedTexture(Bucket &bucket, const GenericProperties &properties); void resize(); diff --git a/src/renderer/painter_fill.cpp b/src/renderer/painter_fill.cpp index dbfebb5a6..b52f8c396 100644 --- a/src/renderer/painter_fill.cpp +++ b/src/renderer/painter_fill.cpp @@ -160,19 +160,9 @@ void Painter::renderFill(FillBucket& bucket, const std::string& layer_name, cons if (!bucket.prerendered) { bucket.prerendered = std::make_unique(properties.prerenderSize); - glDisable(GL_DEPTH_TEST); - glDisable(GL_STENCIL_TEST); - bucket.prerendered->bindFramebuffer(); - // Render the actual tile. -#if GL_EXT_discard_framebuffer - const GLenum discards[] = { GL_COLOR_ATTACHMENT0 }; - glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, discards); -#endif - glClear(GL_COLOR_BUFFER_BIT); - - glViewport(0, 0, properties.prerenderSize, properties.prerenderSize); + preparePrerender(properties); const FillProperties modifiedProperties = [&]{ FillProperties modifiedProperties = properties; @@ -201,13 +191,9 @@ void Painter::renderFill(FillBucket& bucket, const std::string& layer_name, cons bucket.prerendered->blur(*this, properties.prerenderBlur); } - // RESET STATE bucket.prerendered->unbindFramebuffer(); - glEnable(GL_DEPTH_TEST); - glEnable(GL_STENCIL_TEST); - - glViewport(0, 0, gl_viewport[0], gl_viewport[1]); + finishPrerender(properties); } renderPrerenderedTexture(bucket, properties); diff --git a/src/renderer/painter_prerender.cpp b/src/renderer/painter_prerender.cpp index be78487f3..d112f7aad 100644 --- a/src/renderer/painter_prerender.cpp +++ b/src/renderer/painter_prerender.cpp @@ -2,6 +2,27 @@ using namespace llmr; +void Painter::preparePrerender(const GenericProperties &properties) { + glDisable(GL_DEPTH_TEST); + glDisable(GL_STENCIL_TEST); + +// Render the actual tile. +#if GL_EXT_discard_framebuffer + const GLenum discards[] = {GL_COLOR_ATTACHMENT0}; + glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, discards); +#endif + glClear(GL_COLOR_BUFFER_BIT); + + glViewport(0, 0, properties.prerenderSize, properties.prerenderSize); +} + +void Painter::finishPrerender(const GenericProperties &properties) { + glEnable(GL_DEPTH_TEST); + glEnable(GL_STENCIL_TEST); + + glViewport(0, 0, gl_viewport[0], gl_viewport[1]); +} + void Painter::renderPrerenderedTexture(Bucket &bucket, const GenericProperties &properties) { const int buffer = 4096 * properties.prerenderBuffer;