Chronos 0.0
A advanced 2D rendering and animation system
Loading...
Searching...
No Matches
Chronos::Engine::ObjectManager Class Reference

#include <objectManager.hpp>

Collaboration diagram for Chronos::Engine::ObjectManager:

Public Member Functions

void init (Chronos::Engine::Device *device, Chronos::Engine::SwapChain *swapChain, VkCommandPool commandPool)
 
void destroy ()
 
int addObject (Object *object)
 
void remove (int objectNo)
 
void update (uint32_t currentFrame)
 
void render (uint32_t currentFrame, uint32_t imageIndex, float bgColor[3])
 
void changeMsaa ()
 
void recreate ()
 
void cleanup ()
 

Public Attributes

std::map< int, Object * > objects
 
int nextFreeObjectNo = 0
 
std::vector< VkCommandBuffer > commandBuffers
 
VkRenderPass renderPass
 
VkSampler textureSampler
 

Private Attributes

Chronos::Engine::Devicedevice
 
Chronos::Engine::SwapChainswapChain
 
VkCommandPool commandPool
 
std::vector< VkFramebuffer > framebuffers
 
std::map< int, std::array< bool, MAX_FRAMES_IN_FLIGHT > > objectsToBeRemoved
 

Detailed Description

Definition at line 35 of file objectManager.hpp.

Member Function Documentation

◆ addObject()

int Chronos::Engine::ObjectManager::addObject ( Object object)

Definition at line 130 of file objectManager.cpp.

131{
132 int objectNo = nextFreeObjectNo;
134 objects[objectNo] = object;
135 return objectNo;
136}
std::map< int, Object * > objects
Here is the caller graph for this function:

◆ changeMsaa()

void Chronos::Engine::ObjectManager::changeMsaa ( )

Definition at line 107 of file objectManager.cpp.

108{
109 vkDestroyRenderPass(device->device, renderPass, nullptr);
110 this->renderPass
112 VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
113 VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, true, true, false);
114 recreate();
115 for (auto& objectMap : objects) {
116 objectMap.second->recreateGraphicsPipeline();
117 }
118}
VkDevice device
This is the logical device that is used by Vulkan.
Definition device.hpp:52
Chronos::Engine::Device * device
Chronos::Engine::SwapChain * swapChain
VkRenderPass createRenderPass(Chronos::Engine::Device device, Chronos::Engine::SwapChain swapChain, VkImageLayout initalLayout, VkImageLayout finalLayout, VkImageLayout msaaFinalLayout, bool msaa, bool clearFramebuffer, bool dependency)
Creates a render pass.
Definition helper.cpp:175

References Chronos::Engine::createRenderPass().

Here is the call graph for this function:

◆ cleanup()

void Chronos::Engine::ObjectManager::cleanup ( )

Definition at line 124 of file objectManager.cpp.

125{
126 for (auto framebuffer : framebuffers)
127 vkDestroyFramebuffer(device->device, framebuffer, nullptr);
128}
std::vector< VkFramebuffer > framebuffers

◆ destroy()

void Chronos::Engine::ObjectManager::destroy ( )

Definition at line 47 of file objectManager.cpp.

48{
49 vkDestroySampler(device->device, textureSampler, nullptr);
50 vkDestroyRenderPass(device->device, renderPass, nullptr);
51 for (auto framebuffer : framebuffers)
52 vkDestroyFramebuffer(device->device, framebuffer, nullptr);
53 for (auto& objectMap : objects) {
54 objectMap.second->destroy();
55 }
56}

◆ init()

void Chronos::Engine::ObjectManager::init ( Chronos::Engine::Device device,
Chronos::Engine::SwapChain swapChain,
VkCommandPool  commandPool 
)

Definition at line 29 of file objectManager.cpp.

