feat(srp): add drawing settings override material seam

- add a managed DrawingSettings seam for scene draw authoring
- let builtin forward scene draws use an override material when provided
- wire DrawObjectsPass and RenderObjectsRendererFeature through the new settings
This commit is contained in:
2026-04-20 22:46:19 +08:00
parent fece3a84ad
commit 0319680954
12 changed files with 158 additions and 18 deletions

View File

@@ -24,6 +24,7 @@
#include "Rendering/RenderPassGraphContract.h"
#include "Rendering/RenderPipelineStageGraphContract.h"
#include "Resources/BuiltinResources.h"
#include "Core/Asset/ResourceManager.h"
#include "Scene/Scene.h"
#include "Scripting/ScriptComponent.h"
#include "Scripting/ScriptEngine.h"
@@ -4590,7 +4591,8 @@ mono_bool
InternalCall_Rendering_ScriptableRenderContext_DrawRenderersByDesc(
uint64_t nativeHandle,
int32_t scenePhase,
ManagedRendererListDescData* rendererListDescData) {
ManagedRendererListDescData* rendererListDescData,
MonoString* overrideMaterialPath) {
ManagedScriptableRenderContextState* const state =
FindManagedScriptableRenderContextState(nativeHandle);
if (state == nullptr ||
@@ -4607,6 +4609,23 @@ InternalCall_Rendering_ScriptableRenderContext_DrawRenderersByDesc(
drawSettings.rendererListDesc =
*reinterpret_cast<const Rendering::RendererListDesc*>(
rendererListDescData);
const std::string overrideMaterialPathUtf8 =
MonoStringToUtf8(overrideMaterialPath);
if (!overrideMaterialPathUtf8.empty()) {
drawSettings.overrideMaterial =
Resources::ResourceManager::Get().Load<Resources::Material>(
overrideMaterialPathUtf8.c_str());
if (!drawSettings.overrideMaterial.IsValid()) {
Debug::Logger::Get().Error(
Debug::LogCategory::Rendering,
(Containers::String(
"ScriptableRenderContext DrawRenderers failed to load override material: ") +
Containers::String(overrideMaterialPathUtf8.c_str()))
.CStr());
return 0;
}
}
return state->sceneRecorder->RecordSceneDrawSettings(
drawSettings)
? 1