#pragma once #include "SceneViewportEditorOverlayData.h" #include #include namespace XCEngine { namespace Components { class Scene; } // namespace Components namespace Editor { struct SceneViewportOverlayFrameCacheState { SceneViewportOverlayFrameData frameData = {}; const Components::Scene* scene = nullptr; std::vector selectedObjectIds = {}; uint32_t viewportWidth = 0u; uint32_t viewportHeight = 0u; uint64_t contentSignature = 0u; bool cached = false; }; void ResetSceneViewportOverlayFrameCacheState( SceneViewportOverlayFrameCacheState& cacheState); void ResolveSceneViewportOverlayFrameViewportSize( uint32_t requestedWidth, uint32_t requestedHeight, uint32_t renderWidth, uint32_t renderHeight, uint32_t& outWidth, uint32_t& outHeight); bool AreEqualSceneViewportOverlayData( const SceneViewportOverlayData& lhs, const SceneViewportOverlayData& rhs); uint64_t BuildSceneViewportOverlayContentSignature( const Components::Scene* scene, const std::vector& selectedObjectIds); bool ShouldRebuildSceneViewportOverlayFrameCache( const SceneViewportOverlayFrameCacheState& cacheState, const Components::Scene* scene, const SceneViewportOverlayData& overlay, uint32_t viewportWidth, uint32_t viewportHeight, const std::vector& selectedObjectIds, uint64_t contentSignature, bool transformGizmoOverlayDirty); void UpdateSceneViewportOverlayFrameCacheState( SceneViewportOverlayFrameCacheState& cacheState, const Components::Scene* scene, uint32_t viewportWidth, uint32_t viewportHeight, const std::vector& selectedObjectIds, uint64_t contentSignature, const SceneViewportOverlayFrameData& frameData); } // namespace Editor } // namespace XCEngine