diff --git a/editor/src/Core/EditorContext.h b/editor/src/Core/EditorContext.h index d0f5295e..5cd3b906 100644 --- a/editor/src/Core/EditorContext.h +++ b/editor/src/Core/EditorContext.h @@ -3,7 +3,9 @@ #include "IEditorContext.h" #include "EventBus.h" #include "SelectionManager.h" +#include "IProjectManager.h" #include "Managers/SceneManager.h" +#include "Managers/ProjectManager.h" #include #include @@ -15,7 +17,8 @@ public: EditorContext() : m_eventBus(std::make_unique()) , m_selectionManager(std::make_unique(*m_eventBus)) - , m_sceneManager(std::make_unique()) { + , m_sceneManager(std::make_unique()) + , m_projectManager(std::make_unique()) { m_sceneManager->SetSelectionManager(m_selectionManager.get()); } @@ -35,6 +38,10 @@ public: return *m_sceneManager; } + IProjectManager& GetProjectManager() override { + return *m_projectManager; + } + void SetProjectPath(const std::string& path) override { m_projectPath = path; } @@ -47,8 +54,9 @@ private: std::unique_ptr m_eventBus; std::unique_ptr m_selectionManager; std::unique_ptr m_sceneManager; + std::unique_ptr m_projectManager; std::string m_projectPath; }; } -} +} \ No newline at end of file diff --git a/editor/src/Core/IEditorContext.h b/editor/src/Core/IEditorContext.h index 7f198b72..c2ddf61b 100644 --- a/editor/src/Core/IEditorContext.h +++ b/editor/src/Core/IEditorContext.h @@ -8,6 +8,7 @@ namespace Editor { class EventBus; class ISelectionManager; +class IProjectManager; class IEditorContext { public: @@ -16,6 +17,7 @@ public: virtual EventBus& GetEventBus() = 0; virtual ISelectionManager& GetSelectionManager() = 0; virtual void* GetSceneManager() = 0; + virtual IProjectManager& GetProjectManager() = 0; virtual void SetProjectPath(const std::string& path) = 0; virtual const std::string& GetProjectPath() const = 0; diff --git a/editor/src/Core/IProjectManager.h b/editor/src/Core/IProjectManager.h new file mode 100644 index 00000000..8c30eb39 --- /dev/null +++ b/editor/src/Core/IProjectManager.h @@ -0,0 +1,39 @@ +#pragma once + +#include +#include +#include +#include "Core/AssetItem.h" + +namespace XCEngine { +namespace Editor { + +class IProjectManager { +public: + virtual ~IProjectManager() = default; + + virtual std::vector& GetCurrentItems() = 0; + virtual int GetSelectedIndex() const = 0; + virtual void SetSelectedIndex(int index) = 0; + + virtual void NavigateToFolder(const AssetItemPtr& folder) = 0; + virtual void NavigateBack() = 0; + virtual void NavigateToIndex(size_t index) = 0; + virtual bool CanNavigateBack() const = 0; + + virtual std::string GetCurrentPath() const = 0; + virtual size_t GetPathDepth() const = 0; + virtual std::string GetPathName(size_t index) const = 0; + + virtual void Initialize(const std::string& projectPath) = 0; + virtual void RefreshCurrentFolder() = 0; + + virtual void CreateFolder(const std::string& name) = 0; + virtual void DeleteItem(int index) = 0; + virtual bool MoveItem(const std::string& sourceFullPath, const std::string& destFolderFullPath) = 0; + + virtual const std::string& GetProjectPath() const = 0; +}; + +} // namespace Editor +} // namespace XCEngine \ No newline at end of file diff --git a/editor/src/Managers/ProjectManager.cpp b/editor/src/Managers/ProjectManager.cpp index c10f4506..b17fa718 100644 --- a/editor/src/Managers/ProjectManager.cpp +++ b/editor/src/Managers/ProjectManager.cpp @@ -9,11 +9,6 @@ namespace fs = std::filesystem; namespace XCEngine { namespace Editor { -ProjectManager& ProjectManager::Get() { - static ProjectManager instance; - return instance; -} - std::vector& ProjectManager::GetCurrentItems() { if (m_path.empty()) { static std::vector empty; diff --git a/editor/src/Managers/ProjectManager.h b/editor/src/Managers/ProjectManager.h index a54448e5..b6a0da6c 100644 --- a/editor/src/Managers/ProjectManager.h +++ b/editor/src/Managers/ProjectManager.h @@ -1,6 +1,7 @@ #pragma once #include "Core/AssetItem.h" +#include "Core/IProjectManager.h" #include #include #include @@ -8,35 +9,31 @@ namespace XCEngine { namespace Editor { -class ProjectManager { +class ProjectManager : public IProjectManager { public: - static ProjectManager& Get(); + std::vector& GetCurrentItems() override; + int GetSelectedIndex() const override { return m_selectedIndex; } + void SetSelectedIndex(int index) override { m_selectedIndex = index; } - std::vector& GetCurrentItems(); - int GetSelectedIndex() const { return m_selectedIndex; } - void SetSelectedIndex(int index) { m_selectedIndex = index; } + void NavigateToFolder(const AssetItemPtr& folder) override; + void NavigateBack() override; + void NavigateToIndex(size_t index) override; + bool CanNavigateBack() const override { return m_path.size() > 1; } - void NavigateToFolder(const AssetItemPtr& folder); - void NavigateBack(); - void NavigateToIndex(size_t index); - bool CanNavigateBack() const { return m_path.size() > 1; } + std::string GetCurrentPath() const override; + size_t GetPathDepth() const override { return m_path.size(); } + std::string GetPathName(size_t index) const override; - std::string GetCurrentPath() const; - size_t GetPathDepth() const { return m_path.size(); } - std::string GetPathName(size_t index) const; + void Initialize(const std::string& projectPath) override; + void RefreshCurrentFolder() override; - void Initialize(const std::string& projectPath); - void RefreshCurrentFolder(); + void CreateFolder(const std::string& name) override; + void DeleteItem(int index) override; + bool MoveItem(const std::string& sourceFullPath, const std::string& destFolderFullPath) override; - void CreateFolder(const std::string& name); - void DeleteItem(int index); - bool MoveItem(const std::string& sourceFullPath, const std::string& destFolderFullPath); - - const std::string& GetProjectPath() const { return m_projectPath; } + const std::string& GetProjectPath() const override { return m_projectPath; } private: - ProjectManager() = default; - AssetItemPtr ScanDirectory(const std::wstring& path); AssetItemPtr CreateAssetItem(const std::wstring& path, const std::wstring& nameW, bool isFolder); std::wstring GetCurrentFullPathW() const; diff --git a/editor/src/panels/ProjectPanel.cpp b/editor/src/panels/ProjectPanel.cpp index e25679ab..2a307ec7 100644 --- a/editor/src/panels/ProjectPanel.cpp +++ b/editor/src/panels/ProjectPanel.cpp @@ -1,5 +1,6 @@ #include "ProjectPanel.h" -#include "Managers/ProjectManager.h" +#include "Core/IEditorContext.h" +#include "Core/IProjectManager.h" #include "Core/AssetItem.h" #include #include @@ -13,7 +14,7 @@ ProjectPanel::ProjectPanel() : Panel("Project") { } void ProjectPanel::Initialize(const std::string& projectPath) { - ProjectManager::Get().Initialize(projectPath); + m_context->GetProjectManager().Initialize(projectPath); } void ProjectPanel::Render() { @@ -26,7 +27,7 @@ void ProjectPanel::Render() { ImGui::Begin(m_name.c_str(), nullptr, ImGuiWindowFlags_None); - auto& manager = ProjectManager::Get(); + auto& manager = m_context->GetProjectManager(); bool canGoBack = manager.CanNavigateBack(); ImGui::BeginDisabled(!canGoBack); @@ -160,7 +161,7 @@ void ProjectPanel::Render() { } void ProjectPanel::RenderAssetItem(const AssetItemPtr& item, int index) { - auto& manager = ProjectManager::Get(); + auto& manager = m_context->GetProjectManager(); bool isSelected = (manager.GetSelectedIndex() == index); ImGui::PushID(index); @@ -287,7 +288,7 @@ void ProjectPanel::RenderAssetItem(const AssetItemPtr& item, int index) { } void ProjectPanel::CreateNewFolder(const std::string& name) { - auto& manager = ProjectManager::Get(); + auto& manager = m_context->GetProjectManager(); manager.CreateFolder(name); } diff --git a/engine/src/RHI/D3D12/D3D12Device.cpp b/engine/src/RHI/D3D12/D3D12Device.cpp index be5df6f4..000b1d43 100644 --- a/engine/src/RHI/D3D12/D3D12Device.cpp +++ b/engine/src/RHI/D3D12/D3D12Device.cpp @@ -492,6 +492,11 @@ RHIResourceView* D3D12Device::CreateRenderTargetView(RHITexture* texture, const rtvDesc.Format = static_cast(desc.format); rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D; + { + FILE* f2 = fopen("D:\\Xuanchi\\Main\\XCEngine\\debug_rhi.log", "a"); + if (f2) { fprintf(f2, "[CreateRenderTargetView] Creating RTV heap...\n"); fclose(f2); } + } + auto heap = std::make_unique(); if (!heap->Initialize(m_device.Get(), DescriptorHeapType::RTV, 1, false)) { FILE* f2 = fopen("D:\\Xuanchi\\Main\\XCEngine\\debug_rhi.log", "a"); @@ -500,10 +505,18 @@ RHIResourceView* D3D12Device::CreateRenderTargetView(RHITexture* texture, const return nullptr; } + { + FILE* f2 = fopen("D:\\Xuanchi\\Main\\XCEngine\\debug_rhi.log", "a"); + if (f2) { fprintf(f2, "[CreateRenderTargetView] RTV heap created, calling CreateRenderTargetView...\n"); fclose(f2); } + } + view->InitializeAsRenderTarget(m_device.Get(), resource, &rtvDesc, heap.get(), 0); view->SetOwnedHeap(std::move(heap)); - FILE* f3 = fopen("D:\\Xuanchi\\Main\\XCEngine\\debug_rhi.log", "a"); - if (f3) { fprintf(f3, "[CreateRenderTargetView] Success\n"); fclose(f3); } + + { + FILE* f2 = fopen("D:\\Xuanchi\\Main\\XCEngine\\debug_rhi.log", "a"); + if (f2) { fprintf(f2, "[CreateRenderTargetView] Success\n"); fclose(f2); } + } return view; } @@ -528,6 +541,9 @@ RHIResourceView* D3D12Device::CreateDepthStencilView(RHITexture* texture, const } RHIResourceView* D3D12Device::CreateShaderResourceView(RHITexture* texture, const ResourceViewDesc& desc) { + FILE* f = fopen("D:\\Xuanchi\\Main\\XCEngine\\debug_rhi.log", "a"); + if (f) { fprintf(f, "[CreateShaderResourceView] Start\n"); fclose(f); } + auto* view = new D3D12ResourceView(); auto* d3d12Texture = static_cast(texture); ID3D12Resource* resource = d3d12Texture->GetResource(); @@ -541,12 +557,17 @@ RHIResourceView* D3D12Device::CreateShaderResourceView(RHITexture* texture, cons auto heap = std::make_unique(); if (!heap->Initialize(m_device.Get(), DescriptorHeapType::CBV_SRV_UAV, 1, true)) { + FILE* f2 = fopen("D:\\Xuanchi\\Main\\XCEngine\\debug_rhi.log", "a"); + if (f2) { fprintf(f2, "[CreateShaderResourceView] heap Initialize failed\n"); fclose(f2); } delete view; return nullptr; } view->InitializeAsShaderResource(m_device.Get(), resource, &srvDesc, heap.get(), 0); view->SetOwnedHeap(std::move(heap)); + + FILE* f3 = fopen("D:\\Xuanchi\\Main\\XCEngine\\debug_rhi.log", "a"); + if (f3) { fprintf(f3, "[CreateShaderResourceView] Success\n"); fclose(f3); } return view; }