ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/entity.h
Revision: 1.6
Committed: Sun Oct 3 03:17:09 2004 UTC (19 years, 8 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.5: +11 -7 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #ifndef ENTITY_H
2 #define ENTITY_H
3
4 #include <GL/gl.h>
5
6 #include <vector>
7
8 #include "util.h"
9 #include "oct.h"
10
11 using namespace std;
12
13 struct entity_base {
14 struct entity_base *parent;
15 vector<octant *> o;
16 box bbox;
17
18 virtual void update_bbox ();
19 virtual void show (const sector &sec) { };
20 void hide ();
21 virtual void draw (const draw_context &ctx) = 0;
22 virtual ~entity_base ()
23 {
24 hide ();
25 };
26 };
27
28 struct entity_container : entity_base, protected vector<entity_base *> {
29 void add (entity_base *e) { push_back (e); e->parent = this; }
30 void update_bbox ();
31 void show (const sector &sec);
32 void draw (const draw_context &ctx);
33 ~entity_container ();
34 };
35
36 struct entity_filter : entity_base {
37 protected:
38 entity_base *e;
39 public:
40
41 void set (entity_base *e)
42 {
43 this->e = e;
44 e->parent = this;
45 }
46
47 void remove ()
48 {
49 this->e->parent = 0;
50 this->e = 0;
51 }
52
53 entity_base *content () { return e; };
54
55 void update_bbox ();
56 void show (const sector &sec);
57 void draw (const draw_context &ctx);
58 ~entity_filter ();
59 };
60
61 struct entity : entity_filter {
62 sector sec;
63
64 void show (const sector &sec);
65 void show ();
66 void draw (const draw_context &ctx);
67 };
68
69 struct entity_affine : entity_filter {
70 //matrix m;
71 };
72
73 struct vertex1d {
74 colour c; // colour
75 point p; // vertex
76 };
77
78 struct vertex2d {
79 point p; // vertex
80 vec3 n; // normal
81 texc t; // texture
82
83 vertex2d () { };
84 vertex2d (point p, vec3 n, texc t = texc()) : p(p), n(n), t(t) { };
85 };
86
87 struct entity_opengl : entity_base {
88 };
89
90 template<GLenum type>
91 struct entity_opengl1d : entity_opengl, vector<vertex1d> {
92 void update_bbox ();
93 void show (const sector &sec);
94 void draw (const draw_context &ctx);
95 };
96
97 template<GLenum type>
98 struct entity_opengl2d : entity_opengl, vector<vertex2d> {
99 material m;
100
101 void update_bbox ();
102 void show (const sector &sec);
103 void draw (const draw_context &ctx);
104 };
105
106 typedef entity_opengl1d<GL_POINTS> entity_points;
107 typedef entity_opengl1d<GL_LINES> entity_lines;
108 typedef entity_opengl1d<GL_LINE_STRIP> entity_line_strip;
109 typedef entity_opengl1d<GL_LINE_LOOP> entity_line_loop;
110 typedef entity_opengl2d<GL_TRIANGLES> entity_triangles;
111 typedef entity_opengl2d<GL_TRIANGLE_STRIP> entity_triangle_strip;
112 typedef entity_opengl2d<GL_TRIANGLE_FAN> entity_triangle_fan;
113 typedef entity_opengl2d<GL_QUADS> entity_quads;
114 typedef entity_opengl2d<GL_QUAD_STRIP> entity_quad_strip;
115 typedef entity_opengl2d<GL_POLYGON> entity_polygon;
116
117 struct view {
118 point p;
119 vec3 d, u;
120 float fov;
121 int w, h;
122
123 void draw (const draw_context &ctx);
124 };
125
126 #endif
127
128
129