Organize rendering frame data and picking headers
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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 {
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <XCEngine/Rendering/ObjectIdEncoding.h>
|
||||
#include <XCEngine/Rendering/Picking/ObjectIdCodec.h>
|
||||
|
||||
using namespace XCEngine::Rendering;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user