Drawable Renderer (#1570), Improve drawable interaction with opaquePassCutoff

This commit is contained in:
Tim Sylvester
2023-05-31 10:40:38 -07:00
committed by Bart Louwers
parent 87189d9534
commit 51c270495b
2 changed files with 9 additions and 3 deletions

View File

@@ -72,7 +72,6 @@ public:
void setRenderPass(mbgl::RenderPass value) { renderPass = value; }
/// Test whether to draw this drawable in a given render pass.
/// If multiple render pass bits are set, all must be present.
bool hasRenderPass(const mbgl::RenderPass value) const {
return (mbgl::underlying_type(renderPass) & mbgl::underlying_type(value)) != 0;
}

View File

@@ -42,8 +42,15 @@ void TileLayerGroupGL::render(RenderOrchestrator&, PaintParameters& parameters)
if (!drawable.hasRenderPass(parameters.pass)) {
return;
}
if (drawable.hasRenderPass(RenderPass::Opaque) && parameters.currentLayer >= parameters.opaquePassCutoff) {
return;
// If this drawable can render either opaque or translucent...
if (drawable.hasAllRenderPasses(RenderPass::Opaque | RenderPass::Translucent)) {
// Render it only in the translucent pass if we're below the cutoff, and only in the opaque pass otherwise
// (parameters.currentLayer >= parameters.opaquePassCutoff) ? RenderPass::Opaque : RenderPass::Translucent;
if ((parameters.currentLayer < parameters.opaquePassCutoff && parameters.pass != RenderPass::Translucent) ||
(parameters.currentLayer >= parameters.opaquePassCutoff && parameters.pass != RenderPass::Opaque)) {
return;
}
}
#if !defined(NDEBUG)