refactor(srp): signal managed camera frame baseline directly

This commit is contained in:
2026-04-21 13:36:09 +08:00
parent 042de39fb1
commit 2426777cf7
8 changed files with 198 additions and 58 deletions

View File

@@ -1370,6 +1370,9 @@ public:
override;
std::string GetCameraFramePlanPolicyAssetKey(
int32_t rendererIndex) const override;
bool UsesNativeCameraFramePlanBaseline() const override;
bool UsesNativeCameraFramePlanBaseline(
int32_t rendererIndex) const override;
std::string GetRenderSceneSetupPolicyAssetKey() const
override;
std::string GetRenderSceneSetupPolicyAssetKey(
@@ -1423,6 +1426,10 @@ private:
MonoObject* assetObject) const;
MonoMethod* ResolveGetCameraFramePlanPolicyAssetKeyContextualMethod(
MonoObject* assetObject) const;
MonoMethod* ResolveUsesNativeCameraFramePlanBaselineMethod(
MonoObject* assetObject) const;
MonoMethod* ResolveUsesNativeCameraFramePlanBaselineContextualMethod(
MonoObject* assetObject) const;
MonoMethod* ResolveGetRenderSceneSetupPolicyAssetKeyMethod(
MonoObject* assetObject) const;
MonoMethod* ResolveGetRenderSceneSetupPolicyAssetKeyContextualMethod(
@@ -1460,6 +1467,11 @@ private:
mutable MonoMethod*
m_getCameraFramePlanPolicyAssetKeyContextualMethod =
nullptr;
mutable MonoMethod* m_usesNativeCameraFramePlanBaselineMethod =
nullptr;
mutable MonoMethod*
m_usesNativeCameraFramePlanBaselineContextualMethod =
nullptr;
mutable MonoMethod* m_getRenderSceneSetupPolicyAssetKeyMethod =
nullptr;
mutable MonoMethod*
@@ -2178,6 +2190,66 @@ std::string MonoManagedRenderPipelineAssetRuntime::
reinterpret_cast<MonoString*>(managedKeyObject));
}
bool MonoManagedRenderPipelineAssetRuntime::UsesNativeCameraFramePlanBaseline()
const {
return UsesNativeCameraFramePlanBaseline(-1);
}
bool MonoManagedRenderPipelineAssetRuntime::UsesNativeCameraFramePlanBaseline(
int32_t rendererIndex) const {
if (!SyncManagedAssetRuntimeState()) {
return false;
}
MonoObject* const assetObject = GetManagedAssetObject();
if (assetObject == nullptr) {
return false;
}
MonoMethod* const contextualMethod =
ResolveUsesNativeCameraFramePlanBaselineContextualMethod(
assetObject);
if (contextualMethod != nullptr) {
void* args[1] = { &rendererIndex };
MonoObject* managedValueObject = nullptr;
if (!m_runtime->InvokeManagedMethod(
assetObject,
contextualMethod,
args,
&managedValueObject)) {
return false;
}
bool usesBaseline = false;
return TryUnboxManagedBoolean(
managedValueObject,
usesBaseline) &&
usesBaseline;
}
MonoMethod* const method =
ResolveUsesNativeCameraFramePlanBaselineMethod(
assetObject);
if (method == nullptr) {
return false;
}
MonoObject* managedValueObject = nullptr;
if (!m_runtime->InvokeManagedMethod(
assetObject,
method,
nullptr,
&managedValueObject)) {
return false;
}
bool usesBaseline = false;
return TryUnboxManagedBoolean(
managedValueObject,
usesBaseline) &&
usesBaseline;
}
std::string MonoManagedRenderPipelineAssetRuntime::
GetRenderSceneSetupPolicyAssetKey() const {
return GetRenderSceneSetupPolicyAssetKey(-1);
@@ -2594,6 +2666,8 @@ void MonoManagedRenderPipelineAssetRuntime::ReleaseManagedAsset() const {
m_getPipelineRendererAssetKeyContextualMethod = nullptr;
m_getCameraFramePlanPolicyAssetKeyMethod = nullptr;
m_getCameraFramePlanPolicyAssetKeyContextualMethod = nullptr;
m_usesNativeCameraFramePlanBaselineMethod = nullptr;
m_usesNativeCameraFramePlanBaselineContextualMethod = nullptr;
m_getRenderSceneSetupPolicyAssetKeyMethod = nullptr;
m_getRenderSceneSetupPolicyAssetKeyContextualMethod = nullptr;
m_getDirectionalShadowPlanningPolicyAssetKeyMethod = nullptr;
@@ -2781,6 +2855,37 @@ MonoManagedRenderPipelineAssetRuntime::
return m_getCameraFramePlanPolicyAssetKeyContextualMethod;
}
MonoMethod*
MonoManagedRenderPipelineAssetRuntime::
ResolveUsesNativeCameraFramePlanBaselineMethod(
MonoObject* assetObject) const {
if (m_usesNativeCameraFramePlanBaselineMethod == nullptr) {
m_usesNativeCameraFramePlanBaselineMethod =
m_runtime->ResolveManagedMethod(
assetObject,
"UsesNativeCameraFramePlanBaseline",
0);
}
return m_usesNativeCameraFramePlanBaselineMethod;
}
MonoMethod*
MonoManagedRenderPipelineAssetRuntime::
ResolveUsesNativeCameraFramePlanBaselineContextualMethod(
MonoObject* assetObject) const {
if (m_usesNativeCameraFramePlanBaselineContextualMethod ==
nullptr) {
m_usesNativeCameraFramePlanBaselineContextualMethod =
m_runtime->ResolveManagedMethod(
assetObject,
"UsesNativeCameraFramePlanBaselineContextual",
1);
}
return m_usesNativeCameraFramePlanBaselineContextualMethod;
}
MonoMethod*
MonoManagedRenderPipelineAssetRuntime::
ResolveGetRenderSceneSetupPolicyAssetKeyMethod(