--- libgender/entity.h 2004/10/02 16:16:03 1.2 +++ libgender/entity.h 2004/10/03 22:46:03 1.11 @@ -5,67 +5,33 @@ #include +#include "util.h" #include "oct.h" +#include "view.h" using namespace std; -typedef unsigned int soffs; // 32 bit -const soffs soffs_max = 1UL << 31; - -#define GLFLOAT_MAX 1e30 -#define GLFLOAT_MIN -1e30 - -struct sector { - soffs x, y, z; -}; - -struct point { - GLfloat x, y, z; -}; - -struct colour { - GLfloat r, g, b; -}; - -struct vect { - GLfloat x, y, z; -}; - -struct texc { - GLfloat u, v; -}; - -struct box { - point a, b; - - void reset () - { - a.x = a.y = a.z = GLFLOAT_MAX; - b.x = b.y = b.z = GLFLOAT_MIN; - } - - void add (const box &o); -}; - struct entity_base { struct entity_base *parent; + sector orig; vector o; box bbox; virtual void update_bbox (); - virtual void show (const sector &sec) { }; + virtual void show () { world.add (this); }; void hide (); - virtual void draw () = 0; - virtual ~entity_base () - { - hide (); - }; + void display (draw_context &ctx); + virtual void draw (draw_context &ctx) = 0; + + entity_base (); + virtual ~entity_base (); }; struct entity_container : entity_base, protected vector { + void add (entity_base *e) { push_back (e); e->parent = this; } void update_bbox (); - void show (const sector &sec); - void draw (); + void show (); + void draw (draw_context &ctx); ~entity_container (); }; @@ -89,46 +55,55 @@ entity_base *content () { return e; }; void update_bbox (); - void show (const sector &sec); - void draw (); + void show (); + void draw (draw_context &ctx); ~entity_filter (); }; struct entity : entity_filter { - sector sec; - - void show (const sector &sec); - void draw (); -}; - -struct entity_affine : entity_filter { - //matrix m; }; struct vertex1d { - point p; // vertex colour c; // colour + point p; // vertex }; struct vertex2d { - point p; // vertex - colour c; // colour - vect n; // normal - texc t; // texture + point p; // vertex + vec3 n; // normal + texc t; // texture + + vertex2d () { }; + vertex2d (point p, vec3 n, texc t = texc()) : p(p), n(n), t(t) { }; +}; + +struct entity_opengl : entity_base { }; template -struct entity_opengl1d : entity_base, vector { +struct entity_opengl1d : entity_opengl, vector { void update_bbox (); - void show (const sector &sec); - void draw (); + void draw (draw_context &ctx); }; template -struct entity_opengl2d : entity_base, vector { +struct entity_opengl2d : entity_opengl, vector { + material m; + GLuint list; + void update_bbox (); - void show (const sector &sec); - void draw (); + void draw (draw_context &ctx); + + entity_opengl2d () + : list(0) + { + } + + ~entity_opengl2d () + { + if (list) + glDeleteLists (list, 1); + } }; typedef entity_opengl1d entity_points; @@ -142,26 +117,14 @@ typedef entity_opengl2d entity_quad_strip; typedef entity_opengl2d entity_polygon; -struct light { - point p; - colour c; - GLfloat intensity; - GLfloat radius; -}; - -struct draw_context { - enum { DEPTH, AMBIENT, LIGHTED } mode; - light *l; -}; +struct entity_transform : entity_filter { + gl_matrix m; -struct view { - point p; - vect d; - float fov; + entity_transform (); - int width, height; - - void draw (const draw_context &c); + void update_bbox (); + void show (); + void draw (draw_context &ctx); }; #endif