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

Abstract class for creating and managing generic graphical objects. More...

#include <object.hpp>

Inheritance diagram for Chronos::Engine::Object:
Collaboration diagram for Chronos::Engine::Object:

Public Member Functions

void init (Chronos::Engine::Device *device, VkCommandPool commandPool, SwapChain *swapChain, VkSampler textureSampler, VkRenderPass *renderPass, ObjectType objectType, unsigned char *vertShaderCode, int vertShaderCodeSize, unsigned char *fragShaderCode, int fragShaderCodeSize)
 Initializes the object.
 
virtual void update (uint32_t currentFrame)=0
 Updates the object for the current frame.
 
virtual void render (uint32_t currentFrame, uint32_t imageIndex, float bgColor[3], VkViewport &viewport, VkRect2D &scissor, std::vector< VkCommandBuffer > &commandBuffers)=0
 
virtual void destroy ()=0
 Destroys the object and releases associated resources.
 
void recreateGraphicsPipeline ()
 Recreates the graphics pipeline for the object.
 

Public Attributes

VkPipeline graphicsPipeline
 
VkPipelineLayout pipelineLayout
 
std::vector< VkDescriptorSet > descriptorSets
 
Chronos::Engine::ObjectType objectType
 

Protected Member Functions

void createGraphicsPipeline ()
 Creates the graphics pipeline for the object.
 
void createDescriptorPool ()
 Creates the Vulkan descriptor pool for the object.
 
void createDescriptorSetLayout ()
 Creates the Vulkan descriptor set layout for the object.
 
virtual void createDescriptorSets ()=0
 
virtual std::vector< VkDescriptorType > getDescriptorTypes ()=0
 
virtual std::vector< VkShaderStageFlagBits > getDescriptorStages ()=0
 
virtual PipelineAttributes getPipelineAttributes ()=0
 

Protected Attributes

Chronos::Engine::Devicedevice
 
Chronos::Engine::SwapChainswapChain
 
VkCommandPool commandPool
 
VkSampler textureSampler
 
VkRenderPass * renderPass
 
VkDescriptorSetLayout descriptorSetLayout
 
VkDescriptorPool descriptorPool
 
std::vector< Chronos::Engine::UniformBufferuniformBuffers
 

Private Attributes

unsigned char * vertShaderCode
 
int vertShaderCodeSize
 
unsigned char * fragShaderCode
 
int fragShaderCodeSize
 

Detailed Description

Abstract class for creating and managing generic graphical objects.

The Object class provides an interface for creating and managing generic graphical objects. Derived classes are expected to implement specific functionality for initialization, updates, and destruction of the object depending on specific use case.

Definition at line 66 of file object.hpp.

Member Function Documentation

◆ createDescriptorPool()

void Chronos::Engine::Object::createDescriptorPool ( )
protected

Creates the Vulkan descriptor pool for the object.

This method sets up and creates the Vulkan descriptor pool based on the descriptor types used by the object.

Definition at line 246 of file object.cpp.

247{
248 std::vector<VkDescriptorType> descriptorTypes = getDescriptorTypes();
249
250 std::vector<VkDescriptorPoolSize> poolSizes { descriptorTypes.size() };
251
252 for (size_t i = 0; i < descriptorTypes.size(); i++) {
253 poolSizes[i].type = descriptorTypes[i];
254 poolSizes[i].descriptorCount
255 = static_cast<uint32_t>(MAX_FRAMES_IN_FLIGHT);
256 }
257 VkDescriptorPoolCreateInfo poolInfo {};
258 poolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
259 poolInfo.poolSizeCount = static_cast<uint32_t>(poolSizes.size());
260 poolInfo.pPoolSizes = poolSizes.data();
261 poolInfo.maxSets = static_cast<uint32_t>(MAX_FRAMES_IN_FLIGHT);
262 if (vkCreateDescriptorPool(
263 device->device, &poolInfo, nullptr, &descriptorPool)
264 != VK_SUCCESS) {
265 throw std::runtime_error("failed to create descriptor pool!");
266 }
267}
VkDevice device
This is the logical device that is used by Vulkan.
Definition device.hpp:52
virtual std::vector< VkDescriptorType > getDescriptorTypes()=0
VkDescriptorPool descriptorPool
Definition object.hpp:152
Chronos::Engine::Device * device
Definition object.hpp:140
#define MAX_FRAMES_IN_FLIGHT
The number of frames in flight.

