Skip to content
Snippets Groups Projects
Commit 841d812c authored by Trevor Hollmann's avatar Trevor Hollmann
Browse files

[#26] Fix potential out-of-scope error.

See discussion in merge request !19
parent 3923d935
No related branches found
No related tags found
1 merge request!19Resolve "Asset Loading"
#include "vkcv/asset/asset_loader.hpp" #include "vkcv/asset/asset_loader.hpp"
#include <iostream> #include <iostream>
#include <string.h> // memcpy(3)
#include <stdlib.h> // calloc(3)
#include <fx/gltf.h> #include <fx/gltf.h>
namespace vkcv::asset { namespace vkcv::asset {
...@@ -141,15 +143,19 @@ namespace vkcv::asset { ...@@ -141,15 +143,19 @@ namespace vkcv::asset {
// proven to work // proven to work
// indexBuffer // indexBuffer
fx::gltf::Accessor & indexAccessor = object.accessors[objectPrimitive.indices]; const fx::gltf::Accessor &indexAccessor = object.accessors[objectPrimitive.indices];
fx::gltf::BufferView & indexBufferView = object.bufferViews[indexAccessor.bufferView]; const fx::gltf::BufferView &indexBufferView = object.bufferViews[indexAccessor.bufferView];
fx::gltf::Buffer & indexBuffer = object.buffers[indexBufferView.buffer]; const fx::gltf::Buffer &indexBuffer = object.buffers[indexBufferView.buffer];
void* indexBufferData = &indexBuffer.data; void *indexBufferData = calloc(1, indexBuffer.byteLength);
if (memcpy(indexBufferData, indexBuffer.data.data(), indexBuffer.byteLength) == NULL) {
fprintf(stderr, "ERROR copying buffer data.\n");
return 0;
}
// vertexBuffer // vertexBuffer
fx::gltf::BufferView& vertexBufferView = object.bufferViews[posAccessor.bufferView]; fx::gltf::BufferView& vertexBufferView = object.bufferViews[posAccessor.bufferView];
fx::gltf::Buffer& vertexBuffer = object.buffers[vertexBufferView.buffer]; fx::gltf::Buffer& vertexBuffer = object.buffers[vertexBufferView.buffer];
void* vertexBufferData; void *vertexBufferData;
// check whether only one buffer is used // check whether only one buffer is used
if (indexBufferView.buffer == vertexBufferView.buffer){ if (indexBufferView.buffer == vertexBufferView.buffer){
...@@ -157,11 +163,16 @@ namespace vkcv::asset { ...@@ -157,11 +163,16 @@ namespace vkcv::asset {
vertexBufferData = indexBufferData; vertexBufferData = indexBufferData;
} else { } else {
std::cout << "No luck, different Buffers :(" << std::endl; std::cout << "No luck, different Buffers :(" << std::endl;
vertexBufferData = &vertexBuffer.data; vertexBufferData = calloc(1, vertexBuffer.byteLength);
if (memcpy(vertexBufferData, vertexBuffer.data.data(), vertexBuffer.byteLength) == NULL) {
fprintf(stderr, "ERROR copying buffer data.\n");
return 0;
}
} }
// fill vertex groups vector // fill vertex groups vector
vertexGroups.push_back(VertexGroup{}); const size_t numVertexGroups = 1; // TODO get value from fx-gltf
vertexGroups.resize(numVertexGroups);
vertexGroups.back() = { vertexGroups.back() = {
static_cast<PrimitiveMode>(objectPrimitive.mode), // mode static_cast<PrimitiveMode>(objectPrimitive.mode), // mode
object.accessors[objectPrimitive.indices].count, // num indices object.accessors[objectPrimitive.indices].count, // num indices
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment