Class responsible for rendering the scene using Vulkan backend. More...
#include <Renderer.hpp>
Public Member Functions | |
| Renderer (VulkanContext &context, std::unique_ptr< VulkanResources > &resources, std::unique_ptr< VulkanPipeline > &pipeline, std::unique_ptr< VulkanPipeline > &transPipeline, std::unique_ptr< VulkanPipeline > &maskPipeline, std::unique_ptr< VulkanPipeline > &billboardTransPipeline, std::unique_ptr< VulkanPipeline > &billboardMaskedPipeline, std::unique_ptr< VulkanPipeline > &particleTransPipeline, std::unique_ptr< VulkanPipeline > &particleMaskedPipeline, std::unique_ptr< VulkanPipeline > &uiPipeline, std::unique_ptr< VulkanPipeline > &fullscreenPipeline, std::unique_ptr< VulkanPipeline > &compositePipeline, std::unique_ptr< VulkanSwapchainManager > &swapchainManager, std::unique_ptr< MeshManager > &meshManager) | |
| Constructor for Renderer class. | |
| ~Renderer () | |
| Destructor for Renderer class. | |
| bool | beginFrame (glm::uvec2 renderResolution, SceneRenderData &outData) |
| Prepares the frame for rendering. | |
| void | renderScene (SceneRenderData &data, const vex::Entity cameraEntity, vex::Registry ®istry, int frame, const std::vector< DebugVertex > *debugLines=nullptr, bool isEditorMode=false) |
| Renders the 3D scene and UI to an offscreen low-res texture. | |
| VkDescriptorSet | getImGuiTextureID (ImGUIWrapper &ui) |
| Gets or creates a cached ImGui texture descriptor for the scene. | |
| void | composeFrame (SceneRenderData &data, ImGUIWrapper &ui, bool isEditorMode) |
| Composes the final frame onto the Swapchain image. | |
| void | endFrame (SceneRenderData &data) |
| Submits the command buffer and presents the image. | |
Private Member Functions | |
| void | transitionImageLayout (VkCommandBuffer cmd, VkImage image, VkImageLayout oldLayout, VkImageLayout newLayout, VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask, VkPipelineStageFlags srcStage, VkPipelineStageFlags dstStage) |
| Helper function for image transition. | |
| void | issueMultiDrawIndexed (VkCommandBuffer cmd, const std::vector< VkMultiDrawIndexedInfoEXT > &commands) |
| Issues a multi-draw indexed command used by transparent meshes since they are drawn triangle by triangle. | |
| void | updateScreenDescriptor (VkImageView view) |
| Updates the screen descriptor. | |
Private Attributes | |
| VulkanContext & | m_r_context |
| std::unique_ptr< VulkanResources > & | m_p_resources |
| std::unique_ptr< VulkanPipeline > & | m_p_pipeline |
| std::unique_ptr< VulkanPipeline > & | m_p_transPipeline |
| Standard transparent geometry pipeline. | |
| std::unique_ptr< VulkanPipeline > & | m_p_maskPipeline |
| Standard masked geometry pipeline. | |
| std::unique_ptr< VulkanPipeline > & | m_p_billboardTransPipeline |
| Transparent billboard rendering pipeline. | |
| std::unique_ptr< VulkanPipeline > & | m_p_billboardMaskedPipeline |
| Masked billboard rendering pipeline. | |
| std::unique_ptr< VulkanPipeline > & | m_p_particleTransPipeline |
| Transparent particle rendering pipeline. | |
| std::unique_ptr< VulkanPipeline > & | m_p_particleMaskedPipeline |
| Masked particle rendering pipeline. | |
| std::unique_ptr< VulkanPipeline > & | m_p_uiPipeline |
| std::unique_ptr< VulkanPipeline > & | m_p_fullscreenPipeline |
| std::unique_ptr< VulkanPipeline > & | m_p_compositePipeline |
| std::unique_ptr< VulkanSwapchainManager > & | m_p_swapchainManager |
| std::unique_ptr< MeshManager > & | m_p_meshManager |
| std::chrono::high_resolution_clock::time_point | startTime |
| float | currentTime = 0.0f |
| bool | basicDiag = true |
| std::vector< TransparentTriangle > | m_transparentTriangles |
| std::map< uint32_t, glm::mat4 > | trnasMatrixes |
| std::vector< UiComponent > | m_uiObjects |
| std::vector< VkMultiDrawIndexedInfoEXT > | m_multiDrawInfos |
| size_t | approxTriangles = 0 |
| SceneUBO | m_sceneUBO |
| VkDescriptorSet | m_screenDescriptorSet = VK_NULL_HANDLE |
| VkDescriptorSet | m_crtDescriptorSet = VK_NULL_HANDLE |
| VkSampler | m_screenSampler = VK_NULL_HANDLE |
| VkSampler | m_linearSampler = VK_NULL_HANDLE |
| VkImageView | m_lastUsedView = VK_NULL_HANDLE |
| VkDescriptorSet | m_cachedImGuiDescriptor = VK_NULL_HANDLE |
| std::vector< std::vector< VkDescriptorSet > > | m_garbageDescriptors |
| VkDescriptorPool | m_localPool = VK_NULL_HANDLE |
| std::vector< RenderItem > | opaqueQueue |
| Queue of opaque 3D objects to render. | |
| std::vector< RenderItem > | maskedQueue |
| Queue of masked (alpha-cutout) 3D objects to render. | |
| std::vector< RenderItem > | transparentQueue |
| Queue of transparent 3D objects to render. | |
| std::vector< BillboardItem > | bMaskedQueue |
| Queue of masked billboards to render. | |
| std::vector< BillboardItem > | bTransQueue |
| Queue of transparent billboards to render. | |
| std::vector< EditorBillboardItem > | bEditorQueue |
| Queue of editor billboards to render. | |
| std::vector< vex::Entity > | pMaskedQueue |
| Queue of entities with masked particle emitters. | |
| std::vector< vex::Entity > | pTransQueue |
| Queue of entities with transparent particle emitters. | |
| std::vector< VkBuffer > | m_indirectBuffers |
| std::vector< VmaAllocation > | m_indirectAllocations |
Class responsible for rendering the scene using Vulkan backend.
Definition at line 66 of file Renderer.hpp.
| vex::Renderer::Renderer | ( | VulkanContext & | context, |
| std::unique_ptr< VulkanResources > & | resources, | ||
| std::unique_ptr< VulkanPipeline > & | pipeline, | ||
| std::unique_ptr< VulkanPipeline > & | transPipeline, | ||
| std::unique_ptr< VulkanPipeline > & | maskPipeline, | ||
| std::unique_ptr< VulkanPipeline > & | billboardTransPipeline, | ||
| std::unique_ptr< VulkanPipeline > & | billboardMaskedPipeline, | ||
| std::unique_ptr< VulkanPipeline > & | particleTransPipeline, | ||
| std::unique_ptr< VulkanPipeline > & | particleMaskedPipeline, | ||
| std::unique_ptr< VulkanPipeline > & | uiPipeline, | ||
| std::unique_ptr< VulkanPipeline > & | fullscreenPipeline, | ||
| std::unique_ptr< VulkanPipeline > & | compositePipeline, | ||
| std::unique_ptr< VulkanSwapchainManager > & | swapchainManager, | ||
| std::unique_ptr< MeshManager > & | meshManager ) |
Constructor for Renderer class.
Initializes rendering resources such as the screen sampler, descriptor pools, and debug/indirect buffers if supported.
| VulkanContext& | context - The Vulkan context. |
| std::unique_ptr<VulkanResources>& | resources - Resource manager for textures/buffers. |
| std::unique_ptr<VulkanPipeline>& | pipeline - Standard Opaque pipeline. |
| std::unique_ptr<VulkanPipeline>& | transPipeline - Transparent pipeline. |
| std::unique_ptr<VulkanPipeline>& | maskPipeline - Masked pipeline (alpha cutout). |
| std::unique_ptr<VulkanPipeline>& | billboardTransPipeline - Transparent billboard pipeline. |
| std::unique_ptr<VulkanPipeline>& | billboardMaskedPipeline - Masked billboard pipeline. |
| std::unique_ptr<VulkanPipeline>& | particleTransPipeline - Transparent particle pipeline. |
| std::unique_ptr<VulkanPipeline>& | particleMaskedPipeline - Masked particle pipeline. |
| std::unique_ptr<VulkanPipeline>& | uiPipeline - User Interface pipeline. |
| std::unique_ptr<VulkanPipeline>& | fullscreenPipeline - Fullscreen/Post-process pipeline. |
| std::unique_ptr<VulkanSwapchainManager>& | swapchainManager - Swapchain manager. |
| std::unique_ptr<MeshManager>& | meshManager - Manager for mesh buffers. |
Definition at line 56 of file Renderer.cpp.
| vex::Renderer::~Renderer | ( | ) |
Destructor for Renderer class.
Cleans up samplers, descriptor pools, and buffers (debug/indirect).
Definition at line 167 of file Renderer.cpp.
| bool vex::Renderer::beginFrame | ( | glm::uvec2 | renderResolution, |
| SceneRenderData & | outData ) |
Prepares the frame for rendering.
handles Swapchain recreation (if resolution changed), waits for fences, acquires the next image, and begins the command buffer.
| glm::uvec2 | renderResolution - The desired resolution for the low-res render target. |
| SceneRenderData& | outData - Output struct filled with current frame context (cmd buffer, frame index). |
Definition at line 227 of file Renderer.cpp.
| void vex::Renderer::composeFrame | ( | SceneRenderData & | data, |
| ImGUIWrapper & | ui, | ||
| bool | isEditorMode ) |
Composes the final frame onto the Swapchain image.
| SceneRenderData& | data - Frame context data. |
| ImGUIWrapper& | ui - UI wrapper for drawing. |
| bool | isEditorMode - Toggles between Fullscreen Quad or ImGui composition. |
Definition at line 1098 of file Renderer.cpp.
| void vex::Renderer::endFrame | ( | SceneRenderData & | data | ) |
Submits the command buffer and presents the image.
Submits to the Graphics Queue and calls vkQueuePresentKHR. Handles VK_ERROR_OUT_OF_DATE_KHR by triggering swapchain recreation.
| SceneRenderData& | data - Frame context data. |
Definition at line 1314 of file Renderer.cpp.
| VkDescriptorSet vex::Renderer::getImGuiTextureID | ( | ImGUIWrapper & | ui | ) |
Gets or creates a cached ImGui texture descriptor for the scene.
Used to display the rendered scene inside an ImGui window (Editor Viewport).
| ImGUIWrapper& | ui - Reference to the UI wrapper to register the texture. |
Definition at line 1073 of file Renderer.cpp.
|
private |
Issues a multi-draw indexed command used by transparent meshes since they are drawn triangle by triangle.
| VkCommandBuffer | cmd - Command buffer. |
| const | std::vector<VkMultiDrawIndexedInfoEXT>& commands - Vector of multi-draw indexed commands. |
Definition at line 1529 of file Renderer.cpp.
| void vex::Renderer::renderScene | ( | SceneRenderData & | data, |
| const vex::Entity | cameraEntity, | ||
| vex::Registry & | registry, | ||
| int | frame, | ||
| const std::vector< DebugVertex > * | debugLines = nullptr, | ||
| bool | isEditorMode = false ) |
Renders the 3D scene and UI to an offscreen low-res texture.
| SceneRenderData& | data - Frame context data. |
| const | vex::Entity cameraEntity - The active camera entity. |
| vex::Registry& | registry - ECS registry to query objects. |
| int | frame - Current frame number (used for animations/logic). |
| const | std::vector<DebugVertex>* debugLines - Optional debug lines to draw. |
| bool | isEditorMode - If true, applies editor-specific logic (e.g. gizmos, override camera). |
Definition at line 345 of file Renderer.cpp.
|
private |
Helper function for image transition.
| VkCommandBuffer | cmd - Command buffer. |
| VkImage | image - Image. |
| VkImageLayout | oldLayout - Old layout. |
| VkImageLayout | newLayout - New layout. |
| VkAccessFlags | srcAccessMask - Source access mask. |
| VkAccessFlags | dstAccessMask - Destination access mask. |
| VkPipelineStageFlags | srcStage - Source stage. |
| VkPipelineStageFlags | dstStage - Destination stage. |
It is used internally to transition low resolution image to window resolution.
Definition at line 1490 of file Renderer.cpp.
|
private |
Updates the screen descriptor.
| VkImageView | view - Image view. |
Definition at line 1399 of file Renderer.cpp.
|
private |
Definition at line 214 of file Renderer.hpp.
|
private |
Definition at line 208 of file Renderer.hpp.
|
private |
Queue of editor billboards to render.
Definition at line 232 of file Renderer.hpp.
|
private |
Queue of masked billboards to render.
Definition at line 230 of file Renderer.hpp.
|
private |
Queue of transparent billboards to render.
Definition at line 231 of file Renderer.hpp.
|
private |
Definition at line 206 of file Renderer.hpp.
|
private |
Definition at line 223 of file Renderer.hpp.
|
private |
Definition at line 219 of file Renderer.hpp.
|
private |
Definition at line 224 of file Renderer.hpp.
|
private |
Definition at line 237 of file Renderer.hpp.
|
private |
Definition at line 236 of file Renderer.hpp.
|
private |
Definition at line 222 of file Renderer.hpp.
|
private |
Definition at line 221 of file Renderer.hpp.
|
private |
Definition at line 225 of file Renderer.hpp.
|
private |
Definition at line 213 of file Renderer.hpp.
|
private |
Masked billboard rendering pipeline.
Definition at line 196 of file Renderer.hpp.
|
private |
Transparent billboard rendering pipeline.
Definition at line 195 of file Renderer.hpp.
|
private |
Definition at line 201 of file Renderer.hpp.
|
private |
Definition at line 200 of file Renderer.hpp.
|
private |
Standard masked geometry pipeline.
Definition at line 194 of file Renderer.hpp.
|
private |
Definition at line 203 of file Renderer.hpp.
|
private |
Masked particle rendering pipeline.
Definition at line 198 of file Renderer.hpp.
|
private |
Transparent particle rendering pipeline.
Definition at line 197 of file Renderer.hpp.
|
private |
Definition at line 192 of file Renderer.hpp.
|
private |
Definition at line 191 of file Renderer.hpp.
|
private |
Definition at line 202 of file Renderer.hpp.
|
private |
Standard transparent geometry pipeline.
Definition at line 193 of file Renderer.hpp.
|
private |
Definition at line 199 of file Renderer.hpp.
|
private |
Definition at line 190 of file Renderer.hpp.
|
private |
Definition at line 216 of file Renderer.hpp.
|
private |
Definition at line 218 of file Renderer.hpp.
|
private |
Definition at line 220 of file Renderer.hpp.
|
private |
Definition at line 210 of file Renderer.hpp.
|
private |
Definition at line 212 of file Renderer.hpp.
|
private |
Queue of masked (alpha-cutout) 3D objects to render.
Definition at line 228 of file Renderer.hpp.
|
private |
Queue of opaque 3D objects to render.
Definition at line 227 of file Renderer.hpp.
|
private |
Queue of entities with masked particle emitters.
Definition at line 233 of file Renderer.hpp.
|
private |
Queue of entities with transparent particle emitters.
Definition at line 234 of file Renderer.hpp.
|
private |
Definition at line 205 of file Renderer.hpp.
|
private |
Queue of transparent 3D objects to render.
Definition at line 229 of file Renderer.hpp.
|
private |
Definition at line 211 of file Renderer.hpp.