dbf-halloween2015
annotate src/scene.cc @ 3:c37fe5d8a4ed
windows port
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 01 Nov 2015 06:04:28 +0200 |
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 |
nuclear@0 | 5 extern bool wireframe; |
nuclear@0 | 6 static int max_lights = -1; |
nuclear@0 | 7 |
nuclear@0 | 8 Scene::~Scene() |
nuclear@0 | 9 { |
nuclear@0 | 10 clear(); |
nuclear@0 | 11 } |
nuclear@0 | 12 |
nuclear@0 | 13 void Scene::clear() |
nuclear@0 | 14 { |
nuclear@0 | 15 for(size_t i=0; i<objects.size(); i++) { |
nuclear@0 | 16 delete objects[i]; |
nuclear@0 | 17 } |
nuclear@0 | 18 objects.clear(); |
nuclear@0 | 19 |
nuclear@0 | 20 for(size_t i=0; i<lights.size(); i++) { |
nuclear@0 | 21 delete lights[i]; |
nuclear@0 | 22 } |
nuclear@0 | 23 lights.clear(); |
nuclear@0 | 24 } |
nuclear@0 | 25 |
nuclear@0 | 26 void Scene::add_object(Object *obj) |
nuclear@0 | 27 { |
nuclear@0 | 28 objects.push_back(obj); |
nuclear@0 | 29 } |
nuclear@0 | 30 |
nuclear@0 | 31 void Scene::add_light(Light *lt) |
nuclear@0 | 32 { |
nuclear@0 | 33 lights.push_back(lt); |
nuclear@0 | 34 } |
nuclear@0 | 35 |
nuclear@0 | 36 void Scene::draw(unsigned int flags) const |
nuclear@0 | 37 { |
nuclear@0 | 38 if(max_lights == -1) { |
nuclear@0 | 39 glGetIntegerv(GL_MAX_LIGHTS, &max_lights); |
nuclear@0 | 40 printf("max lights: %d\n", max_lights); |
nuclear@0 | 41 } |
nuclear@0 | 42 |
nuclear@0 | 43 int num_lt = lights.size(); |
nuclear@0 | 44 for(int i=0; i<max_lights; i++) { |
nuclear@0 | 45 if(i < num_lt) { |
nuclear@0 | 46 glEnable(GL_LIGHT0 + i); |
nuclear@0 | 47 lights[i]->setup(i); |
nuclear@0 | 48 } else { |
nuclear@0 | 49 glDisable(GL_LIGHT0 + i); |
nuclear@0 | 50 } |
nuclear@0 | 51 } |
nuclear@0 | 52 |
nuclear@0 | 53 for(size_t i=0; i<objects.size(); i++) { |
nuclear@0 | 54 unsigned int mask = objects[i]->rop.transparent ? DRAW_TRANSPARENT : DRAW_SOLID; |
nuclear@0 | 55 if(mask & flags) { |
nuclear@0 | 56 if(wireframe) { |
nuclear@0 | 57 objects[i]->draw_wire(); |
nuclear@0 | 58 } else { |
nuclear@0 | 59 objects[i]->draw(); |
nuclear@0 | 60 } |
nuclear@0 | 61 } |
nuclear@0 | 62 } |
nuclear@0 | 63 } |