ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/view.h
Revision: 1.29
Committed: Sat Oct 23 02:27:52 2004 UTC (19 years, 7 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.28: +0 -1 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #ifndef VIEW_H
2     #define VIEW_H
3    
4     #include <set>
5 root 1.4 #include <map>
6 root 1.17 #include <utility>
7 root 1.1
8     using namespace std;
9    
10     #include "util.h"
11 root 1.17 #include "event.h"
12 root 1.1
13 root 1.22 struct visibility_base
14 root 1.20 {
15 root 1.22 unsigned int generation; // freshness check
16     };
17 root 1.12
18 root 1.22 struct visible {
19     visibility_base *get_visibility (view &ctx);
20     virtual visibility_base *new_visibility () = 0;
21     virtual void clear_visibility (visibility_base *vs) = 0;
22 root 1.12 };
23    
24 root 1.20 struct occ_query
25     {
26 root 1.26 struct view &ctx;
27 root 1.22 void *id;
28 root 1.26 GLuint count;
29 root 1.17
30 root 1.26 occ_query (view &ctx, void *id, GLuint count) : ctx(ctx), id(id), count(count) { };
31 root 1.17 };
32    
33     typedef event_receiver<void, occ_query> recv_occ_query;
34    
35 root 1.20 struct view
36     {
37 root 1.2 sector orig;
38     point p;
39     vec3 d, u;
40 root 1.13 GLfloat fov;
41 root 1.19 GLfloat z_near, z_far, c_far;
42 root 1.2 int w, h;
43 root 1.21 GLfloat pixfact; // how many pixels on screen are drawn by a unit length line, *roughly*
44 root 1.2
45 root 1.13 GLfloat gamma;
46 root 1.4
47 root 1.17 // only to be used by friends: TODO
48 root 1.5
49 root 1.28 GLfloat nz_far, nz_near, nc_far;
50 root 1.17 GLfloat diagfact; // bounding box border to depth factor
51 root 1.21 GLfloat perspfact; // perspfact * (1/depth)=> pixels
52 root 1.13
53 root 1.25 gl::matrix projection;
54 root 1.9
55 root 1.5 struct {
56     plane l, r, t, b, n, f;
57 root 1.27 cone c;
58     sphere s;
59 root 1.5 } frustum;
60 root 1.14
61 root 1.26 // the passes
62     enum pass {
63     DEPTH, // mandatory, render depth only
64     POSTDEPTH, // mandatory, occ tests or ignored
65     LIGHTED, // optional, render faces in full glory
66     } pass;
67    
68     set<const entity *> drawn; // TODO: put drawn info and octant+entity visibility info into vismap!
69 root 1.4
70     unsigned int generation;
71 root 1.22 typedef map<visible *, visibility_base *> visibility_map;
72     visibility_map vismap;
73 root 1.17
74 root 1.24 vector<octant *> vislist; // octants that want to be drawn
75 root 1.17
76 root 1.22 struct oq_data {
77     recv_occ_query *recv;
78     GLint id;
79     void *data;
80    
81     oq_data (recv_occ_query *recv, GLint id, void *data) : recv(recv), id(id), data(data) { };
82     };
83 root 1.17 vector<oq_data> occ_queries;
84 root 1.22 void begin_occ_query (recv_occ_query &recv, void *id = 0);
85 root 1.17 void end_occ_query ();
86 root 1.13
87     void reset_projection ();
88    
89     // public
90    
91     void begin ();
92 root 1.26 void render (enum pass p);
93 root 1.13 void end ();
94 root 1.1
95 root 1.15 bool may_draw (const entity *e);
96 root 1.1
97 root 1.12 view ();
98     ~view ();
99 root 1.1 };
100 root 1.7
101 root 1.1 #endif
102