Organize rendering frame data and picking headers

This commit is contained in:
2026-04-05 21:23:29 +08:00
parent ba6c8eaae5
commit 05debc0499
16 changed files with 113 additions and 93 deletions

View File

@@ -5,7 +5,7 @@
#include <XCEngine/RHI/RHICommandQueue.h>
#include <XCEngine/RHI/RHIEnums.h>
#include <XCEngine/RHI/RHITexture.h>
#include <XCEngine/Rendering/ObjectIdEncoding.h>
#include <XCEngine/Rendering/Picking/ObjectIdCodec.h>
#include <XCEngine/UI/Types.h>
#include <array>

View File

@@ -428,13 +428,15 @@ add_library(XCEngine STATIC
# Rendering
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/RenderContext.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/RenderCameraData.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/CameraRenderRequest.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/VisibleRenderItem.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/BuiltinPassTypes.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/BuiltinPassMetadataUtils.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/BuiltinPassLayoutUtils.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/BuiltinPassContract.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/FrameData/RenderCameraData.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/FrameData/RenderSceneData.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/FrameData/VisibleRenderItem.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/Picking/ObjectIdCodec.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/RenderMaterialResolve.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/RenderMaterialStateUtils.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/RenderSceneUtility.h
@@ -446,7 +448,6 @@ add_library(XCEngine STATIC
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/RenderResourceCache.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/CameraRenderer.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/DirectionalShadowSurfaceCache.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/ObjectIdEncoding.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/SceneRenderRequestPlanner.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/SceneRenderRequestUtils.h
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/SceneRenderer.h

View File

@@ -1,8 +1,8 @@
#pragma once
#include <XCEngine/Rendering/RenderPass.h>
#include <XCEngine/Rendering/RenderCameraData.h>
#include <XCEngine/Rendering/FrameData/RenderCameraData.h>
#include <XCEngine/Rendering/RenderContext.h>
#include <XCEngine/Rendering/RenderPass.h>
#include <XCEngine/Rendering/RenderSurface.h>
namespace XCEngine {

View File

@@ -0,0 +1,93 @@
#pragma once
#include <XCEngine/Core/Math/Vector3.h>
#include <XCEngine/Core/Math/Vector4.h>
#include <XCEngine/Rendering/FrameData/RenderCameraData.h>
#include <XCEngine/Rendering/FrameData/VisibleRenderItem.h>
#include <array>
#include <cstdint>
#include <vector>
namespace XCEngine {
namespace Components {
class CameraComponent;
} // namespace Components
namespace RHI {
class RHIResourceView;
} // namespace RHI
namespace Rendering {
struct RenderDirectionalLightData {
bool enabled = false;
bool castsShadows = false;
Math::Vector3 direction = Math::Vector3::Back();
float intensity = 1.0f;
Math::Color color = Math::Color::White();
};
enum class RenderLightType : uint32_t {
Directional = 0,
Point = 1,
Spot = 2
};
struct RenderAdditionalLightData {
RenderLightType type = RenderLightType::Point;
bool enabled = false;
bool castsShadows = false;
Math::Color color = Math::Color::White();
float intensity = 1.0f;
Math::Vector3 position = Math::Vector3::Zero();
Math::Vector3 direction = Math::Vector3::Back();
float range = 0.0f;
float spotAngle = 0.0f;
};
struct RenderDirectionalShadowData {
bool enabled = false;
Math::Matrix4x4 viewProjection = Math::Matrix4x4::Identity();
Math::Vector4 shadowParams = Math::Vector4::Zero();
RHI::RHIResourceView* shadowMap = nullptr;
bool IsValid() const {
return enabled && shadowMap != nullptr;
}
};
struct RenderLightingData {
static constexpr uint32_t kMaxAdditionalLightCount = 8u;
RenderDirectionalLightData mainDirectionalLight;
RenderDirectionalShadowData mainDirectionalShadow;
std::array<RenderAdditionalLightData, kMaxAdditionalLightCount> additionalLights = {};
uint32_t additionalLightCount = 0u;
bool HasMainDirectionalLight() const {
return mainDirectionalLight.enabled;
}
bool HasMainDirectionalShadow() const {
return mainDirectionalShadow.IsValid();
}
bool HasAdditionalLights() const {
return additionalLightCount > 0u;
}
};
struct RenderSceneData {
Components::CameraComponent* camera = nullptr;
RenderCameraData cameraData;
RenderLightingData lighting;
std::vector<VisibleRenderItem> visibleItems;
bool HasCamera() const {
return camera != nullptr;
}
};
} // namespace Rendering
} // namespace XCEngine

View File

@@ -1,11 +1,11 @@
#pragma once
#include <XCEngine/Core/Asset/ResourceManager.h>
#include <XCEngine/Core/Math/Matrix4.h>
#include <XCEngine/Rendering/BuiltinPassTypes.h>
#include <XCEngine/Rendering/ObjectIdEncoding.h>
#include <XCEngine/Rendering/Picking/ObjectIdCodec.h>
#include <XCEngine/Rendering/RenderPass.h>
#include <XCEngine/Rendering/RenderResourceCache.h>
#include <XCEngine/Core/Asset/ResourceManager.h>
#include <XCEngine/RHI/RHIPipelineState.h>
#include <XCEngine/Resources/Shader/Shader.h>

View File

@@ -1,7 +1,7 @@
#pragma once
#include <XCEngine/Core/Types.h>
#include <XCEngine/Core/Math/Vector4.h>
#include <XCEngine/Core/Types.h>
namespace XCEngine {
namespace Rendering {

View File

@@ -5,7 +5,7 @@
#include <XCEngine/Resources/Material/Material.h>
#include <XCEngine/Resources/Mesh/Mesh.h>
#include <XCEngine/Rendering/BuiltinPassMetadataUtils.h>
#include <XCEngine/Rendering/VisibleRenderItem.h>
#include <XCEngine/Rendering/FrameData/VisibleRenderItem.h>
#include <cstddef>

View File

@@ -1,7 +1,7 @@
#pragma once
#include <XCEngine/Rendering/FrameData/RenderSceneData.h>
#include <XCEngine/Rendering/RenderContext.h>
#include <XCEngine/Rendering/RenderSceneExtractor.h>
namespace XCEngine {
namespace Rendering {

View File

@@ -1,11 +1,8 @@
#pragma once
#include <XCEngine/Core/Math/Vector4.h>
#include <XCEngine/Core/Math/Vector3.h>
#include <XCEngine/Rendering/RenderCameraData.h>
#include <XCEngine/Rendering/VisibleRenderItem.h>
#include <XCEngine/Rendering/FrameData/RenderSceneData.h>
#include <array>
#include <cstdint>
#include <vector>
@@ -16,79 +13,8 @@ class GameObject;
class Scene;
} // namespace Components
namespace RHI {
class RHIResourceView;
} // namespace RHI
namespace Rendering {
struct RenderDirectionalLightData {
bool enabled = false;
bool castsShadows = false;
Math::Vector3 direction = Math::Vector3::Back();
float intensity = 1.0f;
Math::Color color = Math::Color::White();
};
enum class RenderLightType : uint32_t {
Directional = 0,
Point = 1,
Spot = 2
};
struct RenderAdditionalLightData {
RenderLightType type = RenderLightType::Point;
bool enabled = false;
bool castsShadows = false;
Math::Color color = Math::Color::White();
float intensity = 1.0f;
Math::Vector3 position = Math::Vector3::Zero();
Math::Vector3 direction = Math::Vector3::Back();
float range = 0.0f;
float spotAngle = 0.0f;
};
struct RenderDirectionalShadowData {
bool enabled = false;
Math::Matrix4x4 viewProjection = Math::Matrix4x4::Identity();
Math::Vector4 shadowParams = Math::Vector4::Zero();
RHI::RHIResourceView* shadowMap = nullptr;
bool IsValid() const {
return enabled && shadowMap != nullptr;
}
};
struct RenderLightingData {
static constexpr uint32_t kMaxAdditionalLightCount = 8u;
RenderDirectionalLightData mainDirectionalLight;
RenderDirectionalShadowData mainDirectionalShadow;
std::array<RenderAdditionalLightData, kMaxAdditionalLightCount> additionalLights = {};
uint32_t additionalLightCount = 0u;
bool HasMainDirectionalLight() const {
return mainDirectionalLight.enabled;
}
bool HasMainDirectionalShadow() const {
return mainDirectionalShadow.IsValid();
}
bool HasAdditionalLights() const {
return additionalLightCount > 0u;
}
};
struct RenderSceneData {
Components::CameraComponent* camera = nullptr;
RenderCameraData cameraData;
RenderLightingData lighting;
std::vector<VisibleRenderItem> visibleItems;
bool HasCamera() const { return camera != nullptr; }
};
class RenderSceneExtractor {
public:
RenderSceneData Extract(
@@ -115,7 +41,7 @@ private:
Components::GameObject* gameObject,
const Math::Vector3& cameraPosition,
uint32_t cullingMask,
std::vector<VisibleRenderItem>& visibleItems) const;
std::vector<VisibleRenderItem>& outVisibleItems) const;
};
} // namespace Rendering

View File

@@ -1,8 +1,8 @@
#pragma once
#include <XCEngine/Core/Math/Vector3.h>
#include <XCEngine/Rendering/RenderCameraData.h>
#include <XCEngine/Rendering/VisibleRenderItem.h>
#include <XCEngine/Rendering/FrameData/RenderCameraData.h>
#include <XCEngine/Rendering/FrameData/VisibleRenderItem.h>
#include <cstdint>
#include <vector>

View File

@@ -2,7 +2,7 @@
#include "Core/Asset/ResourceManager.h"
#include "Debug/Logger.h"
#include "Rendering/ObjectIdEncoding.h"
#include "Rendering/Picking/ObjectIdCodec.h"
#include "Rendering/Detail/ShaderVariantUtils.h"
#include "RHI/RHICommandList.h"
#include "RHI/RHIDevice.h"

View File

@@ -1,7 +1,7 @@
#include "Rendering/Passes/BuiltinShadowCasterPass.h"
#include "Components/MeshRendererComponent.h"
#include "Rendering/VisibleRenderItem.h"
#include "Rendering/FrameData/VisibleRenderItem.h"
#include "Resources/BuiltinResources.h"
namespace XCEngine {

View File

@@ -14,7 +14,7 @@
#include <XCEngine/Debug/Logger.h>
#include <XCEngine/Rendering/CameraRenderRequest.h>
#include <XCEngine/Rendering/CameraRenderer.h>
#include <XCEngine/Rendering/ObjectIdEncoding.h>
#include <XCEngine/Rendering/Picking/ObjectIdCodec.h>
#include <XCEngine/Rendering/RenderContext.h>
#include <XCEngine/Rendering/RenderSurface.h>
#include <XCEngine/Resources/BuiltinResources.h>

View File

@@ -1,6 +1,6 @@
#include <gtest/gtest.h>
#include <XCEngine/Rendering/ObjectIdEncoding.h>
#include <XCEngine/Rendering/Picking/ObjectIdCodec.h>
using namespace XCEngine::Rendering;