feat(rendering): add managed SRP renderer runtime
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user