2006-10-18 03:59:28 +00:00
|
|
|
// here lies the GREAT JUSTICE RENDERER
|
|
|
|
// TODO :
|
|
|
|
// - recursive drawrooms with cliplane stack (support for full portal engine with occlusion queries)
|
|
|
|
// - crossed walls (tier drops stones)
|
|
|
|
// - skies
|
|
|
|
// - mirrors
|
|
|
|
// - fullbright (multitexture OR)
|
|
|
|
// - masks and sprites ! (use sortcnt and regular drawmask or recode it ?)
|
|
|
|
// - classic shading
|
|
|
|
// --------------------- CLASSIC LIMIT ---------------------
|
|
|
|
// - mdsprites (tags)
|
|
|
|
// - lights (dynamic phong)
|
|
|
|
// - dynamic shadowmaps
|
|
|
|
// - normalmap palette (unified gpu program, parallax mapping)
|
|
|
|
// - shadow volumes
|
|
|
|
// - hardware particles
|
|
|
|
// - multitextured decals ? (on models too)
|
|
|
|
// --------------- FIRST PUBLIC RELEASE LIMIT --------------
|
|
|
|
// - horizon mapping (precalculate the horizon maps and store them into the gl cache ?)
|
|
|
|
// - post processing ([HDR-]bloom and possibly DOF)
|
|
|
|
// - MD5 (hardware skinning ?)
|
2006-08-29 02:02:28 +00:00
|
|
|
|
|
|
|
#ifndef _polymer_h_
|
2006-08-30 23:32:39 +00:00
|
|
|
# define _polymer_h_
|
2006-08-29 02:02:28 +00:00
|
|
|
|
2006-09-17 20:16:20 +00:00
|
|
|
# ifdef _WIN32
|
|
|
|
# define PR_CALLBACK __stdcall
|
|
|
|
# else
|
2006-09-20 07:23:25 +00:00
|
|
|
# define PR_CALLBACK
|
2006-09-17 20:16:20 +00:00
|
|
|
# endif
|
|
|
|
|
2006-08-30 23:32:39 +00:00
|
|
|
# include "compat.h"
|
|
|
|
# include "build.h"
|
|
|
|
# include "glbuild.h"
|
|
|
|
# include "osd.h"
|
|
|
|
# include "polymost.h"
|
2006-09-27 17:55:49 +00:00
|
|
|
# include "pragmas.h"
|
2006-09-29 21:36:12 +00:00
|
|
|
|
|
|
|
// CVARS
|
2006-10-15 18:51:41 +00:00
|
|
|
extern int pr_cliplanes;
|
|
|
|
extern int pr_fov;
|
|
|
|
extern int pr_frustumculling;
|
|
|
|
extern int pr_verbosity;
|
|
|
|
extern int pr_wireframe;
|
2006-08-29 02:02:28 +00:00
|
|
|
|
2006-09-29 21:36:12 +00:00
|
|
|
// DATA
|
2006-08-30 23:32:39 +00:00
|
|
|
typedef struct s_prsector {
|
2006-09-27 17:55:49 +00:00
|
|
|
// geometry
|
2006-09-27 02:23:27 +00:00
|
|
|
GLdouble* verts;
|
|
|
|
GLfloat* floorbuffer;
|
|
|
|
GLfloat* ceilbuffer;
|
2006-09-29 21:36:12 +00:00
|
|
|
// attributes
|
|
|
|
GLfloat floorcolor[4], ceilcolor[4];
|
|
|
|
GLuint floorglpic, ceilglpic;
|
2006-09-27 17:55:49 +00:00
|
|
|
// elements
|
2006-10-04 09:54:25 +00:00
|
|
|
GLushort* floorindices;
|
|
|
|
GLushort* ceilindices;
|
2006-09-27 02:23:27 +00:00
|
|
|
short curindice;
|
2006-09-27 17:55:49 +00:00
|
|
|
int indicescount;
|
|
|
|
|
2006-10-15 18:51:41 +00:00
|
|
|
char controlstate; // bit 1: up-to-date, bit 2: geometry invalidated
|
2006-10-14 23:33:10 +00:00
|
|
|
char drawingstate; // 0: fcuk, 1: in queue, 2: todraw, 3: drawn
|
2006-09-27 02:23:27 +00:00
|
|
|
} _prsector;
|
2006-09-29 21:36:12 +00:00
|
|
|
|
|
|
|
typedef struct s_prwall {
|
|
|
|
// geometry
|
|
|
|
GLfloat* wallbuffer;
|
|
|
|
GLfloat* overbuffer;
|
2006-10-15 18:51:41 +00:00
|
|
|
GLfloat* portal;
|
2006-09-29 21:36:12 +00:00
|
|
|
// attributes
|
|
|
|
GLfloat wallcolor[4], overcolor[4];
|
|
|
|
GLfloat wallglpic, overglpic;
|
|
|
|
|
|
|
|
char underover;
|
|
|
|
char invalidate;
|
|
|
|
} _prwall;
|
|
|
|
|
2006-10-14 23:33:10 +00:00
|
|
|
typedef struct s_cliplane {
|
|
|
|
_equation left, right, clip;
|
|
|
|
_point2d ref;
|
|
|
|
} _cliplane;
|
|
|
|
|
2006-09-29 21:36:12 +00:00
|
|
|
extern _prsector* prsectors[MAXSECTORS];
|
|
|
|
extern _prwall* prwalls[MAXWALLS];
|
2006-08-30 23:32:39 +00:00
|
|
|
|
2006-10-15 18:51:41 +00:00
|
|
|
// CONTROL
|
|
|
|
extern int updatesectors;
|
|
|
|
|
2006-09-29 21:36:12 +00:00
|
|
|
// EXTERNAL FUNCTIONS
|
|
|
|
int polymer_init(void);
|
|
|
|
void polymer_glinit(void);
|
|
|
|
void polymer_loadboard(void);
|
2006-10-04 09:54:25 +00:00
|
|
|
void polymer_drawrooms(long daposx, long daposy, long daposz, short daang, long dahoriz, short dacursectnum, int root);
|
2006-10-14 23:33:10 +00:00
|
|
|
void polymer_rotatesprite(long sx, long sy, long z, short a, short picnum, signed char dashade, char dapalnum, char dastat, long cx1, long cy1, long cx2, long cy2);
|
|
|
|
void polymer_drawmaskwall(long damaskwallcnt);
|
|
|
|
void polymer_drawsprite(long snum);
|
2006-10-15 18:51:41 +00:00
|
|
|
// SECTORS
|
2006-09-29 21:36:12 +00:00
|
|
|
int polymer_initsector(short sectnum);
|
|
|
|
int polymer_updatesector(short sectnum);
|
|
|
|
void PR_CALLBACK polymer_tesscombine(GLdouble v[3], GLdouble *data[4], GLfloat weight[4], GLdouble **out);
|
|
|
|
void PR_CALLBACK polymer_tesserror(GLenum error);
|
|
|
|
void PR_CALLBACK polymer_tessedgeflag(GLenum error);
|
|
|
|
void PR_CALLBACK polymer_tessvertex(void* vertex, void* sector);
|
|
|
|
int polymer_buildfloor(short sectnum);
|
2006-10-14 23:33:10 +00:00
|
|
|
void polymer_drawsector(short sectnum);
|
2006-10-15 18:51:41 +00:00
|
|
|
// WALLS
|
2006-09-29 21:36:12 +00:00
|
|
|
int polymer_initwall(short wallnum);
|
|
|
|
void polymer_updatewall(short wallnum);
|
|
|
|
void polymer_drawwall(short wallnum);
|
2006-10-14 23:33:10 +00:00
|
|
|
// HSR
|
2006-10-15 18:51:41 +00:00
|
|
|
void polymer_extractfrustum(void);
|
|
|
|
int polymer_portalinfrustum(short wallnum);
|
2006-10-16 22:07:15 +00:00
|
|
|
void polymer_addcliplane(_equation clip, _equation left, _equation right, float refx, float refy);
|
2006-10-15 18:51:41 +00:00
|
|
|
int polymer_wallincliplanes(short wallnum);
|
2006-10-18 03:59:28 +00:00
|
|
|
// SKIES
|
|
|
|
void polymer_initskybox(void);
|
|
|
|
void polymer_drawskyquad(int p1, int p2, GLfloat height);
|
|
|
|
void polymer_drawartsky(short tilenum);
|
2006-08-30 23:32:39 +00:00
|
|
|
|
2006-08-29 02:02:28 +00:00
|
|
|
#endif // !_polymer_h_
|