void VulkanExampleBase::loadMesh( std::string filename, vkMeshLoader::MeshBuffer * meshBuffer, std::vector<vkMeshLoader::VertexLayout> vertexLayout, float scale) { VulkanMeshLoader *mesh = new VulkanMeshLoader(); #if defined(__ANDROID__) mesh->assetManager = androidApp->activity->assetManager; #endif mesh->LoadMesh(filename); assert(mesh->m_Entries.size() > 0); mesh->createVulkanBuffers( device, deviceMemoryProperties, meshBuffer, vertexLayout, scale); meshBuffer->dim = mesh->dim.size; delete(mesh); }
// Load a mesh based on data read via assimp // The other example will use the VulkanMesh loader which has some additional functionality for loading meshes void loadMesh() { VulkanMeshLoader *meshLoader = new VulkanMeshLoader(); meshLoader->LoadMesh("./../data/models/voyager/voyager.obj"); // Generate vertex buffer float scale = 1.0f; std::vector<Vertex> vertexBuffer; // Iterate through all meshes in the file // and extract the vertex information used in this demo for (uint32_t m = 0; m < meshLoader->m_Entries.size(); m++) { for (uint32_t i = 0; i < meshLoader->m_Entries[m].Vertices.size(); i++) { Vertex vertex; vertex.pos = meshLoader->m_Entries[m].Vertices[i].m_pos * scale; vertex.normal = meshLoader->m_Entries[m].Vertices[i].m_normal; vertex.uv = meshLoader->m_Entries[m].Vertices[i].m_tex; vertex.color = meshLoader->m_Entries[m].Vertices[i].m_color; vertexBuffer.push_back(vertex); } } uint32_t vertexBufferSize = vertexBuffer.size() * sizeof(Vertex); // Generate index buffer from loaded mesh file std::vector<uint32_t> indexBuffer; for (uint32_t m = 0; m < meshLoader->m_Entries.size(); m++) { uint32_t indexBase = indexBuffer.size(); for (uint32_t i = 0; i < meshLoader->m_Entries[m].Indices.size(); i++) { indexBuffer.push_back(meshLoader->m_Entries[m].Indices[i] + indexBase); } } uint32_t indexBufferSize = indexBuffer.size() * sizeof(uint32_t); mesh.indices.count = indexBuffer.size(); // Generate vertex buffer createBuffer( VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, vertexBufferSize, vertexBuffer.data(), &mesh.vertices.buf, &mesh.vertices.mem); // Generate index buffer createBuffer( VK_BUFFER_USAGE_INDEX_BUFFER_BIT, indexBufferSize, indexBuffer.data(), &mesh.indices.buf, &mesh.indices.mem); delete(meshLoader); }