Rendering Engine 0.2.0
Modular Graphics Rendering Engine | v0.2.0
Loading...
Searching...
No Matches
rendering_engine::VulkanMeshResources Class Reference

Vulkan implementation of the mesh GPU resource interface. More...

#include <vulkan_mesh_resources.hpp>

Inherits rendering_engine::IMeshRenderResources.

Public Member Functions

 VulkanMeshResources (VulkanRenderer *renderer)
 Construct Vulkan mesh resources.
void CreateVertexBuffer (std::vector< Vertex2D > vertices) override
 Create a GPU vertex buffer from 2D vertex data.
void CreateVertexBuffer (std::vector< VertexPositionColorTexture > vertices) override
 Create a GPU vertex buffer from 3D unlit vertex data.
void CreateVertexBuffer (std::vector< VertexPositionColorTextureNormalTangent > vertices) override
 Create a GPU vertex buffer from 3D lit vertex data.
void CreateIndexBuffer (std::vector< uint32_t > indices) override
 Create a GPU index buffer.
bool IsOnGPU () const override
 Query whether buffers are currently resident on the GPU.
void Shutdown () override
 Release all GPU resources associated with this mesh.
VkBuffer GetVertexBuffer () const
 Get the Vulkan vertex buffer handle.
VkBuffer GetIndexBuffer () const
 Get the Vulkan index buffer handle.
size_t GetVertexBufferSize () const override
 Get the size (in bytes) of the GPU vertex buffer.
size_t GetIndexBufferSize () const override
 Get the size (in bytes) of the GPU index buffer.
Public Member Functions inherited from rendering_engine::IMeshRenderResources
virtual ~IMeshRenderResources ()=default
 Virtual destructor.

Detailed Description

Vulkan implementation of the mesh GPU resource interface.

Manages Vulkan buffers and device memory for mesh vertex and index data. Supports multiple vertex types and provides direct access to underlying VkBuffer handles.

Definition at line 22 of file vulkan_mesh_resources.hpp.

Constructor & Destructor Documentation

◆ VulkanMeshResources()

rendering_engine::VulkanMeshResources::VulkanMeshResources ( VulkanRenderer * renderer)

Construct Vulkan mesh resources.

Parameters
rendererPointer to the owning VulkanRenderer.

Definition at line 9 of file vulkan_mesh_resources.cpp.

10 :
11 mRenderer(renderer),
12 bIsOnGPU(false),
13 mVertexBufferSize(0),
14 mIndexBufferSize(0)
15{
16}

Member Function Documentation

◆ CreateIndexBuffer()

void rendering_engine::VulkanMeshResources::CreateIndexBuffer ( std::vector< uint32_t > indices)
overridevirtual

Create a GPU index buffer.

Parameters
indicesVector of indices.

Implements rendering_engine::IMeshRenderResources.

Definition at line 96 of file vulkan_mesh_resources.cpp.

97{
98 auto logicalDevice = mRenderer->GetLogicalDevice();
99
100 VkDeviceSize bufferSize = sizeof(indices[0]) * indices.size();
101 mIndexBufferSize = static_cast<size_t>(bufferSize);
102
103 VkBuffer stagingBuffer;
104 VkDeviceMemory stagingBufferMemory;
105 mRenderer->CreateBuffer(bufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, stagingBuffer, stagingBufferMemory);
106
107 void* data;
108 vkMapMemory(logicalDevice, stagingBufferMemory, 0, bufferSize, 0, &data);
109 memcpy(data, indices.data(), mIndexBufferSize);
110 vkUnmapMemory(logicalDevice, stagingBufferMemory);
111
112 mRenderer->CreateBuffer(bufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, mIndexBuffer, mIndexBufferMemory);
113
114 mRenderer->CopyBuffer(stagingBuffer, mIndexBuffer, bufferSize);
115
116 vkDestroyBuffer(logicalDevice, stagingBuffer, nullptr);
117 vkFreeMemory(logicalDevice, stagingBufferMemory, nullptr);
118}

◆ CreateVertexBuffer() [1/3]

void rendering_engine::VulkanMeshResources::CreateVertexBuffer ( std::vector< Vertex2D > vertices)
overridevirtual

Create a GPU vertex buffer from 2D vertex data.

Parameters
verticesVector of 2D vertex data.

Implements rendering_engine::IMeshRenderResources.

Definition at line 18 of file vulkan_mesh_resources.cpp.

19{
20 auto logicalDevice = mRenderer->GetLogicalDevice();
21
22 VkDeviceSize bufferSize = sizeof(vertices[0]) * vertices.size();
23 mVertexBufferSize = static_cast<size_t>(bufferSize);
24 VkBuffer stagingBuffer;
25 VkDeviceMemory stagingBufferMemory;
26 mRenderer->CreateBuffer(bufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
27 stagingBuffer, stagingBufferMemory);
28
29 void* data;
30 vkMapMemory(logicalDevice, stagingBufferMemory, 0, bufferSize, 0, &data);
31
32 memcpy(data, vertices.data(), mVertexBufferSize);
33 vkUnmapMemory(logicalDevice, stagingBufferMemory);
34 mRenderer->CreateBuffer(bufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
35 mVertexBuffer, mVertexBufferMemory);
36
37 mRenderer->CopyBuffer(stagingBuffer, mVertexBuffer, bufferSize);
38
39 bIsOnGPU = true;
40 vkDestroyBuffer(logicalDevice, stagingBuffer, nullptr);
41 vkFreeMemory(logicalDevice, stagingBufferMemory, nullptr);
42}

◆ CreateVertexBuffer() [2/3]

void rendering_engine::VulkanMeshResources::CreateVertexBuffer ( std::vector< VertexPositionColorTexture > vertices)
overridevirtual

