summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFabian Guerra <fabian.guerra@mapbox.com>2018-01-04 17:13:55 -0600
committerFabian Guerra <fabian.guerra@mapbox.com>2018-01-04 17:13:55 -0600
commit6fa57b7d48b6f0505166b8d3a940eaaf1ab5a18f (patch)
tree14e8ea93393095746e208b23c2358d13658ae17a /src
parent5bfa20d71dc099416c5d715e7857ae836db160ed (diff)
parent187b6dc31cf281b5157de1acd92f3e8ef9d0acf9 (diff)
downloadqtlocation-mapboxgl-6fa57b7d48b6f0505166b8d3a940eaaf1ab5a18f.tar.gz
Merge branch 'release-agua' back to master.
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/renderer/layers/render_custom_layer.cpp21
-rw-r--r--src/mbgl/renderer/layers/render_custom_layer.hpp1
2 files changed, 14 insertions, 8 deletions
diff --git a/src/mbgl/renderer/layers/render_custom_layer.cpp b/src/mbgl/renderer/layers/render_custom_layer.cpp
index 7ece3970da..adafd8583f 100644
--- a/src/mbgl/renderer/layers/render_custom_layer.cpp
+++ b/src/mbgl/renderer/layers/render_custom_layer.cpp
@@ -43,20 +43,25 @@ std::unique_ptr<Bucket> RenderCustomLayer::createBucket(const BucketParameters&,
}
void RenderCustomLayer::render(PaintParameters& paintParameters, RenderSource*) {
- if (!initialized) {
+ if (context != impl().context || !initialized) {
+ //If the context changed, deinitialize the previous one before initializing the new one.
+ if (context && !contextDestroyed && impl().deinitializeFn) {
+ impl().deinitializeFn(context);
+ }
+ context = impl().context;
assert(impl().initializeFn);
impl().initializeFn(impl().context);
initialized = true;
}
- gl::Context& context = paintParameters.context;
+ gl::Context& glContext = paintParameters.context;
const TransformState& state = paintParameters.state;
// Reset GL state to a known state so the CustomLayer always has a clean slate.
- context.bindVertexArray = 0;
- context.setDepthMode(paintParameters.depthModeForSublayer(0, gl::DepthMode::ReadOnly));
- context.setStencilMode(gl::StencilMode::disabled());
- context.setColorMode(paintParameters.colorModeForRenderPass());
+ glContext.bindVertexArray = 0;
+ glContext.setDepthMode(paintParameters.depthModeForSublayer(0, gl::DepthMode::ReadOnly));
+ glContext.setStencilMode(gl::StencilMode::disabled());
+ glContext.setColorMode(paintParameters.colorModeForRenderPass());
CustomLayerRenderParameters parameters;
@@ -70,12 +75,12 @@ void RenderCustomLayer::render(PaintParameters& paintParameters, RenderSource*)
parameters.fieldOfView = state.getFieldOfView();
assert(impl().renderFn);
- impl().renderFn(impl().context, parameters);
+ impl().renderFn(context, parameters);
// Reset the view back to our original one, just in case the CustomLayer changed
// the viewport or Framebuffer.
paintParameters.backend.bind();
- context.setDirtyState();
+ glContext.setDirtyState();
}
} // namespace mbgl
diff --git a/src/mbgl/renderer/layers/render_custom_layer.hpp b/src/mbgl/renderer/layers/render_custom_layer.hpp
index 32ed9da8da..6d1fea99d3 100644
--- a/src/mbgl/renderer/layers/render_custom_layer.hpp
+++ b/src/mbgl/renderer/layers/render_custom_layer.hpp
@@ -26,6 +26,7 @@ public:
private:
bool initialized = false;
bool contextDestroyed = false;
+ void * context = nullptr;
};
template <>