Merge branch 'master' of goat:git/laserbrain_demo
[laserbrain_demo] / src / sceneload.cc
index 11ce1e1..58d1865 100644 (file)
 #include <assimp/vector3.h>
 #include <assimp/matrix4x4.h>
 #include <assimp/quaternion.h>
+#include "app.h"
 #include "scene.h"
 #include "objmesh.h"
 #include "datamap.h"
 #include "logger.h"
+#include "metascene.h"
 
 static bool load_material(Scene *scn, Material *mat, const aiMaterial *aimat);
 static SceneNode *load_node(Scene *scn, const aiScene *aiscn, unsigned int flags, const aiNode *ainode);
@@ -24,7 +26,7 @@ static Mesh *load_mesh(Scene *scn, const aiScene *aiscn, unsigned int flags, con
 /*static const char *mprop_semantic(int x);
 static int count_textures(const aiMaterial *aimat);*/
 static int assimp_textype(aiTextureType type);
-static const char *assimp_textypestr(aiTextureType type);
+//static const char *assimp_textypestr(aiTextureType type);
 
 static Mat4 assimp_matrix(const aiMatrix4x4 &aim);
 
@@ -198,10 +200,11 @@ static bool load_material(Scene *scn, Material *mat, const aiMaterial *aimat)
                                *dptr++ = *sptr == '\\' ? '/' : *sptr;
                        } while(*sptr++);
 
+                       if(!fname || !*fname) continue;
+
                        int textype = assimp_textype(aitype);
-                       info_log("loading %s texture: %s\n", assimp_textypestr(aitype), fname);
 
-                       Texture *tex = scn->texset->get_texture(fname, TEX_2D);
+                       Texture *tex = texman.get_texture(fname, TEX_2D, &scn->datamap);
                        assert(tex);
                        mat->textures.push_back(tex);
 
@@ -334,7 +337,7 @@ static int assimp_textype(aiTextureType type)
        return MTL_TEX_UNKNOWN;
 }
 
-static const char *assimp_textypestr(aiTextureType type)
+/*static const char *assimp_textypestr(aiTextureType type)
 {
        switch(type) {
        case aiTextureType_DIFFUSE:
@@ -352,7 +355,7 @@ static const char *assimp_textypestr(aiTextureType type)
                break;
        }
        return "unknown";
-}
+}*/
 
 static Mat4 assimp_matrix(const aiMatrix4x4 &aim)
 {
@@ -376,12 +379,17 @@ Scene *SceneSet::create_scene()
 
 bool SceneSet::load_scene(Scene *scn, const char *fname)
 {
+       scn->clear();
        return scn->load(fname, SCNLOAD_FLIPTEX | SCNLOAD_STAGE_IO);
 }
 
 bool SceneSet::done_scene(Scene *scn)
 {
-       return scn->load(0, SCNLOAD_STAGE_GL);
+       bool res = scn->load(0, SCNLOAD_STAGE_GL);
+       if(scn->metascn) {
+               scn->metascn->scene_loaded(scn);
+       }
+       return res;
 }
 
 void SceneSet::free_scene(Scene *scn)