References MAX_FRAMES_IN_FLIGHT.

Here is the caller graph for this function:

◆ createDescriptorSetLayout()

void Chronos::Engine::Object::createDescriptorSetLayout ( )
protected

Creates the Vulkan descriptor set layout for the object.

This method sets up and creates the Vulkan descriptor set layout based on the descriptor types and stages used by the object.

Definition at line 269 of file object.cpp.

270{
271 std::vector<VkDescriptorType> descriptorTypes = getDescriptorTypes();
272 std::vector<VkShaderStageFlagBits> descriptorStages = getDescriptorStages();
273
274 if (descriptorTypes.size() != descriptorStages.size()) {
275 throw std::runtime_error(
276 "descriptorTypes and descriptorStages must be the same size");
277 }
278
279 std::vector<VkDescriptorSetLayoutBinding> bindings {
280 descriptorTypes.size()
281 };
282
283 for (size_t i = 0; i < descriptorTypes.size(); i++) {
284 bindings[i].binding = i;
285 bindings[i].descriptorType = descriptorTypes[i];
286 bindings[i].descriptorCount = 1;
287 bindings[i].stageFlags = descriptorStages[i];
288 bindings[i].pImmutableSamplers = nullptr;
289 }
290
291 VkDescriptorSetLayoutCreateInfo layoutInfo {};
292 layoutInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
293 layoutInfo.bindingCount = static_cast<uint32_t>(bindings.size());
294 layoutInfo.pBindings = bindings.data();
295 if (vkCreateDescriptorSetLayout(
296 device->device, &layoutInfo, nullptr, &descriptorSetLayout)
297 != VK_SUCCESS) {
298 throw std::runtime_error("failed to create descriptor set layout!");
299 }
300}
VkDescriptorSetLayout descriptorSetLayout
Definition object.hpp:149
virtual std::vector< VkShaderStageFlagBits > getDescriptorStages()=0
Here is the caller graph for this function:

◆ createDescriptorSets()

virtual void Chronos::Engine::Object::createDescriptorSets ( )
protectedpure virtual

Implemented in Chronos::Engine::ColoredRectangle, Chronos::Engine::TexturedRectangle, and Chronos::Engine::Text.

Here is the caller graph for this function:

◆ createGraphicsPipeline()

void Chronos::Engine::Object::createGraphicsPipeline ( )
protected

Creates the graphics pipeline for the object.

This method is responsible for configuring and creating the Vulkan graphics pipeline used by the object, including shader modules, vertex input, input assembly, viewport, rasterization, multisampling, color blending, and dynamic states.

Definition at line 80 of file object.cpp.

