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

@@ -47,6 +47,8 @@ using CameraFrameStandalonePassRegistry =
std::unordered_map<std::string, CameraFrameStandalonePassFactory>;
using DirectionalShadowPlanningPolicyRegistry =
std::unordered_map<std::string, DirectionalShadowPlanningPolicy>;
using CameraFramePlanPolicyRegistry =
std::unordered_map<std::string, CameraFramePlanPolicy>;
using RenderSceneSetupPolicyRegistry =
std::unordered_map<std::string, RenderSceneSetupPolicy>;
using DirectionalShadowExecutionPolicyRegistry =
@@ -68,6 +70,12 @@ GetDirectionalShadowPlanningPolicyRegistry() {
return registry;
}
CameraFramePlanPolicyRegistry&
GetCameraFramePlanPolicyRegistry() {
static CameraFramePlanPolicyRegistry registry = {};
return registry;
}
RenderSceneSetupPolicyRegistry&
GetRenderSceneSetupPolicyRegistry() {
static RenderSceneSetupPolicyRegistry registry = {};
@@ -95,6 +103,11 @@ std::unordered_set<std::string>& GetBuiltinDirectionalShadowPlanningPolicyKeys()
return builtinKeys;
}
std::unordered_set<std::string>& GetBuiltinCameraFramePlanPolicyKeys() {
static std::unordered_set<std::string> builtinKeys = {};
return builtinKeys;
}
std::unordered_set<std::string>& GetBuiltinRenderSceneSetupPolicyKeys() {
static std::unordered_set<std::string> builtinKeys = {};
return builtinKeys;
@@ -121,6 +134,11 @@ std::mutex& GetDirectionalShadowPlanningPolicyRegistryMutex() {
return mutex;
}
std::mutex& GetCameraFramePlanPolicyRegistryMutex() {
static std::mutex mutex;
return mutex;
}
std::mutex& GetRenderSceneSetupPolicyRegistryMutex() {
static std::mutex mutex;
return mutex;
@@ -190,6 +208,25 @@ void EnsureBuiltinDirectionalShadowPlanningPolicyRegistryInitialized() {
(void)initialized;
}
void EnsureBuiltinCameraFramePlanPolicyRegistryInitialized() {
static const bool initialized = []() {
CameraFramePlanPolicyRegistry& registry =
GetCameraFramePlanPolicyRegistry();
registry.emplace(
"BuiltinDefaultCameraFramePlan",
[](CameraFramePlan& plan,
const FinalColorSettings& defaultFinalColorSettings) {
ApplyDefaultRenderPipelineAssetCameraFramePlanPolicy(
plan,
defaultFinalColorSettings);
});
GetBuiltinCameraFramePlanPolicyKeys().insert(
"BuiltinDefaultCameraFramePlan");
return true;
}();
(void)initialized;
}
void EnsureBuiltinRenderSceneSetupPolicyRegistryInitialized() {
static const bool initialized = []() {
RenderSceneSetupPolicyRegistry& registry =
@@ -454,6 +491,72 @@ bool ApplyDirectionalShadowPlanningPolicyByKey(
return true;
}
bool RegisterCameraFramePlanPolicy(
const std::string& key,
CameraFramePlanPolicy policy) {
if (key.empty() || !policy) {
return false;
}
EnsureBuiltinCameraFramePlanPolicyRegistryInitialized();
std::lock_guard<std::mutex> lock(
GetCameraFramePlanPolicyRegistryMutex());
CameraFramePlanPolicyRegistry& registry =
GetCameraFramePlanPolicyRegistry();
if (registry.find(key) != registry.end()) {
return false;
}
registry.emplace(key, std::move(policy));
return true;
}
bool UnregisterCameraFramePlanPolicy(
const std::string& key) {
if (key.empty()) {
return false;
}
EnsureBuiltinCameraFramePlanPolicyRegistryInitialized();
std::lock_guard<std::mutex> lock(
GetCameraFramePlanPolicyRegistryMutex());
if (GetBuiltinCameraFramePlanPolicyKeys().find(key) !=
GetBuiltinCameraFramePlanPolicyKeys().end()) {
return false;
}
CameraFramePlanPolicyRegistry& registry =
GetCameraFramePlanPolicyRegistry();
return registry.erase(key) != 0u;
}
bool ApplyCameraFramePlanPolicyByKey(
const std::string& key,
CameraFramePlan& plan,
const FinalColorSettings& defaultFinalColorSettings) {
if (key.empty()) {
return false;
}
EnsureBuiltinCameraFramePlanPolicyRegistryInitialized();
std::lock_guard<std::mutex> lock(
GetCameraFramePlanPolicyRegistryMutex());
const CameraFramePlanPolicyRegistry& registry =
GetCameraFramePlanPolicyRegistry();
const auto it = registry.find(key);
if (it == registry.end() || !it->second) {
return false;
}
it->second(
plan,
defaultFinalColorSettings);
return true;
}
bool RegisterRenderSceneSetupPolicy(
const std::string& key,
RenderSceneSetupPolicy policy) {