#include <vulkan/vulkan.h>
+#include "allocator.h"
#include "mesh-vk.h"
MeshVK::MeshVK()
/* create the buffers */
- if(!(vk_vertices = vku_create_buffer(vertices.size() * sizeof(Vec3),
+ int vsz = vertices.size() * sizeof(Vec3);
+ if(!(vk_vertices = vku_create_buffer(vsz,
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT))) {
fprintf(stderr, "Failed to create the buffer for the vertices.\n");
return false;
}
- if(!(vk_normals = vku_create_buffer(normals.size() * sizeof(Vec3),
+ int nsz = normals.size() * sizeof(Vec3);
+ if(!(vk_normals = vku_create_buffer(nsz,
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT))) {
vku_destroy_buffer(vk_vertices);
return false;
}
- if(!(vk_tex_coords = vku_create_buffer(tex_coords.size() * sizeof(Vec2),
+ int tsz = tex_coords.size() * sizeof(Vec2);
+ if(!(vk_tex_coords = vku_create_buffer(tsz,
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT))) {
vku_destroy_buffer(vk_vertices);
vku_destroy_buffer(vk_normals);
return false;
}
- if(!(vk_indices = vku_create_buffer(indices.size() * 2,
+ int isz = indices.size() * 2;
+ if(!(vk_indices = vku_create_buffer(isz,
VK_BUFFER_USAGE_INDEX_BUFFER_BIT))) {
vku_destroy_buffer(vk_vertices);
vku_destroy_buffer(vk_normals);
return false;
}
- /* map the buffers */
-
- //TODO this is going to change when we allocate one mem block for all data,
- //for the moment we map each buffer memory block and we set the data
+ /* write the buffers */
+ if(!vku_write_memory(vk_vertices->mem_pool, vsz, (void*)vertices.data())) {
+ fprintf(stderr, "Failed to write the vertices on GPU.\n");
+ return false;
+ }
+ if(!vku_write_memory(vk_normals->mem_pool, nsz, (void*)normals.data())) {
+ fprintf(stderr, "Failed to write the normalson GPU.\n");
+ return false;
+ }
+ if(!vku_write_memory(vk_tex_coords->mem_pool, tsz,
+ (void*)tex_coords.data())) {
+ fprintf(stderr, "Failed to write the texture coordinates on GPU.\n");
+ return false;
+ }
+ if(!vku_write_memory(vk_indices->mem_pool, isz, (void*)indices.data())) {
+ fprintf(stderr, "Failed to write the indices on GPU.\n");
+ return false;
+ }
return true;
}