mirror of
https://github.com/seekrs/MacroLibX.git
synced 2026-01-11 22:53:34 +00:00
big refactoring ! ci skip
This commit is contained in:
@@ -1,31 +1,11 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* Renderer.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/12/18 17:14:45 by maldavid #+# #+# */
|
||||
/* Updated: 2024/07/05 13:40:20 by maldavid ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#ifndef __MLX_RENDERER__
|
||||
#define __MLX_RENDERER__
|
||||
|
||||
#ifndef __RENDERER__
|
||||
#define __RENDERER__
|
||||
|
||||
#include <Renderer/Vertex.h>
|
||||
#include <Renderer/Buffers/UniformBuffer.h>
|
||||
#include <Renderer/Core/Surface.h>
|
||||
#include <Renderer/Core/RenderCore.h>
|
||||
#include <Renderer/Core/Semaphore.h>
|
||||
#include <Renderer/Pipelines/Pipeline.h>
|
||||
#include <Renderer/Command/CommandManager.h>
|
||||
#include <Renderer/Renderpass/Swapchain.h>
|
||||
#include <Renderer/Renderpass/RenderPass.h>
|
||||
#include <Renderer/Renderpass/FrameBuffer.h>
|
||||
#include <Renderer/Descriptors/DescriptorSet.h>
|
||||
#include <Renderer/Descriptors/DescriptorPool.h>
|
||||
#include <Renderer/Descriptors/DescriptorSetLayout.h>
|
||||
#include <Platform/Window.h>
|
||||
#include <Utils/NonOwningPtr.h>
|
||||
#include <Renderer/RenderCore.h>
|
||||
#include <Renderer/Image.h>
|
||||
#include <Core/EventBus.h>
|
||||
|
||||
namespace mlx
|
||||
{
|
||||
@@ -34,57 +14,48 @@ namespace mlx
|
||||
public:
|
||||
Renderer() = default;
|
||||
|
||||
void Init(NonOwningPtr<class Texture> render_target);
|
||||
void Init(NonOwningPtr<Window> window);
|
||||
|
||||
bool BeginFrame();
|
||||
void EndFrame();
|
||||
|
||||
void Destroy();
|
||||
[[nodiscard]] inline VkSwapchainKHR GetSwapchain() const noexcept { return m_swapchain; }
|
||||
[[nodiscard]] inline VkSurfaceKHR GetSurface() const noexcept { return m_surface; }
|
||||
[[nodiscard]] inline VkSemaphore GetImageAvailableSemaphore(int index) const noexcept { return m_image_available_semaphores[index]; }
|
||||
[[nodiscard]] inline VkSemaphore GetRenderFinishedSemaphore(int index) const noexcept { return m_render_finished_semaphores[index]; }
|
||||
[[nodiscard]] inline VkCommandBuffer GetCommandBuffer(int index) const noexcept { return m_cmd_buffers[index]; }
|
||||
[[nodiscard]] inline VkCommandBuffer GetActiveCommandBuffer() const noexcept { return m_cmd_buffers[m_current_frame_index]; }
|
||||
[[nodiscard]] inline const std::vector<Image>& GetSwapchainImages() const { return m_swapchain_images; }
|
||||
[[nodiscard]] inline std::size_t& GetDrawCallsCounterRef() noexcept { return m_drawcalls; }
|
||||
[[nodiscard]] inline std::size_t& GetPolygonDrawnCounterRef() noexcept { return m_polygons_drawn; }
|
||||
[[nodiscard]] inline std::size_t GetSwapchainImageIndex() const noexcept { return m_swapchain_image_index; }
|
||||
[[nodiscard]] inline std::size_t GetCurrentFrameIndex() const noexcept { return m_current_frame_index; }
|
||||
[[nodiscard]] inline NonOwningPtr<Window> GetWindow() const noexcept { return m_window_ptr; }
|
||||
|
||||
inline NonOwningPtr<class Window> GetWindow() { return m_window; }
|
||||
inline void SetWindow(NonOwningPtr<class Window> window) { m_window = window; }
|
||||
MLX_FORCEINLINE constexpr void RequireFramebufferResize() noexcept { m_framebuffers_resize = true; }
|
||||
|
||||
inline Surface& GetSurface() noexcept { return m_surface; }
|
||||
inline NonOwningPtr<UniformBuffer> GetUniformBuffer() noexcept { return m_uniform_buffer.get(); }
|
||||
inline SwapChain& GetSwapChain() noexcept { return m_swapchain; }
|
||||
inline RenderPass& GetRenderPass() noexcept { return m_pass; }
|
||||
inline GraphicPipeline& GetPipeline() noexcept { return m_pipeline; }
|
||||
inline CommandBuffer& GetCmdBuffer(int i) noexcept { return m_cmd.GetCmdBuffer(i); }
|
||||
inline CommandBuffer& GetActiveCmdBuffer() noexcept { return m_cmd.GetCmdBuffer(m_current_frame_index); }
|
||||
inline FrameBuffer& GetFrameBuffer(int i) noexcept { return m_framebuffers[i]; }
|
||||
inline DescriptorSet& GetVertDescriptorSet() noexcept { return m_vert_set; }
|
||||
inline DescriptorSet& GetFragDescriptorSet() noexcept { return m_frag_set; }
|
||||
inline std::uint32_t GetActiveImageIndex() noexcept { return m_current_frame_index; }
|
||||
inline std::uint32_t GetImageIndex() noexcept { return m_image_index; }
|
||||
|
||||
constexpr inline void RequireFrameBufferResize() noexcept { m_framebuffer_resized = true; }
|
||||
void Destroy() noexcept;
|
||||
|
||||
~Renderer() = default;
|
||||
|
||||
private:
|
||||
void RecreateRenderData();
|
||||
void CreateSwapchain();
|
||||
void DestroySwapchain();
|
||||
|
||||
private:
|
||||
GraphicPipeline m_pipeline;
|
||||
CommandManager m_cmd;
|
||||
RenderPass m_pass;
|
||||
Surface m_surface;
|
||||
SwapChain m_swapchain;
|
||||
std::array<Semaphore, MAX_FRAMES_IN_FLIGHT> m_render_finished_semaphores;
|
||||
std::array<Semaphore, MAX_FRAMES_IN_FLIGHT> m_image_available_semaphores;
|
||||
std::vector<FrameBuffer> m_framebuffers;
|
||||
|
||||
DescriptorSet m_vert_set;
|
||||
DescriptorSet m_frag_set;
|
||||
|
||||
std::unique_ptr<UniformBuffer> m_uniform_buffer;
|
||||
|
||||
NonOwningPtr<class Window> m_window;
|
||||
NonOwningPtr<class Texture> m_render_target;
|
||||
|
||||
std::array<VkSemaphore, MAX_FRAMES_IN_FLIGHT> m_image_available_semaphores;
|
||||
std::array<VkSemaphore, MAX_FRAMES_IN_FLIGHT> m_render_finished_semaphores;
|
||||
std::array<VkCommandBuffer, MAX_FRAMES_IN_FLIGHT> m_cmd_buffers;
|
||||
std::array<VkFence, MAX_FRAMES_IN_FLIGHT> m_cmd_fences;
|
||||
std::vector<Image> m_swapchain_images;
|
||||
NonOwningPtr<Window> p_window;
|
||||
VkSurfaceKHR m_surface = VK_NULL_HANDLE;
|
||||
VkSwapchainKHR m_swapchain = VK_NULL_HANDLE;
|
||||
std::uint32_t m_current_frame_index = 0;
|
||||
std::uint32_t m_image_index = 0;
|
||||
bool m_framebuffer_resized = false;
|
||||
std::uint32_t m_swapchain_image_index = 0;
|
||||
std::size_t m_drawcalls = 0;
|
||||
std::size_t m_polygons_drawn = 0;
|
||||
bool m_framebuffers_resize = false;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user