81{
84
85 VkShaderModule vertShaderModule
87 VkShaderModule fragShaderModule
89
90 VkPipelineShaderStageCreateInfo vertShaderStageInfo {};
91 vertShaderStageInfo.sType
92 = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
93 vertShaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT;
94 vertShaderStageInfo.module = vertShaderModule;
95 vertShaderStageInfo.pName
96 = "main"; // start from main(vulkan can start from elsewhere also)
97
98 VkPipelineShaderStageCreateInfo fragShaderStageInfo {};
99 fragShaderStageInfo.sType
100 = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
101 fragShaderStageInfo.stage = VK_SHADER_STAGE_FRAGMENT_BIT;
102 fragShaderStageInfo.module = fragShaderModule;
103 fragShaderStageInfo.pName = "main";
104
105 VkPipelineShaderStageCreateInfo shaderStages[]
106 = { vertShaderStageInfo, fragShaderStageInfo };
107
108 auto bindingDescription = pipelineAttributes.bindingDescriptions;
109 auto attributeDescriptions = pipelineAttributes.attributeDescriptions;
110
111 VkPipelineVertexInputStateCreateInfo vertexInputInfo {};
112 vertexInputInfo.sType
113 = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
114 vertexInputInfo.vertexBindingDescriptionCount
115 = static_cast<uint32_t>(bindingDescription.size());
116 vertexInputInfo.vertexAttributeDescriptionCount
117 = static_cast<uint32_t>(attributeDescriptions.size());
118 vertexInputInfo.pVertexBindingDescriptions = bindingDescription.data();
119 vertexInputInfo.pVertexAttributeDescriptions = attributeDescriptions.data();
120
121 VkPipelineInputAssemblyStateCreateInfo inputAssembly {};
122 inputAssembly.sType
123 = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
124 inputAssembly.topology
125 = pipelineAttributes.topology; // we are using indexed rendering so
126 // we need to use triangle list
127 inputAssembly.primitiveRestartEnable = VK_FALSE;
128
129 VkViewport viewport {};
130 viewport.x = 0.0f;
131 viewport.y = 0.0f;
132 viewport.width = (float)(*swapChain).swapChainExtent.width;
133 viewport.height = (float)(*swapChain).swapChainExtent.height;
134 viewport.minDepth = 0.0f;
135 viewport.maxDepth = 1.0f;
136
137 VkRect2D scissor {};
138 scissor.offset = { 0, 0 };
139 scissor.extent = (*swapChain).swapChainExtent;
140
141 VkPipelineViewportStateCreateInfo viewportState {};
142 viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
143 viewportState.viewportCount = 1;
144 viewportState.pViewports = &viewport;
145 viewportState.scissorCount = 1;
146 viewportState.pScissors = &scissor;
147
148 VkPipelineRasterizationStateCreateInfo rasterizer {};
149 rasterizer.sType
150 = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
151 rasterizer.depthClampEnable = VK_FALSE;
152 rasterizer.rasterizerDiscardEnable = VK_FALSE;
153 rasterizer.polygonMode = VK_POLYGON_MODE_FILL;
154 rasterizer.lineWidth = 1.0f;
155 rasterizer.cullMode = VK_CULL_MODE_BACK_BIT;
156 rasterizer.frontFace = pipelineAttributes.frontFace; // counter clockwuise
157 rasterizer.depthBiasEnable = VK_FALSE;
158 rasterizer.depthBiasConstantFactor = 0.0f;
159 rasterizer.depthBiasClamp = 0.0f;
160 rasterizer.depthBiasSlopeFactor = 0.0f;
161
162 VkPipelineMultisampleStateCreateInfo multisampling {};
163 multisampling.sType
164 = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
165 multisampling.sampleShadingEnable = VK_FALSE;
166 multisampling.rasterizationSamples = device->msaaSamples;
167 multisampling.minSampleShading = 1.0f; // Optional
168 multisampling.pSampleMask = nullptr; // Optional
169 multisampling.alphaToCoverageEnable = VK_FALSE; // Optional
170 multisampling.alphaToOneEnable = VK_FALSE;
171 multisampling.sampleShadingEnable = VK_TRUE;
172
173 VkPipelineColorBlendStateCreateInfo colorBlending {};
174 colorBlending.sType
175 = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
176 colorBlending.logicOpEnable = VK_FALSE;
177 colorBlending.logicOp = VK_LOGIC_OP_COPY;
178 colorBlending.attachmentCount = 1;
179 colorBlending.pAttachments = &pipelineAttributes.colorBlendAttachment;
180 colorBlending.blendConstants[0] = 0.0f;
181 colorBlending.blendConstants[1] = 0.0f;
182 colorBlending.blendConstants[2] = 0.0f;
183 colorBlending.blendConstants[3] = 0.0f;
184
185 std::vector<VkDynamicState> dynamicStates
186 = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR };
187 VkPipelineDynamicStateCreateInfo dynamicState {};
188 dynamicState.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
189 dynamicState.dynamicStateCount
190 = static_cast<uint32_t>(dynamicStates.size());
191 dynamicState.pDynamicStates = dynamicStates.data();
192
193 VkPipelineLayoutCreateInfo pipelineLayoutInfo {};
194 pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
195 pipelineLayoutInfo.setLayoutCount = 1; // Optional
196 pipelineLayoutInfo.pSetLayouts = &descriptorSetLayout; // Optional
197 pipelineLayoutInfo.pushConstantRangeCount = 0; // Optional
198 pipelineLayoutInfo.pPushConstantRanges = nullptr; // Optional
199
200 if (vkCreatePipelineLayout(
201 device->device, &pipelineLayoutInfo, nullptr, &pipelineLayout)
202 != VK_SUCCESS) {
203 throw std::runtime_error("failed to create pipeline layout!");
204 }
205
206 VkGraphicsPipelineCreateInfo pipelineInfo {};
207 pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
208 pipelineInfo.stageCount = 2;
209 pipelineInfo.pStages = shaderStages;
210 pipelineInfo.pVertexInputState = &vertexInputInfo;
211 pipelineInfo.pInputAssemblyState = &inputAssembly;
212 pipelineInfo.pViewportState = &viewportState;
213 pipelineInfo.pRasterizationState = &rasterizer;
214 pipelineInfo.pMultisampleState = &multisampling;
215 pipelineInfo.pDepthStencilState = nullptr; // Optional
216 pipelineInfo.pColorBlendState = &colorBlending;
217 pipelineInfo.pDynamicState = &dynamicState;
218 pipelineInfo.layout = pipelineLayout;
219 pipelineInfo.renderPass = *renderPass;
220 pipelineInfo.subpass = 0;
221 pipelineInfo.basePipelineHandle = VK_NULL_HANDLE; // Optional
222 pipelineInfo.basePipelineIndex = -1;
223
224 if (vkCreateGraphicsPipelines(device->device, VK_NULL_HANDLE, 1,
225 &pipelineInfo, nullptr, &graphicsPipeline)
226 != VK_SUCCESS) {
227 throw std::runtime_error("failed to create graphics pipeline!");
228 }
229
230 // destory the shader modules
231 vkDestroyShaderModule(device->device, fragShaderModule, nullptr);
232 vkDestroyShaderModule(device->device, vertShaderModule, nullptr);
233}
VkSampleCountFlagBits msaaSamples
This sets the MSAA samples count.
Definition device.hpp:80
virtual PipelineAttributes getPipelineAttributes()=0
unsigned char * vertShaderCode
Definition object.hpp:185
VkPipeline graphicsPipeline
Definition object.hpp:130
VkPipelineLayout pipelineLayout
Definition object.hpp:133
VkRenderPass * renderPass
Definition object.hpp:147
unsigned char * fragShaderCode
Definition object.hpp:187
static VkShaderModule createShaderModule(unsigned char *code, int code_size, VkDevice device)
Creates a shader module from given shader(SPIV) code.
Definition object.cpp:38
Structure defining attributes required for creating a graphics pipeline.
Definition object.hpp:43
VkPrimitiveTopology topology
Definition object.hpp:49
VkPipelineColorBlendAttachmentState colorBlendAttachment
Definition object.hpp:53
std::vector< VkVertexInputBindingDescription > bindingDescriptions
Definition object.hpp:45
std::vector< VkVertexInputAttributeDescription > attributeDescriptions
Definition object.hpp:47

