#ifndef VIEW_H #define VIEW_H #include #include #include using namespace std; #include "util.h" #include "event.h" struct visibility_state { unsigned int generation; enum { UNKNOWN, OCCLUDED, PARTIAL, FULL } visibility; double last; visibility_state () : generation(0), last(0.), visibility(UNKNOWN) { }; }; struct occ_query { struct view &v; GLuint id; GLuint r; occ_query (view &v, GLuint id, GLuint r) : v(v), id(id), r(r) { }; }; typedef event_receiver recv_occ_query; struct view { sector orig; point p; vec3 d, u; GLfloat fov; GLfloat z_near, z_far, c_far; int w, h; GLfloat gamma; // only to be used by friends: TODO GLfloat nz_far, nc_far; GLfloat diagfact; // bounding box border to depth factor matrix projection; struct { plane l, r, t, b, n, f; } frustum; enum mode { DEPTH, LIGHTED } mode; light *l; set drawn; unsigned int generation; map vismap; vector vislist; // octants partially or fully visible in frustum vector farlist; // octants possibly visible typedef pair oq_data; vector occ_queries; void begin_occ_query (recv_occ_query &recv); void end_occ_query (); void reset_projection (); // public void begin (); void pass (enum mode m); void end (); bool may_draw (const entity *e); view (); ~view (); }; #endif