diff options
author | Lauren Budorick <lauren@mapbox.com> | 2017-05-08 09:06:07 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-08 09:06:07 -0700 |
commit | 1c9af3226f0ad306cf2ec8be9ff1558938f69736 (patch) | |
tree | 407389df9fd8c9c807fcab09d4ba99482829dc6f /src/mbgl/renderer/painter.cpp | |
parent | b622aed3490d623a31ec576aefe9696f221ead76 (diff) | |
download | qtlocation-mapboxgl-1c9af3226f0ad306cf2ec8be9ff1558938f69736.tar.gz |
[core] Reuse fill-extrusion textures between frames (#8896)
Diffstat (limited to 'src/mbgl/renderer/painter.cpp')
-rw-r--r-- | src/mbgl/renderer/painter.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/mbgl/renderer/painter.cpp b/src/mbgl/renderer/painter.cpp index 01df326d95..60c4757893 100644 --- a/src/mbgl/renderer/painter.cpp +++ b/src/mbgl/renderer/painter.cpp @@ -34,8 +34,6 @@ #include <mbgl/util/mat3.hpp> #include <mbgl/util/string.hpp> -#include <mbgl/util/offscreen_texture.hpp> - #include <mbgl/util/stopwatch.hpp> #include <cassert> @@ -328,8 +326,11 @@ void Painter::renderPass(PaintParameters& parameters, } else if (layer.is<RenderFillExtrusionLayer>()) { const auto size = context.viewport.getCurrentValue().size; - OffscreenTexture texture(context, size); - texture.bindRenderbuffers(1); + if (!extrusionTexture || extrusionTexture->getSize() != size) { + extrusionTexture = OffscreenTexture(context, size, OffscreenTextureAttachment::Depth); + } + + extrusionTexture->bind(); context.setStencilMode(gl::StencilMode::disabled()); context.setDepthMode(depthModeForSublayer(0, gl::DepthMode::ReadWrite)); @@ -344,6 +345,7 @@ void Painter::renderPass(PaintParameters& parameters, } parameters.view.bind(); + context.bindTexture(extrusionTexture->getTexture()); mat4 viewportMat; matrix::ortho(viewportMat, 0, size.width, size.height, 0, 0, 1); @@ -355,11 +357,10 @@ void Painter::renderPass(PaintParameters& parameters, colorModeForRenderPass(), ExtrusionTextureProgram::UniformValues{ uniforms::u_matrix::Value{ viewportMat }, uniforms::u_world::Value{ size }, - uniforms::u_image::Value{ 1 }, - uniforms::u_opacity::Value{ - layer.as<RenderFillExtrusionLayer>()->evaluated.get<FillExtrusionOpacity>() } }, - extrusionTextureVertexBuffer, quadTriangleIndexBuffer, - extrusionTextureSegments, + uniforms::u_image::Value{ 0 }, + uniforms::u_opacity::Value{ layer.as<RenderFillExtrusionLayer>() + ->evaluated.get<FillExtrusionOpacity>() } }, + extrusionTextureVertexBuffer, quadTriangleIndexBuffer, extrusionTextureSegments, ExtrusionTextureProgram::PaintPropertyBinders{ properties, 0 }, properties, state.getZoom()); } else { |