dbf_amiga

view 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
line source
1 #include "scene.h"
2 #include "opengl.h"
3 #include "opt.h"
4 #include "game.h"
5 #include "scnload.h"
7 static int max_lights = -1;
9 Scene::~Scene()
10 {
11 clear();
12 }
14 void Scene::clear()
15 {
16 for(size_t i=0; i<objects.size(); i++) {
17 delete objects[i];
18 }
19 objects.clear();
21 for(size_t i=0; i<lights.size(); i++) {
22 delete lights[i];
23 }
24 lights.clear();
25 }
27 void Scene::add_object(Object *obj)
28 {
29 objects.push_back(obj);
30 }
32 void Scene::add_lights(Light *lt)
33 {
34 lights.push_back(lt);
35 }
37 bool Scene::load(const char *fname)
38 {
39 if(load_obj(this, fname)) {
40 return true;
41 }
43 fprintf(stderr, "failed to load scene file: %s\n", fname);
44 return false;
45 }
47 void Scene::dump(FILE *fp)
48 {
49 fprintf(fp, "SCENE DUMP\n");
50 fprintf(fp, "%d objects, %d lights\n", (int)objects.size(), (int)lights.size());
52 for(size_t i=0; i<objects.size(); i++) {
53 fprintf(fp, "OBJECT %d:\n", (int)i);
54 objects[i]->get_mesh()->dump(fp);
55 }
56 }
58 void Scene::draw(unsigned int flags) const
59 {
60 if(max_lights == -1) {
61 glGetIntegerv(GL_MAX_LIGHTS, &max_lights);
62 printf("max lights: %d\n", max_lights);
63 }
65 for(size_t i=0; i<lights.size(); i++) {
66 lights[i]->setup(i);
67 }
69 for(size_t i=0; i<objects.size(); i++) {
70 unsigned int mask = objects[i]->rop.transparent ? DRAW_TRANSPARENT : DRAW_SOLID;
71 if(mask & flags) {
72 if(dbg_wireframe) {
73 objects[i]->draw_wire();
74 } else {
75 objects[i]->draw();
76 }
77 }
78 }
79 }