summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/paint_parameters.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/paint_parameters.cpp')
-rw-r--r--src/mbgl/renderer/paint_parameters.cpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/src/mbgl/renderer/paint_parameters.cpp b/src/mbgl/renderer/paint_parameters.cpp
index e9f42d2579..33a741865e 100644
--- a/src/mbgl/renderer/paint_parameters.cpp
+++ b/src/mbgl/renderer/paint_parameters.cpp
@@ -72,8 +72,10 @@ gfx::DepthMode PaintParameters::depthModeForSublayer(uint8_t n, gfx::DepthMaskTy
return gfx::DepthMode { gfx::DepthFunctionType::LessEqual, mask, { nearDepth, farDepth } };
}
-gfx::DepthMode PaintParameters::depthModeFor3D(gfx::DepthMaskType mask) const {
- return gfx::DepthMode { gfx::DepthFunctionType::LessEqual, mask, { 0.0, 1.0 } };
+gfx::DepthMode PaintParameters::depthModeFor3D() const {
+ return gfx::DepthMode{ gfx::DepthFunctionType::LessEqual,
+ gfx::DepthMaskType::ReadWrite,
+ { 0.0, depthRangeSize } };
}
void PaintParameters::clearStencil() {
@@ -166,6 +168,24 @@ gfx::StencilMode PaintParameters::stencilModeForClipping(const UnwrappedTileID&
gfx::StencilOpType::Replace };
}
+gfx::StencilMode PaintParameters::stencilModeFor3D() {
+ if (nextStencilID + 1 > 256) {
+ clearStencil();
+ }
+
+ // We're potentially destroying the stencil clipping mask in this pass. That means we'll have
+ // to recreate it for the next source if any.
+ tileClippingMaskIDs.clear();
+
+ const int32_t id = nextStencilID++;
+ return gfx::StencilMode{ gfx::StencilMode::NotEqual{ 0b11111111 },
+ id,
+ 0b11111111,
+ gfx::StencilOpType::Keep,
+ gfx::StencilOpType::Keep,
+ gfx::StencilOpType::Replace };
+}
+
gfx::ColorMode PaintParameters::colorModeForRenderPass() const {
if (debugOptions & MapDebugOptions::Overdraw) {
const float overdraw = 1.0f / 8.0f;