refactor(rendering): move old editor viewport passes out of engine

This commit is contained in:
2026-04-15 22:54:38 +08:00
parent dde03c5241
commit cd8ce5947c
12 changed files with 1192 additions and 1313 deletions

View File

@@ -1,77 +0,0 @@
#pragma once
#include <XCEngine/Core/Containers/String.h>
#include <XCEngine/Core/Math/Vector3.h>
#include <XCEngine/Core/Asset/ResourceHandle.h>
#include <XCEngine/Core/Asset/ResourceManager.h>
#include <XCEngine/Rendering/RenderContext.h>
#include <XCEngine/Rendering/RenderSurface.h>
#include <XCEngine/RHI/RHIDescriptorPool.h>
#include <XCEngine/RHI/RHIDescriptorSet.h>
#include <XCEngine/RHI/RHIEnums.h>
#include <XCEngine/RHI/RHIPipelineLayout.h>
#include <XCEngine/RHI/RHIPipelineState.h>
#include <XCEngine/Resources/Shader/Shader.h>
namespace XCEngine {
namespace Rendering {
namespace Passes {
struct InfiniteGridPassData {
bool valid = false;
Math::Vector3 cameraPosition = Math::Vector3::Zero();
Math::Vector3 cameraForward = Math::Vector3::Forward();
Math::Vector3 cameraRight = Math::Vector3::Right();
Math::Vector3 cameraUp = Math::Vector3::Up();
float verticalFovDegrees = 60.0f;
float nearClipPlane = 0.03f;
float farClipPlane = 2000.0f;
float orbitDistance = 6.0f;
};
struct InfiniteGridParameters {
bool valid = false;
float baseScale = 1.0f;
float transitionBlend = 0.0f;
float fadeDistance = 500.0f;
};
InfiniteGridParameters BuildInfiniteGridParameters(const InfiniteGridPassData& data);
class BuiltinInfiniteGridPass {
public:
explicit BuiltinInfiniteGridPass(Containers::String shaderPath = Containers::String());
~BuiltinInfiniteGridPass() = default;
void SetShaderPath(const Containers::String& shaderPath);
const Containers::String& GetShaderPath() const;
void Shutdown();
bool Render(
const RenderContext& renderContext,
const RenderSurface& surface,
const InfiniteGridPassData& data);
private:
bool EnsureInitialized(const RenderContext& renderContext, const RenderSurface& surface);
bool CreateResources(const RenderContext& renderContext, const RenderSurface& surface);
void DestroyResources();
RHI::RHIDevice* m_device = nullptr;
RHI::RHIType m_backendType = RHI::RHIType::D3D12;
RHI::RHIPipelineLayout* m_pipelineLayout = nullptr;
RHI::RHIPipelineState* m_pipelineState = nullptr;
RHI::RHIDescriptorPool* m_constantPool = nullptr;
RHI::RHIDescriptorSet* m_constantSet = nullptr;
Containers::String m_shaderPath;
Resources::ResourceHandle<Resources::Shader> m_builtinInfiniteGridShader;
RHI::Format m_renderTargetFormat = RHI::Format::Unknown;
RHI::Format m_depthStencilFormat = RHI::Format::Unknown;
uint32_t m_renderTargetSampleCount = 1u;
};
} // namespace Passes
} // namespace Rendering
} // namespace XCEngine

View File

@@ -1,41 +0,0 @@
#pragma once
#include <XCEngine/Rendering/Passes/BuiltinDepthStylePassBase.h>
#include <XCEngine/Rendering/Picking/ObjectIdCodec.h>
#include <cstdint>
#include <vector>
namespace XCEngine {
namespace Rendering {
struct RenderSceneData;
struct VisibleRenderItem;
namespace Passes {
class BuiltinSelectionMaskPass final : public BuiltinDepthStylePassBase {
public:
BuiltinSelectionMaskPass();
~BuiltinSelectionMaskPass() override = default;
static RHI::InputLayoutDesc BuildInputLayout();
const char* GetName() const override;
bool Render(
const RenderContext& context,
const RenderSurface& surface,
const RenderSceneData& sceneData,
const std::vector<uint64_t>& selectedObjectIds);
protected:
bool ShouldRenderVisibleItem(const VisibleRenderItem& visibleItem) const override;
private:
std::vector<RenderObjectId> m_selectedObjectIds = {};
};
} // namespace Passes
} // namespace Rendering
} // namespace XCEngine

