Skip to content

Commit adb990c

Browse files
authored
Content Browser Implementation (#419)
* raw patch * made some crazy changes * remove comments * remove assets from build * add margin to thumbnail
1 parent baa9bd4 commit adb990c

File tree

8 files changed

+830
-4
lines changed

8 files changed

+830
-4
lines changed
Loading
14.1 KB
Loading

Tetragrama/Components/ProjectViewUIComponent.cpp

Lines changed: 692 additions & 1 deletion
Large diffs are not rendered by default.

Tetragrama/Components/ProjectViewUIComponent.h

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,66 @@
44

55
namespace Tetragrama::Components
66
{
7+
enum class ContextMenuType
8+
{
9+
RightPane,
10+
LeftPane,
11+
File,
12+
Folder
13+
};
14+
15+
enum class PopupType
16+
{
17+
None,
18+
CreateFolder,
19+
CreateFile,
20+
RenameFolder,
21+
RenameFile,
22+
DeleteFolder,
23+
DeleteFile,
24+
};
25+
726
class ProjectViewUIComponent : public UIComponent
827
{
928
public:
1029
ProjectViewUIComponent(Layers::ImguiLayer* parent = nullptr, std::string_view name = "Project", bool visibility = true);
1130
virtual ~ProjectViewUIComponent();
1231

13-
void Update(ZEngine::Core::TimeStep dt) override;
32+
void Update(ZEngine::Core::TimeStep dt) override;
33+
34+
virtual void Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Hardwares::CommandBuffer* const command_buffer) override;
35+
36+
// Render Panes
37+
void RenderContentBrowser(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer);
38+
void RenderFilteredContent(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, std::string_view searchTerm);
39+
void RenderDirectoryNode(const std::filesystem::path& directory);
40+
void RenderContentTile(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, const std::filesystem::directory_entry& entry);
41+
void RenderBackButton();
42+
void RenderTreeBrowser();
43+
44+
// Popup helpers
45+
void RenderContextMenu(ContextMenuType type, const std::filesystem::path& targetPath);
46+
void RenderPopUpMenu();
47+
void HandleCreateFolderPopup(const std::filesystem::path& path);
48+
void HandleCreateFilePopup(const std::filesystem::path& path);
49+
50+
void HandleRenameFolderPopup(const std::filesystem::path& path);
51+
void HandleDeleteFolderPopup(const std::filesystem::path& path);
52+
void HandleRenameFilePopup(const std::filesystem::path& path);
53+
void HandleDeleteFilePopup(const std::filesystem::path& path);
54+
55+
std::filesystem::path MakeRelative(const std::filesystem::path& path, const std::filesystem::path& base);
56+
57+
private:
58+
std::filesystem::path m_assets_directory;
59+
std::filesystem::path m_current_directory;
60+
PopupType m_active_popup = PopupType::None;
61+
std::filesystem::path m_popup_target_path;
1462

15-
virtual void Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Hardwares::CommandBuffer* const command_buffer) override;
63+
ZEngine::Rendering::Textures::TextureHandle m_directory_icon;
64+
ZEngine::Rendering::Textures::TextureHandle m_file_icon;
65+
bool m_textures_loaded = false;
66+
static constexpr float m_thumbnail_size = 128.0f;
67+
char m_search_buffer[MAX_FILE_PATH_COUNT] = "";
1668
};
1769
} // namespace Tetragrama::Components

ZEngine/ZEngine/Rendering/Renderers/GraphicRenderer.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,30 @@ namespace ZEngine::Rendering::Renderers
237237
Helpers::ThreadPoolHelper::Submit([this] { Run(); });
238238
}
239239

