refactor(srp): move directional shadow planning policy into managed urp
This commit is contained in:
@@ -1319,6 +1319,8 @@ public:
|
||||
GetPipelineRendererAsset() const override;
|
||||
std::shared_ptr<const Rendering::RenderPipelineAsset>
|
||||
GetPipelineRendererAsset(int32_t rendererIndex) const override;
|
||||
std::string GetDirectionalShadowPlanningPolicyAssetKey() const
|
||||
override;
|
||||
std::string GetDirectionalShadowExecutionPolicyAssetKey() const
|
||||
override;
|
||||
std::string GetDirectionalShadowExecutionPolicyAssetKey(
|
||||
@@ -1362,6 +1364,8 @@ private:
|
||||
MonoObject* assetObject) const;
|
||||
MonoMethod* ResolveGetPipelineRendererAssetKeyContextualMethod(
|
||||
MonoObject* assetObject) const;
|
||||
MonoMethod* ResolveGetDirectionalShadowPlanningPolicyAssetKeyMethod(
|
||||
MonoObject* assetObject) const;
|
||||
MonoMethod* ResolveGetDirectionalShadowExecutionPolicyAssetKeyMethod(
|
||||
MonoObject* assetObject) const;
|
||||
MonoMethod*
|
||||
@@ -1388,6 +1392,8 @@ private:
|
||||
mutable MonoMethod* m_getPipelineRendererAssetKeyMethod = nullptr;
|
||||
mutable MonoMethod* m_getPipelineRendererAssetKeyContextualMethod =
|
||||
nullptr;
|
||||
mutable MonoMethod*
|
||||
m_getDirectionalShadowPlanningPolicyAssetKeyMethod = nullptr;
|
||||
mutable MonoMethod*
|
||||
m_getDirectionalShadowExecutionPolicyAssetKeyMethod = nullptr;
|
||||
mutable MonoMethod*
|
||||
@@ -1846,15 +1852,30 @@ void MonoManagedRenderPipelineAssetRuntime::ConfigureCameraRenderRequest(
|
||||
method,
|
||||
args,
|
||||
nullptr);
|
||||
const std::string directionalShadowPlanningPolicyAssetKey =
|
||||
GetDirectionalShadowPlanningPolicyAssetKey();
|
||||
if (requestContextState.suppressDirectionalShadow) {
|
||||
request.directionalShadow = {};
|
||||
} else if (requestContextState.directionalShadowPlanningSettingsDirty) {
|
||||
request.directionalShadow = {};
|
||||
Rendering::ApplyDefaultRenderPipelineAssetCameraRenderRequestPolicy(
|
||||
request,
|
||||
renderedBaseCameraCount,
|
||||
renderedRequestCount,
|
||||
requestContextState.directionalShadowPlanningSettings);
|
||||
if (directionalShadowPlanningPolicyAssetKey.empty()) {
|
||||
Rendering::ApplyDefaultRenderPipelineAssetCameraRenderRequestPolicy(
|
||||
request,
|
||||
renderedBaseCameraCount,
|
||||
renderedRequestCount,
|
||||
requestContextState.directionalShadowPlanningSettings);
|
||||
} else if (!Rendering::Internal::ApplyDirectionalShadowPlanningPolicyByKey(
|
||||
directionalShadowPlanningPolicyAssetKey,
|
||||
request,
|
||||
renderedBaseCameraCount,
|
||||
renderedRequestCount,
|
||||
requestContextState.directionalShadowPlanningSettings)) {
|
||||
Debug::Logger::Get().Error(
|
||||
Debug::LogCategory::Rendering,
|
||||
Containers::String(
|
||||
"MonoManagedRenderPipelineAssetRuntime failed to resolve directional shadow planning policy asset key: ") +
|
||||
directionalShadowPlanningPolicyAssetKey.c_str());
|
||||
}
|
||||
}
|
||||
UnregisterManagedCameraRenderRequestContextState(
|
||||
requestContextHandle);
|
||||
@@ -1935,7 +1956,7 @@ MonoManagedRenderPipelineAssetRuntime::GetPipelineRendererAsset() const {
|
||||
|
||||
std::shared_ptr<const Rendering::RenderPipelineAsset>
|
||||
MonoManagedRenderPipelineAssetRuntime::GetPipelineRendererAsset(
|
||||
int32_t rendererIndex) const {
|
||||
int32_t rendererIndex) const {
|
||||
if (!SyncManagedAssetRuntimeState()) {
|
||||
return nullptr;
|
||||
}
|
||||
@@ -2029,6 +2050,37 @@ MonoManagedRenderPipelineAssetRuntime::GetPipelineRendererAsset(
|
||||
return m_pipelineRendererAsset;
|
||||
}
|
||||
|
||||
std::string MonoManagedRenderPipelineAssetRuntime::
|
||||
GetDirectionalShadowPlanningPolicyAssetKey() const {
|
||||
if (!SyncManagedAssetRuntimeState()) {
|
||||
return {};
|
||||
}
|
||||
|
||||
MonoObject* const assetObject = GetManagedAssetObject();
|
||||
if (assetObject == nullptr) {
|
||||
return {};
|
||||
}
|
||||
|
||||
MonoMethod* const method =
|
||||
ResolveGetDirectionalShadowPlanningPolicyAssetKeyMethod(
|
||||
assetObject);
|
||||
if (method == nullptr) {
|
||||
return {};
|
||||
}
|
||||
|
||||
MonoObject* managedKeyObject = nullptr;
|
||||
if (!m_runtime->InvokeManagedMethod(
|
||||
assetObject,
|
||||
method,
|
||||
nullptr,
|
||||
&managedKeyObject)) {
|
||||
return {};
|
||||
}
|
||||
|
||||
return MonoStringToUtf8(
|
||||
reinterpret_cast<MonoString*>(managedKeyObject));
|
||||
}
|
||||
|
||||
std::string MonoManagedRenderPipelineAssetRuntime::
|
||||
GetDirectionalShadowExecutionPolicyAssetKey() const {
|
||||
return GetDirectionalShadowExecutionPolicyAssetKey(-1);
|
||||
@@ -2357,6 +2409,7 @@ void MonoManagedRenderPipelineAssetRuntime::ReleaseManagedAsset() const {
|
||||
m_getRuntimeResourceVersionMethod = nullptr;
|
||||
m_getPipelineRendererAssetKeyMethod = nullptr;
|
||||
m_getPipelineRendererAssetKeyContextualMethod = nullptr;
|
||||
m_getDirectionalShadowPlanningPolicyAssetKeyMethod = nullptr;
|
||||
m_getDirectionalShadowExecutionPolicyAssetKeyMethod = nullptr;
|
||||
m_getDirectionalShadowExecutionPolicyAssetKeyContextualMethod =
|
||||
nullptr;
|
||||
@@ -2510,6 +2563,22 @@ MonoManagedRenderPipelineAssetRuntime::ResolveGetPipelineRendererAssetKeyContext
|
||||
return m_getPipelineRendererAssetKeyContextualMethod;
|
||||
}
|
||||
|
||||
MonoMethod*
|
||||
MonoManagedRenderPipelineAssetRuntime::
|
||||
ResolveGetDirectionalShadowPlanningPolicyAssetKeyMethod(
|
||||
MonoObject* assetObject) const {
|
||||
if (m_getDirectionalShadowPlanningPolicyAssetKeyMethod ==
|
||||
nullptr) {
|
||||
m_getDirectionalShadowPlanningPolicyAssetKeyMethod =
|
||||
m_runtime->ResolveManagedMethod(
|
||||
assetObject,
|
||||
"GetDirectionalShadowPlanningPolicyAssetKey",
|
||||
0);
|
||||
}
|
||||
|
||||
return m_getDirectionalShadowPlanningPolicyAssetKeyMethod;
|
||||
}
|
||||
|
||||
MonoMethod*
|
||||
MonoManagedRenderPipelineAssetRuntime::
|
||||
ResolveGetDirectionalShadowExecutionPolicyAssetKeyMethod(
|
||||
|
||||
Reference in New Issue
Block a user