View File

@@ -1,87 +0,0 @@
#pragma once
#include <XCEngine/Core/Asset/ResourceHandle.h>
#include <XCEngine/Core/Containers/String.h>
#include <XCEngine/Core/Math/Color.h>
#include <XCEngine/Core/Math/Vector4.h>
#include <XCEngine/Rendering/RenderContext.h>
#include <XCEngine/Rendering/RenderSurface.h>
#include <XCEngine/RHI/RHIDescriptorPool.h>
#include <XCEngine/RHI/RHIDescriptorSet.h>
#include <XCEngine/RHI/RHIEnums.h>
#include <XCEngine/RHI/RHIPipelineLayout.h>
#include <XCEngine/RHI/RHIPipelineState.h>
#include <XCEngine/RHI/RHIResourceView.h>
#include <XCEngine/Resources/Shader/Shader.h>
#include <optional>
namespace XCEngine {
namespace Rendering {
namespace Passes {
struct SelectionOutlineStyle {
Math::Color outlineColor = Math::Color(1.0f, 0.4f, 0.0f, 1.0f);
float outlineWidthPixels = 2.0f;
bool debugSelectionMask = false;
};
struct SelectionOutlinePassInputs {
RHI::RHIResourceView* selectionMaskTextureView = nullptr;
RHI::ResourceStates selectionMaskState = RHI::ResourceStates::PixelShaderResource;
RHI::RHIResourceView* depthTextureView = nullptr;
RHI::ResourceStates depthTextureState = RHI::ResourceStates::DepthWrite;
};
class BuiltinSelectionOutlinePass {
public:
explicit BuiltinSelectionOutlinePass(Containers::String shaderPath = Containers::String());
~BuiltinSelectionOutlinePass() = default;
BuiltinSelectionOutlinePass(const BuiltinSelectionOutlinePass&) = delete;
BuiltinSelectionOutlinePass& operator=(const BuiltinSelectionOutlinePass&) = delete;
BuiltinSelectionOutlinePass(BuiltinSelectionOutlinePass&&) = delete;
BuiltinSelectionOutlinePass& operator=(BuiltinSelectionOutlinePass&&) = delete;
void SetShaderPath(const Containers::String& shaderPath);
const Containers::String& GetShaderPath() const;
void Shutdown();
bool Render(
const RenderContext& renderContext,
const RenderSurface& surface,
const SelectionOutlinePassInputs& inputs,
const SelectionOutlineStyle& style = {});
private:
struct OutlineConstants {
Math::Vector4 viewportSizeAndTexelSize = Math::Vector4::Zero();
Math::Vector4 outlineColor = Math::Vector4::Zero();
Math::Vector4 outlineInfo = Math::Vector4::Zero();
Math::Vector4 depthParams = Math::Vector4::Zero();
};
bool EnsureInitialized(const RenderContext& renderContext, const RenderSurface& surface);
bool CreateResources(const RenderContext& renderContext, const RenderSurface& surface);
void DestroyResources();
bool HasCreatedResources() const;
void ResetState();
RHI::RHIDevice* m_device = nullptr;
RHI::RHIType m_backendType = RHI::RHIType::D3D12;
RHI::RHIPipelineLayout* m_pipelineLayout = nullptr;
RHI::RHIPipelineState* m_pipelineState = nullptr;
RHI::RHIDescriptorPool* m_constantPool = nullptr;
RHI::RHIDescriptorSet* m_constantSet = nullptr;
RHI::RHIDescriptorPool* m_texturePool = nullptr;
RHI::RHIDescriptorSet* m_textureSet = nullptr;
Containers::String m_shaderPath;
std::optional<Resources::ResourceHandle<Resources::Shader>> m_builtinSelectionOutlineShader;
RHI::Format m_renderTargetFormat = RHI::Format::Unknown;
uint32_t m_renderTargetSampleCount = 1u;
};
} // namespace Passes
} // namespace Rendering
} // namespace XCEngine