Metal layer depth range support (#2013)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Alex Cristici <alex.cristici@gmail.com>
This commit is contained in:
mwilsnd
2024-01-16 09:31:44 -05:00
committed by GitHub
parent 29c16a4a81
commit d6c2b148dd
28 changed files with 109 additions and 31 deletions

View File

@@ -330,7 +330,8 @@ void Renderer::Impl::render(const RenderTree& renderTree,
const auto maxLayerIndex = orchestrator.maxLayerIndex();
parameters.pass = RenderPass::Opaque;
parameters.currentLayer = 0;
parameters.depthRangeSize = 1 - (maxLayerIndex + 3) * parameters.numSublayers * PaintParameters::depthEpsilon;
parameters.depthRangeSize = 1 -
(maxLayerIndex + 3) * PaintParameters::numSublayers * PaintParameters::depthEpsilon;
// draw layer groups, opaque pass
orchestrator.visitLayerGroups([&](LayerGroupBase& layerGroup) {
@@ -343,7 +344,8 @@ void Renderer::Impl::render(const RenderTree& renderTree,
const auto debugGroup(parameters.renderPass->createDebugGroup("drawables-translucent"));
const auto maxLayerIndex = orchestrator.maxLayerIndex();
parameters.pass = RenderPass::Translucent;
parameters.depthRangeSize = 1 - (maxLayerIndex + 3) * parameters.numSublayers * PaintParameters::depthEpsilon;
parameters.depthRangeSize = 1 -
(maxLayerIndex + 3) * PaintParameters::numSublayers * PaintParameters::depthEpsilon;
// draw layer groups, translucent pass
orchestrator.visitLayerGroups([&](LayerGroupBase& layerGroup) {
@@ -358,7 +360,7 @@ void Renderer::Impl::render(const RenderTree& renderTree,
const auto renderLayerOpaquePass = [&] {
const auto debugGroup(parameters.renderPass->createDebugGroup("opaque"));
parameters.pass = RenderPass::Opaque;
parameters.depthRangeSize = 1 - (layerRenderItems.size() + 2) * parameters.numSublayers *
parameters.depthRangeSize = 1 - (layerRenderItems.size() + 2) * PaintParameters::numSublayers *
PaintParameters::depthEpsilon;
uint32_t i = 0;
@@ -376,7 +378,7 @@ void Renderer::Impl::render(const RenderTree& renderTree,
const auto renderLayerTranslucentPass = [&] {
const auto debugGroup(parameters.renderPass->createDebugGroup("translucent"));
parameters.pass = RenderPass::Translucent;
parameters.depthRangeSize = 1 - (layerRenderItems.size() + 2) * parameters.numSublayers *
parameters.depthRangeSize = 1 - (layerRenderItems.size() + 2) * PaintParameters::numSublayers *
PaintParameters::depthEpsilon;
int32_t i = static_cast<int32_t>(layerRenderItems.size()) - 1;