test: close renderer phase boundary
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
#include "IViewportHostService.h"
|
||||
#include "ViewportHostRenderTargets.h"
|
||||
|
||||
#include <XCEngine/Core/Math/Color.h>
|
||||
#include <XCEngine/Rendering/Passes/BuiltinInfiniteGridPass.h>
|
||||
#include <XCEngine/Rendering/CameraRenderRequest.h>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace XCEngine {
|
||||
namespace Editor {
|
||||
@@ -112,6 +115,52 @@ inline ViewportRenderFallbackPolicy BuildGameViewportRenderFailurePolicy(
|
||||
return policy;
|
||||
}
|
||||
|
||||
struct SceneViewportBuiltinPostProcessBuildResult {
|
||||
Rendering::BuiltinPostProcessRequest request = {};
|
||||
const char* warningStatusText = nullptr;
|
||||
};
|
||||
|
||||
inline Rendering::Passes::InfiniteGridPassData BuildSceneViewportGridPassData(
|
||||
const SceneViewportOverlayData& overlay) {
|
||||
Rendering::Passes::InfiniteGridPassData data = {};
|
||||
data.valid = overlay.valid;
|
||||
data.cameraPosition = overlay.cameraPosition;
|
||||
data.cameraForward = overlay.cameraForward;
|
||||
data.cameraRight = overlay.cameraRight;
|
||||
data.cameraUp = overlay.cameraUp;
|
||||
data.verticalFovDegrees = overlay.verticalFovDegrees;
|
||||
data.nearClipPlane = overlay.nearClipPlane;
|
||||
data.farClipPlane = overlay.farClipPlane;
|
||||
data.orbitDistance = overlay.orbitDistance;
|
||||
return data;
|
||||
}
|
||||
|
||||
inline SceneViewportBuiltinPostProcessBuildResult BuildSceneViewportBuiltinPostProcess(
|
||||
const SceneViewportOverlayData& overlay,
|
||||
const std::vector<uint64_t>& selectedObjectIds,
|
||||
bool hasObjectIdShaderView,
|
||||
bool debugSelectionMask = false) {
|
||||
SceneViewportBuiltinPostProcessBuildResult result = {};
|
||||
if (!overlay.valid) {
|
||||
return result;
|
||||
}
|
||||
|
||||
result.request.gridPassData = BuildSceneViewportGridPassData(overlay);
|
||||
result.request.selectedObjectIds = selectedObjectIds;
|
||||
result.request.outlineStyle = {};
|
||||
result.request.outlineStyle.outlineColor = Math::Color(1.0f, 0.4f, 0.0f, 1.0f);
|
||||
result.request.outlineStyle.outlineWidthPixels = 2.0f;
|
||||
result.request.outlineStyle.debugSelectionMask = debugSelectionMask;
|
||||
|
||||
if (!selectedObjectIds.empty() &&
|
||||
!debugSelectionMask &&
|
||||
!hasObjectIdShaderView) {
|
||||
result.warningStatusText = "Scene object id shader view is unavailable";
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
inline void ApplySceneViewportRenderRequestSetup(
|
||||
const ViewportRenderTargets& targets,
|
||||
const Rendering::BuiltinPostProcessRequest* builtinPostProcess,
|
||||
|
||||
Reference in New Issue
Block a user