refactor(srp): add renderer backend registry seam
This commit is contained in:
@@ -45,6 +45,8 @@
|
||||
#include <XCEngine/Scripting/ScriptComponent.h>
|
||||
#include <XCEngine/Scripting/ScriptEngine.h>
|
||||
|
||||
#include "Rendering/Internal/RenderPipelineFactory.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <cstdint>
|
||||
@@ -75,6 +77,40 @@ void ExpectVector4Near(const XCEngine::Math::Vector4& actual, const XCEngine::Ma
|
||||
EXPECT_NEAR(actual.w, expected.w, tolerance);
|
||||
}
|
||||
|
||||
std::shared_ptr<const XCEngine::Rendering::RenderPipelineAsset>
|
||||
CreateBuiltinForwardPipelineRendererAssetForTest() {
|
||||
return std::make_shared<
|
||||
XCEngine::Rendering::Pipelines::BuiltinForwardPipelineAsset>();
|
||||
}
|
||||
|
||||
class ScopedPipelineRendererAssetFactoryRegistration final {
|
||||
public:
|
||||
ScopedPipelineRendererAssetFactoryRegistration(
|
||||
std::string key,
|
||||
XCEngine::Rendering::Internal::PipelineRendererAssetFactory factory)
|
||||
: m_key(std::move(key))
|
||||
, m_registered(
|
||||
XCEngine::Rendering::Internal::RegisterPipelineRendererAssetFactory(
|
||||
m_key,
|
||||
std::move(factory))) {
|
||||
}
|
||||
|
||||
~ScopedPipelineRendererAssetFactoryRegistration() {
|
||||
if (m_registered) {
|
||||
(void)XCEngine::Rendering::Internal::
|
||||
UnregisterPipelineRendererAssetFactory(m_key);
|
||||
}
|
||||
}
|
||||
|
||||
bool IsRegistered() const {
|
||||
return m_registered;
|
||||
}
|
||||
|
||||
private:
|
||||
std::string m_key;
|
||||
bool m_registered = false;
|
||||
};
|
||||
|
||||
class CapturingLogSink final : public XCEngine::Debug::ILogSink {
|
||||
public:
|
||||
void Log(const XCEngine::Debug::LogEntry& entry) override {
|
||||
@@ -2950,6 +2986,42 @@ TEST_F(
|
||||
nullptr);
|
||||
}
|
||||
|
||||
TEST_F(
|
||||
MonoScriptRuntimeTest,
|
||||
ManagedRenderPipelineBridgeResolvesRegisteredAliasBackendKey) {
|
||||
ScopedPipelineRendererAssetFactoryRegistration registration(
|
||||
"BuiltinForwardAlias",
|
||||
&CreateBuiltinForwardPipelineRendererAssetForTest);
|
||||
ASSERT_TRUE(registration.IsRegistered());
|
||||
|
||||
const auto bridge =
|
||||
XCEngine::Rendering::Pipelines::GetManagedRenderPipelineBridge();
|
||||
ASSERT_NE(bridge, nullptr);
|
||||
|
||||
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor
|
||||
descriptor = {
|
||||
"GameScripts",
|
||||
"Gameplay",
|
||||
"ManagedBuiltinForwardAliasRenderPipelineProbeAsset"
|
||||
};
|
||||
|
||||
std::shared_ptr<const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetRuntime>
|
||||
assetRuntime = bridge->CreateAssetRuntime(descriptor);
|
||||
ASSERT_NE(assetRuntime, nullptr);
|
||||
|
||||
const std::shared_ptr<const XCEngine::Rendering::RenderPipelineAsset>
|
||||
rendererAsset = assetRuntime->GetPipelineRendererAsset();
|
||||
ASSERT_NE(rendererAsset, nullptr);
|
||||
|
||||
std::unique_ptr<XCEngine::Rendering::RenderPipeline> pipeline =
|
||||
rendererAsset->CreatePipeline();
|
||||
ASSERT_NE(pipeline, nullptr);
|
||||
EXPECT_NE(
|
||||
dynamic_cast<XCEngine::Rendering::Pipelines::BuiltinForwardPipeline*>(
|
||||
pipeline.get()),
|
||||
nullptr);
|
||||
}
|
||||
|
||||
TEST_F(
|
||||
MonoScriptRuntimeTest,
|
||||
ManagedRenderPipelineBridgeUsesDefaultRendererSelectionForNativeBackendAsset) {
|
||||
|
||||
Reference in New Issue
Block a user