References Chronos::Engine::PipelineAttributes::attributeDescriptions, Chronos::Engine::PipelineAttributes::bindingDescriptions, Chronos::Engine::PipelineAttributes::colorBlendAttachment, createShaderModule(), Chronos::Engine::PipelineAttributes::frontFace, and Chronos::Engine::PipelineAttributes::topology.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ destroy()

void Chronos::Engine::Object::destroy ( )
pure virtual

Destroys the object and releases associated resources.

This method is responsible for cleaning up the object's resources, including uniform buffers, descriptor pool, descriptor set layout, graphics pipeline, and pipeline layout.

Implemented in Chronos::Engine::ColoredRectangle, Chronos::Engine::TexturedRectangle, and Chronos::Engine::Text.

Definition at line 235 of file object.cpp.

236{
237 for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) {
238 uniformBuffers[i].destroy();
239 }
240 vkDestroyDescriptorPool(device->device, descriptorPool, nullptr);
241 vkDestroyDescriptorSetLayout(device->device, descriptorSetLayout, nullptr);
242 vkDestroyPipeline(device->device, graphicsPipeline, nullptr);
243 vkDestroyPipelineLayout(device->device, pipelineLayout, nullptr);
244}
std::vector< Chronos::Engine::UniformBuffer > uniformBuffers
Definition object.hpp:183

