From 5188e5d8300bec364dc952563945dafbd4e23ff0 Mon Sep 17 00:00:00 2001 From: bjorn Date: Sat, 5 Nov 2016 15:56:58 -0700 Subject: [PATCH] Fix Model paths; --- src/graphics/model.c | 4 ++-- src/graphics/model.h | 2 +- src/lovr/graphics.c | 5 ++++- src/model/modelData.c | 4 ++-- src/model/modelData.h | 2 +- 5 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/graphics/model.c b/src/graphics/model.c index fbbbbced..b2817e7c 100644 --- a/src/graphics/model.c +++ b/src/graphics/model.c @@ -56,9 +56,9 @@ static void visitNode(ModelData* modelData, ModelNode* node, mat4 transform, vec } } -Model* lovrModelCreate(const char* filename) { +Model* lovrModelCreate(void* data, int size) { Model* model = malloc(sizeof(model)); - model->modelData = lovrModelDataCreate(filename); + model->modelData = lovrModelDataCreate(data, size); vec_float_t vertices; vec_init(&vertices); diff --git a/src/graphics/model.h b/src/graphics/model.h index c723bac6..00c6448f 100644 --- a/src/graphics/model.h +++ b/src/graphics/model.h @@ -10,6 +10,6 @@ typedef struct { } Model; #endif -Model* lovrModelCreate(const char* filename); +Model* lovrModelCreate(void* data, int size); void lovrModelDestroy(Model* model); void lovrModelDraw(Model* model, float x, float y, float z, float scale, float angle, float ax, float ay, float az); diff --git a/src/lovr/graphics.c b/src/lovr/graphics.c index 5bbdf33f..74c0df38 100644 --- a/src/lovr/graphics.c +++ b/src/lovr/graphics.c @@ -507,7 +507,10 @@ int l_lovrGraphicsNewBuffer(lua_State* L) { int l_lovrGraphicsNewModel(lua_State* L) { const char* path = luaL_checkstring(L, 1); - luax_pushmodel(L, lovrModelCreate(path)); + int size; + void* data = lovrFilesystemRead(path, &size); + luax_pushmodel(L, lovrModelCreate(data, size)); + free(data); return 1; } diff --git a/src/model/modelData.c b/src/model/modelData.c index a0b4f476..808f0638 100644 --- a/src/model/modelData.c +++ b/src/model/modelData.c @@ -24,9 +24,9 @@ static void assimpNodeTraversal(ModelNode* node, struct aiNode* assimpNode) { } } -ModelData* lovrModelDataCreate(const char* filename) { +ModelData* lovrModelDataCreate(void* data, int size) { ModelData* modelData = malloc(sizeof(ModelData)); - const struct aiScene* scene = aiImportFile(filename, aiProcessPreset_TargetRealtime_MaxQuality | aiProcess_OptimizeGraph); + const struct aiScene* scene = aiImportFileFromMemory(data, size, aiProcessPreset_TargetRealtime_MaxQuality | aiProcess_OptimizeGraph, NULL); // Meshes vec_init(&modelData->meshes); diff --git a/src/model/modelData.h b/src/model/modelData.h index 36e8a2c2..8252803b 100644 --- a/src/model/modelData.h +++ b/src/model/modelData.h @@ -41,5 +41,5 @@ typedef struct { #endif -ModelData* lovrModelDataCreate(const char* filename); +ModelData* lovrModelDataCreate(void* data, int size); void lovrModelDataDestroy(ModelData* modelData);