Skip to content

Rethinking Rendering #406

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Binary file not shown.
Binary file not shown.
2 changes: 1 addition & 1 deletion Tetragrama/Components/AboutUIComponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace Tetragrama::Components
AboutUIComponent(std::string_view name = "AboutUIComponent", bool visibility = true) : UIComponent(name, visibility, true) {}
virtual ~AboutUIComponent() = default;

virtual void Render() override
virtual void Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer) override
{
ImGui::ShowAboutWindow(&m_is_open);
}
Expand Down
2 changes: 1 addition & 1 deletion Tetragrama/Components/DemoUIComponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace Tetragrama::Components
DemoUIComponent(std::string_view name = "DemoUIComponent", bool visibility = true) : UIComponent(name, visibility, true) {}
virtual ~DemoUIComponent() = default;

virtual void Render() override
virtual void Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer) override
{
ImGui::ShowDemoWindow(&m_is_open);
}
Expand Down
2 changes: 1 addition & 1 deletion Tetragrama/Components/DockspaceUIComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ namespace Tetragrama::Components

void DockspaceUIComponent::Update(ZEngine::Core::TimeStep dt) {}

void DockspaceUIComponent::Render()
void DockspaceUIComponent::Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer)
{
const ImGuiViewport* viewport = ImGui::GetMainViewport();
ImGui::SetNextWindowPos(viewport->Pos);
Expand Down
2 changes: 1 addition & 1 deletion Tetragrama/Components/DockspaceUIComponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ namespace Tetragrama::Components
virtual ~DockspaceUIComponent();

void Update(ZEngine::Core::TimeStep dt) override;
virtual void Render() override;
virtual void Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer) override;

void RenderMenuBar();
void RenderSaveScene();
Expand Down
2 changes: 1 addition & 1 deletion Tetragrama/Components/HierarchyViewUIComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ namespace Tetragrama::Components
co_return;
}

void HierarchyViewUIComponent::Render()
void HierarchyViewUIComponent::Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer)
{
ImGui::Begin(m_name.c_str(), (m_can_be_closed ? &m_can_be_closed : NULL), ImGuiWindowFlags_NoCollapse);
if (ImGui::BeginPopupContextWindow(m_name.c_str()))
Expand Down
2 changes: 1 addition & 1 deletion Tetragrama/Components/HierarchyViewUIComponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace Tetragrama::Components
virtual ~HierarchyViewUIComponent();

void Update(ZEngine::Core::TimeStep dt) override;
virtual void Render() override;
virtual void Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer) override;

void RenderTreeNodes();
void RenderGuizmo();
Expand Down
2 changes: 1 addition & 1 deletion Tetragrama/Components/InspectorViewUIComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ namespace Tetragrama::Components
co_return;
}

void InspectorViewUIComponent::Render()
void InspectorViewUIComponent::Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer)
{
if (m_recieved_deleted_request || m_recieved_unselected_request)
{
Expand Down
2 changes: 1 addition & 1 deletion Tetragrama/Components/InspectorViewUIComponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ namespace Tetragrama::Components

void Update(ZEngine::Core::TimeStep dt) override;

virtual void Render() override;
virtual void Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer) override;

public:
std::future<void> SceneAvailableMessageHandlerAsync(Messengers::GenericMessage<ZEngine::Helpers::Ref<ZEngine::Rendering::Scenes::GraphicScene>>&);
Expand Down
2 changes: 1 addition & 1 deletion Tetragrama/Components/LogUIComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ namespace Tetragrama::Components
}
}

void LogUIComponent::Render()
void LogUIComponent::Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer)
{
ImGui::Begin(m_name.c_str(), (m_can_be_closed ? &m_can_be_closed : NULL), ImGuiWindowFlags_NoCollapse);

Expand Down
2 changes: 1 addition & 1 deletion Tetragrama/Components/LogUIComponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace Tetragrama::Components
virtual ~LogUIComponent();

virtual void Update(ZEngine::Core::TimeStep dt) override;
virtual void Render() override;
virtual void Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer) override;

void OnLog(ZEngine::Logging::LogMessage);

Expand Down
2 changes: 1 addition & 1 deletion Tetragrama/Components/ProjectViewUIComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace Tetragrama::Components

void ProjectViewUIComponent::Update(ZEngine::Core::TimeStep dt) {}

void ProjectViewUIComponent::Render()
void ProjectViewUIComponent::Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer)
{
ImGui::Begin(m_name.c_str(), (m_can_be_closed ? &m_can_be_closed : NULL), ImGuiWindowFlags_NoCollapse);

Expand Down
2 changes: 1 addition & 1 deletion Tetragrama/Components/ProjectViewUIComponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ namespace Tetragrama::Components

void Update(ZEngine::Core::TimeStep dt) override;

virtual void Render() override;
virtual void Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer) override;
};
} // namespace Tetragrama::Components
27 changes: 14 additions & 13 deletions Tetragrama/Components/SceneViewportUIComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,17 +34,6 @@ namespace Tetragrama::Components
m_request_renderer_resize = true;
}