31{
32 this->device = device;
33 this->swapChain = swapChain;
35
37
38 this->renderPass
39 = Chronos::Engine::createRenderPass(*this->device, *this->swapChain,
40 VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
41 VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, true, true, false);
45 *device, *swapChain, renderPass, true);
46}
std::vector< VkCommandBuffer > commandBuffers
void createTextureSampler(Chronos::Engine::Device device, VkSampler *textureSampler)
Creates a VkSampler
Definition texture.cpp:278
std::vector< VkFramebuffer > createFramebuffer(Chronos::Engine::Device device, Chronos::Engine::SwapChain swapChain, VkRenderPass renderPass, bool msaa)
Creates a set of framebuffers for use.
Definition helper.cpp:276
std::vector< VkCommandBuffer > createCommandBuffer(Chronos::Engine::Device device, Chronos::Engine::SwapChain swapChain, VkCommandPool commandPool)
Creates a set of command buffers for use.
Definition helper.cpp:308

References commandBuffers, commandPool, Chronos::Engine::createCommandBuffer(), Chronos::Engine::createFramebuffer(), Chronos::Engine::createRenderPass(), Chronos::Engine::createTextureSampler(), device, framebuffers, renderPass, swapChain, and textureSampler.

Here is the call graph for this function:

◆ recreate()

void Chronos::Engine::ObjectManager::recreate ( )

Definition at line 119 of file objectManager.cpp.

References Chronos::Engine::createFramebuffer().

Here is the call graph for this function:

◆ remove()

void Chronos::Engine::ObjectManager::remove ( int  objectNo)

Definition at line 137 of file objectManager.cpp.

138{
139 for (bool& flag : objectsToBeRemoved[objectNo]) {
140 flag = true;
141 }
142}
std::map< int, std::array< bool, MAX_FRAMES_IN_FLIGHT > > objectsToBeRemoved

◆ render()

void Chronos::Engine::ObjectManager::render ( uint32_t  currentFrame,
uint32_t  imageIndex,
float  bgColor[3] 
)

Definition at line 57 of file objectManager.cpp.

59{
60 VkViewport viewport {};
61 viewport.x = 0.0f;
62 viewport.y = 0.0f;
63 viewport.width = static_cast<float>(swapChain->swapChainExtent.width);
64 viewport.height = static_cast<float>(swapChain->swapChainExtent.height);
65 viewport.minDepth = 0.0f;
66 viewport.maxDepth = 1.0f;
67
68 VkRect2D scissor {};
69 scissor.offset = { 0, 0 };
70 scissor.extent = swapChain->swapChainExtent;
71
72 vkResetCommandBuffer(commandBuffers[currentFrame], 0);
73 VkCommandBufferBeginInfo beginInfo {};
74 beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
75 if (vkBeginCommandBuffer(commandBuffers[currentFrame], &beginInfo)
76 != VK_SUCCESS) {
77 throw std::runtime_error("failed to begin recording command buffer!");
78 }
79
80 VkRenderPassBeginInfo renderPassInfo {};
81 renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
82 renderPassInfo.renderPass = renderPass;
83 renderPassInfo.framebuffer = framebuffers[imageIndex];
84 renderPassInfo.renderArea.offset = { 0, 0 };
85 renderPassInfo.renderArea.extent = swapChain->swapChainExtent;
86 VkClearValue clearColor
87 = { { { bgColor[0], bgColor[1], bgColor[2], 1.0f } } }; // bg color
88 renderPassInfo.clearValueCount = 1;
89 renderPassInfo.pClearValues = &clearColor;
90
91 vkCmdBeginRenderPass(commandBuffers[currentFrame], &renderPassInfo,
92 VK_SUBPASS_CONTENTS_INLINE);
93
94 for (auto& object : this->objects) {
95 if (this->objectsToBeRemoved.count(object.first) > 0)
96 continue;
97 object.second->render(currentFrame, imageIndex, bgColor, viewport,
98 scissor, commandBuffers);
99 }
100
101 vkCmdEndRenderPass(commandBuffers[currentFrame]);
102
103 if (vkEndCommandBuffer(commandBuffers[currentFrame]) != VK_SUCCESS) {
104 throw std::runtime_error("failed to record command buffer!");
105 }
106}
VkExtent2D swapChainExtent
Dimenisons of the current swapchain.

