fix(rendering): preserve opaque building coverage under detail MSAA (#473)

This commit is contained in:
Erik 2026-09-05 08:07:51 +02:00
parent d35ed1aece
commit bf23673f3d
7 changed files with 387 additions and 46 deletions

View file

@ -58,9 +58,10 @@ public sealed unsafe partial class WbDrawDispatcher
/// <summary>
/// The four pipeline buckets a translucency kind resolves to, independent
/// of any live <see cref="MeshPipelineSet"/> instance. <see cref="AlphaToCoverage"/>
/// selects between <c>Opaque</c> and <c>OpaqueAlphaToCoverage</c> uniformly
/// for the whole submission — it never varies per command — so merge-run
/// legality only needs to know WHICH bucket a command falls in, not which
/// selects between <c>Opaque</c> and <c>OpaqueAlphaToCoverage</c> for the
/// default opaque bucket. A solo detail-category command may then select
/// its exact material pipeline (including non-A2C Opaque), so merge-run
/// legality needs the bucket plus the existing detail boundary, not the
/// concrete <see cref="IGpuPipeline"/> that resolves to. That is what lets
/// <see cref="BuildOrderedMergeRuns"/> stay pure CPU logic, testable
/// without a live GPU device — the same separation

View file

@ -858,7 +858,7 @@ public sealed unsafe partial class WbDrawDispatcher
RetailSetSurfaceMaterialState material,
IGpuPipeline opaquePipeline) => material.Blend switch
{
RetailSetSurfaceBlend.Opaque => opaquePipeline,
RetailSetSurfaceBlend.Opaque => pipelines.Opaque,
RetailSetSurfaceBlend.StraightAlpha => material.AlphaTestEnabled
? pipelines.AlphaBlendDepthWrite
: pipelines.AlphaBlend,