+r_refdef_viewcache_t;
+
+// TODO: really think about which fields should go into scene and which one should stay in refdef [1/7/2008 Black]
+// maybe also refactor some of the functions to support different setting sources (ie. fogenabled, etc.) for different scenes
+typedef struct r_refdef_scene_s {
+ // whether to call S_ExtraUpdate during render to reduce sound chop
+ qboolean extraupdate;
+
+ // (client gameworld) time for rendering time based effects
+ double time;
+
+ // the world
+ entity_render_t *worldentity;
+
+ // same as worldentity->model
+ dp_model_t *worldmodel;
+
+ // renderable entities (excluding world)
+ entity_render_t **entities;
+ int numentities;
+ int maxentities;
+
+ // field of temporary entities that is reset each (client) frame
+ entity_render_t *tempentities;
+ int numtempentities;
+ int maxtempentities;
+
+ // renderable dynamic lights
+ rtlight_t *lights[MAX_DLIGHTS];
+ rtlight_t templights[MAX_DLIGHTS];
+ int numlights;
+
+ // intensities for light styles right now, controls rtlights
+ 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[MAX_LIGHTSTYLES]; // 8.8 fraction of base light value
+
+ float ambient;
+
+ qboolean rtworld;
+ qboolean rtworldshadows;
+ qboolean rtdlight;
+ qboolean rtdlightshadows;
+} r_refdef_scene_t;
+
+typedef struct r_refdef_s
+{
+ // these fields define the basic rendering information for the world
+ // but not the view, which could change multiple times in one rendered
+ // frame (for example when rendering textures for certain effects)
+
+ // these are set for water warping before
+ // frustum_x/frustum_y are calculated
+ float frustumscale_x, frustumscale_y;
+
+ // current view settings (these get reset a few times during rendering because of water rendering, reflections, etc)
+ r_refdef_view_t view;
+ r_refdef_viewcache_t viewcache;
+
+ // minimum visible distance (pixels closer than this disappear)
+ double nearclip;
+ // maximum visible distance (pixels further than this disappear in 16bpp modes,
+ // in 32bpp an infinite-farclip matrix is used instead)
+ double farclip;
+
+ // fullscreen color blend
+ float viewblend[4];
+
+ r_refdef_scene_t scene;
+
+ 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_density;
+ float fog_red;
+ float fog_green;
+ float fog_blue;
+ float fog_alpha;
+ float fog_start;
+ float fog_end;
+ float fog_height;
+ float fog_fadedepth;
+ qboolean fogenabled;
+ qboolean oldgl_fogenable;
+
+ qboolean draw2dstage;
+
+ // true during envmap command capture
+ qboolean envmap;
+
+ // brightness of world lightmaps and related lighting
+ // (often reduced when world rtlights are enabled)
+ float lightmapintensity;
+ // whether to draw world lights realtime, dlights realtime, and their shadows
+ float polygonfactor;
+ float polygonoffset;
+ float shadowpolygonfactor;
+ float shadowpolygonoffset;
+
+ // rendering stats for r_speeds display
+ // (these are incremented in many places)
+ r_refdef_stats_t stats;
+}
+r_refdef_t;