if (m_request_renderer_resize)
{
GraphicRenderer::SetViewportSize(m_viewport_size.x, m_viewport_size.y);
m_refresh_texture_handle = true;

Messengers::IMessenger::SendAsync<Windows::Layers::Layer, Messengers::GenericMessage<std::pair<float, float>>>(
EDITOR_RENDER_LAYER_SCENE_REQUEST_RESIZE, Messengers::GenericMessage<std::pair<float, float>>{{m_viewport_size.x, m_viewport_size.y}});

m_request_renderer_resize = false;
}

if (m_is_window_hovered && m_is_window_focused)
{
Messengers::IMessenger::SendAsync<Windows::Layers::Layer, Messengers::GenericMessage<bool>>(
Expand All @@ -70,8 +59,20 @@ namespace Tetragrama::Components
}
}

void SceneViewportUIComponent::Render()
void SceneViewportUIComponent::Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer)
{
if (m_request_renderer_resize)
{
renderer->EnqueuedResizeRequests.Emplace({.Width = (uint32_t) m_viewport_size.x, .Height = (uint32_t) m_viewport_size.y});
m_refresh_texture_handle = true;

Messengers::IMessenger::SendAsync<Windows::Layers::Layer, Messengers::GenericMessage<std::pair<float, float>>>(
EDITOR_RENDER_LAYER_SCENE_REQUEST_RESIZE, Messengers::GenericMessage<std::pair<float, float>>{{m_viewport_size.x, m_viewport_size.y}});

m_request_renderer_resize = false;
return;
}

ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f));
ImGui::Begin(m_name.c_str(), (m_can_be_closed ? &m_can_be_closed : NULL), ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove);

Expand All @@ -85,7 +86,7 @@ namespace Tetragrama::Components
// Scene texture representation
if (!m_scene_texture || m_refresh_texture_handle)
{
m_scene_texture = GraphicRenderer::GetImguiFrameOutput();
m_scene_texture = renderer->GetImguiFrameOutput();
m_refresh_texture_handle = false;
}

Expand Down
2 changes: 1 addition & 1 deletion Tetragrama/Components/SceneViewportUIComponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace Tetragrama::Components
virtual ~SceneViewportUIComponent();

void Update(ZEngine::Core::TimeStep dt) override;
virtual void Render() override;
virtual void Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer) override;

public:
std::future<void> SceneViewportClickedMessageHandlerAsync(Messengers::ArrayValueMessage<int, 2>&);
Expand Down
24 changes: 2 additions & 22 deletions Tetragrama/EditorWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
#include <ZEngine/Engine.h>
#include <ZEngine/Event/EngineClosedEvent.h>
#include <ZEngine/Logging/LoggerDefinition.h>
#include <ZEngine/Rendering/Renderers/GraphicRenderer.h>
#include <ZEngine/Windows/Inputs/KeyCode.h>

#ifdef _WIN32
Expand Down Expand Up @@ -139,8 +138,6 @@ namespace Tetragrama

void EditorWindow::Initialize()
{
GraphicRenderer::Initialize(this);

for (const auto& layer : m_configuration.RenderingLayerCollection)
{
PushLayer(layer);
Expand Down Expand Up @@ -193,7 +190,6 @@ namespace Tetragrama
{
(*rlayer_it)->Deinitialize();
}
GraphicRenderer::Deinitialize();
}

void EditorWindow::PollEvent()
Expand Down Expand Up @@ -369,24 +365,18 @@ namespace Tetragrama

void EditorWindow::Update(Core::TimeStep delta_time)
{
GraphicRenderer::Update();

for (const Ref<Layers::Layer>& layer : *m_layer_stack_ptr)
{
layer->Update(delta_time);
}
}

void EditorWindow::Render()
void EditorWindow::Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer)
{
GraphicRenderer::NewFrame();

for (const Ref<Layers::Layer>& layer : *m_layer_stack_ptr)
{
layer->Render();
layer->Render(renderer, command_buffer);
}

GraphicRenderer::Present();
}

std::future<std::string> EditorWindow::OpenFileDialogAsync(std::span<std::string_view> type_filters)
Expand Down Expand Up @@ -447,11 +437,6 @@ namespace Tetragrama
return outputs;
}

Ref<Rendering::Swapchain> EditorWindow::GetSwapchain() const
{
return GraphicRenderer::GetSwapchain();
}

