From 9308068bbd92e3d211fabba4a451c09235688c4a Mon Sep 17 00:00:00 2001 From: havoc Date: Wed, 3 Mar 2004 06:00:42 +0000 Subject: [PATCH] added r_showtris git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@3958 d7cf8633-e32d-0410-b094-e92efae38249 --- gl_backend.c | 23 ++++++++++++++++++++--- gl_backend.h | 2 +- gl_rmain.c | 20 +++++++++++++++++++- render.h | 2 ++ todo | 1 + 5 files changed, 43 insertions(+), 5 deletions(-) diff --git a/gl_backend.c b/gl_backend.c index 9b2ad26a..b20f7344 100644 --- a/gl_backend.c +++ b/gl_backend.c @@ -484,6 +484,8 @@ void GL_BlendFunc(int blendfunc1, int blendfunc2) { if (gl_state.blendfunc1 != blendfunc1 || gl_state.blendfunc2 != blendfunc2) { + if (r_showtrispass) + return; qglBlendFunc(gl_state.blendfunc1 = blendfunc1, gl_state.blendfunc2 = blendfunc2);CHECKGLERROR if (gl_state.blendfunc2 == GL_ZERO) { @@ -519,6 +521,8 @@ void GL_DepthMask(int state) { if (gl_state.depthmask != state) { + if (r_showtrispass) + return; qglDepthMask(gl_state.depthmask = state);CHECKGLERROR } } @@ -527,6 +531,8 @@ void GL_DepthTest(int state) { if (gl_state.depthtest != state) { + if (r_showtrispass) + return; gl_state.depthtest = state; if (gl_state.depthtest) { @@ -554,6 +560,8 @@ void GL_ColorPointer(const float *p) { if (gl_state.pointer_color != p) { + if (r_showtrispass) + return; CHECKGLERROR if (!gl_state.pointer_color) { @@ -575,6 +583,8 @@ void GL_Color(float cr, float cg, float cb, float ca) { if (gl_state.pointer_color || gl_state.color4f[0] != cr || gl_state.color4f[1] != cg || gl_state.color4f[2] != cb || gl_state.color4f[3] != ca) { + if (r_showtrispass) + return; GL_ColorPointer(NULL); gl_state.color4f[0] = cr; gl_state.color4f[1] = cg; @@ -672,6 +682,11 @@ void R_Mesh_Draw(int numverts, int numtriangles, const int *elements) Con_Printf("R_Mesh_Draw(%d, %d, %08p);\n", numverts, numtriangles, elements); return; } + if (r_showtrispass) + { + R_Mesh_Draw_ShowTris(numverts, numtriangles, elements); + return; + } c_meshs++; c_meshelements += numelements; CHECKGLERROR @@ -797,9 +812,9 @@ void R_Mesh_Finish(void) { int i; BACKENDACTIVECHECK - CHECKGLERROR + CHECKGLERROR GL_LockArrays(0, 0); - CHECKGLERROR + CHECKGLERROR for (i = backendunits - 1;i >= 0;i--) { @@ -872,6 +887,8 @@ void R_Mesh_State_Texture(const rmeshstate_t *m) GL_SetupTextureState(); } + if (r_showtrispass) + return; for (i = 0, unit = gl_state.units;i < backendunits;i++, unit++) { if (unit->t1d != m->tex1d[i]) @@ -1005,7 +1022,7 @@ void R_Mesh_State_Texture(const rmeshstate_t *m) } } -void R_Mesh_Draw_ShowTris(int numverts, int numtriangles, int *elements) +void R_Mesh_Draw_ShowTris(int numverts, int numtriangles, const int *elements) { qglBegin(GL_LINES); for (;numtriangles;numtriangles--, elements += 3) diff --git a/gl_backend.h b/gl_backend.h index cf828683..1bec4133 100644 --- a/gl_backend.h +++ b/gl_backend.h @@ -72,7 +72,7 @@ void R_Mesh_State_Texture(const rmeshstate_t *m); // renders a mesh void R_Mesh_Draw(int numverts, int numtriangles, const int *elements); // renders a mesh as lines -void R_Mesh_Draw_ShowTris(int numverts, int numtriangles, int *elements); +void R_Mesh_Draw_ShowTris(int numverts, int numtriangles, const int *elements); // saves a section of the rendered frame to a .tga or .jpg file qboolean SCR_ScreenShot(char *filename, int x, int y, int width, int height, qboolean jpeg); diff --git a/gl_rmain.c b/gl_rmain.c index 61aafc21..9c0dfd0d 100644 --- a/gl_rmain.c +++ b/gl_rmain.c @@ -39,6 +39,9 @@ qboolean envmap; float r_farclip; +// forces all rendering to draw triangle outlines +int r_showtrispass; + // view origin vec3_t r_vieworigin; vec3_t r_viewforward; @@ -61,6 +64,7 @@ refdef_t r_refdef; // 8.8 fraction of base light value unsigned short d_lightstylevalue[256]; +cvar_t r_showtris = {0, "r_showtris", "0"}; cvar_t r_drawentities = {0, "r_drawentities","1"}; cvar_t r_drawviewmodel = {0, "r_drawviewmodel","1"}; cvar_t r_speeds = {0, "r_speeds","0"}; @@ -253,6 +257,7 @@ void GL_Main_Init(void) // FIXME: move this to client? FOG_registercvars(); Cmd_AddCommand("timerefresh", R_TimeRefresh_f); + Cvar_RegisterVariable(&r_showtris); Cvar_RegisterVariable(&r_drawentities); Cvar_RegisterVariable(&r_drawviewmodel); Cvar_RegisterVariable(&r_speeds); @@ -632,6 +637,19 @@ void R_RenderView(void) qglEnable(GL_POLYGON_OFFSET_FILL); R_RenderScene(); + if (r_showtris.integer) + { + rmeshstate_t m; + GL_Color(1,1,1,1); + GL_BlendFunc(GL_ONE, GL_ZERO); + GL_DepthTest(GL_FALSE); + GL_DepthMask(GL_FALSE); + memset(&m, 0, sizeof(m)); + R_Mesh_State_Texture(&m); + r_showtrispass = true; + R_RenderScene(); + r_showtrispass = false; + } qglPolygonOffset(0, 0); qglDisable(GL_POLYGON_OFFSET_FILL); @@ -650,7 +668,7 @@ extern void R_DrawLightningBeams (void); void R_RenderScene(void) { entity_render_t *world; - + // don't let sound skip if going slow if (!intimerefresh && !r_speeds.integer) S_ExtraUpdate (); diff --git a/render.h b/render.h index eac7795e..0e47172b 100644 --- a/render.h +++ b/render.h @@ -86,6 +86,8 @@ extern int r_framecount; extern mplane_t frustum[4]; extern int c_alias_polys, c_light_polys, c_faces, c_nodes, c_leafs, c_models, c_bmodels, c_sprites, c_particles, c_dlights; +// forces all rendering to draw triangle outlines +extern int r_showtrispass; // // view origin diff --git a/todo b/todo index cf4fcb54..223691e2 100644 --- a/todo +++ b/todo @@ -36,6 +36,7 @@ d darkplaces: revert noclip movement to match nq for compatibility with mods tha -n darkplaces: typing ip in join game menu should show 'trying' and 'no response' after a while, or 'no network' if networking is not initialized (yummyluv) d darkplaces: make light_lev dlights from qc require PFLAGS_FULLDYNAMIC flag d darkplaces: improve tenebrae compatibility by handling EF_FULLDYNAMIC flag in tenebrae mode, also make all sprites render additive +d darkplaces: add r_showtris cvar (Riot) 3 darkplaces: figure out BoxOnPlaneSide crash that happens in dpmod dpdm2 deathmatch 7 occasionally 2 darkplaces: add q2 sprite support sometime 0 dpmod: fix tilted corpse bug -- 2.39.2