◆ update()

void Chronos::Engine::ObjectManager::update ( uint32_t  currentFrame)

Definition at line 143 of file objectManager.cpp.

144{
145 for (auto& objectMap : objectsToBeRemoved) {
146 objectMap.second[currentFrame] = false;
147 bool toBeRemoved = true;
148 for (bool flag : objectMap.second) {
149 if (flag) {
150 toBeRemoved = false;
151 break;
152 }
153 }
154 if (toBeRemoved) {
155 objects[objectMap.first]->destroy();
156 objectsToBeRemoved.erase(objectMap.first);
157 objects.erase(objectMap.first);
158 Object* object = objects[objectMap.first];
159 switch (object->objectType) {
161 delete (Chronos::Engine::ColoredRectangle*)object;
162 break;
165 break;
167 delete (Chronos::Engine::Text*)object;
168 break;
169 default:
170 throw std::runtime_error("Invalid object type");
171 }
172 }
173 }
174 for (auto& objectMap : objects) {
175 if (objectsToBeRemoved.count(objectMap.first) == 0) {
176 objectMap.second->update(currentFrame);
177 }
178 }
179}
Class for creating a text object for rendering text.
Definition text.hpp:86

References Chronos::Engine::Object::destroy(), Chronos::Engine::Object::objectType, Chronos::Engine::TypeColoredRectangle, Chronos::Engine::TypeText, and Chronos::Engine::TypeTexturedRectangle.

Here is the call graph for this function:

Member Data Documentation

◆ commandBuffers

std::vector<VkCommandBuffer> Chronos::Engine::ObjectManager::commandBuffers

Vector of Vulkan command buffers.

Definition at line 41 of file objectManager.hpp.

◆ commandPool

VkCommandPool Chronos::Engine::ObjectManager::commandPool
private

Vulkan command pool used for rendering.

Definition at line 67 of file objectManager.hpp.

◆ device

Chronos::Engine::Device* Chronos::Engine::ObjectManager::device
private

Pointer to the Chronos::Engine::Device used for rendering.

Definition at line 61 of file objectManager.hpp.

◆ framebuffers

std::vector<VkFramebuffer> Chronos::Engine::ObjectManager::framebuffers
private

Vector of Vulkan framebuffers.

Definition at line 69 of file objectManager.hpp.

◆ nextFreeObjectNo

int Chronos::Engine::ObjectManager::nextFreeObjectNo = 0

The index for the next free object.

Definition at line 39 of file objectManager.hpp.

◆ objects

std::map<int, Object*> Chronos::Engine::ObjectManager::objects

A map of object indices to their corresponding objects.

Definition at line 37 of file objectManager.hpp.

◆ objectsToBeRemoved

std::map<int, std::array<bool, MAX_FRAMES_IN_FLIGHT> > Chronos::Engine::ObjectManager::objectsToBeRemoved
private

Map of objects to be removed.

Definition at line 71 of file objectManager.hpp.

◆ renderPass

VkRenderPass Chronos::Engine::ObjectManager::renderPass

Vulkan render pass used for rendering.

Definition at line 56 of file objectManager.hpp.

◆ swapChain

Chronos::Engine::SwapChain* Chronos::Engine::ObjectManager::swapChain
private

Pointer to the Chronos::Engine::SwapChain used for rendering.

Definition at line 64 of file objectManager.hpp.

◆ textureSampler

VkSampler Chronos::Engine::ObjectManager::textureSampler

Vulkan sampler for textures.

Definition at line 57 of file objectManager.hpp.


The documentation for this class was generated from the following files: