Rendering Engine 0.2.9
Modular Graphics Rendering Engine | v0.2.9
rendering_engine::VulkanRenderResources Class Reference

Vulkan implementation of IRenderResources for the Rendering Engine. More...

#include <vulkan_render_resources.hpp>

Inherits rendering_engine::IRenderResources, and rendering_engine::IRendererObserver.

Public Member Functions

 VulkanRenderResources (VulkanRenderer *renderer)
 Constructor. More...
 
 ~VulkanRenderResources ()
 Destructor. More...
 
void Initialize (Material *material, MeshDataGpu *meshData, TextureCache *textureCache) override
 Initializes GPU-side resources using provided material, mesh, and texture cache. More...
 
void SubmitResources (Transformations2D &transformations, const PackedMaterialData &materialParameters) override
 Updates GPU resources and issues a draw call for a 2D object. More...
 
void SubmitResources (Transformations3D &transformations, const PackedMaterialData &materialParameters) override
 Updates GPU resources and issues a draw call for a 3D object. More...
 
void Shutdown () override
 Releases all allocated GPU resources for this object. More...
 
- Public Member Functions inherited from rendering_engine::IRenderResources
virtual ~IRenderResources ()=default
 Virtual destructor. More...
 
virtual void Initialize (Material *material, MeshDataGpu *meshData, TextureCache *textureCache)=0
 Initializes GPU-side resources using provided material, mesh, and texture cache. More...
 
virtual void SubmitResources (Transformations2D &transformations, const PackedMaterialData &materialParameters)=0
 Updates GPU resources and issues a draw call for a 2D object. More...
 
virtual void SubmitResources (Transformations3D &transformations, const PackedMaterialData &materialParameters)=0
 Updates GPU resources and issues a draw call for a 3D object. More...
 
virtual void Shutdown ()=0
 Releases all allocated GPU resources for this object. More...
 
- Public Member Functions inherited from rendering_engine::IRendererObserver
virtual void OnRenderResourcesRelease ()=0
 Renderer callback: release all GPU resources (used during device loss/reset). More...
 
virtual void OnRenderResourcesRebuild ()=0
 Renderer callback: re-upload or recreate all GPU resources (used after device reset/rebuild). More...
 
virtual ~IRendererObserver ()=default
 Virtual destructor. More...
 

Protected Member Functions

void OnRenderResourcesRelease () override
 Renderer callback: release all GPU resources (used during device loss/reset). More...
 
void OnRenderResourcesRebuild () override
 Renderer callback: re-upload or recreate all GPU resources (used after device reset/rebuild). More...
 
void AcquireResources ()
 Allocates and initializes all GPU buffers, descriptor sets, and pipelines for this drawable. More...
 
void CreateUniformBuffers ()
 
void CreateDescriptorPool ()
 
void CreateDescriptorSet ()
 
void UpdateTransformations (Transformations2D &transformations)
 
void UpdateTransformations (Transformations3D &transformations)
 
void UpdateMaterialParameters (const PackedMaterialData &materialParameters)
 
void DrawIndexed ()
 Issues a Vulkan draw command for the currently bound indexed mesh. More...
 

Detailed Description

Vulkan implementation of IRenderResources for the Rendering Engine.

Aggregates and manages Vulkan GPU-side resources (buffers, descriptor sets, pipelines) required to render a drawable object. Responds to renderer events (release/rebuild) and can be safely reused with shared caches for materials, meshes, and textures.

Definition at line 28 of file vulkan_render_resources.hpp.

Constructor & Destructor Documentation

◆ VulkanRenderResources()

rendering_engine::VulkanRenderResources::VulkanRenderResources ( VulkanRenderer renderer)

Constructor.

Parameters
rendererPointer to the owning VulkanRenderer instance.

Registers itself as an observer for resource (re)creation events.

Definition at line 16 of file vulkan_render_resources.cpp.

17 :
18 mRenderer(renderer),
19 bHasCustomMaterialVariables(false)
20{
21 mRenderer->RegisterObserver(this);
22}
void RegisterObserver(IRendererObserver *notifier) override
Registers an observer for rendering events.

◆ ~VulkanRenderResources()

rendering_engine::VulkanRenderResources::~VulkanRenderResources ( )

Destructor.

Unregisters from the renderer and calls Shutdown() to release all resources.

Definition at line 24 of file vulkan_render_resources.cpp.

25{
26 mRenderer->UnregisterObserver(this);
27}
void UnregisterObserver(IRendererObserver *notifier) override
Unregisters a previously registered observer.

Member Function Documentation

◆ AcquireResources()

void rendering_engine::VulkanRenderResources::AcquireResources ( )
protected

Allocates and initializes all GPU buffers, descriptor sets, and pipelines for this drawable.

Definition at line 127 of file vulkan_render_resources.cpp.

128{
129 if (!mMaterial)
130 {
131 // Log error message, as without initialized material rendering is not possible.
132 return;
133 }
134 VulkanMaterialResources* materialResources = static_cast<VulkanMaterialResources*>(mMaterial->GetMaterialRenderResources());
135 mGraphicsPipeline = materialResources->GetPipeline();
136 mPipelineLayout = materialResources->GetPipelineLayout();
137
138 VulkanMeshResources* meshResources = static_cast<VulkanMeshResources*>(mMeshData->GetMeshRenderResources());
139 mVertexBuffer = meshResources->GetVertexBuffer();
140 mIndexBuffer = meshResources->GetIndexBuffer();
141
145}
IMaterialRenderResources * GetMaterialRenderResources() const
Returns the backend-specific GPU handle of the material.
Definition: material.cpp:87
IMeshRenderResources * GetMeshRenderResources()
Get the interface for mesh GPU resources (Vulkan or other backend).

◆ CreateDescriptorPool()

void rendering_engine::VulkanRenderResources::CreateDescriptorPool ( )
protected

Definition at line 187 of file vulkan_render_resources.cpp.

188{
189 const uint32_t maxFramesInFlight = static_cast<uint32_t>(MAX_FRAMES_IN_FLIGHT);
190 std::vector<VkDescriptorPoolSize> poolSizes;
191
192 VkDescriptorPoolSize tranformationPool;
193 tranformationPool.type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
194 tranformationPool.descriptorCount = maxFramesInFlight;
195
196 poolSizes.push_back(tranformationPool);
197
198 auto materialParameters = mMaterial->PackMaterialParameters();
199 if (!materialParameters.buffer.empty())
200 {
201 VkDescriptorPoolSize materialParameterPool;
202 materialParameterPool.type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
203 materialParameterPool.descriptorCount = maxFramesInFlight;
204
205 poolSizes.push_back(materialParameterPool);
206 }
207
208 for (const auto& texture : mMaterial->GetTextures())
209 {
210 (void)texture;
211 VkDescriptorPoolSize textureSamplerPool;
212 textureSamplerPool.type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
213 textureSamplerPool.descriptorCount = maxFramesInFlight;
214
215 poolSizes.push_back(textureSamplerPool);
216 }
217
218 VkDescriptorPoolCreateInfo poolInfo{};
219 poolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
220 poolInfo.poolSizeCount = static_cast<uint32_t>(poolSizes.size());
221 poolInfo.pPoolSizes = poolSizes.data();
222 poolInfo.maxSets = maxFramesInFlight;
223
224 if (vkCreateDescriptorPool(mRenderer->GetLogicalDevice(), &poolInfo, nullptr, &mDescriptorPool) != VK_SUCCESS)
225 {
226 throw std::runtime_error("failed to create descriptor pool!");
227 }
228}
std::vector< std::string > GetTextures() const
Returns the list of texture names used by this material.
Definition: material.cpp:82
PackedMaterialData PackMaterialParameters()
Packs the current float/vector parameters into a binary buffer and layout metadata.
Definition: material.cpp:39
VkDevice & GetLogicalDevice()
Returns reference to the logical Vulkan device.
const int MAX_FRAMES_IN_FLIGHT
Number of frames that can be processed simultaneously (double buffering).

◆ CreateDescriptorSet()

void rendering_engine::VulkanRenderResources::CreateDescriptorSet ( )
protected

Definition at line 230 of file vulkan_render_resources.cpp.

231{
232 // By local convention of this engine, bindings will be numbered:
233 // Bindings i = 0, i < n, there n - total number of bindings
234 // Binding i - transformations matrices of types according to material domain (2D or 3D)
235 // Binding i++ - cunstom parameter variable of material, if any. All variables will be
236 // serialized and packed in a single binding
237 // Binding i++ - textures sampler, if any. One texture per binding.
238
239 const uint32_t maxFramesInFlight = static_cast<uint32_t>(MAX_FRAMES_IN_FLIGHT);
240
241 VulkanMaterialResources* materialResources = static_cast<VulkanMaterialResources*>(mMaterial->GetMaterialRenderResources());
242 auto descriptorSetLayout = materialResources->GetDescriptorSetLayout();
243 std::vector<VkDescriptorSetLayout> layouts(maxFramesInFlight, descriptorSetLayout);
244 VkDescriptorSetAllocateInfo allocInfo{};
245 allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
246 allocInfo.descriptorPool = mDescriptorPool;
247 allocInfo.descriptorSetCount = maxFramesInFlight;
248 allocInfo.pSetLayouts = layouts.data();
249
250 mDescriptorSets.resize(MAX_FRAMES_IN_FLIGHT);
251 VkResult result = vkAllocateDescriptorSets(mRenderer->GetLogicalDevice(), &allocInfo, mDescriptorSets.data());
252 if (result != VK_SUCCESS)
253 {
254 throw std::runtime_error("failed to allocate descriptor sets! Error: " + std::to_string(result));
255 }
256
257 for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
258 {
259 unsigned int dstBinding = 0;
260
261 VkDescriptorBufferInfo matVarBufferInfo{};
262 VkWriteDescriptorSet matVarDescSet;
263
264 std::vector<VkWriteDescriptorSet> descriptorWrites;
265
266 // Transfotmations descriptor set
267 VkDescriptorBufferInfo transformationBufferInfo{};
268 transformationBufferInfo.buffer = mTransformationBuffers[i];
269 transformationBufferInfo.offset = 0;
271 {
272 transformationBufferInfo.range = sizeof(Transformations2D);
273 }
275 {
276 transformationBufferInfo.range = sizeof(Transformations3D);
277 }
278 VkWriteDescriptorSet transformationsDescSet;
279 transformationsDescSet.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
280 transformationsDescSet.pNext = nullptr;
281 transformationsDescSet.dstSet = mDescriptorSets[i];
282 transformationsDescSet.dstBinding = dstBinding;
283 transformationsDescSet.dstArrayElement = 0;
284 transformationsDescSet.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
285 transformationsDescSet.descriptorCount = 1;
286 transformationsDescSet.pBufferInfo = &transformationBufferInfo;
287 descriptorWrites.push_back(transformationsDescSet);
288
289 // Custom material parameters descriptor set
290 auto materialParameters = mMaterial->PackMaterialParameters();
291 if (!materialParameters.buffer.empty())
292 {
293 ++dstBinding;
294
295 matVarBufferInfo.buffer = mMaterialParametersBuffers[i];
296 matVarBufferInfo.offset = 0;
297 matVarBufferInfo.range = materialParameters.buffer.size();
298
299 matVarDescSet.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
300 matVarDescSet.pNext = nullptr;
301 matVarDescSet.dstSet = mDescriptorSets[i];
302 matVarDescSet.dstBinding = dstBinding;
303 matVarDescSet.dstArrayElement = 0;
304 matVarDescSet.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
305 matVarDescSet.descriptorCount = 1;
306 matVarDescSet.pBufferInfo = &matVarBufferInfo;
307 descriptorWrites.push_back(matVarDescSet);
308 }
309
310 // Custom texture image data descriptor set
311 for (const auto& texture : mMaterial->GetTextures())
312 {
313 ++dstBinding;
314 auto imageData = mTextureCache->GetTextureResources(texture);
315 VulkanTextureResources* textureResources = static_cast<VulkanTextureResources*>(imageData->GetTextureRenderResources());
316 VkDescriptorImageInfo imageInfo{};
317 imageInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
318 imageInfo.imageView = textureResources->GetVkImageView();
319 imageInfo.sampler = textureResources->GetVkSampler();
320
321 VkWriteDescriptorSet imageDescSet;
322 imageDescSet.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
323 imageDescSet.pNext = nullptr;
324 imageDescSet.dstSet = mDescriptorSets[i];
325 imageDescSet.dstBinding = dstBinding;
326 imageDescSet.dstArrayElement = 0;
327 imageDescSet.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
328 imageDescSet.descriptorCount = 1;
329 imageDescSet.pImageInfo = &imageInfo;
330
331 descriptorWrites.push_back(imageDescSet);
332 }
333
334 vkUpdateDescriptorSets(mRenderer->GetLogicalDevice(), static_cast<uint32_t>(descriptorWrites.size()), descriptorWrites.data(), 0, nullptr);
335 }
336}
const MaterialSettings GetMaterialSettings() const
Returns the material's static settings (domain, blend mode, shading model, etc.).
Definition: material.cpp:22
std::shared_ptr< ImageDataGpu > GetTextureResources(std::string filename)
Retrieves the full texture resource wrapper from cache.

◆ CreateUniformBuffers()

void rendering_engine::VulkanRenderResources::CreateUniformBuffers ( )
protected

Definition at line 147 of file vulkan_render_resources.cpp.

148{
149 VkDeviceSize transformationBufferSize;
151 {
152 transformationBufferSize = sizeof(Transformations2D);
153 }
155 {
156 transformationBufferSize = sizeof(Transformations3D);
157 }
158
159 mTransformationBuffers.resize(MAX_FRAMES_IN_FLIGHT);
160 mTransformationBuffersMemory.resize(MAX_FRAMES_IN_FLIGHT);
161
162 for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
163 {
164 mRenderer->CreateBuffer(transformationBufferSize, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
165 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
166 mTransformationBuffers[i], mTransformationBuffersMemory[i]);
167 }
168
169 auto materialParameters = mMaterial->PackMaterialParameters();
170 if (materialParameters.buffer.empty())
171 {
172 return;
173 }
174
175 VkDeviceSize matVarBufferSize = materialParameters.buffer.size();
176 mMaterialParametersBuffers.resize(MAX_FRAMES_IN_FLIGHT);
177 mMaterialParametersMemory.resize(MAX_FRAMES_IN_FLIGHT);
178
179 for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
180 {
181 mRenderer->CreateBuffer(matVarBufferSize, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
182 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
183 mMaterialParametersBuffers[i], mMaterialParametersMemory[i]);
184 }
185}
void CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer &buffer, VkDeviceMemory &bufferMemory)
Creates a new Vulkan buffer with the specified usage and memory properties.

◆ DrawIndexed()

void rendering_engine::VulkanRenderResources::DrawIndexed ( )
protected

Issues a Vulkan draw command for the currently bound indexed mesh.

Definition at line 379 of file vulkan_render_resources.cpp.

380{
381 auto commandBuffers = mRenderer->GetComandBuffers();
382 auto frame = mRenderer->GetCurrentFrame();
383
384 VkBuffer vertexBuffer[] = { mVertexBuffer };
385 VkDeviceSize offsets[] = { 0 };
386
387 vkCmdBindPipeline(commandBuffers[frame], VK_PIPELINE_BIND_POINT_GRAPHICS, mGraphicsPipeline);
388
389 /*If dynamicState in pipeline is used then vkCmdSetViewport and vkCmdSetScissor per draw call*/
390 //VkViewport viewport{};
391 //viewport.x = 0.0f;
392 //viewport.y = 0.0f;
393 //viewport.width = static_cast<float>(mRenderer->GetSwapChainExtent().width);
394 //viewport.height = static_cast<float>(mRenderer->GetSwapChainExtent().height);
395 //viewport.minDepth = 0.0f;
396 //viewport.maxDepth = 1.0f;
397 //vkCmdSetViewport(commandBuffers[frame], 0, 1, &viewport);
398
399 //VkRect2D scissor{};
400 //scissor.offset = { 0, 0 };
401 //scissor.extent = mRenderer->GetSwapChainExtent();
402 //vkCmdSetScissor(commandBuffers[frame], 0, 1, &scissor);
403
404 vkCmdBindVertexBuffers(commandBuffers[frame], 0, 1, vertexBuffer, offsets);
405 vkCmdBindIndexBuffer(commandBuffers[frame], mIndexBuffer, 0, VK_INDEX_TYPE_UINT32);
406 vkCmdBindDescriptorSets(commandBuffers[frame], VK_PIPELINE_BIND_POINT_GRAPHICS,
407 mPipelineLayout, 0, 1, &mDescriptorSets[frame], 0, nullptr);
408 vkCmdDrawIndexed(commandBuffers[frame], static_cast<uint32_t>(mMeshData->GetIndices().size()), 1, 0, 0, 0);
409}
const std::vector< uint32_t > & GetIndices() const
Returns a constant reference to the mesh indices.
size_t GetCurrentFrame() const
Returns the index of the currently active frame in flight.
std::vector< VkCommandBuffer > GetComandBuffers()
Returns the collection of command buffers used for rendering.

◆ Initialize()

void rendering_engine::VulkanRenderResources::Initialize ( Material material,
MeshDataGpu meshData,
TextureCache textureCache 
)
overridevirtual

Initializes GPU-side resources using provided material, mesh, and texture cache.

Parameters
materialPointer to the Material describing the shader and its parameters.
meshDataPointer to MeshDataGpu containing vertex and index buffers.
textureCachePointer to the TextureCache containing all loaded textures.
Note
Ownership of parameters is not transferred; caller must ensure they remain valid.

Implements rendering_engine::IRenderResources.

Definition at line 29 of file vulkan_render_resources.cpp.

30{
31 mMaterial = material;
32 mMeshData = meshData;
33 mTextureCache = textureCache;
34
36}
void AcquireResources()
Allocates and initializes all GPU buffers, descriptor sets, and pipelines for this drawable.

◆ OnRenderResourcesRebuild()

void rendering_engine::VulkanRenderResources::OnRenderResourcesRebuild ( )
overrideprotectedvirtual

Renderer callback: re-upload or recreate all GPU resources (used after device reset/rebuild).

This method will be called after the device or swapchain is recreated, allowing the observer to re-upload or recreate all necessary resources for rendering.

Implements rendering_engine::IRendererObserver.

Definition at line 122 of file vulkan_render_resources.cpp.

123{
125}

◆ OnRenderResourcesRelease()

void rendering_engine::VulkanRenderResources::OnRenderResourcesRelease ( )
overrideprotectedvirtual

Renderer callback: release all GPU resources (used during device loss/reset).

This method will be called before any device or swapchain is destroyed, allowing the observer to safely release all handles and deallocate any GPU memory.

Implements rendering_engine::IRendererObserver.

Definition at line 117 of file vulkan_render_resources.cpp.

118{
119 Shutdown();
120}
void Shutdown() override
Releases all allocated GPU resources for this object.

◆ Shutdown()

void rendering_engine::VulkanRenderResources::Shutdown ( )
overridevirtual

Releases all allocated GPU resources for this object.

Implements rendering_engine::IRenderResources.

Definition at line 52 of file vulkan_render_resources.cpp.

53{
54 if (mDescriptorPool != VK_NULL_HANDLE)
55 {
56 DeferredItem descriptorPool;
57 descriptorPool.type = DeferredType::DescriptorPool;
58 descriptorPool.descriptorPool = mDescriptorPool;
59 mRenderer->AddDeferredDestroy(descriptorPool);
60 mDescriptorPool = VK_NULL_HANDLE;
61
62 }
63
64 for (size_t i = 0; i < mTransformationBuffers.size(); i++)
65 {
66 if (mTransformationBuffers[i] != VK_NULL_HANDLE)
67 {
68 DeferredItem tBuffer;
69 tBuffer.type = DeferredType::Buffer;
70 tBuffer.buffer = mTransformationBuffers[i];
71 mRenderer->AddDeferredDestroy(tBuffer);
72 }
73
74 if (i < mTransformationBuffersMemory.size() &&
75 mTransformationBuffersMemory[i] != VK_NULL_HANDLE)
76 {
77
78 DeferredItem tMem;
79 tMem.type = DeferredType::Memory;
80 tMem.memory = mTransformationBuffersMemory[i];
81 mRenderer->AddDeferredDestroy(tMem);
82
83 mTransformationBuffers[i] = VK_NULL_HANDLE;
84 mTransformationBuffersMemory[i] = VK_NULL_HANDLE;
85 }
86 }
87
88 for(size_t i = 0; i < mMaterialParametersBuffers.size(); ++i)
89 {
90 if (mMaterialParametersBuffers[i] != VK_NULL_HANDLE)
91 {
92 DeferredItem matBuffer;
93 matBuffer.type = DeferredType::Buffer;
94 matBuffer.buffer = mMaterialParametersBuffers[i];
95 mRenderer->AddDeferredDestroy(matBuffer);
96 }
97
98 if(i < mMaterialParametersMemory.size() &&
99 mMaterialParametersMemory[i] != VK_NULL_HANDLE)
100 {
101 DeferredItem matMem;
102 matMem.type = DeferredType::Memory;
103 matMem.memory = mMaterialParametersMemory[i];
104 mRenderer->AddDeferredDestroy(matMem);
105
106 mMaterialParametersBuffers[i] = VK_NULL_HANDLE;
107 mMaterialParametersMemory[i] = VK_NULL_HANDLE;
108 }
109 }
110
111 mTransformationBuffers.clear();
112 mTransformationBuffersMemory.clear();
113 mMaterialParametersBuffers.clear();
114 mMaterialParametersMemory.clear();
115}
void AddDeferredDestroy(DeferredItem deferredItem)

◆ SubmitResources() [1/2]

void rendering_engine::VulkanRenderResources::SubmitResources ( Transformations2D transformations,
const PackedMaterialData materialParameters 
)
overridevirtual

Updates GPU resources and issues a draw call for a 2D object.

Parameters
transformationsTransformation data (2D).
materialParametersPacked structure with material parameters for the draw call.

Implements rendering_engine::IRenderResources.

Definition at line 38 of file vulkan_render_resources.cpp.

39{
40 UpdateTransformations(transformations);
41 UpdateMaterialParameters(materialParameters);
43}
void DrawIndexed()
Issues a Vulkan draw command for the currently bound indexed mesh.
void UpdateTransformations(Transformations2D &transformations)
void UpdateMaterialParameters(const PackedMaterialData &materialParameters)

◆ SubmitResources() [2/2]

void rendering_engine::VulkanRenderResources::SubmitResources ( Transformations3D transformations,
const PackedMaterialData materialParameters 
)
overridevirtual

Updates GPU resources and issues a draw call for a 3D object.

Parameters
transformationsTransformation data (3D).
materialParametersPacked structure with material parameters for the draw call.

Implements rendering_engine::IRenderResources.

Definition at line 45 of file vulkan_render_resources.cpp.

46{
47 UpdateTransformations(transformations);
48 UpdateMaterialParameters(materialParameters);
50}

◆ UpdateMaterialParameters()

void rendering_engine::VulkanRenderResources::UpdateMaterialParameters ( const PackedMaterialData materialParameters)
protected

Definition at line 364 of file vulkan_render_resources.cpp.

365{
366 auto device = mRenderer->GetLogicalDevice();
367 auto frame = mRenderer->GetCurrentFrame();
368
369 // Update custom variables
370 if (!materialParameters.buffer.empty())
371 {
372 void* dataCustom;
373 vkMapMemory(device, mMaterialParametersMemory[frame], 0, materialParameters.buffer.size(), 0, &dataCustom);
374 memcpy(dataCustom, materialParameters.buffer.data(), materialParameters.buffer.size());
375 vkUnmapMemory(device, mMaterialParametersMemory[frame]);
376 }
377}

◆ UpdateTransformations() [1/2]

void rendering_engine::VulkanRenderResources::UpdateTransformations ( Transformations2D transformations)
protected

Definition at line 338 of file vulkan_render_resources.cpp.

339{
340 auto device = mRenderer->GetLogicalDevice();
341 auto frame = mRenderer->GetCurrentFrame();
342
343 // Update transformations
344 void* dataTransform;
345 vkMapMemory(device, mTransformationBuffersMemory[frame], 0, sizeof(Transformations2D), 0, &dataTransform);
346 memcpy(dataTransform, &transformations, sizeof(transformations));
347 vkUnmapMemory(device, mTransformationBuffersMemory[frame]);
348}

◆ UpdateTransformations() [2/2]

void rendering_engine::VulkanRenderResources::UpdateTransformations ( Transformations3D transformations)
protected

Definition at line 350 of file vulkan_render_resources.cpp.

351{
352 auto device = mRenderer->GetLogicalDevice();
353 auto frame = mRenderer->GetCurrentFrame();
354
355 // Flip Y-axis for Vulkan clip space
356 transformations.proj[1][1] *= -1;
357 // Update transformations
358 void* dataTransform;
359 vkMapMemory(device, mTransformationBuffersMemory[frame], 0, sizeof(Transformations3D), 0, &dataTransform);
360 memcpy(dataTransform, &transformations, sizeof(transformations));
361 vkUnmapMemory(device, mTransformationBuffersMemory[frame]);
362}

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