From cc8a355e7b709f3eb1132cd6b63cf4e482d58332 Mon Sep 17 00:00:00 2001 From: John Tsiombikas Date: Mon, 12 Dec 2016 05:14:47 +0200 Subject: [PATCH] backported changes from museum project --- src/app.cc | 2 +- src/metascene.cc | 3 ++- src/scene.cc | 14 ++++++++++++++ src/scene.h | 3 ++- src/sceneload.cc | 3 +++ src/texture.cc | 2 ++ 6 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/app.cc b/src/app.cc index 97930d6..db3031f 100644 --- a/src/app.cc +++ b/src/app.cc @@ -61,7 +61,7 @@ static unsigned int sdr_post_gamma; static long prev_msec; static BlobExhibit *blobs; -static bool show_blobs = 1; +static bool show_blobs; bool app_init(int argc, char **argv) diff --git a/src/metascene.cc b/src/metascene.cc index e0b2b20..53474f7 100644 --- a/src/metascene.cc +++ b/src/metascene.cc @@ -1,3 +1,4 @@ +#include #include #include #include "metascene.h" @@ -303,7 +304,7 @@ static void apply_mtledit(Scene *scn, const MaterialEdit &med) int nobj = scn->objects.size(); for(int i=0; iobjects[i]; - if(std::regex_match(obj->get_name(), med.name_re)) { + if(std::regex_match(obj->mtl.name, med.name_re)) { apply_mtledit(&obj->mtl, med); } } diff --git a/src/scene.cc b/src/scene.cc index 683c9ec..35b562d 100644 --- a/src/scene.cc +++ b/src/scene.cc @@ -11,6 +11,9 @@ Scene::Scene() nodes = 0; walk_mesh = 0; + + texset = 0; + loader_data = 0; } Scene::~Scene() @@ -20,6 +23,17 @@ Scene::~Scene() void Scene::destroy() { + clear(); + + metascn = 0; + texset = 0; + loader_data = 0; + + datamap.clear(); +} + +void Scene::clear() +{ destroy_node_tree(nodes); nodes = 0; diff --git a/src/scene.h b/src/scene.h index 1cf8dcc..f295bbc 100644 --- a/src/scene.h +++ b/src/scene.h @@ -31,7 +31,7 @@ public: Mesh *walk_mesh; - TextureSet *texset; // only owned by Scene if own_texset is true + TextureSet *texset; void *loader_data; explicit Scene(); @@ -41,6 +41,7 @@ public: Scene &operator =(const Scene &rhs) = delete; void destroy(); + void clear(); // clear all contents (meshes, objects, and nodes) bool load(const char *fname, unsigned int flags = 0); diff --git a/src/sceneload.cc b/src/sceneload.cc index e33e457..58d1865 100644 --- a/src/sceneload.cc +++ b/src/sceneload.cc @@ -200,6 +200,8 @@ 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); Texture *tex = texman.get_texture(fname, TEX_2D, &scn->datamap); @@ -377,6 +379,7 @@ Scene *SceneSet::create_scene() bool SceneSet::load_scene(Scene *scn, const char *fname) { + scn->clear(); return scn->load(fname, SCNLOAD_FLIPTEX | SCNLOAD_STAGE_IO); } diff --git a/src/texture.cc b/src/texture.cc index ff4d1b5..18dd28f 100644 --- a/src/texture.cc +++ b/src/texture.cc @@ -38,6 +38,7 @@ void bind_texture(Texture *tex, int tunit) } else { glActiveTexture(GL_TEXTURE0 + tunit); glBindTexture(cur_target[tunit], 0); + glDisable(cur_target[tunit]); assert(glGetError() == GL_NO_ERROR); glActiveTexture(GL_TEXTURE0); } @@ -139,6 +140,7 @@ TextureType Texture::get_type() const void Texture::bind(int tex_unit) const { glActiveTexture(GL_TEXTURE0 + tex_unit); + glEnable(target); glBindTexture(target, id); assert(glGetError() == GL_NO_ERROR); glActiveTexture(GL_TEXTURE0); -- 1.7.10.4