From 867555b1c9ef51fec23ce77c682cf7d5b5a23c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Mon, 13 May 2019 17:13:31 -0700 Subject: [core] add gfx::UploadPass, split startRender into prepare and upload --- src/mbgl/renderer/layers/render_heatmap_layer.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'src/mbgl/renderer/layers/render_heatmap_layer.cpp') diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.cpp b/src/mbgl/renderer/layers/render_heatmap_layer.cpp index f1cce31ea4..053503bbaa 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.cpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.cpp @@ -41,7 +41,7 @@ void RenderHeatmapLayer::evaluate(const PropertyEvaluationParameters& parameters unevaluated.evaluate(parameters)); passes = (properties->evaluated.get() > 0) - ? (RenderPass::Translucent | RenderPass::Pass3D) + ? (RenderPass::Translucent | RenderPass::Pass3D | RenderPass::Upload) : RenderPass::None; evaluatedProperties = std::move(properties); @@ -55,6 +55,13 @@ bool RenderHeatmapLayer::hasCrossfade() const { return false; } +void RenderHeatmapLayer::upload(gfx::UploadPass& uploadPass, UploadParameters&) { + if (!colorRampTexture) { + colorRampTexture = + uploadPass.createTexture(colorRamp, gfx::TextureChannelDataType::UnsignedByte); + } +} + void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) { if (parameters.pass == RenderPass::Opaque) { return; @@ -64,9 +71,7 @@ void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) { const auto& viewportSize = parameters.staticData.backendSize; const auto size = Size{viewportSize.width / 4, viewportSize.height / 4}; - if (!colorRampTexture) { - colorRampTexture = parameters.context.createTexture(colorRamp, gfx::TextureChannelDataType::UnsignedByte); - } + assert(colorRampTexture); if (!renderTexture || renderTexture->getSize() != size) { renderTexture.reset(); @@ -101,7 +106,7 @@ void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) { const auto& paintPropertyBinders = bucket.paintPropertyBinders.at(getID()); auto& programInstance = parameters.programs.getHeatmapLayerPrograms().heatmap; - + const auto allUniformValues = programInstance.computeAllUniformValues( HeatmapProgram::LayoutUniformValues { uniforms::intensity::Value( evaluated.get() ), @@ -159,7 +164,7 @@ void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) { parameters.state.getZoom() ); const auto allAttributeBindings = programInstance.computeAllAttributeBindings( - parameters.staticData.heatmapTextureVertexBuffer, + *parameters.staticData.heatmapTextureVertexBuffer, paintAttributeData, properties ); @@ -174,7 +179,7 @@ void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) { gfx::StencilMode::disabled(), parameters.colorModeForRenderPass(), gfx::CullFaceMode::disabled(), - parameters.staticData.quadTriangleIndexBuffer, + *parameters.staticData.quadTriangleIndexBuffer, parameters.staticData.heatmapTextureSegments, allUniformValues, allAttributeBindings, -- cgit v1.2.1