feat(rendering): add managed camera request planning seam

This commit is contained in:
2026-04-18 00:07:13 +08:00
parent fa9a5ffb00
commit a6c78af54c
11 changed files with 514 additions and 1 deletions

View File

@@ -20,6 +20,7 @@
#include <XCEngine/Rendering/Execution/CameraFrameRenderGraphFrameData.h>
#include <XCEngine/Rendering/Graph/RenderGraph.h>
#include <XCEngine/Rendering/Graph/RenderGraphCompiler.h>
#include <XCEngine/Rendering/Planning/SceneRenderRequestPlanner.h>
#include <XCEngine/Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.h>
#include <XCEngine/Rendering/RenderSurface.h>
#include <XCEngine/Scene/Scene.h>
@@ -577,6 +578,53 @@ TEST_F(
EXPECT_TRUE(plan.IsFinalOutputStageValid());
}
TEST_F(
MonoScriptRuntimeTest,
ManagedRenderPipelineAssetConfiguresCameraRequestsThroughRequestContext) {
Scene* runtimeScene = CreateScene("ManagedRenderPipelineCameraRequestScene");
GameObject* cameraObject = runtimeScene->CreateGameObject("Camera");
auto* camera = cameraObject->AddComponent<CameraComponent>();
camera->SetPrimary(true);
GameObject* lightObject = runtimeScene->CreateGameObject("Light");
auto* light = lightObject->AddComponent<LightComponent>();
light->SetLightType(LightType::Directional);
light->SetCastsShadows(true);
XCEngine::Rendering::CameraRenderRequest baselineRequest = {};
baselineRequest.scene = runtimeScene;
baselineRequest.camera = camera;
baselineRequest.surface = XCEngine::Rendering::RenderSurface(64u, 64u);
XCEngine::Rendering::ApplyDefaultRenderPipelineAssetCameraRenderRequestPolicy(
baselineRequest,
0u,
0u,
XCEngine::Rendering::DirectionalShadowPlanningSettings{});
ASSERT_TRUE(baselineRequest.directionalShadow.IsValid());
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor descriptor = {
"GameScripts",
"Gameplay",
"ManagedCameraRequestConfiguredRenderPipelineProbeAsset"
};
XCEngine::Rendering::Pipelines::ManagedScriptableRenderPipelineAsset asset(
descriptor);
XCEngine::Rendering::CameraRenderRequest request = {};
request.scene = runtimeScene;
request.camera = camera;
request.surface = XCEngine::Rendering::RenderSurface(64u, 64u);
asset.ConfigureCameraRenderRequest(
request,
0u,
0u,
XCEngine::Rendering::DirectionalShadowPlanningSettings{});
EXPECT_FALSE(request.directionalShadow.IsValid());
}
TEST_F(MonoScriptRuntimeTest, ClassFieldDefaultValueQueryReturnsNullComponentReferences) {
std::vector<ScriptFieldDefaultValue> fields;