240+
Textures::TextureHandle AsyncResourceLoader::LoadTextureFileSync(std::string_view filename)
241+
{
242+
int width = 0, height = 0, channel = 0;
243+
stbi_uc* image_data = stbi_load(filename.data(), &width, &height, &channel, STBI_rgb_alpha);
244+
if (!image_data)
245+
{
246+
ZENGINE_CORE_ERROR("Failed to load texture file synchronously: {}", filename.data());
247+
return Textures::TextureHandle{};
248+
}
249+
250+
Specifications::TextureSpecification spec = {
251+
.Width = static_cast<uint32_t>(width),
252+
.Height = static_cast<uint32_t>(height),
253+
.BytePerPixel = 4, // RGBA
254+
.Format = Specifications::ImageFormat::R8G8B8A8_SRGB,
255+
.Data = image_data,
256+
};
257+
258+
Textures::TextureHandle handle = Renderer->Device->GlobalTextures->Add(Renderer->CreateTexture(spec));
259+
stbi_image_free(image_data);
260+
261+
return handle;
262+
}
263+
240264
Textures::TextureHandle AsyncResourceLoader::LoadTextureFile(std::string_view filename)
241265
{
242266
auto abs_filename = std::filesystem::absolute(filename).string();

ZEngine/ZEngine/Rendering/Renderers/GraphicRenderer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ namespace ZEngine::Rendering::Renderers
7979

8080
void EnqueueTextureRequest(std::string_view file, const Textures::TextureHandle& handle);
8181
Textures::TextureHandle LoadTextureFile(std::string_view filename);
82+
Textures::TextureHandle LoadTextureFileSync(std::string_view filename);
8283

8384
private:
8485
std::atomic_bool m_cancellation_token{false};

ZEngine/ZEngine/Rendering/Renderers/ImGUIRenderer.cpp

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ namespace ZEngine::Rendering::Renderers
8181

8282
.UseShader("imgui")
8383
.SetShaderOverloadMaxSet(2000)
84-
.SetOverloadPoolSize(2)
84+
.SetOverloadPoolSize(4)
8585

8686
.UseSwapchainAsRenderTarget();
8787

@@ -134,6 +134,20 @@ namespace ZEngine::Rendering::Renderers
134134
frame_alloc_info.descriptorSetCount = 1;
135135
frame_alloc_info.pSetLayouts = &descriptor_setlayout;
136136
ZENGINE_VALIDATE_ASSERT(vkAllocateDescriptorSets(m_renderer->Device->LogicalDevice, &frame_alloc_info, &m_frame_output) == VK_SUCCESS, "Failed to create descriptor set")
137+
138+
VkDescriptorSetAllocateInfo image_alloc_info = {};
139+
image_alloc_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
140+
image_alloc_info.descriptorPool = shader->GetDescriptorPool();
141+
image_alloc_info.descriptorSetCount = 1;
142+
image_alloc_info.pSetLayouts = &descriptor_setlayout;
143+
ZENGINE_VALIDATE_ASSERT(vkAllocateDescriptorSets(m_renderer->Device->LogicalDevice, &image_alloc_info, &m_folder_output) == VK_SUCCESS, "Failed to create descriptor set")
144+
145+
VkDescriptorSetAllocateInfo image2_alloc_info = {};
146+
image2_alloc_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
147+
image2_alloc_info.descriptorPool = shader->GetDescriptorPool();
148+
image2_alloc_info.descriptorSetCount = 1;
149+
image2_alloc_info.pSetLayouts = &descriptor_setlayout;
150+
ZENGINE_VALIDATE_ASSERT(vkAllocateDescriptorSets(m_renderer->Device->LogicalDevice, &image2_alloc_info, &m_file_output) == VK_SUCCESS, "Failed to create descriptor set")
137151
}
138152

139153
void ImGUIRenderer::Deinitialize()
@@ -344,4 +358,44 @@ namespace ZEngine::Rendering::Renderers
344358

345359
return m_frame_output;
346360
}
361+
362+
VkDescriptorSet ImGUIRenderer::UpdateFileIconOutput(const Textures::TextureHandle& handle)
363+
{
364+
auto& texture = m_renderer->Device->GlobalTextures->Access(handle);
365+
auto& buffer = texture->ImageBuffer->GetBuffer();
366+
367+
VkDescriptorImageInfo desc_image[1] = {};
368+
desc_image[0].sampler = buffer.Sampler;
369+
desc_image[0].imageView = buffer.ViewHandle;
370+
desc_image[0].imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
371+
VkWriteDescriptorSet write_desc[1] = {};
372+
write_desc[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
373+
write_desc[0].dstSet = m_file_output;
374+
write_desc[0].descriptorCount = 1;
375+
write_desc[0].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
376+
write_desc[0].pImageInfo = desc_image;
377+
vkUpdateDescriptorSets(m_renderer->Device->LogicalDevice, 1, write_desc, 0, nullptr);
378+
379+
return m_file_output;
380+
}
381+
382+
VkDescriptorSet ImGUIRenderer::UpdateDirIconOutput(const Textures::TextureHandle& handle)
383+
{
384+
auto& texture = m_renderer->Device->GlobalTextures->Access(handle);
385+
auto& buffer = texture->ImageBuffer->GetBuffer();
386+
387+
VkDescriptorImageInfo desc_image[1] = {};
388+
desc_image[0].sampler = buffer.Sampler;
389+
desc_image[0].imageView = buffer.ViewHandle;
390+
desc_image[0].imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
391+
VkWriteDescriptorSet write_desc[1] = {};
392+
write_desc[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
393+
write_desc[0].dstSet = m_folder_output;
394+
write_desc[0].descriptorCount = 1;
395+
write_desc[0].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
396+
write_desc[0].pImageInfo = desc_image;
397+
vkUpdateDescriptorSets(m_renderer->Device->LogicalDevice, 1, write_desc, 0, nullptr);
398+
399+
return m_folder_output;
400+
}
347401
} // namespace ZEngine::Rendering::Renderers

ZEngine/ZEngine/Rendering/Renderers/ImGUIRenderer.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,14 @@ namespace ZEngine::Rendering::Renderers
1717
void DrawFrame(uint32_t frame_index, Hardwares::CommandBuffer* const command_buffer);
1818

1919
VkDescriptorSet UpdateFrameOutput(const Textures::TextureHandle& handle);
20+
VkDescriptorSet UpdateFileIconOutput(const Textures::TextureHandle& handle);
21+
VkDescriptorSet UpdateDirIconOutput(const Textures::TextureHandle& handle);
2022

2123
private:
2224
VkDescriptorSet m_frame_output{VK_NULL_HANDLE};
2325
VkDescriptorSet m_font_descriptor_set{VK_NULL_HANDLE};
26+
VkDescriptorSet m_folder_output{VK_NULL_HANDLE};
27+
VkDescriptorSet m_file_output{VK_NULL_HANDLE};
2428
GraphicRenderer* m_renderer;
2529
Hardwares::VertexBufferSetHandle m_vertex_buffer_handle;
2630
Hardwares::IndexBufferSetHandle m_index_buffer_handle;

0 commit comments

Comments
 (0)