diff --git a/src/data/modelData.c b/src/data/modelData.c index ceaed64f..ea078407 100644 --- a/src/data/modelData.c +++ b/src/data/modelData.c @@ -356,8 +356,9 @@ ModelData* lovrModelDataInit(ModelData* model, Blob* source, ModelDataIO io) { // Make space for fake root node if the root scene has multiple root nodes if (rootScene >= 0 && scenes[rootScene].nodeCount > 1) { - model->nodeCount++; info.childCount += model->nodeCount; + info.totalSize += sizeof(ModelNode) + model->nodeCount * sizeof(uint32_t); + model->nodeCount++; } size_t offset = 0; @@ -833,7 +834,7 @@ ModelData* lovrModelDataInit(ModelData* model, Blob* source, ModelDataIO io) { gltfString key = NOM_STR(json, token); if (STR_EQ(key, "nodes")) { for (int j = (token++)->size; j > 0; j--) { - lastNode->children[i] = NOM_INT(json, token); + lastNode->children[lastNode->childCount - j] = NOM_INT(json, token); } } else { token += NOM_VALUE(json, token); diff --git a/src/graphics/model.c b/src/graphics/model.c index 3da1f8b8..74c3d635 100644 --- a/src/graphics/model.c +++ b/src/graphics/model.c @@ -192,8 +192,8 @@ void lovrModelDestroy(void* ref) { } void lovrModelDraw(Model* model, mat4 transform, int instances) { - updateGlobalNodeTransform(model, 0, transform); - renderNode(model, 0, instances); // TODO use root + updateGlobalNodeTransform(model, model->data->rootNode, transform); + renderNode(model, model->data->rootNode, instances); } Animator* lovrModelGetAnimator(Model* model) {