Create a GPU vertex buffer from 3D unlit vertex data.

Parameters
verticesVector of VertexPositionColorTexture data.

Implements rendering_engine::IMeshRenderResources.

Definition at line 44 of file vulkan_mesh_resources.cpp.

45{
46 auto logicalDevice = mRenderer->GetLogicalDevice();
47
48 VkDeviceSize bufferSize = sizeof(vertices[0]) * vertices.size();
49 mVertexBufferSize = static_cast<size_t>(bufferSize);
50 VkBuffer stagingBuffer;
51 VkDeviceMemory stagingBufferMemory;
52 mRenderer->CreateBuffer(bufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
53 stagingBuffer, stagingBufferMemory);
54
55 void* data;
56 vkMapMemory(logicalDevice, stagingBufferMemory, 0, bufferSize, 0, &data);
57
58 memcpy(data, vertices.data(), mVertexBufferSize);
59 vkUnmapMemory(logicalDevice, stagingBufferMemory);
60 mRenderer->CreateBuffer(bufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
61 mVertexBuffer, mVertexBufferMemory);
62
63 mRenderer->CopyBuffer(stagingBuffer, mVertexBuffer, bufferSize);
64
65 bIsOnGPU = true;
66 vkDestroyBuffer(logicalDevice, stagingBuffer, nullptr);
67 vkFreeMemory(logicalDevice, stagingBufferMemory, nullptr);
68}

◆ CreateVertexBuffer() [3/3]

void rendering_engine::VulkanMeshResources::CreateVertexBuffer ( std::vector< VertexPositionColorTextureNormalTangent > vertices)
overridevirtual

Create a GPU vertex buffer from 3D lit vertex data.

Parameters
verticesVector of VertexPositionColorTextureNormalTangent data.

Implements rendering_engine::IMeshRenderResources.

Definition at line 70 of file vulkan_mesh_resources.cpp.

71{
72 auto logicalDevice = mRenderer->GetLogicalDevice();
73
74 VkDeviceSize bufferSize = sizeof(vertices[0]) * vertices.size();
75 mVertexBufferSize = static_cast<size_t>(bufferSize);
76 VkBuffer stagingBuffer;
77 VkDeviceMemory stagingBufferMemory;
78 mRenderer->CreateBuffer(bufferSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
79 stagingBuffer, stagingBufferMemory);
80
81 void* data;
82 vkMapMemory(logicalDevice, stagingBufferMemory, 0, bufferSize, 0, &data);
83
84 memcpy(data, vertices.data(), mVertexBufferSize);
85 vkUnmapMemory(logicalDevice, stagingBufferMemory);
86 mRenderer->CreateBuffer(bufferSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
87 mVertexBuffer, mVertexBufferMemory);
88
89 mRenderer->CopyBuffer(stagingBuffer, mVertexBuffer, bufferSize);
90
91 bIsOnGPU = true;
92 vkDestroyBuffer(logicalDevice, stagingBuffer, nullptr);
93 vkFreeMemory(logicalDevice, stagingBufferMemory, nullptr);
94}

◆ GetIndexBuffer()

VkBuffer rendering_engine::VulkanMeshResources::GetIndexBuffer ( ) const

Get the Vulkan index buffer handle.

Returns
VkBuffer handle for the index buffer.

Definition at line 143 of file vulkan_mesh_resources.cpp.

144{
145 return mIndexBuffer;
146}

◆ GetIndexBufferSize()

size_t rendering_engine::VulkanMeshResources::GetIndexBufferSize ( ) const
inlineoverridevirtual

Get the size (in bytes) of the GPU index buffer.

Returns
Size in bytes of the index buffer.

Implements rendering_engine::IMeshRenderResources.

Definition at line 153 of file vulkan_mesh_resources.cpp.

154{
155 return mIndexBufferSize;
156}

◆ GetVertexBuffer()

VkBuffer rendering_engine::VulkanMeshResources::GetVertexBuffer ( ) const

Get the Vulkan vertex buffer handle.

Returns
VkBuffer handle for the vertex buffer.

Definition at line 138 of file vulkan_mesh_resources.cpp.

139{
140 return mVertexBuffer;
141}

◆ GetVertexBufferSize()

size_t rendering_engine::VulkanMeshResources::GetVertexBufferSize ( ) const
inlineoverridevirtual

Get the size (in bytes) of the GPU vertex buffer.

Returns
Size in bytes of the vertex buffer.

Implements rendering_engine::IMeshRenderResources.

Definition at line 148 of file vulkan_mesh_resources.cpp.

149{
150 return mVertexBufferSize;
151}

◆ IsOnGPU()

bool rendering_engine::VulkanMeshResources::IsOnGPU ( ) const
inlineoverridevirtual

Query whether buffers are currently resident on the GPU.

Returns
True if buffers are allocated and uploaded, false otherwise.

Implements rendering_engine::IMeshRenderResources.

Definition at line 120 of file vulkan_mesh_resources.cpp.

121{
122 return bIsOnGPU;
123}

◆ Shutdown()

void rendering_engine::VulkanMeshResources::Shutdown ( )
overridevirtual

Release all GPU resources associated with this mesh.

Implements rendering_engine::IMeshRenderResources.

Definition at line 125 of file vulkan_mesh_resources.cpp.

126{
127 auto logicalDevice = mRenderer->GetLogicalDevice();
128
129 vkDestroyBuffer(logicalDevice, mIndexBuffer, nullptr);
130 vkFreeMemory(logicalDevice, mIndexBufferMemory, nullptr);
131
132 vkDestroyBuffer(logicalDevice, mVertexBuffer, nullptr);
133 vkFreeMemory(logicalDevice, mVertexBufferMemory, nullptr);
134
135 bIsOnGPU = false;
136}

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