refactor(srp): move camera frame plan policy into managed urp

This commit is contained in:
2026-04-21 12:22:37 +08:00
parent 793027df23
commit abc300fe03
10 changed files with 372 additions and 2 deletions

View File

@@ -1319,6 +1319,10 @@ public:
GetPipelineRendererAsset() const override;
std::shared_ptr<const Rendering::RenderPipelineAsset>
GetPipelineRendererAsset(int32_t rendererIndex) const override;
std::string GetCameraFramePlanPolicyAssetKey() const
override;
std::string GetCameraFramePlanPolicyAssetKey(
int32_t rendererIndex) const override;
std::string GetRenderSceneSetupPolicyAssetKey() const
override;
std::string GetRenderSceneSetupPolicyAssetKey(
@@ -1368,6 +1372,10 @@ private:
MonoObject* assetObject) const;
MonoMethod* ResolveGetPipelineRendererAssetKeyContextualMethod(
MonoObject* assetObject) const;
MonoMethod* ResolveGetCameraFramePlanPolicyAssetKeyMethod(
MonoObject* assetObject) const;
MonoMethod* ResolveGetCameraFramePlanPolicyAssetKeyContextualMethod(
MonoObject* assetObject) const;
MonoMethod* ResolveGetRenderSceneSetupPolicyAssetKeyMethod(
MonoObject* assetObject) const;
MonoMethod* ResolveGetRenderSceneSetupPolicyAssetKeyContextualMethod(
@@ -1400,6 +1408,11 @@ private:
mutable MonoMethod* m_getPipelineRendererAssetKeyMethod = nullptr;
mutable MonoMethod* m_getPipelineRendererAssetKeyContextualMethod =
nullptr;
mutable MonoMethod* m_getCameraFramePlanPolicyAssetKeyMethod =
nullptr;
mutable MonoMethod*
m_getCameraFramePlanPolicyAssetKeyContextualMethod =
nullptr;
mutable MonoMethod* m_getRenderSceneSetupPolicyAssetKeyMethod =
nullptr;
mutable MonoMethod*
@@ -2063,6 +2076,61 @@ MonoManagedRenderPipelineAssetRuntime::GetPipelineRendererAsset(
return m_pipelineRendererAsset;
}
std::string MonoManagedRenderPipelineAssetRuntime::
GetCameraFramePlanPolicyAssetKey() const {
return GetCameraFramePlanPolicyAssetKey(-1);
}
std::string MonoManagedRenderPipelineAssetRuntime::
GetCameraFramePlanPolicyAssetKey(
int32_t rendererIndex) const {
if (!SyncManagedAssetRuntimeState()) {
return {};
}
MonoObject* const assetObject = GetManagedAssetObject();
if (assetObject == nullptr) {
return {};
}
MonoMethod* const contextualMethod =
ResolveGetCameraFramePlanPolicyAssetKeyContextualMethod(
assetObject);
if (contextualMethod != nullptr) {
void* args[1] = { &rendererIndex };
MonoObject* managedKeyObject = nullptr;
if (!m_runtime->InvokeManagedMethod(
assetObject,
contextualMethod,
args,
&managedKeyObject)) {
return {};
}
return MonoStringToUtf8(
reinterpret_cast<MonoString*>(managedKeyObject));
}
MonoMethod* const method =
ResolveGetCameraFramePlanPolicyAssetKeyMethod(
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::
GetRenderSceneSetupPolicyAssetKey() const {
return GetRenderSceneSetupPolicyAssetKey(-1);
@@ -2477,6 +2545,8 @@ void MonoManagedRenderPipelineAssetRuntime::ReleaseManagedAsset() const {
m_getRuntimeResourceVersionMethod = nullptr;
m_getPipelineRendererAssetKeyMethod = nullptr;
m_getPipelineRendererAssetKeyContextualMethod = nullptr;
m_getCameraFramePlanPolicyAssetKeyMethod = nullptr;
m_getCameraFramePlanPolicyAssetKeyContextualMethod = nullptr;
m_getRenderSceneSetupPolicyAssetKeyMethod = nullptr;
m_getRenderSceneSetupPolicyAssetKeyContextualMethod = nullptr;
m_getDirectionalShadowPlanningPolicyAssetKeyMethod = nullptr;
@@ -2633,6 +2703,37 @@ MonoManagedRenderPipelineAssetRuntime::ResolveGetPipelineRendererAssetKeyContext
return m_getPipelineRendererAssetKeyContextualMethod;
}
MonoMethod*
MonoManagedRenderPipelineAssetRuntime::
ResolveGetCameraFramePlanPolicyAssetKeyMethod(
MonoObject* assetObject) const {
if (m_getCameraFramePlanPolicyAssetKeyMethod == nullptr) {
m_getCameraFramePlanPolicyAssetKeyMethod =
m_runtime->ResolveManagedMethod(
assetObject,
"GetCameraFramePlanPolicyAssetKey",
0);
}
return m_getCameraFramePlanPolicyAssetKeyMethod;
}
MonoMethod*
MonoManagedRenderPipelineAssetRuntime::
ResolveGetCameraFramePlanPolicyAssetKeyContextualMethod(
MonoObject* assetObject) const {
if (m_getCameraFramePlanPolicyAssetKeyContextualMethod ==
nullptr) {
m_getCameraFramePlanPolicyAssetKeyContextualMethod =
m_runtime->ResolveManagedMethod(
assetObject,
"GetCameraFramePlanPolicyAssetKeyContextual",
1);
}
return m_getCameraFramePlanPolicyAssetKeyContextualMethod;
}
MonoMethod*
MonoManagedRenderPipelineAssetRuntime::
ResolveGetRenderSceneSetupPolicyAssetKeyMethod(