EditorWindow::~EditorWindow()
{
glfwSetErrorCallback(NULL);
Expand All @@ -477,11 +462,6 @@ namespace Tetragrama

bool EditorWindow::OnWindowResized(WindowResizedEvent& event)
{
if (event.GetWidth() > 0 && event.GetHeight() > 0)
{
GraphicRenderer::ResizeSwapchain();
}

ZENGINE_CORE_INFO("Window has been resized")

Core::EventDispatcher event_dispatcher(event);
Expand Down
11 changes: 5 additions & 6 deletions Tetragrama/EditorWindow.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#pragma once
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>
#include <ZEngine/Rendering/Swapchain.h>
#include <ZEngine/Helpers/IntrusivePtr.h>
#include <ZEngine/Windows/CoreWindow.h>
#include <ZEngine/Windows/WindowConfiguration.h>
#include <ZEngine/ZEngineDef.h>
Expand Down Expand Up @@ -32,13 +32,12 @@ namespace Tetragrama
virtual float GetTime() override;
virtual float GetDeltaTime() override;
virtual void Update(ZEngine::Core::TimeStep delta_time) override;
virtual void Render() override;
virtual void Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer) override;

virtual std::future<std::string> OpenFileDialogAsync(std::span<std::string_view> type_filters = {}) override;

virtual bool CreateSurface(void* instance, void** out_window_surface) override;
virtual std::vector<std::string> GetRequiredExtensionLayers() override;
ZEngine::Helpers::Ref<ZEngine::Rendering::Swapchain> GetSwapchain() const override;
virtual bool CreateSurface(void* instance, void** out_window_surface) override;
virtual std::vector<std::string> GetRequiredExtensionLayers() override;

public:
bool OnEvent(ZEngine::Core::CoreEvent& event) override;
Expand Down Expand Up @@ -75,7 +74,7 @@ namespace Tetragrama
static void __OnGlfwFrameBufferSizeChanged(GLFWwindow*, int width, int height);

private:
GLFWwindow* m_native_window{nullptr};
GLFWwindow* m_native_window = nullptr;
};

} // namespace Tetragrama
23 changes: 7 additions & 16 deletions Tetragrama/Layers/ImguiLayer.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include <pch.h>
#include <ImguiLayer.h>
#include <Rendering/Renderers/GraphicRenderer.h>
#include <Rendering/Renderers/ImGUIRenderer.h>
#include <fmt/format.h>
#include <imgui.h>

Expand Down Expand Up @@ -181,26 +182,16 @@ namespace Tetragrama::Layers
return false;
}

void ImguiLayer::Render()
void ImguiLayer::Render(Rendering::Renderers::GraphicRenderer* const renderer, Rendering::Buffers::CommandBuffer* const command_buffer)
{
if (auto window_ptr = m_window.lock())
renderer->ImguiRenderer->BeginFrame();
for (const auto& component : m_ui_components)
{
if (window_ptr->IsMinimized())
{
return;
}

GraphicRenderer::BeginImguiFrame();

for (const auto& component : m_ui_components)
if (component->GetVisibility() == true)
{
if (component->GetVisibility() == true)
{
component->Render();
}
component->Render(renderer, command_buffer);
}
GraphicRenderer::DrawUIFrame();
GraphicRenderer::EndImguiFrame();
}
renderer->ImguiRenderer->EndFrame(command_buffer, renderer->Device->CurrentFrameIndex);
}
} // namespace Tetragrama::Layers
2 changes: 1 addition & 1 deletion Tetragrama/Layers/ImguiLayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ namespace Tetragrama::Layers

void Update(ZEngine::Core::TimeStep dt) override;

void Render() override;
void Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer) override;

virtual void AddUIComponent(const ZEngine::Helpers::Ref<Components::UIComponent>& component);
virtual void AddUIComponent(ZEngine::Helpers::Ref<Components::UIComponent>&& component);
Expand Down
4 changes: 2 additions & 2 deletions Tetragrama/Layers/RenderLayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ namespace Tetragrama::Layers
return false;
}

void RenderLayer::Render()
void RenderLayer::Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer)
{
auto camera = m_editor_camera_controller->GetCamera();
GraphicRenderer::DrawScene(camera, GraphicScene::GetRawData());
renderer->DrawScene(command_buffer, camera, GraphicScene::GetRawData());
}

std::future<void> RenderLayer::SceneRequestResizeMessageHandlerAsync(Messengers::GenericMessage<std::pair<float, float>>& message)
Expand Down
2 changes: 1 addition & 1 deletion Tetragrama/Layers/RenderLayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ namespace Tetragrama::Layers
virtual void Deinitialize() override;
virtual void Update(ZEngine::Core::TimeStep dt) override;

virtual void Render() override;
virtual void Render(ZEngine::Rendering::Renderers::GraphicRenderer* const renderer, ZEngine::Rendering::Buffers::CommandBuffer* const command_buffer) override;

virtual bool OnEvent(ZEngine::Core::CoreEvent& e) override;

Expand Down
4 changes: 3 additions & 1 deletion ZEngine/ZEngine/Core/IRenderable.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#pragma once
#include <Rendering/Buffers/CommandBuffer.h>
#include <Rendering/Renderers/GraphicRenderer.h>

namespace ZEngine::Core
{
Expand All @@ -8,6 +10,6 @@ namespace ZEngine::Core
IRenderable() = default;
virtual ~IRenderable() = default;

virtual void Render() = 0;
virtual void Render(Rendering::Renderers::GraphicRenderer* const renderer = nullptr, Rendering::Buffers::CommandBuffer* const command_buffer = nullptr) = 0;
};
} // namespace ZEngine::Core
Loading