clray

annotate src/scene.h @ 37:ca445da26588

out of resources?!
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 27 Aug 2010 01:00:04 +0100
parents 7d77ded5f890
children f9eec11e5acc
rev   line source
nuclear@6 1 #ifndef MESH_H_
nuclear@6 2 #define MESH_H_
nuclear@6 3
nuclear@23 4 #include <stdio.h>
nuclear@6 5 #include <vector>
nuclear@24 6 #include <list>
nuclear@6 7
nuclear@6 8 struct Vertex {
nuclear@9 9 float pos[4];
nuclear@9 10 float normal[4];
nuclear@12 11 float tex[4];
nuclear@12 12 float padding[4];
nuclear@6 13 };
nuclear@6 14
nuclear@6 15 struct Face {
nuclear@6 16 Vertex v[3];
nuclear@9 17 float normal[4];
nuclear@6 18 int matid;
nuclear@12 19 int padding[3];
John@15 20
John@15 21 bool operator ==(const Face &f) const;
nuclear@6 22 };
nuclear@6 23
nuclear@6 24 struct Material {
nuclear@9 25 float kd[4], ks[4];
nuclear@6 26 float kr, kt;
nuclear@6 27 float spow;
nuclear@12 28 float padding;
nuclear@6 29 };
nuclear@6 30
nuclear@6 31 struct Mesh {
nuclear@6 32 std::vector<Face> faces;
nuclear@6 33 int matid;
nuclear@6 34 };
nuclear@6 35
nuclear@25 36 class AABBox {
nuclear@25 37 public:
nuclear@25 38 float min[4], max[4];
nuclear@25 39
nuclear@25 40 float calc_surface_area() const;
nuclear@25 41 };
nuclear@25 42
nuclear@22 43 struct KDNode {
nuclear@37 44 int axis;
nuclear@25 45 AABBox aabb;
nuclear@26 46 float cost;
nuclear@24 47
nuclear@24 48 KDNode *left, *right;
nuclear@32 49 std::vector<int> face_idx;
nuclear@26 50
nuclear@26 51 KDNode();
nuclear@23 52 };
nuclear@22 53
nuclear@24 54 struct KDNodeGPU {
nuclear@28 55 AABBox aabb;
nuclear@28 56 int face_idx[32];
nuclear@28 57 int num_faces;
nuclear@35 58 int left, right;
nuclear@35 59 int padding;
nuclear@24 60 };
nuclear@24 61
nuclear@24 62
nuclear@6 63 class Scene {
nuclear@24 64 private:
nuclear@24 65 mutable Face *facebuf;
nuclear@24 66 mutable int num_faces;
nuclear@24 67
nuclear@28 68 mutable KDNodeGPU *kdbuf;
nuclear@28 69
nuclear@6 70 public:
nuclear@6 71 std::vector<Mesh*> meshes;
nuclear@6 72 std::vector<Material> matlib;
nuclear@24 73 KDNode *kdtree;
nuclear@24 74
nuclear@24 75 Scene();
nuclear@24 76 ~Scene();
nuclear@6 77
nuclear@13 78 bool add_mesh(Mesh *m);
John@14 79 int get_num_meshes() const;
nuclear@35 80 int get_num_faces() const;
John@14 81 int get_num_materials() const;
nuclear@35 82 int get_num_kdnodes() const;
nuclear@13 83
John@14 84 Material *get_materials();
John@14 85 const Material *get_materials() const;
nuclear@13 86
nuclear@6 87 bool load(const char *fname);
nuclear@6 88 bool load(FILE *fp);
nuclear@22 89
nuclear@24 90 const Face *get_face_buffer() const;
nuclear@28 91 const KDNodeGPU *get_kdtree_buffer() const;
nuclear@27 92
nuclear@27 93 void draw_kdtree() const;
nuclear@27 94 bool build_kdtree();
nuclear@6 95 };
nuclear@6 96
nuclear@26 97 enum {
nuclear@26 98 ACCEL_PARAM_MAX_TREE_DEPTH,
nuclear@26 99 ACCEL_PARAM_MAX_NODE_ITEMS,
nuclear@26 100 ACCEL_PARAM_COST_TRAVERSE,
nuclear@26 101 ACCEL_PARAM_COST_INTERSECT,
nuclear@26 102
nuclear@26 103 NUM_ACCEL_PARAMS
nuclear@26 104 };
nuclear@26 105
nuclear@26 106 void set_accel_param(int p, int v);
nuclear@26 107
nuclear@28 108 int kdtree_depth(const KDNode *tree);
nuclear@28 109 int kdtree_nodes(const KDNode *tree);
nuclear@28 110
nuclear@32 111 bool kdtree_dump(const KDNode *tree, const char *fname);
nuclear@32 112 KDNode *kdtree_restore(const char *fname);
nuclear@32 113
nuclear@6 114 #endif /* MESH_H_ */