summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/layers
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/layers')
-rw-r--r--src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp6
-rw-r--r--src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp5
-rw-r--r--src/mbgl/renderer/layers/render_heatmap_layer.cpp19
-rw-r--r--src/mbgl/renderer/layers/render_heatmap_layer.hpp4
-rw-r--r--src/mbgl/renderer/layers/render_hillshade_layer.cpp9
5 files changed, 23 insertions, 20 deletions
diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp
index 39eb6f151d..d7c59570c1 100644
--- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp
+++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp
@@ -15,6 +15,7 @@
#include <mbgl/tile/geometry_tile.hpp>
#include <mbgl/gfx/cull_face_mode.hpp>
#include <mbgl/gl/context.hpp>
+#include <mbgl/gl/renderable_resource.hpp>
namespace mbgl {
@@ -62,10 +63,11 @@ void RenderFillExtrusionLayer::render(PaintParameters& parameters, RenderSource*
const auto& size = parameters.staticData.backendSize;
if (!renderTexture || renderTexture->getSize() != size) {
- renderTexture = OffscreenTexture(parameters.context, size, *parameters.staticData.depthRenderbuffer);
+ renderTexture.reset();
+ renderTexture = parameters.context.createOffscreenTexture(size, *parameters.staticData.depthRenderbuffer);
}
- renderTexture->bind();
+ renderTexture->getResource<gl::RenderableResource>().bind();
optional<float> depthClearValue = {};
if (parameters.staticData.depthRenderbuffer->needsClearing()) depthClearValue = 1.0;
diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp
index 886362f28e..6f14fcd7a8 100644
--- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp
+++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp
@@ -3,8 +3,7 @@
#include <mbgl/renderer/render_layer.hpp>
#include <mbgl/style/layers/fill_extrusion_layer_impl.hpp>
#include <mbgl/style/layers/fill_extrusion_layer_properties.hpp>
-#include <mbgl/util/optional.hpp>
-#include <mbgl/util/offscreen_texture.hpp>
+#include <mbgl/gfx/offscreen_texture.hpp>
namespace mbgl {
@@ -41,7 +40,7 @@ public:
const style::FillExtrusionLayer::Impl& impl() const;
- optional<OffscreenTexture> renderTexture;
+ std::unique_ptr<gfx::OffscreenTexture> renderTexture;
private:
CrossfadeParameters crossfade;
};
diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.cpp b/src/mbgl/renderer/layers/render_heatmap_layer.cpp
index c720709e28..15345ffe9e 100644
--- a/src/mbgl/renderer/layers/render_heatmap_layer.cpp
+++ b/src/mbgl/renderer/layers/render_heatmap_layer.cpp
@@ -11,6 +11,7 @@
#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/util/math.hpp>
#include <mbgl/util/intersection_tests.hpp>
@@ -57,27 +58,27 @@ void RenderHeatmapLayer::render(PaintParameters& parameters, RenderSource*) {
const auto size = Size{viewportSize.width / 4, viewportSize.height / 4};
if (!renderTexture || renderTexture->getSize() != size) {
+ renderTexture.reset();
if (parameters.context.supportsHalfFloatTextures) {
- renderTexture = OffscreenTexture(parameters.context, size, gfx::TextureChannelDataType::HalfFloat);
+ renderTexture = parameters.context.createOffscreenTexture(size, gfx::TextureChannelDataType::HalfFloat);
+ // TODO: try binding in the offscreen texture constructor
try {
- renderTexture->bind();
+ renderTexture->getResource<gl::RenderableResource>().bind();
} catch (const std::runtime_error& ex) {
// can't render to a half-float texture; falling back to unsigned byte one
- renderTexture = nullopt;
+ renderTexture.reset();
parameters.context.supportsHalfFloatTextures = false;
}
}
- if (!parameters.context.supportsHalfFloatTextures || !renderTexture) {
- renderTexture = OffscreenTexture(parameters.context, size, gfx::TextureChannelDataType::UnsignedByte);
- renderTexture->bind();
+ if (!renderTexture) {
+ renderTexture = parameters.context.createOffscreenTexture(size, gfx::TextureChannelDataType::UnsignedByte);
}
-
- } else {
- renderTexture->bind();
}
+ renderTexture->getResource<gl::RenderableResource>().bind();
+
if (!colorRampTexture) {
colorRampTexture = parameters.context.createTexture(colorRamp, gfx::TextureChannelDataType::UnsignedByte);
}
diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.hpp b/src/mbgl/renderer/layers/render_heatmap_layer.hpp
index 364628a2b2..22fe48f374 100644
--- a/src/mbgl/renderer/layers/render_heatmap_layer.hpp
+++ b/src/mbgl/renderer/layers/render_heatmap_layer.hpp
@@ -4,8 +4,8 @@
#include <mbgl/style/layers/heatmap_layer_impl.hpp>
#include <mbgl/style/layers/heatmap_layer_properties.hpp>
#include <mbgl/gfx/texture.hpp>
+#include <mbgl/gfx/offscreen_texture.hpp>
#include <mbgl/util/optional.hpp>
-#include <mbgl/util/offscreen_texture.hpp>
namespace mbgl {
@@ -36,7 +36,7 @@ public:
const style::HeatmapLayer::Impl& impl() const;
PremultipliedImage colorRamp;
- optional<OffscreenTexture> renderTexture;
+ std::unique_ptr<gfx::OffscreenTexture> renderTexture;
optional<gfx::Texture> colorRampTexture;
private:
diff --git a/src/mbgl/renderer/layers/render_hillshade_layer.cpp b/src/mbgl/renderer/layers/render_hillshade_layer.cpp
index 527d48f654..426c34e599 100644
--- a/src/mbgl/renderer/layers/render_hillshade_layer.cpp
+++ b/src/mbgl/renderer/layers/render_hillshade_layer.cpp
@@ -10,8 +10,9 @@
#include <mbgl/tile/tile.hpp>
#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/util/geo.hpp>
-#include <mbgl/util/offscreen_texture.hpp>
namespace mbgl {
@@ -130,8 +131,8 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src
assert(bucket.dem);
const uint16_t stride = bucket.getDEMData().stride;
const uint16_t tilesize = bucket.getDEMData().dim;
- OffscreenTexture view(parameters.context, { tilesize, tilesize });
- view.bind();
+ auto view = parameters.context.createOffscreenTexture({ tilesize, tilesize });
+ view->getResource<gl::RenderableResource>().bind();
const Properties<>::PossiblyEvaluated properties;
const HillshadePrepareProgram::Binders paintAttributeData{ properties, 0 };
@@ -173,7 +174,7 @@ void RenderHillshadeLayer::render(PaintParameters& parameters, RenderSource* src
},
getID()
);
- bucket.texture = std::move(view.getTexture());
+ bucket.texture = std::move(view->getTexture());
bucket.setPrepared(true);
} else if (parameters.pass == RenderPass::Translucent) {
assert(bucket.texture);