]> git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
client: Move r_refdef structs and renderer prototypes to render.h
authorcloudwalk <cloudwalk@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 29 Sep 2020 19:19:01 +0000 (19:19 +0000)
committercloudwalk <cloudwalk@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 29 Sep 2020 19:19:01 +0000 (19:19 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@12963 d7cf8633-e32d-0410-b094-e92efae38249

client.h
render.h

index 823d8b46db680f9cc65463ee7eef6ab99009a4a6..e3be51c729d9e1a456c850dc11fd7f90a4a5cd02 100644 (file)
--- a/client.h
+++ b/client.h
@@ -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,
index 459693fc495bc9c8224877f4ada35f040ae0a2d6..3b70f9038f1f0046cde7e2dabfaec14a66ef6b5d 100644 (file)
--- a/render.h
+++ b/render.h
@@ -204,16 +204,269 @@ extern cvar_t r_fullbright;
 extern cvar_t r_wateralpha;
 extern cvar_t r_dynamic;
 
+void R_NewExplosion(const vec3_t org);
 void R_UpdateVariables(void); // must call after setting up most of r_refdef, but before calling R_RenderView
 void R_RenderView(int fbo, rtexture_t *depthtexture, rtexture_t *colortexture, int x, int y, int width, int height); // must set r_refdef and call R_UpdateVariables and CL_UpdateEntityShading first
 void R_RenderView_UpdateViewVectors(void); // just updates r_refdef.view.{forward,left,up,origin,right,inverse_matrix}
 
+float RSurf_FogVertex(const vec3_t p);
+float RSurf_FogPoint(const vec3_t p);
+
 typedef enum r_refdef_scene_type_s {
        RST_CLIENT,
        RST_MENU,
        RST_COUNT
 } r_refdef_scene_type_t;
 
+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;
+
 void R_SelectScene( r_refdef_scene_type_t scenetype );
 r_refdef_scene_t * R_GetScenePointer( r_refdef_scene_type_t scenetype );