dbf_amiga
annotate src/scene.cc @ 0:87dfe0e10235
initial commit
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Mon, 31 Aug 2015 07:38:37 +0300 |
parents | |
children |
rev | line source |
---|---|
nuclear@0 | 1 #include "scene.h" |
nuclear@0 | 2 #include "opengl.h" |
nuclear@0 | 3 #include "opt.h" |
nuclear@0 | 4 #include "game.h" |
nuclear@0 | 5 #include "scnload.h" |
nuclear@0 | 6 |
nuclear@0 | 7 static int max_lights = -1; |
nuclear@0 | 8 |
nuclear@0 | 9 Scene::~Scene() |
nuclear@0 | 10 { |
nuclear@0 | 11 clear(); |
nuclear@0 | 12 } |
nuclear@0 | 13 |
nuclear@0 | 14 void Scene::clear() |
nuclear@0 | 15 { |
nuclear@0 | 16 for(size_t i=0; i<objects.size(); i++) { |
nuclear@0 | 17 delete objects[i]; |
nuclear@0 | 18 } |
nuclear@0 | 19 objects.clear(); |
nuclear@0 | 20 |
nuclear@0 | 21 for(size_t i=0; i<lights.size(); i++) { |
nuclear@0 | 22 delete lights[i]; |
nuclear@0 | 23 } |
nuclear@0 | 24 lights.clear(); |
nuclear@0 | 25 } |
nuclear@0 | 26 |
nuclear@0 | 27 void Scene::add_object(Object *obj) |
nuclear@0 | 28 { |
nuclear@0 | 29 objects.push_back(obj); |
nuclear@0 | 30 } |
nuclear@0 | 31 |
nuclear@0 | 32 void Scene::add_lights(Light *lt) |
nuclear@0 | 33 { |
nuclear@0 | 34 lights.push_back(lt); |
nuclear@0 | 35 } |
nuclear@0 | 36 |
nuclear@0 | 37 bool Scene::load(const char *fname) |
nuclear@0 | 38 { |
nuclear@0 | 39 if(load_obj(this, fname)) { |
nuclear@0 | 40 return true; |
nuclear@0 | 41 } |
nuclear@0 | 42 |
nuclear@0 | 43 fprintf(stderr, "failed to load scene file: %s\n", fname); |
nuclear@0 | 44 return false; |
nuclear@0 | 45 } |
nuclear@0 | 46 |
nuclear@0 | 47 void Scene::dump(FILE *fp) |
nuclear@0 | 48 { |
nuclear@0 | 49 fprintf(fp, "SCENE DUMP\n"); |
nuclear@0 | 50 fprintf(fp, "%d objects, %d lights\n", (int)objects.size(), (int)lights.size()); |
nuclear@0 | 51 |
nuclear@0 | 52 for(size_t i=0; i<objects.size(); i++) { |
nuclear@0 | 53 fprintf(fp, "OBJECT %d:\n", (int)i); |
nuclear@0 | 54 objects[i]->get_mesh()->dump(fp); |
nuclear@0 | 55 } |
nuclear@0 | 56 } |
nuclear@0 | 57 |
nuclear@0 | 58 void Scene::draw(unsigned int flags) const |
nuclear@0 | 59 { |
nuclear@0 | 60 if(max_lights == -1) { |
nuclear@0 | 61 glGetIntegerv(GL_MAX_LIGHTS, &max_lights); |
nuclear@0 | 62 printf("max lights: %d\n", max_lights); |
nuclear@0 | 63 } |
nuclear@0 | 64 |
nuclear@0 | 65 for(size_t i=0; i<lights.size(); i++) { |
nuclear@0 | 66 lights[i]->setup(i); |
nuclear@0 | 67 } |
nuclear@0 | 68 |
nuclear@0 | 69 for(size_t i=0; i<objects.size(); i++) { |
nuclear@0 | 70 unsigned int mask = objects[i]->rop.transparent ? DRAW_TRANSPARENT : DRAW_SOLID; |
nuclear@0 | 71 if(mask & flags) { |
nuclear@0 | 72 if(dbg_wireframe) { |
nuclear@0 | 73 objects[i]->draw_wire(); |
nuclear@0 | 74 } else { |
nuclear@0 | 75 objects[i]->draw(); |
nuclear@0 | 76 } |
nuclear@0 | 77 } |
nuclear@0 | 78 } |
nuclear@0 | 79 } |