diff --git a/editor/src/Viewport/ViewportObjectIdPicker.h b/editor/src/Viewport/ViewportObjectIdPicker.h index 91eb08fa..5738856c 100644 --- a/editor/src/Viewport/ViewportObjectIdPicker.h +++ b/editor/src/Viewport/ViewportObjectIdPicker.h @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #include diff --git a/engine/CMakeLists.txt b/engine/CMakeLists.txt index 61d5630e..a68a3aa3 100644 --- a/engine/CMakeLists.txt +++ b/engine/CMakeLists.txt @@ -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 diff --git a/engine/include/XCEngine/Rendering/CameraRenderRequest.h b/engine/include/XCEngine/Rendering/CameraRenderRequest.h index 2a23ee5b..51865f1d 100644 --- a/engine/include/XCEngine/Rendering/CameraRenderRequest.h +++ b/engine/include/XCEngine/Rendering/CameraRenderRequest.h @@ -1,8 +1,8 @@ #pragma once -#include -#include +#include #include +#include #include namespace XCEngine { diff --git a/engine/include/XCEngine/Rendering/RenderCameraData.h b/engine/include/XCEngine/Rendering/FrameData/RenderCameraData.h similarity index 100% rename from engine/include/XCEngine/Rendering/RenderCameraData.h rename to engine/include/XCEngine/Rendering/FrameData/RenderCameraData.h diff --git a/engine/include/XCEngine/Rendering/FrameData/RenderSceneData.h b/engine/include/XCEngine/Rendering/FrameData/RenderSceneData.h new file mode 100644 index 00000000..f4bda21e --- /dev/null +++ b/engine/include/XCEngine/Rendering/FrameData/RenderSceneData.h @@ -0,0 +1,93 @@ +#pragma once + +#include +#include +#include +#include + +#include +#include +#include + +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 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 visibleItems; + + bool HasCamera() const { + return camera != nullptr; + } +}; + +} // namespace Rendering +} // namespace XCEngine diff --git a/engine/include/XCEngine/Rendering/VisibleRenderItem.h b/engine/include/XCEngine/Rendering/FrameData/VisibleRenderItem.h similarity index 100% rename from engine/include/XCEngine/Rendering/VisibleRenderItem.h rename to engine/include/XCEngine/Rendering/FrameData/VisibleRenderItem.h diff --git a/engine/include/XCEngine/Rendering/Passes/BuiltinObjectIdPass.h b/engine/include/XCEngine/Rendering/Passes/BuiltinObjectIdPass.h index 15aa7c8e..ccb9eeab 100644 --- a/engine/include/XCEngine/Rendering/Passes/BuiltinObjectIdPass.h +++ b/engine/include/XCEngine/Rendering/Passes/BuiltinObjectIdPass.h @@ -1,11 +1,11 @@ #pragma once +#include #include #include -#include +#include #include #include -#include #include #include diff --git a/engine/include/XCEngine/Rendering/ObjectIdEncoding.h b/engine/include/XCEngine/Rendering/Picking/ObjectIdCodec.h similarity index 100% rename from engine/include/XCEngine/Rendering/ObjectIdEncoding.h rename to engine/include/XCEngine/Rendering/Picking/ObjectIdCodec.h index b4e1788f..026c2ea8 100644 --- a/engine/include/XCEngine/Rendering/ObjectIdEncoding.h +++ b/engine/include/XCEngine/Rendering/Picking/ObjectIdCodec.h @@ -1,7 +1,7 @@ #pragma once -#include #include +#include namespace XCEngine { namespace Rendering { diff --git a/engine/include/XCEngine/Rendering/RenderMaterialResolve.h b/engine/include/XCEngine/Rendering/RenderMaterialResolve.h index 3687f7e6..18360311 100644 --- a/engine/include/XCEngine/Rendering/RenderMaterialResolve.h +++ b/engine/include/XCEngine/Rendering/RenderMaterialResolve.h @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include diff --git a/engine/include/XCEngine/Rendering/RenderPipeline.h b/engine/include/XCEngine/Rendering/RenderPipeline.h index 83a03a04..7d058224 100644 --- a/engine/include/XCEngine/Rendering/RenderPipeline.h +++ b/engine/include/XCEngine/Rendering/RenderPipeline.h @@ -1,7 +1,7 @@ #pragma once +#include #include -#include namespace XCEngine { namespace Rendering { diff --git a/engine/include/XCEngine/Rendering/RenderSceneExtractor.h b/engine/include/XCEngine/Rendering/RenderSceneExtractor.h index 71bf7409..e2e98ce8 100644 --- a/engine/include/XCEngine/Rendering/RenderSceneExtractor.h +++ b/engine/include/XCEngine/Rendering/RenderSceneExtractor.h @@ -1,11 +1,8 @@ #pragma once -#include #include -#include -#include +#include -#include #include #include @@ -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 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 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& visibleItems) const; + std::vector& outVisibleItems) const; }; } // namespace Rendering diff --git a/engine/include/XCEngine/Rendering/RenderSceneUtility.h b/engine/include/XCEngine/Rendering/RenderSceneUtility.h index c8bef29f..6b0ff2d7 100644 --- a/engine/include/XCEngine/Rendering/RenderSceneUtility.h +++ b/engine/include/XCEngine/Rendering/RenderSceneUtility.h @@ -1,8 +1,8 @@ #pragma once #include -#include -#include +#include +#include #include #include diff --git a/engine/src/Rendering/Passes/BuiltinObjectIdOutlinePass.cpp b/engine/src/Rendering/Passes/BuiltinObjectIdOutlinePass.cpp index 0dc7532e..7e3f0314 100644 --- a/engine/src/Rendering/Passes/BuiltinObjectIdOutlinePass.cpp +++ b/engine/src/Rendering/Passes/BuiltinObjectIdOutlinePass.cpp @@ -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" diff --git a/engine/src/Rendering/Passes/BuiltinShadowCasterPass.cpp b/engine/src/Rendering/Passes/BuiltinShadowCasterPass.cpp index cc351172..a75c77aa 100644 --- a/engine/src/Rendering/Passes/BuiltinShadowCasterPass.cpp +++ b/engine/src/Rendering/Passes/BuiltinShadowCasterPass.cpp @@ -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 { diff --git a/tests/Rendering/integration/object_id_scene/main.cpp b/tests/Rendering/integration/object_id_scene/main.cpp index 9b54ef48..7cdeb34b 100644 --- a/tests/Rendering/integration/object_id_scene/main.cpp +++ b/tests/Rendering/integration/object_id_scene/main.cpp @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/tests/Rendering/unit/test_object_id_encoding.cpp b/tests/Rendering/unit/test_object_id_encoding.cpp index 702f167f..5a9720e0 100644 --- a/tests/Rendering/unit/test_object_id_encoding.cpp +++ b/tests/Rendering/unit/test_object_id_encoding.cpp @@ -1,6 +1,6 @@ #include -#include +#include using namespace XCEngine::Rendering;