diff options
Diffstat (limited to 'src/mbgl/renderer/paint_parameters.cpp')
-rw-r--r-- | src/mbgl/renderer/paint_parameters.cpp | 24 |
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; |