References MAX_FRAMES_IN_FLIGHT.

Here is the caller graph for this function:

◆ getDescriptorStages()

virtual std::vector< VkShaderStageFlagBits > Chronos::Engine::Object::getDescriptorStages ( )
protectedpure virtual

◆ getDescriptorTypes()

virtual std::vector< VkDescriptorType > Chronos::Engine::Object::getDescriptorTypes ( )
protectedpure virtual

◆ getPipelineAttributes()

virtual PipelineAttributes Chronos::Engine::Object::getPipelineAttributes ( )
protectedpure virtual

◆ init()

void Chronos::Engine::Object::init ( Chronos::Engine::Device device,
VkCommandPool  commandPool,
SwapChain swapChain,
VkSampler  textureSampler,
VkRenderPass *  renderPass,
ObjectType  objectType,
unsigned char *  vertShaderCode,
int  vertShaderCodeSize,
unsigned char *  fragShaderCode,
int  fragShaderCodeSize 
)

Initializes the object.

This method initializes the Object with necessary Vulkan-related parameters, such as the device, command pool, swap chain, texture sampler, and render pass. It also allocates uniform buffers and creates descriptor sets, descriptor pool, descriptor set layout, and the graphics pipeline for rendering the object.

Parameters
deviceThe device used by the object.
commandPoolVulkan command pool for the object.
swapChainSwap chain used by the object.
textureSamplerVulkan texture sampler used by the object.
renderPassVulkan render pass that is used for rendering
objectTypeType of the object.
vertShaderCodeVertex shader code in binary format.
vertShaderCodeSizeSize of the vertex shader code.
fragShaderCodeFragment shader code in binary format.
fragShaderCodeSizeSize of the fragment shader code. object in question.

Definition at line 53 of file object.cpp.

57{
58 this->device = device;
59 this->swapChain = swapChain;
62 this->renderPass = renderPass;
63 this->objectType = objectType;
68
70 for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) {
72 }
73
78}
void createDescriptorPool()
Creates the Vulkan descriptor pool for the object.
Definition object.cpp:246
VkCommandPool commandPool
Definition object.hpp:143
Chronos::Engine::SwapChain * swapChain
Definition object.hpp:141
Chronos::Engine::ObjectType objectType
Definition object.hpp:137
void createDescriptorSetLayout()
Creates the Vulkan descriptor set layout for the object.
Definition object.cpp:269
void createGraphicsPipeline()
Creates the graphics pipeline for the object.
Definition object.cpp:80
virtual void createDescriptorSets()=0
void create()
Creates the swapchain image resources and chooses the optimal settings for given hardware.

References commandPool, Chronos::Engine::SwapChain::create(), createDescriptorPool(), createDescriptorSetLayout(), createDescriptorSets(), createGraphicsPipeline(), device, fragShaderCode, fragShaderCodeSize, MAX_FRAMES_IN_FLIGHT, objectType, renderPass, swapChain, textureSampler, uniformBuffers, vertShaderCode, and vertShaderCodeSize.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ recreateGraphicsPipeline()

void Chronos::Engine::Object::recreateGraphicsPipeline ( )

Recreates the graphics pipeline for the object.

