Skip to content
Snippets Groups Projects
Commit c393c2d8 authored by Mara Vogt's avatar Mara Vogt
Browse files

[#26] Implemented comments

Changes according to comments in the issue, mainly in .cpp
Changed enum to match fx-gltf in .hpp
parent a51ca6e3
No related branches found
No related tags found
1 merge request!19Resolve "Asset Loading"
Pipeline #25063 passed
...@@ -43,9 +43,9 @@ ...@@ -43,9 +43,9 @@
namespace vkcv::asset { namespace vkcv::asset {
// enum matches modes in fx-gltf, the library returns a standard mode (TRIANGLES) if no mode is given in the file
enum PrimitiveMode { POINTS=0, LINES, LINELOOP, LINESTRIP, TRIANGLES, TRIANGLESTRIP, TRIANGLEFAN };
/* With these enums, 0 is reserved to signal uninitialized or invalid data. */ /* With these enums, 0 is reserved to signal uninitialized or invalid data. */
enum PrimitiveMode { POINTS=1, LINES, TRIANGLES };
enum PrimitiveType { POSITION=1, NORMAL, TEXCOORD_0 }; enum PrimitiveType { POSITION=1, NORMAL, TEXCOORD_0 };
typedef struct { typedef struct {
......
...@@ -25,6 +25,21 @@ namespace vkcv::asset { ...@@ -25,6 +25,21 @@ namespace vkcv::asset {
default: return 10; // TODO add cases for matrices (or maybe change the type in the struct itself) default: return 10; // TODO add cases for matrices (or maybe change the type in the struct itself)
} }
} }
/**
* This function unrolls nested exceptions via recursion and prints them
* @param e error code
* @param path path to file that is responsible for error
*/
void print_what (const std::exception& e, const std::string &path) {
fprintf(stderr, "ERROR loading file %s: %s\n", path.c_str(), e.what());
try {
std::rethrow_if_nested(e);
} catch (const std::exception& nested) {
std::cerr << "nested: ";
print_what(nested, path);
}
}
int loadMesh(const std::string &path, Mesh &mesh) { int loadMesh(const std::string &path, Mesh &mesh) {
// load the gltf file using the library, return 0 if there is an // load the gltf file using the library, return 0 if there is an
...@@ -40,16 +55,18 @@ namespace vkcv::asset { ...@@ -40,16 +55,18 @@ namespace vkcv::asset {
std::vector<Material> materials = {}; std::vector<Material> materials = {};
try { try {
if (path.rfind(".glb") != std::string::npos){ if (path.rfind(".glb", (path.length()-4)) != std::string::npos){
object = fx::gltf::LoadFromBinary(path); object = fx::gltf::LoadFromBinary(path);
} else { } else {
object = fx::gltf::LoadFromText(path); object = fx::gltf::LoadFromText(path);
} }
} }
catch (std::system_error){ // catch exception of invalid file path catch (const std::system_error &err){ // catch exception of invalid file path
print_what(err, path);
return 0; return 0;
} }
catch (...){ catch (const std::exception &e){
print_what(e, path);
return 0; return 0;
} }
...@@ -89,6 +106,7 @@ namespace vkcv::asset { ...@@ -89,6 +106,7 @@ namespace vkcv::asset {
} else { } else {
return 0; return 0;
} }
// Offset // Offset
vertexAttributes.back().offset = object.bufferViews[accessor.bufferView].byteOffset; vertexAttributes.back().offset = object.bufferViews[accessor.bufferView].byteOffset;
// Length // Length
...@@ -98,8 +116,11 @@ namespace vkcv::asset { ...@@ -98,8 +116,11 @@ namespace vkcv::asset {
// Component Type // Component Type
vertexAttributes.back().componentType = static_cast<uint16_t>(accessor.componentType); vertexAttributes.back().componentType = static_cast<uint16_t>(accessor.componentType);
// Component Count // Component Count
vertexAttributes.back().componentCount = convertTypeToInt(accessor.type); // Conversion doesn't work, don't know why if (convertTypeToInt(accessor.type) != 10){
std::cout << "Should be a number: " << vertexAttributes.back().componentCount << std::endl; vertexAttributes.back().componentCount = convertTypeToInt(accessor.type);
} else {
return 0;
}
} }
// Fill the output argument 'mesh' with the data from the loaded // Fill the output argument 'mesh' with the data from the loaded
...@@ -123,10 +144,21 @@ namespace vkcv::asset { ...@@ -123,10 +144,21 @@ namespace vkcv::asset {
fx::gltf::Accessor & indexAccessor = object.accessors[objectPrimitive.indices]; fx::gltf::Accessor & indexAccessor = object.accessors[objectPrimitive.indices];
fx::gltf::BufferView & indexBufferView = object.bufferViews[indexAccessor.bufferView]; fx::gltf::BufferView & indexBufferView = object.bufferViews[indexAccessor.bufferView];
fx::gltf::Buffer & indexBuffer = object.buffers[indexBufferView.buffer]; fx::gltf::Buffer & indexBuffer = object.buffers[indexBufferView.buffer];
void* indexBufferData = &indexBuffer.data;
// 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;
// check whether only one buffer is used
if (indexBufferView.buffer == vertexBufferView.buffer){
std::cout << "It's just one Buffer, let's be efficient!" << std::endl;
vertexBufferData = indexBufferData;
} else {
std::cout << "No luck, different Buffers :(" << std::endl;
vertexBufferData = &vertexBuffer.data;
}
// fill vertex groups vector // fill vertex groups vector
vertexGroups.push_back(VertexGroup{}); vertexGroups.push_back(VertexGroup{});
...@@ -135,12 +167,12 @@ namespace vkcv::asset { ...@@ -135,12 +167,12 @@ namespace vkcv::asset {
object.accessors[objectPrimitive.indices].count, // num indices object.accessors[objectPrimitive.indices].count, // num indices
posAccessor.count, // num vertices posAccessor.count, // num vertices
{ //index buffer { //index buffer
&indexBuffer.data[static_cast<uint64_t>(indexBufferView.byteOffset) + indexAccessor.byteOffset], indexBufferData,
indexBufferView.byteLength, indexBufferView.byteLength,
indexBufferView.byteOffset indexBufferView.byteOffset
}, },
{ //vertex buffer { //vertex buffer
&vertexBuffer.data[static_cast<uint64_t>(vertexBufferView.byteOffset) + posAccessor.byteOffset], vertexBufferData,
vertexBufferView.byteLength, vertexBufferView.byteLength,
vertexAttributes vertexAttributes
}, },
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment