#include "matrixlib.h"
#include "snd_main.h"
-// LordHavoc: 256 dynamic lights
-#define MAX_DLIGHTS 256
-
-/// this is the maximum number of input packets that can be predicted
-#define CL_MAX_USERCMDS 128
-
// flags for rtlight rendering
#define LIGHTFLAG_NORMALMODE 1
#define LIGHTFLAG_REALTIMEMODE 2
+typedef struct tridecal_s
+{
+ // color and initial alpha value
+ unsigned char colors[3][4];
+ // how long this decal has lived so far (the actual fade begins at cl_decals_time)
+ float lived;
+ // if >= 0 this indicates the decal should follow an animated triangle
+ int triangleindex;
+}
+tridecal_t;
+
+typedef struct decalsystem_s
+{
+ dp_model_t *model;
+ double lastupdatetime;
+ int maxdecals;
+ int freedecal;
+ int numdecals;
+ tridecal_t *decals;
+ float *vertex3f;
+ float *texcoord2f;
+ float *color4f;
+ int *element3i;
+ unsigned short *element3s;
+}
+decalsystem_t;
+
typedef struct effect_s
{
int active;
// note: technically each framegroupblend can produce two of these, but that
// never happens in practice because no one blends between more than 2
// framegroups at once
-#define MAX_FRAMEBLENDS MAX_FRAMEGROUPBLENDS
+#define MAX_FRAMEBLENDS (MAX_FRAMEGROUPBLENDS * 2)
typedef struct frameblend_s
{
int subframe;
vec3_t modellight_diffuse; // q3bsp
vec3_t modellight_lightdir; // q3bsp
+ // storage of decals on this entity
+ // (note: if allowdecals is set, be sure to call R_DecalSystem_Reset on removal!)
+ int allowdecals;
+ decalsystem_t decalsystem;
+
// FIELDS UPDATED BY RENDERER:
// last time visible during trace culling
double last_trace_visibility;
#define SIGNONS 4 // signon messages to receive before connected
-#define MAX_DEMOS 8
-#define MAX_DEMONAME 16
-
typedef enum cactive_e
{
ca_uninitialized, // during early startup
extern qboolean sb_showscores;
float RSurf_FogVertex(const vec3_t p);
+float RSurf_FogPoint(const vec3_t p);
typedef struct r_refdef_stats_s
{
typedef struct r_refdef_viewcache_s
{
+ // updated by gl_main_newmap()
+ int maxentities;
+ int world_numclusters;
+ int world_numleafs;
+ int world_numsurfaces;
+
// these properties are generated by R_View_Update()
// which entities are currently visible for this viewpoint
// (the used range is 0...r_refdef.scene.numentities)
- unsigned char entityvisible[MAX_EDICTS];
+ unsigned char *entityvisible;
+
// flag arrays used for visibility checking on world model
// (all other entities have no per-surface/per-leaf visibility checks)
- // TODO: dynamic resize according to r_refdef.scene.worldmodel->brush.num_clusters
- unsigned char world_pvsbits[(32768+7)>>3]; // FIXME: buffer overflow on huge maps
- // TODO: dynamic resize according to r_refdef.scene.worldmodel->brush.num_leafs
- unsigned char world_leafvisible[32768]; // FIXME: buffer overflow on huge maps
- // TODO: dynamic resize according to r_refdef.scene.worldmodel->num_surfaces
- unsigned char world_surfacevisible[262144]; // FIXME: buffer overflow on huge maps
+ unsigned char *world_pvsbits;
+ unsigned char *world_leafvisible;
+ unsigned char *world_surfacevisible;
// if true, the view is currently in a leaf without pvs data
qboolean world_novis;
}
int numlights;
// intensities for light styles right now, controls rtlights
- float rtlightstylevalue[256]; // float fraction of base light value
+ float rtlightstylevalue[MAX_LIGHTSTYLES]; // float fraction of base light value
// 8.8bit fixed point intensities for light styles
// controls intensity lightmap layers
- unsigned short lightstylevalue[256]; // 8.8 fraction of base light value
+ unsigned short lightstylevalue[MAX_LIGHTSTYLES]; // 8.8 fraction of base light value
float ambient;
r_refdef_scene_t scene;
- vec3_t fogcolor;
- vec_t fogrange;
- vec_t fograngerecip;
- vec_t fogmasktabledistmultiplier;
+ float fogplane[4];
+ float fogplaneviewdist;
+ qboolean fogplaneviewabove;
+ float fogheightfade;
+ float fogcolor[3];
+ float fogrange;
+ float fograngerecip;
+ float fogmasktabledistmultiplier;
#define FOGMASKTABLEWIDTH 1024
float fogmasktable[FOGMASKTABLEWIDTH];
float fogmasktable_start, fogmasktable_alpha, fogmasktable_range, fogmasktable_density;
float fog_alpha;
float fog_start;
float fog_end;
+ float fog_height;
+ float fog_fadedepth;
qboolean fogenabled;
qboolean oldgl_fogenable;