Align SRP boundaries and editor windowing
This commit is contained in:
@@ -134,16 +134,6 @@ namespace Gameplay
|
||||
}
|
||||
}
|
||||
|
||||
internal enum SceneInjectionKind
|
||||
{
|
||||
BeforeOpaque,
|
||||
AfterOpaque,
|
||||
BeforeSkybox,
|
||||
AfterSkybox,
|
||||
BeforeTransparent,
|
||||
AfterTransparent
|
||||
}
|
||||
|
||||
internal enum ScenePhaseKind
|
||||
{
|
||||
Opaque,
|
||||
@@ -157,51 +147,6 @@ namespace Gameplay
|
||||
ShaderVector
|
||||
}
|
||||
|
||||
internal sealed class SceneInjectionPass : ScriptableRenderPass
|
||||
{
|
||||
private readonly SceneInjectionKind m_injectionKind;
|
||||
|
||||
public SceneInjectionPass(
|
||||
RenderPassEvent passEvent,
|
||||
SceneInjectionKind injectionKind)
|
||||
{
|
||||
renderPassEvent = passEvent;
|
||||
m_injectionKind = injectionKind;
|
||||
}
|
||||
|
||||
protected override bool RecordRenderGraph(
|
||||
ScriptableRenderContext context,
|
||||
RenderingData renderingData)
|
||||
{
|
||||
return context != null &&
|
||||
renderingData != null &&
|
||||
renderingData.isMainSceneStage &&
|
||||
RecordInjection(context);
|
||||
}
|
||||
|
||||
private bool RecordInjection(
|
||||
ScriptableRenderContext context)
|
||||
{
|
||||
switch (m_injectionKind)
|
||||
{
|
||||
case SceneInjectionKind.BeforeOpaque:
|
||||
return context.RecordBeforeOpaqueInjection();
|
||||
case SceneInjectionKind.AfterOpaque:
|
||||
return context.RecordAfterOpaqueInjection();
|
||||
case SceneInjectionKind.BeforeSkybox:
|
||||
return context.RecordBeforeSkyboxInjection();
|
||||
case SceneInjectionKind.AfterSkybox:
|
||||
return context.RecordAfterSkyboxInjection();
|
||||
case SceneInjectionKind.BeforeTransparent:
|
||||
return context.RecordBeforeTransparentInjection();
|
||||
case SceneInjectionKind.AfterTransparent:
|
||||
return context.RecordAfterTransparentInjection();
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class ScenePhasePass : ScriptableRenderPass
|
||||
{
|
||||
private readonly ScenePhaseKind m_phaseKind;
|
||||
@@ -239,11 +184,11 @@ namespace Gameplay
|
||||
switch (m_phaseKind)
|
||||
{
|
||||
case ScenePhaseKind.Opaque:
|
||||
return context.RecordOpaqueScenePhase();
|
||||
return context.DrawOpaqueRenderers();
|
||||
case ScenePhaseKind.Skybox:
|
||||
return context.RecordSkyboxScenePhase();
|
||||
return context.DrawSkybox();
|
||||
case ScenePhaseKind.Transparent:
|
||||
return context.RecordTransparentScenePhase();
|
||||
return context.DrawTransparentRenderers();
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@@ -368,56 +313,26 @@ namespace Gameplay
|
||||
|
||||
internal sealed class DefaultSceneFeature : ScriptableRendererFeature
|
||||
{
|
||||
private readonly SceneInjectionPass m_beforeOpaquePass;
|
||||
private readonly ScenePhasePass m_opaquePass;
|
||||
private readonly SceneInjectionPass m_afterOpaquePass;
|
||||
private readonly SceneInjectionPass m_beforeSkyboxPass;
|
||||
private readonly ScenePhasePass m_skyboxPass;
|
||||
private readonly SceneInjectionPass m_afterSkyboxPass;
|
||||
private readonly SceneInjectionPass m_beforeTransparentPass;
|
||||
private readonly ScenePhasePass m_transparentPass;
|
||||
private readonly SceneInjectionPass m_afterTransparentPass;
|
||||
|
||||
public DefaultSceneFeature(
|
||||
Action onOpaqueRecorded = null)
|
||||
{
|
||||
m_beforeOpaquePass =
|
||||
new SceneInjectionPass(
|
||||
RenderPassEvent.BeforeRenderingOpaques,
|
||||
SceneInjectionKind.BeforeOpaque);
|
||||
m_opaquePass =
|
||||
new ScenePhasePass(
|
||||
RenderPassEvent.RenderOpaques,
|
||||
ScenePhaseKind.Opaque,
|
||||
onOpaqueRecorded);
|
||||
m_afterOpaquePass =
|
||||
new SceneInjectionPass(
|
||||
RenderPassEvent.AfterRenderingOpaques,
|
||||
SceneInjectionKind.AfterOpaque);
|
||||
m_beforeSkyboxPass =
|
||||
new SceneInjectionPass(
|
||||
RenderPassEvent.BeforeRenderingSkybox,
|
||||
SceneInjectionKind.BeforeSkybox);
|
||||
m_skyboxPass =
|
||||
new ScenePhasePass(
|
||||
RenderPassEvent.RenderSkybox,
|
||||
ScenePhaseKind.Skybox);
|
||||
m_afterSkyboxPass =
|
||||
new SceneInjectionPass(
|
||||
RenderPassEvent.AfterRenderingSkybox,
|
||||
SceneInjectionKind.AfterSkybox);
|
||||
m_beforeTransparentPass =
|
||||
new SceneInjectionPass(
|
||||
RenderPassEvent.BeforeRenderingTransparents,
|
||||
SceneInjectionKind.BeforeTransparent);
|
||||
m_transparentPass =
|
||||
new ScenePhasePass(
|
||||
RenderPassEvent.RenderTransparents,
|
||||
ScenePhaseKind.Transparent);
|
||||
m_afterTransparentPass =
|
||||
new SceneInjectionPass(
|
||||
RenderPassEvent.AfterRenderingTransparents,
|
||||
SceneInjectionKind.AfterTransparent);
|
||||
}
|
||||
|
||||
public override void AddRenderPasses(
|
||||
@@ -431,15 +346,60 @@ namespace Gameplay
|
||||
return;
|
||||
}
|
||||
|
||||
renderer.EnqueuePass(m_beforeOpaquePass);
|
||||
renderer.EnqueuePass(m_opaquePass);
|
||||
renderer.EnqueuePass(m_afterOpaquePass);
|
||||
renderer.EnqueuePass(m_beforeSkyboxPass);
|
||||
renderer.EnqueuePass(m_skyboxPass);
|
||||
renderer.EnqueuePass(m_afterSkyboxPass);
|
||||
renderer.EnqueuePass(m_beforeTransparentPass);
|
||||
renderer.EnqueuePass(m_transparentPass);
|
||||
renderer.EnqueuePass(m_afterTransparentPass);
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class DefaultShadowCasterFeature
|
||||
: ScriptableRendererFeature
|
||||
{
|
||||
private readonly DrawObjectsPass m_shadowCasterPass =
|
||||
new DrawObjectsPass(
|
||||
RenderPassEvent.BeforeRenderingShadows,
|
||||
SceneRenderPhase.Opaque,
|
||||
RendererListDesc.CreateDefault(
|
||||
RendererListType.ShadowCaster));
|
||||
|
||||
public override void ConfigureCameraFramePlan(
|
||||
ScriptableRenderPipelinePlanningContext context)
|
||||
{
|
||||
if (context != null)
|
||||
{
|
||||
context.RequestShadowCasterStage();
|
||||
}
|
||||
}
|
||||
|
||||
public override void ConfigureDirectionalShadowExecutionState(
|
||||
DirectionalShadowExecutionContext context)
|
||||
{
|
||||
if (context == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (context.hasPlannedMainDirectionalShadow)
|
||||
{
|
||||
context.UseDefaultMainDirectionalShadowExecution();
|
||||
return;
|
||||
}
|
||||
|
||||
context.ClearDirectionalShadowExecution();
|
||||
}
|
||||
|
||||
public override void AddRenderPasses(
|
||||
ScriptableRenderer renderer,
|
||||
RenderingData renderingData)
|
||||
{
|
||||
if (renderer == null ||
|
||||
renderingData == null ||
|
||||
!renderingData.isShadowCasterStage)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
renderer.EnqueuePass(m_shadowCasterPass);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -570,6 +530,7 @@ namespace Gameplay
|
||||
Vector4 firstVectorPayload,
|
||||
Vector4 secondVectorPayload)
|
||||
{
|
||||
AddFeature(new DefaultSceneFeature());
|
||||
AddFeature(
|
||||
new FullscreenFeature(
|
||||
new FullscreenPass(
|
||||
@@ -1076,7 +1037,9 @@ namespace Gameplay
|
||||
finalColorData.requiresProcessing;
|
||||
}
|
||||
RecordCallCount++;
|
||||
return context.RecordScene();
|
||||
return context.DrawOpaqueRenderers() &&
|
||||
context.DrawSkybox() &&
|
||||
context.DrawTransparentRenderers();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1106,6 +1069,7 @@ namespace Gameplay
|
||||
{
|
||||
public CameraDataObservationRenderer()
|
||||
{
|
||||
AddFeature(new DefaultShadowCasterFeature());
|
||||
AddFeature(new CameraDataObservationFeature());
|
||||
}
|
||||
}
|
||||
@@ -1765,6 +1729,8 @@ namespace Gameplay
|
||||
{
|
||||
public static int CreatePipelineCallCount;
|
||||
public Vector4 postProcessScale = new Vector4(1.03f, 0.98f, 0.94f, 1.0f);
|
||||
private ManagedUniversalRenderPipelineProbeRendererData
|
||||
m_rendererData;
|
||||
|
||||
public ManagedUniversalRenderPipelineProbeAsset()
|
||||
{
|
||||
@@ -1774,20 +1740,35 @@ namespace Gameplay
|
||||
protected override ScriptableRenderPipeline CreatePipeline()
|
||||
{
|
||||
CreatePipelineCallCount++;
|
||||
rendererDataList = CreateRendererDataList();
|
||||
ApplyPostProcessScale();
|
||||
return base.CreatePipeline();
|
||||
}
|
||||
|
||||
protected override void ConfigureCameraFramePlan(
|
||||
ScriptableRenderPipelinePlanningContext context)
|
||||
{
|
||||
ApplyPostProcessScale();
|
||||
base.ConfigureCameraFramePlan(context);
|
||||
}
|
||||
|
||||
private ScriptableRendererData[] CreateRendererDataList()
|
||||
{
|
||||
ManagedUniversalRenderPipelineProbeRendererData rendererData =
|
||||
m_rendererData =
|
||||
ProbeScriptableObjectFactory
|
||||
.Create<ManagedUniversalRenderPipelineProbeRendererData>();
|
||||
rendererData.postProcessScale =
|
||||
postProcessScale;
|
||||
ApplyPostProcessScale();
|
||||
return ProbeScriptableObjectFactory
|
||||
.CreateRendererDataList(
|
||||
rendererData);
|
||||
m_rendererData);
|
||||
}
|
||||
|
||||
private void ApplyPostProcessScale()
|
||||
{
|
||||
if (m_rendererData != null)
|
||||
{
|
||||
m_rendererData.postProcessScale =
|
||||
postProcessScale;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -109,6 +109,54 @@ namespace Gameplay
|
||||
public bool HasRenderPassEventUnityNumericOrder;
|
||||
public bool HasRenderPassEventEngineExtensionOrder;
|
||||
|
||||
private static bool HasMethod(
|
||||
System.Type type,
|
||||
string name,
|
||||
BindingFlags flags)
|
||||
{
|
||||
if (type == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
MethodInfo[] methods = type.GetMethods(flags);
|
||||
for (int i = 0; i < methods.Length; ++i)
|
||||
{
|
||||
MethodInfo method = methods[i];
|
||||
if (method != null &&
|
||||
method.Name == name)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool HasProperty(
|
||||
System.Type type,
|
||||
string name,
|
||||
BindingFlags flags)
|
||||
{
|
||||
if (type == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
PropertyInfo[] properties = type.GetProperties(flags);
|
||||
for (int i = 0; i < properties.Length; ++i)
|
||||
{
|
||||
PropertyInfo property = properties[i];
|
||||
if (property != null &&
|
||||
property.Name == name)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
{
|
||||
const BindingFlags PublicInstanceMethodFlags =
|
||||
@@ -334,38 +382,38 @@ namespace Gameplay
|
||||
HasScriptableObjectType =
|
||||
scriptableObjectType != null;
|
||||
HasScriptableObjectCreateInstance =
|
||||
scriptableObjectType != null &&
|
||||
scriptableObjectType.GetMethod(
|
||||
HasMethod(
|
||||
scriptableObjectType,
|
||||
"CreateInstance",
|
||||
BindingFlags.Static |
|
||||
BindingFlags.Public) != null;
|
||||
BindingFlags.Public);
|
||||
HasRenderPipelineAssetScriptableObjectBase =
|
||||
scriptableObjectType != null &&
|
||||
pipelineAssetType.BaseType == scriptableObjectType;
|
||||
HasPlanningContextType =
|
||||
contextType.Assembly.GetType(
|
||||
"XCEngine.Rendering.ScriptableRenderPipelinePlanningContext") != null;
|
||||
typeof(ScriptableRenderPipelinePlanningContext) != null;
|
||||
HasRendererFeatureConfigureCameraFramePlan =
|
||||
rendererFeatureType.GetMethod(
|
||||
HasMethod(
|
||||
rendererFeatureType,
|
||||
"ConfigureCameraFramePlan",
|
||||
BindingFlags.Instance |
|
||||
BindingFlags.Public |
|
||||
BindingFlags.NonPublic) != null;
|
||||
BindingFlags.NonPublic);
|
||||
HasRendererRecordingContextType =
|
||||
System.Type.GetType(
|
||||
"XCEngine.Rendering.Universal.RendererRecordingContext, XCEngine.RenderPipelines.Universal") != null;
|
||||
universalAssembly.GetType(
|
||||
"XCEngine.Rendering.Universal.RendererRecordingContext") != null;
|
||||
HasRendererCameraRequestContextType =
|
||||
System.Type.GetType(
|
||||
"XCEngine.Rendering.Universal.RendererCameraRequestContext, XCEngine.RenderPipelines.Universal") != null;
|
||||
universalAssembly.GetType(
|
||||
"XCEngine.Rendering.Universal.RendererCameraRequestContext") != null;
|
||||
HasRendererBackedRenderPipelineAssetType =
|
||||
System.Type.GetType(
|
||||
"XCEngine.Rendering.Universal.RendererBackedRenderPipelineAsset, XCEngine.RenderPipelines.Universal") != null;
|
||||
universalAssembly.GetType(
|
||||
"XCEngine.Rendering.Universal.RendererBackedRenderPipelineAsset") != null;
|
||||
HasRendererBackedRenderPipelineType =
|
||||
System.Type.GetType(
|
||||
"XCEngine.Rendering.Universal.RendererBackedRenderPipeline, XCEngine.RenderPipelines.Universal") != null;
|
||||
universalAssembly.GetType(
|
||||
"XCEngine.Rendering.Universal.RendererBackedRenderPipeline") != null;
|
||||
HasRendererDrivenRenderPipelineType =
|
||||
System.Type.GetType(
|
||||
"XCEngine.Rendering.Universal.RendererDrivenRenderPipeline, XCEngine.RenderPipelines.Universal") != null;
|
||||
universalAssembly.GetType(
|
||||
"XCEngine.Rendering.Universal.RendererDrivenRenderPipeline") != null;
|
||||
HasRendererDataScriptableObjectBase =
|
||||
scriptableObjectType != null &&
|
||||
rendererDataType.BaseType == scriptableObjectType;
|
||||
@@ -373,31 +421,36 @@ namespace Gameplay
|
||||
scriptableObjectType != null &&
|
||||
rendererFeatureType.BaseType == scriptableObjectType;
|
||||
HasRendererDataSetupRenderer =
|
||||
rendererDataType.GetMethod(
|
||||
HasMethod(
|
||||
rendererDataType,
|
||||
"SetupRenderer",
|
||||
BindingFlags.Instance |
|
||||
BindingFlags.NonPublic) != null;
|
||||
BindingFlags.NonPublic);
|
||||
HasRendererDataSetDirty =
|
||||
rendererDataType.GetMethod(
|
||||
HasMethod(
|
||||
rendererDataType,
|
||||
"SetDirty",
|
||||
BindingFlags.Instance |
|
||||
BindingFlags.NonPublic) != null;
|
||||
BindingFlags.NonPublic);
|
||||
HasRendererDataIsInvalidated =
|
||||
rendererDataType.GetProperty(
|
||||
HasProperty(
|
||||
rendererDataType,
|
||||
"isInvalidated",
|
||||
BindingFlags.Instance |
|
||||
BindingFlags.NonPublic |
|
||||
BindingFlags.Public) != null;
|
||||
BindingFlags.Public);
|
||||
HasRendererSupportsRendererRecording =
|
||||
rendererType.GetMethod(
|
||||
HasMethod(
|
||||
rendererType,
|
||||
"SupportsRendererRecording",
|
||||
BindingFlags.Instance |
|
||||
BindingFlags.NonPublic) != null;
|
||||
BindingFlags.NonPublic);
|
||||
HasRendererRecordRenderer =
|
||||
rendererType.GetMethod(
|
||||
HasMethod(
|
||||
rendererType,
|
||||
"RecordRenderer",
|
||||
BindingFlags.Instance |
|
||||
BindingFlags.NonPublic) != null;
|
||||
BindingFlags.NonPublic);
|
||||
HasPublicRendererSupportsStageRenderGraph =
|
||||
rendererType.GetMethod(
|
||||
"SupportsStageRenderGraph",
|
||||
|
||||
Reference in New Issue
Block a user