feat(srp): add descriptor-driven object draw authoring
- bridge renderer list descriptors into ScriptableRenderContext scene draw calls - reuse DrawObjectsPass across Universal and project custom renderers - add RenderObjectsRendererFeature for package-level object draw extension
This commit is contained in:
@@ -929,6 +929,39 @@ static_assert(
|
||||
sizeof(Rendering::RenderGraphTextureDesc),
|
||||
"Managed render graph texture desc bridge layout must match native RenderGraphTextureDesc.");
|
||||
|
||||
struct ManagedFilteringSettingsData {
|
||||
int32_t renderQueueMin = std::numeric_limits<int32_t>::lowest();
|
||||
int32_t renderQueueMax = std::numeric_limits<int32_t>::max();
|
||||
uint8_t requireShadowCasting = 0u;
|
||||
uint8_t requireRenderObjectId = 0u;
|
||||
uint8_t padding[2] = {};
|
||||
};
|
||||
|
||||
static_assert(
|
||||
sizeof(ManagedFilteringSettingsData) ==
|
||||
sizeof(Rendering::FilteringSettings),
|
||||
"Managed filtering settings bridge layout must match native FilteringSettings.");
|
||||
|
||||
struct ManagedSortingSettingsData {
|
||||
uint32_t sortMode = 0u;
|
||||
};
|
||||
|
||||
static_assert(
|
||||
sizeof(ManagedSortingSettingsData) ==
|
||||
sizeof(Rendering::SortingSettings),
|
||||
"Managed sorting settings bridge layout must match native SortingSettings.");
|
||||
|
||||
struct ManagedRendererListDescData {
|
||||
uint32_t type = 0u;
|
||||
ManagedFilteringSettingsData filtering = {};
|
||||
ManagedSortingSettingsData sorting = {};
|
||||
};
|
||||
|
||||
static_assert(
|
||||
sizeof(ManagedRendererListDescData) ==
|
||||
sizeof(Rendering::RendererListDesc),
|
||||
"Managed renderer list desc bridge layout must match native RendererListDesc.");
|
||||
|
||||
Rendering::FinalColorOutputTransferMode ResolveManagedFinalColorOutputTransferMode(
|
||||
uint8_t value) {
|
||||
switch (value) {
|
||||
@@ -4554,24 +4587,26 @@ InternalCall_Rendering_ScriptableRenderContext_RecordSceneInjectionPoint(
|
||||
}
|
||||
|
||||
mono_bool
|
||||
InternalCall_Rendering_ScriptableRenderContext_DrawRenderers(
|
||||
InternalCall_Rendering_ScriptableRenderContext_DrawRenderersByDesc(
|
||||
uint64_t nativeHandle,
|
||||
int32_t scenePhase,
|
||||
int32_t rendererListType) {
|
||||
ManagedRendererListDescData* rendererListDescData) {
|
||||
ManagedScriptableRenderContextState* const state =
|
||||
FindManagedScriptableRenderContextState(nativeHandle);
|
||||
if (state == nullptr ||
|
||||
state->graphContext == nullptr ||
|
||||
state->sceneRecorder == nullptr ||
|
||||
state->stage != Rendering::CameraFrameStage::MainScene) {
|
||||
state->stage != Rendering::CameraFrameStage::MainScene ||
|
||||
rendererListDescData == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
Rendering::DrawSettings drawSettings = {};
|
||||
drawSettings.scenePhase =
|
||||
static_cast<Rendering::ScenePhase>(scenePhase);
|
||||
drawSettings.rendererListType =
|
||||
static_cast<Rendering::RendererListType>(rendererListType);
|
||||
drawSettings.rendererListDesc =
|
||||
*reinterpret_cast<const Rendering::RendererListDesc*>(
|
||||
rendererListDescData);
|
||||
return state->sceneRecorder->RecordSceneDrawSettings(
|
||||
drawSettings)
|
||||
? 1
|
||||
@@ -4923,7 +4958,7 @@ void RegisterInternalCalls() {
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_GetFinalColorHasPipelineDefaults", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_GetFinalColorHasPipelineDefaults));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_GetFinalColorHasCameraOverrides", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_GetFinalColorHasCameraOverrides));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_RecordScenePhase", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_RecordScenePhase));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_DrawRenderers", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_DrawRenderers));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_DrawRenderersByDesc", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_DrawRenderersByDesc));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderContext_RecordSceneInjectionPoint", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderContext_RecordSceneInjectionPoint));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_IsStageRequested", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_IsStageRequested));
|
||||
mono_add_internal_call("XCEngine.InternalCalls::Rendering_ScriptableRenderPipelinePlanningContext_GetStageColorSource", reinterpret_cast<const void*>(&InternalCall_Rendering_ScriptableRenderPipelinePlanningContext_GetStageColorSource));
|
||||
|
||||
Reference in New Issue
Block a user