feat(rendering): add managed SRP renderer runtime

This commit is contained in:
2026-04-19 00:05:29 +08:00
parent a57b322bc7
commit b989edca91
50 changed files with 5732 additions and 171 deletions

View File

@@ -1,35 +1,13 @@
#include "Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.h"
#include "Rendering/GraphicsSettingsState.h"
#include <utility>
namespace XCEngine {
namespace Rendering {
namespace Pipelines {
namespace {
ManagedRenderPipelineAssetDescriptor& GetManagedRenderPipelineAssetDescriptorStorage() {
static ManagedRenderPipelineAssetDescriptor s_descriptor = {};
return s_descriptor;
}
std::shared_ptr<const ManagedRenderPipelineBridge>& GetManagedRenderPipelineBridgeStorage() {
static std::shared_ptr<const ManagedRenderPipelineBridge> s_bridge = nullptr;
return s_bridge;
}
size_t& GetManagedRenderPipelineBridgeGenerationStorage() {
static size_t s_generation = 1u;
return s_generation;
}
size_t& GetManagedRenderPipelineEnvironmentGenerationStorage() {
static size_t s_generation = 1u;
return s_generation;
}
} // namespace
ManagedScriptableRenderPipelineAsset::ManagedScriptableRenderPipelineAsset(
ManagedRenderPipelineAssetDescriptor descriptor)
: m_descriptor(std::move(descriptor)) {
@@ -37,8 +15,10 @@ ManagedScriptableRenderPipelineAsset::ManagedScriptableRenderPipelineAsset(
std::shared_ptr<const ManagedRenderPipelineAssetRuntime>
ManagedScriptableRenderPipelineAsset::ResolveManagedAssetRuntime() const {
const GraphicsSettingsState& graphicsSettings =
GetGraphicsSettingsState();
const size_t bridgeGeneration =
GetManagedRenderPipelineBridgeGenerationStorage();
graphicsSettings.GetManagedRenderPipelineBridgeGeneration();
if (m_managedAssetRuntime != nullptr &&
m_managedAssetRuntimeBridgeGeneration == bridgeGeneration) {
return m_managedAssetRuntime;
@@ -48,7 +28,7 @@ ManagedScriptableRenderPipelineAsset::ResolveManagedAssetRuntime() const {
m_managedAssetRuntimeBridgeGeneration = bridgeGeneration;
const std::shared_ptr<const ManagedRenderPipelineBridge> bridge =
GetManagedRenderPipelineBridgeStorage();
graphicsSettings.GetManagedRenderPipelineBridge();
if (bridge == nullptr) {
return nullptr;
}
@@ -121,45 +101,41 @@ void ManagedScriptableRenderPipelineAsset::ConfigureCameraFramePlan(
void SetManagedRenderPipelineBridge(
std::shared_ptr<const ManagedRenderPipelineBridge> bridge) {
GetManagedRenderPipelineBridgeStorage() = std::move(bridge);
++GetManagedRenderPipelineBridgeGenerationStorage();
++GetManagedRenderPipelineEnvironmentGenerationStorage();
GetGraphicsSettingsState().SetManagedRenderPipelineBridge(
std::move(bridge));
}
void ClearManagedRenderPipelineBridge() {
GetManagedRenderPipelineBridgeStorage().reset();
++GetManagedRenderPipelineBridgeGenerationStorage();
++GetManagedRenderPipelineEnvironmentGenerationStorage();
GetGraphicsSettingsState().ClearManagedRenderPipelineBridge();
}
std::shared_ptr<const ManagedRenderPipelineBridge>
GetManagedRenderPipelineBridge() {
return GetManagedRenderPipelineBridgeStorage();
return GetGraphicsSettingsState().GetManagedRenderPipelineBridge();
}
size_t GetManagedRenderPipelineEnvironmentGeneration() {
return GetManagedRenderPipelineEnvironmentGenerationStorage();
return GetGraphicsSettingsState().GetEnvironmentGeneration();
}
void SetManagedRenderPipelineAssetDescriptor(
const ManagedRenderPipelineAssetDescriptor& descriptor) {
GetManagedRenderPipelineAssetDescriptorStorage() = descriptor;
++GetManagedRenderPipelineEnvironmentGenerationStorage();
GetGraphicsSettingsState().SetRenderPipelineAssetDescriptor(
descriptor);
}
void ClearManagedRenderPipelineAssetDescriptor() {
GetManagedRenderPipelineAssetDescriptorStorage() = {};
++GetManagedRenderPipelineEnvironmentGenerationStorage();
GetGraphicsSettingsState().ClearRenderPipelineAssetDescriptor();
}
ManagedRenderPipelineAssetDescriptor GetManagedRenderPipelineAssetDescriptor() {
return GetManagedRenderPipelineAssetDescriptorStorage();
return GetGraphicsSettingsState().GetRenderPipelineAssetDescriptor();
}
std::shared_ptr<const RenderPipelineAsset>
CreateManagedOrDefaultScriptableRenderPipelineAsset() {
const ManagedRenderPipelineAssetDescriptor descriptor =
GetManagedRenderPipelineAssetDescriptor();
GetGraphicsSettingsState().GetRenderPipelineAssetDescriptor();
if (descriptor.IsValid()) {
return std::make_shared<ManagedScriptableRenderPipelineAsset>(descriptor);
}