static long prev_msec;
static BlobExhibit *blobs;
-static bool show_blobs = 1;
+static bool show_blobs;
bool app_init(int argc, char **argv)
+#include <assert.h>
#include <string>
#include <regex>
#include "metascene.h"
int nobj = scn->objects.size();
for(int i=0; i<nobj; i++) {
Object *obj = scn->objects[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);
}
}
nodes = 0;
walk_mesh = 0;
+
+ texset = 0;
+ loader_data = 0;
}
Scene::~Scene()
void Scene::destroy()
{
+ clear();
+
+ metascn = 0;
+ texset = 0;
+ loader_data = 0;
+
+ datamap.clear();
+}
+
+void Scene::clear()
+{
destroy_node_tree(nodes);
nodes = 0;
Mesh *walk_mesh;
- TextureSet *texset; // only owned by Scene if own_texset is true
+ TextureSet *texset;
void *loader_data;
explicit Scene();
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);
*dptr++ = *sptr == '\\' ? '/' : *sptr;
} while(*sptr++);
+ if(!fname || !*fname) continue;
+
int textype = assimp_textype(aitype);
Texture *tex = texman.get_texture(fname, TEX_2D, &scn->datamap);
bool SceneSet::load_scene(Scene *scn, const char *fname)
{
+ scn->clear();
return scn->load(fname, SCNLOAD_FLIPTEX | SCNLOAD_STAGE_IO);
}
} else {
glActiveTexture(GL_TEXTURE0 + tunit);
glBindTexture(cur_target[tunit], 0);
+ glDisable(cur_target[tunit]);
assert(glGetError() == GL_NO_ERROR);
glActiveTexture(GL_TEXTURE0);
}
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);