22
33Mesh::Mesh (std::vector<Vertex> vertices, const std::vector<uint32_t >& indices, std::shared_ptr<Renderer> p_renderer) : m_vertices(vertices), m_indices(indices), mp_renderer(p_renderer)
44{
5+ m_buffer = nullptr ;
6+ m_old_buffer = nullptr ;
57}
68
79Mesh::Mesh (const std::string& obj_path, std::shared_ptr<Renderer> p_renderer) : m_obj_path(obj_path), mp_renderer(p_renderer)
810{
11+ m_buffer = nullptr ;
12+ m_old_buffer = nullptr ;
13+
914 loadModel ();
1015}
1116
@@ -17,11 +22,11 @@ void Mesh::draw(const VkCommandBuffer& command_buffer)
1722{
1823 vkCmdBindPipeline (command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, p_material->GetPipeline ().handle );
1924
20- VkBuffer vertex_buffer[] = { m_buffer. vertex };
25+ VkBuffer vertex_buffer[] = { m_buffer-> vertex };
2126 VkDeviceSize offsets[] = { 0 };
2227
2328 vkCmdBindVertexBuffers (command_buffer, 0 , 1 , vertex_buffer, offsets);
24- vkCmdBindIndexBuffer (command_buffer, m_buffer. index , 0 , VK_INDEX_TYPE_UINT32);
29+ vkCmdBindIndexBuffer (command_buffer, m_buffer-> index , 0 , VK_INDEX_TYPE_UINT32);
2530
2631 vkCmdBindDescriptorSets (command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, p_material->GetPipeline ().layout , 0 , 1 , &p_material->getDescriptorSet (), 0 , nullptr );
2732
@@ -86,19 +91,47 @@ void Mesh::bindMaterial(std::shared_ptr<Material> mat, VkBuffer& ubo, std::share
8691 p_material = mat;
8792}
8893
89- void Mesh::createBuffer (std::shared_ptr<Renderer> engine)
94+ void Mesh::CreateBuffers (std::shared_ptr<Renderer> engine)
9095{
91- engine->createVerticesBuffer (std::make_shared<std::vector<Vertex>>(m_vertices), m_buffer);
92- engine->createIndicesBuffer (std::make_shared<std::vector<uint32_t >>(m_indices), m_buffer);
96+ m_old_buffer = m_buffer;
97+ m_buffer = new Buffer ();
98+
99+ engine->createVerticesBuffer (std::make_shared<std::vector<Vertex>>(m_vertices), *m_buffer);
100+ engine->createIndicesBuffer (std::make_shared<std::vector<uint32_t >>(m_indices), *m_buffer);
93101}
94102
95- void Mesh::destroyMesh ()
103+ void Mesh::DestroyOldBuffers ()
96104{
97- vkDestroyBuffer (mp_renderer->getDevice (), m_buffer.index , nullptr );
98- vkFreeMemory (mp_renderer->getDevice (), m_buffer.index_memory , nullptr );
105+ if (m_old_buffer == nullptr )
106+ return ;
107+
108+ vkDestroyBuffer (mp_renderer->getDevice (), m_old_buffer->index , nullptr );
109+ vkFreeMemory (mp_renderer->getDevice (), m_old_buffer->index_memory , nullptr );
99110
100- vkDestroyBuffer (mp_renderer->getDevice (), m_buffer.vertex , nullptr );
101- vkFreeMemory (mp_renderer->getDevice (), m_buffer.vertex_memory , nullptr );
111+ vkDestroyBuffer (mp_renderer->getDevice (), m_old_buffer->vertex , nullptr );
112+ vkFreeMemory (mp_renderer->getDevice (), m_old_buffer->vertex_memory , nullptr );
113+
114+ delete (m_old_buffer);
115+ m_old_buffer = nullptr ;
116+ }
117+
118+ void Mesh::DestroyBuffers ()
119+ {
120+ vkDestroyBuffer (mp_renderer->getDevice (), m_buffer->index , nullptr );
121+ vkFreeMemory (mp_renderer->getDevice (), m_buffer->index_memory , nullptr );
122+
123+ vkDestroyBuffer (mp_renderer->getDevice (), m_buffer->vertex , nullptr );
124+ vkFreeMemory (mp_renderer->getDevice (), m_buffer->vertex_memory , nullptr );
125+ }
126+
127+ void Mesh::SetVertices (const std::vector<Vertex>& vertices)
128+ {
129+ m_vertices = vertices;
130+ }
131+
132+ void Mesh::SetIndices (const std::vector<uint32_t >& indices)
133+ {
134+ m_indices = indices;
102135}
103136
104137void Mesh::SetVertices (const std::vector<Vertex>& vertices)
@@ -123,7 +156,12 @@ std::vector<uint32_t>& Mesh::get_indices()
123156
124157Buffer & Mesh::getBuffer ()
125158{
126- return m_buffer;
159+ return *m_buffer;
160+ }
161+
162+ Buffer* Mesh::GetOldBuffer ()
163+ {
164+ return m_old_buffer;
127165}
128166
129167std::shared_ptr<Material> Mesh::getMaterial ()
0 commit comments