Skip to content

Commit

Permalink
client: Move r_refdef structs and renderer prototypes to render.h
Browse files Browse the repository at this point in the history
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@12963 d7cf8633-e32d-0410-b094-e92efae38249
  • Loading branch information
cloudwalk committed Sep 29, 2020
1 parent 4471317 commit eac7237
Show file tree
Hide file tree
Showing 2 changed files with 253 additions and 253 deletions.
253 changes: 0 additions & 253 deletions client.h
Original file line number Diff line number Diff line change
Expand Up @@ -1734,264 +1734,11 @@ void CL_ParticleRain (const vec3_t mins, const vec3_t maxs, const vec3_t dir, in
void CL_EntityParticles (const entity_t *ent);
void CL_ParticleExplosion (const vec3_t org);
void CL_ParticleExplosion2 (const vec3_t org, int colorStart, int colorLength);
void R_NewExplosion(const vec3_t org);

#include "cl_screen.h"

extern qbool sb_showscores;

float RSurf_FogVertex(const vec3_t p);
float RSurf_FogPoint(const vec3_t p);

typedef enum r_viewport_type_e
{
R_VIEWPORTTYPE_ORTHO,
R_VIEWPORTTYPE_PERSPECTIVE,
R_VIEWPORTTYPE_PERSPECTIVE_INFINITEFARCLIP,
R_VIEWPORTTYPE_PERSPECTIVECUBESIDE,
R_VIEWPORTTYPE_TOTAL
}
r_viewport_type_t;

typedef struct r_viewport_s
{
matrix4x4_t cameramatrix; // from entity (transforms from camera entity to world)
matrix4x4_t viewmatrix; // actual matrix for rendering (transforms to viewspace)
matrix4x4_t projectmatrix; // actual projection matrix (transforms from viewspace to screen)
int x;
int y;
int z;
int width;
int height;
int depth;
r_viewport_type_t type;
float screentodepth[2]; // used by deferred renderer to calculate linear depth from device depth coordinates
}
r_viewport_t;

typedef struct r_refdef_view_s
{
// view information (changes multiple times per frame)
// if any of these variables change then r_refdef.viewcache must be regenerated
// by calling R_View_Update
// (which also updates viewport, scissor, colormask)

// it is safe and expected to copy this into a structure on the stack and
// call the renderer recursively, then restore from the stack afterward
// (as long as R_View_Update is called)

// eye position information
matrix4x4_t matrix, inverse_matrix;
vec3_t origin;
vec3_t forward;
vec3_t left;
vec3_t right;
vec3_t up;
int numfrustumplanes;
mplane_t frustum[6];
qbool useclipplane;
qbool usecustompvs; // uses r_refdef.viewcache.pvsbits as-is rather than computing it
mplane_t clipplane;
float frustum_x, frustum_y;
vec3_t frustumcorner[4];
// if turned off it renders an ortho view
int useperspective;
// allows visibility culling based on the view origin (e.g. pvs and R_CanSeeBox)
// this is turned off by:
// r_trippy
// !r_refdef.view.useperspective
// (sometimes) r_refdef.view.useclipplane
int usevieworiginculling;
float ortho_x, ortho_y;

// screen area to render in
int x;
int y;
int z;
int width;
int height;
int depth;
r_viewport_t viewport; // note: if r_viewscale is used, the viewport.width and viewport.height may be less than width and height

// which color components to allow (for anaglyph glasses)
int colormask[4];

// global RGB color multiplier for rendering
float colorscale;

// whether to call R_ClearScreen before rendering stuff
qbool clear;
// if true, don't clear or do any post process effects (bloom, etc)
qbool isoverlay;
// if true, this is the MAIN view (which is, after CSQC, copied into the scene for use e.g. by r_speeds 1, showtex, prydon cursor)
qbool ismain;

// whether to draw r_showtris and such, this is only true for the main
// view render, all secondary renders (mirrors, portals, cameras,
// distortion effects, etc) omit such debugging information
qbool showdebug;

// these define which values to use in GL_CullFace calls to request frontface or backface culling
int cullface_front;
int cullface_back;

// render quality (0 to 1) - affects r_drawparticles_drawdistance and others
float quality;
}
r_refdef_view_t;

typedef struct r_refdef_viewcache_s
{
// updated by gl_main_newmap()
int maxentities;
int world_numclusters;
int world_numclusterbytes;
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;

// flag arrays used for visibility checking on world model
// (all other entities have no per-surface/per-leaf visibility checks)
unsigned char *world_pvsbits;
unsigned char *world_leafvisible;
unsigned char *world_surfacevisible;
// if true, the view is currently in a leaf without pvs data
qbool world_novis;
}
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
qbool 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;
qbool expandtempentities;

// 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

// adds brightness to the whole scene, separate from lightmapintensity
// see CL_UpdateEntityShading
float ambientintensity;
// brightness of lightmap and modellight lighting on materials
// see CL_UpdateEntityShading
float lightmapintensity;

qbool rtworld;
qbool rtworldshadows;
qbool rtdlight;
qbool 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;
qbool 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;
qbool fogenabled;
qbool oldgl_fogenable;

// new flexible texture height fog (overrides normal fog)
char fog_height_texturename[64]; // note: must be 64 for the sscanf code
unsigned char *fog_height_table1d;
unsigned char *fog_height_table2d;
int fog_height_tablesize; // enable
float fog_height_tablescale;
float fog_height_texcoordscale;
char fogheighttexturename[64]; // detects changes to active fog height texture

int draw2dstage; // 0 = no, 1 = yes, other value = needs setting up again

// true during envmap command capture
qbool envmap;

// whether to draw world lights realtime, dlights realtime, and their shadows
float polygonfactor;
float polygonoffset;

// how long R_RenderView took on the previous frame
double lastdrawscreentime;

// rendering stats for r_speeds display
// (these are incremented in many places)
int stats[r_stat_count];
}
r_refdef_t;

extern r_refdef_t r_refdef;

typedef enum waterlevel_e
{
WATERLEVEL_NONE,
Expand Down
Loading

0 comments on commit eac7237

Please sign in to comment.