This method is used to recreate the graphics pipeline when needed, typically after changes in the rendering configuration such as MSAA changes. It destroys the existing graphics pipeline and pipeline layout before creating a new one.

Definition at line 302 of file object.cpp.

303{
304 vkDestroyPipeline(device->device, graphicsPipeline, nullptr);
305 vkDestroyPipelineLayout(device->device, pipelineLayout, nullptr);
307}

◆ render()

virtual void Chronos::Engine::Object::render ( uint32_t  currentFrame,
uint32_t  imageIndex,
float  bgColor[3],
VkViewport &  viewport,
VkRect2D &  scissor,
std::vector< VkCommandBuffer > &  commandBuffers 
)
pure virtual

◆ update()

virtual void Chronos::Engine::Object::update ( uint32_t  currentFrame)
pure virtual

Updates the object for the current frame.

This pure virtual method must be implemented by derived classes to perform any updates required for the object during each frame. The currentFrame parameter represents the index of the current frame in the application.

Parameters
currentFrameIndex of the current frame.

Implemented in Chronos::Engine::ColoredRectangle, Chronos::Engine::TexturedRectangle, and Chronos::Engine::Text.

Member Data Documentation

◆ commandPool

VkCommandPool Chronos::Engine::Object::commandPool
protected

Vulkan command pool associated with the object.

Definition at line 143 of file object.hpp.

◆ descriptorPool

VkDescriptorPool Chronos::Engine::Object::descriptorPool
protected

Vulkan descriptor pool used by the object.

Definition at line 152 of file object.hpp.

◆ descriptorSetLayout

VkDescriptorSetLayout Chronos::Engine::Object::descriptorSetLayout
protected

Vulkan descriptor set layout used by the object.

Definition at line 149 of file object.hpp.

◆ descriptorSets

std::vector<VkDescriptorSet> Chronos::Engine::Object::descriptorSets

Vulkan descriptor sets associated with the object.

Definition at line 135 of file object.hpp.

◆ device

Chronos::Engine::Device* Chronos::Engine::Object::device
protected

Device to render to.

Definition at line 140 of file object.hpp.

◆ fragShaderCode

unsigned char* Chronos::Engine::Object::fragShaderCode
private

Fragment shader code.

Definition at line 187 of file object.hpp.

◆ fragShaderCodeSize

int Chronos::Engine::Object::fragShaderCodeSize
private

Size of the fragment shader code.

Definition at line 188 of file object.hpp.

◆ graphicsPipeline

VkPipeline Chronos::Engine::Object::graphicsPipeline

Vulkan graphics pipeline used by the object.

Definition at line 130 of file object.hpp.

◆ objectType

Chronos::Engine::ObjectType Chronos::Engine::Object::objectType

Type of the object.

Definition at line 137 of file object.hpp.

◆ pipelineLayout

VkPipelineLayout Chronos::Engine::Object::pipelineLayout

Vulkan pipeline layout used by the object.

Definition at line 133 of file object.hpp.

◆ renderPass

VkRenderPass* Chronos::Engine::Object::renderPass
protected

Renderpass that the object will render to.

Definition at line 147 of file object.hpp.

◆ swapChain

Chronos::Engine::SwapChain* Chronos::Engine::Object::swapChain
protected

Swapchain to present to.

Definition at line 141 of file object.hpp.

◆ textureSampler

VkSampler Chronos::Engine::Object::textureSampler
protected

Vulkan texture sampler used by the object.

Definition at line 145 of file object.hpp.

◆ uniformBuffers

std::vector<Chronos::Engine::UniformBuffer> Chronos::Engine::Object::uniformBuffers
protected

uniform buffers associated with the object.

Definition at line 183 of file object.hpp.

◆ vertShaderCode

unsigned char* Chronos::Engine::Object::vertShaderCode
private

Vertex shader code.

Definition at line 185 of file object.hpp.

◆ vertShaderCodeSize

int Chronos::Engine::Object::vertShaderCodeSize
private

Size of the vertex shader code.

Definition at line 186 of file object.hpp.


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