render stencil portals (transparent)
This commit is contained in:
@@ -7,17 +7,19 @@ namespace EscapeRoomEngine.Portal.Runtime
|
||||
{
|
||||
public class RenderPortals : ScriptableRendererFeature
|
||||
{
|
||||
private class PortalRenderPass : ScriptableRenderPass
|
||||
private class RenderPass : ScriptableRenderPass
|
||||
{
|
||||
private RenderStateBlock _renderStateBlock;
|
||||
|
||||
private readonly LayerMask _layers;
|
||||
private readonly LayerMask _layer;
|
||||
private readonly Material _overwriteMaterial;
|
||||
|
||||
public PortalRenderPass(LayerMask layers)
|
||||
public RenderPass(LayerMask layer, Material overwriteMaterial, RenderPassEvent renderPassEvent)
|
||||
{
|
||||
_layers = layers;
|
||||
_layer = layer;
|
||||
_overwriteMaterial = overwriteMaterial;
|
||||
|
||||
renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
|
||||
this.renderPassEvent = renderPassEvent;
|
||||
_renderStateBlock = new RenderStateBlock(RenderStateMask.Nothing);
|
||||
}
|
||||
|
||||
@@ -31,24 +33,30 @@ namespace EscapeRoomEngine.Portal.Runtime
|
||||
new("SRPDefaultUnlit"), new("UniversalForward"), new("UniversalForwardOnly")
|
||||
},
|
||||
ref renderingData, sortingCriteria);
|
||||
if (_overwriteMaterial)
|
||||
{
|
||||
drawingSettings.overrideMaterial = _overwriteMaterial;
|
||||
}
|
||||
|
||||
var filteringSettings = new FilteringSettings(RenderQueueRange.opaque, _layers);
|
||||
var filteringSettings = new FilteringSettings(RenderQueueRange.opaque, _layer);
|
||||
context.DrawRenderers(renderingData.cullResults, ref drawingSettings, ref filteringSettings, ref _renderStateBlock);
|
||||
}
|
||||
}
|
||||
|
||||
private PortalRenderPass _portalPass;
|
||||
private RenderPass _renderPass;
|
||||
|
||||
public LayerMask layers;
|
||||
public LayerMask layer;
|
||||
public Material overwriteMaterial;
|
||||
public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
|
||||
|
||||
public override void Create()
|
||||
{
|
||||
_portalPass = new PortalRenderPass(layers);
|
||||
_renderPass = new RenderPass(layer, overwriteMaterial, renderPassEvent);
|
||||
}
|
||||
|
||||
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
|
||||
{
|
||||
renderer.EnqueuePass(_portalPass);
|
||||
renderer.EnqueuePass(_renderPass);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user