diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2019-04-02 22:35:46 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2019-04-05 11:49:17 +0200 |
commit | d7aaf83421261087a99d18d92eca9637c1bf72f8 (patch) | |
tree | df938a5b6fe40c9e665e028285d28eb88e0dfea2 /src/mbgl/renderer/layers | |
parent | b1a2513b61761d09b3ae08904c03d28caedd09fe (diff) | |
download | qtlocation-mapboxgl-d7aaf83421261087a99d18d92eca9637c1bf72f8.tar.gz |
[core] introduce gfx::RenderPass
Diffstat (limited to 'src/mbgl/renderer/layers')
9 files changed, 31 insertions, 20 deletions
diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp index 269b227a7d..b633ad0671 100644 --- a/src/mbgl/renderer/layers/render_background_layer.cpp +++ b/src/mbgl/renderer/layers/render_background_layer.cpp @@ -67,6 +67,7 @@ void RenderBackgroundLayer::render(PaintParameters& parameters, RenderSource*) { program.draw( parameters.context, + *parameters.renderPass, gfx::Triangles(), parameters.depthModeForSublayer(0, gfx::DepthMaskType::ReadOnly), gfx::StencilMode::disabled(), diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp index 1c13a6152b..ad4e6a020f 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.cpp +++ b/src/mbgl/renderer/layers/render_circle_layer.cpp @@ -97,6 +97,7 @@ void RenderCircleLayer::render(PaintParameters& parameters, RenderSource*) { programInstance.draw( parameters.context, + *parameters.renderPass, gfx::Triangles(), parameters.depthModeForSublayer(0, gfx::DepthMaskType::ReadOnly), parameters.mapMode != MapMode::Continuous diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp index 720d2ff2f8..6f69916734 100644 --- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp @@ -13,9 +13,8 @@ #include <mbgl/util/intersection_tests.hpp> #include <mbgl/tile/geometry_tile.hpp> #include <mbgl/gfx/renderer_backend.hpp> +#include <mbgl/gfx/render_pass.hpp> #include <mbgl/gfx/cull_face_mode.hpp> -#include <mbgl/gl/context.hpp> -#include <mbgl/gl/renderable_resource.hpp> namespace mbgl { @@ -52,9 +51,6 @@ bool RenderFillExtrusionLayer::hasCrossfade() const { } void RenderFillExtrusionLayer::render(PaintParameters& parameters, RenderSource*) { - // TODO: remove cast - gl::Context& glContext = static_cast<gl::Context&>(parameters.context); - if (parameters.pass == RenderPass::Opaque) { return; } @@ -67,14 +63,14 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters, RenderSource* renderTexture = parameters.context.createOffscreenTexture(size, *parameters.staticData.depthRenderbuffer); } - renderTexture->getResource<gl::RenderableResource>().bind(); - optional<float> depthClearValue = {}; if (parameters.staticData.depthRenderbuffer->needsClearing()) depthClearValue = 1.0; // Flag the depth buffer as no longer needing to be cleared for the remainder of this pass. parameters.staticData.depthRenderbuffer->setShouldClear(false); - glContext.clear(Color{ 0.0f, 0.0f, 0.0f, 0.0f }, depthClearValue, {}); + auto renderPass = parameters.encoder->createRenderPass( + "fill extrusion", + { *renderTexture, Color{ 0.0f, 0.0f, 0.0f, 0.0f }, depthClearValue, {} }); auto draw = [&](auto& programInstance, const auto& tileBucket, auto&& uniformValues, const optional<ImagePosition>& patternPositionA, @@ -98,6 +94,7 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters, RenderSource* programInstance.draw( parameters.context, + *renderPass, gfx::Triangles(), parameters.depthModeFor3D(gfx::DepthMaskType::ReadWrite), gfx::StencilMode::disabled(), @@ -201,6 +198,7 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters, RenderSource* programInstance.draw( parameters.context, + *parameters.renderPass, gfx::Triangles(), gfx::DepthMode::disabled(), gfx::StencilMode::disabled(), diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp index 3e44f7bfb0..aba1481044 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_layer.cpp @@ -104,6 +104,7 @@ void RenderFillLayer::render(PaintParameters& parameters, RenderSource*) { programInstance.draw( parameters.context, + *parameters.renderPass, drawMode, depthMode, parameters.stencilModeForClipping(tile.clip), @@ -194,6 +195,7 @@ void RenderFillLayer::render(PaintParameters& parameters, RenderSource*) { programInstance.draw( parameters.context, + *parameters.renderPass, drawMode, depthMode, parameters.stencilModeForClipping(tile.clip), diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.cpp b/src/mbgl/renderer/layers/render_heatmap_layer.cpp index f8a159f3da..333b8f9890 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.cpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.cpp @@ -10,8 +10,8 @@ #include <mbgl/style/layers/heatmap_layer_impl.hpp> #include <mbgl/geometry/feature_index.hpp> #include <mbgl/gfx/cull_face_mode.hpp> -#include <mbgl/gl/context.hpp> -#include <mbgl/gl/renderable_resource.hpp> +#include <mbgl/gfx/render_pass.hpp> +#include <mbgl/gfx/context.hpp> #include <mbgl/util/math.hpp> #include <mbgl/util/intersection_tests.hpp> @@ -57,6 +57,10 @@ 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); + } + if (!renderTexture || renderTexture->getSize() != size) { renderTexture.reset(); if (parameters.context.supportsHalfFloatTextures) { @@ -74,14 +78,8 @@ void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) { } } - renderTexture->getResource<gl::RenderableResource>().bind(); - - if (!colorRampTexture) { - colorRampTexture = parameters.context.createTexture(colorRamp, gfx::TextureChannelDataType::UnsignedByte); - } - - // TODO: remove cast - static_cast<gl::Context&>(parameters.context).clear(Color{ 0.0f, 0.0f, 0.0f, 1.0f }, {}, {}); + auto renderPass = parameters.encoder->createRenderPass( + "heatmap texture", { *renderTexture, Color{ 0.0f, 0.0f, 0.0f, 1.0f }, {}, {} }); for (const RenderTile& tile : renderTiles) { auto bucket_ = tile.tile.getBucket<HeatmapBucket>(*baseImpl); @@ -120,6 +118,7 @@ void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) { programInstance.draw( parameters.context, + *renderPass, gfx::Triangles(), parameters.depthModeForSublayer(0, gfx::DepthMaskType::ReadOnly), stencilMode, @@ -165,6 +164,7 @@ void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) { programInstance.draw( parameters.context, + *parameters.renderPass, gfx::Triangles(), gfx::DepthMode::disabled(), gfx::StencilMode::disabled(), diff --git a/src/mbgl/renderer/layers/render_hillshade_layer.cpp b/src/mbgl/renderer/layers/render_hillshade_layer.cpp index 426c34e599..5736280892 100644 --- a/src/mbgl/renderer/layers/render_hillshade_layer.cpp +++ b/src/mbgl/renderer/layers/render_hillshade_layer.cpp @@ -11,7 +11,7 @@ #include <mbgl/style/layers/hillshade_layer_impl.hpp> #include <mbgl/gfx/cull_face_mode.hpp> #include <mbgl/gfx/offscreen_texture.hpp> -#include <mbgl/gl/renderable_resource.hpp> +#include <mbgl/gfx/render_pass.hpp> #include <mbgl/util/geo.hpp> namespace mbgl { @@ -98,6 +98,7 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src programInstance.draw( parameters.context, + *parameters.renderPass, gfx::Triangles(), parameters.depthModeForSublayer(0, gfx::DepthMaskType::ReadOnly), gfx::StencilMode::disabled(), @@ -132,7 +133,9 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src const uint16_t stride = bucket.getDEMData().stride; const uint16_t tilesize = bucket.getDEMData().dim; auto view = parameters.context.createOffscreenTexture({ tilesize, tilesize }); - view->getResource<gl::RenderableResource>().bind(); + + auto renderPass = parameters.encoder->createRenderPass( + "hillshade prepare", { *view, Color{ 0.0f, 0.0f, 0.0f, 0.0f }, {}, {} }); const Properties<>::PossiblyEvaluated properties; const HillshadePrepareProgram::Binders paintAttributeData{ properties, 0 }; @@ -160,6 +163,7 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src programInstance.draw( parameters.context, + *renderPass, gfx::Triangles(), parameters.depthModeForSublayer(0, gfx::DepthMaskType::ReadOnly), gfx::StencilMode::disabled(), diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp index dbc1fa2f3e..ba6d045b49 100644 --- a/src/mbgl/renderer/layers/render_line_layer.cpp +++ b/src/mbgl/renderer/layers/render_line_layer.cpp @@ -86,6 +86,7 @@ void RenderLineLayer::render(PaintParameters& parameters, RenderSource*) { programInstance.draw( parameters.context, + *parameters.renderPass, gfx::Triangles(), parameters.depthModeForSublayer(0, gfx::DepthMaskType::ReadOnly), parameters.stencilModeForClipping(tile.clip), diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp index 09aa94800f..4964afe6a7 100644 --- a/src/mbgl/renderer/layers/render_raster_layer.cpp +++ b/src/mbgl/renderer/layers/render_raster_layer.cpp @@ -110,6 +110,7 @@ void RenderRasterLayer::render(PaintParameters& parameters, RenderSource* source programInstance.draw( parameters.context, + *parameters.renderPass, gfx::Triangles(), parameters.depthModeForSublayer(0, gfx::DepthMaskType::ReadOnly), gfx::StencilMode::disabled(), diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index 313a86539e..84ce0a73e0 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -130,6 +130,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { programInstance.draw( parameters.context, + *parameters.renderPass, gfx::Triangles(), values_.pitchAlignment == AlignmentType::Map ? parameters.depthModeForSublayer(0, gfx::DepthMaskType::ReadOnly) @@ -352,6 +353,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { }}; parameters.programs.getSymbolLayerPrograms().collisionBox.draw( parameters.context, + *parameters.renderPass, gfx::Lines { 1.0f }, gfx::DepthMode::disabled(), gfx::StencilMode::disabled(), @@ -388,6 +390,7 @@ void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { parameters.programs.getSymbolLayerPrograms().collisionCircle.draw( parameters.context, + *parameters.renderPass, gfx::Triangles(), gfx::DepthMode::disabled(), gfx::StencilMode::disabled(), |