#include "quakedef.h"
-//static qboolean r_cache_thrash; // compatability
-
entity_render_t *currentrenderentity;
int r_framecount; // used for dlight push checking
qboolean envmap; // true during envmap command capture
-// LordHavoc: moved all code related to particles into r_part.c
-//int particletexture; // little dot for particles
-//int playertextures; // up to 16 color translated skins
-
//
// view origin
//
vec3_t vright;
vec3_t r_origin;
-//float r_world_matrix[16];
-//float r_base_world_matrix[16];
-
//
// screen size info
//
unsigned short d_lightstylevalue[256]; // 8.8 fraction of base light value
-//cvar_t r_norefresh = {0, "r_norefresh","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"};
-cvar_t r_speeds2 = {0, "r_speeds2","0"};
cvar_t r_fullbright = {0, "r_fullbright","0"};
-//cvar_t r_lightmap = {0, "r_lightmap","0"};
cvar_t r_wateralpha = {CVAR_SAVE, "r_wateralpha","1"};
cvar_t r_dynamic = {CVAR_SAVE, "r_dynamic","1"};
cvar_t r_waterripple = {CVAR_SAVE, "r_waterripple","0"};
cvar_t r_fullbrights = {CVAR_SAVE, "r_fullbrights", "1"};
-cvar_t gl_lightmode = {CVAR_SAVE, "gl_lightmode", "1"}; // LordHavoc: overbright lighting
-//cvar_t r_dynamicbothsides = {CVAR_SAVE, "r_dynamicbothsides", "1"}; // LordHavoc: can disable dynamic lighting of backfaces, but quake maps are weird so it doesn't always work right...
-
cvar_t gl_fogenable = {0, "gl_fogenable", "0"};
cvar_t gl_fogdensity = {0, "gl_fogdensity", "0.25"};
cvar_t gl_fogred = {0, "gl_fogred","0.3"};
cvar_t gl_fogstart = {0, "gl_fogstart", "0"};
cvar_t gl_fogend = {0, "gl_fogend","0"};
-cvar_t r_ser = {CVAR_SAVE, "r_ser", "1"};
-cvar_t gl_viewmodeldepthhack = {0, "gl_viewmodeldepthhack", "1"};
+cvar_t r_ser = {CVAR_SAVE, "r_ser", "0"};
cvar_t r_multitexture = {0, "r_multitexture", "1"};
intimerefresh = 1;
start = Sys_DoubleTime ();
- glDrawBuffer (GL_FRONT);
for (i = 0;i < 128;i++)
{
r_refdef.viewangles[0] = 0;
r_refdef.viewangles[1] = i/128.0*360.0;
r_refdef.viewangles[2] = 0;
- R_RenderView();
+ CL_UpdateScreen();
}
- glDrawBuffer (GL_BACK);
stop = Sys_DoubleTime ();
intimerefresh = 0;
goto loc0;
}
-qboolean lighthalf;
-
vec3_t fogcolor;
vec_t fogdensity;
float fog_density, fog_red, fog_green, fog_blue;
Cvar_RegisterVariable (&r_drawentities);
Cvar_RegisterVariable (&r_drawviewmodel);
Cvar_RegisterVariable (&r_speeds);
- Cvar_RegisterVariable (&r_speeds2);
- Cvar_RegisterVariable (&gl_lightmode);
-// Cvar_RegisterVariable (&r_dynamicwater);
-// Cvar_RegisterVariable (&r_dynamicbothsides);
Cvar_RegisterVariable (&r_fullbrights);
Cvar_RegisterVariable (&r_wateralpha);
Cvar_RegisterVariable (&r_dynamic);
Cvar_RegisterVariable (&r_waterripple);
Cvar_RegisterVariable (&r_fullbright);
Cvar_RegisterVariable (&r_ser);
- Cvar_RegisterVariable (&gl_viewmodeldepthhack);
Cvar_RegisterVariable (&r_multitexture);
if (gamemode == GAME_NEHAHRA)
Cvar_SetValue("r_fullbrights", 0);
extern void GL_Models_Init(void);
extern void R_Sky_Init(void);
extern void GL_Surf_Init(void);
-extern void GL_Screen_Init(void);
extern void R_Crosshairs_Init(void);
extern void R_Light_Init(void);
extern void R_Particles_Init(void);
GL_Models_Init();
R_Sky_Init();
GL_Surf_Init();
- GL_Screen_Init();
R_Crosshairs_Init();
R_Light_Init();
R_Particles_Init();
R_Explosion_Init();
- R_Decals_Init();
ui_init();
R_Modules_Start();
}
gl_extensions = glGetString (GL_EXTENSIONS);
Con_Printf ("GL_EXTENSIONS: %s\n", gl_extensions);
-// Con_Printf ("%s %s\n", gl_renderer, gl_version);
-
VID_CheckExtensions();
// LordHavoc: report supported extensions
Con_Printf ("\nengine extensions: %s\n", ENGINE_EXTENSIONS);
- glCullFace(GL_FRONT);
- glEnable(GL_TEXTURE_2D);
-
-// glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
+ qglCullFace(GL_FRONT);
+ qglEnable(GL_TEXTURE_2D);
}
if (!r_drawentities.integer)
return;
- for (i = 0;i < cl_numvisedicts;i++)
+ for (i = 0;i < r_refdef.numentities;i++)
{
- currentrenderentity = &cl_visedicts[i]->render;
+ currentrenderentity = r_refdef.entities[i];
Mod_CheckLoaded(currentrenderentity->model);
// move view-relative models to where they should be
if (!r_drawentities.integer)
return false;
- for (i = 0;i < cl_numvisedicts;i++)
+ for (i = 0;i < r_refdef.numentities;i++)
{
- currentrenderentity = &cl_visedicts[i]->render;
+ currentrenderentity = r_refdef.entities[i];
if (currentrenderentity->visframe == r_framecount && currentrenderentity->model->DrawSky)
{
currentrenderentity->model->DrawSky();
if (!r_drawentities.integer)
return;
- for (i = 0;i < cl_numvisedicts;i++)
+ for (i = 0;i < r_refdef.numentities;i++)
{
- currentrenderentity = &cl_visedicts[i]->render;
+ currentrenderentity = r_refdef.entities[i];
if (currentrenderentity->visframe == r_framecount && currentrenderentity->model->Draw)
currentrenderentity->model->Draw();
}
R_LerpAnimation(currentrenderentity);
- // hack the depth range to prevent view model from poking into walls
- if (gl_viewmodeldepthhack.integer)
- {
- R_Mesh_Render();
- glDepthRange (gldepthmin, gldepthmin + 0.3*(gldepthmax-gldepthmin));
- }
currentrenderentity->model->Draw();
- if (gl_viewmodeldepthhack.integer)
- {
- R_Mesh_Render();
- glDepthRange (gldepthmin, gldepthmax);
- }
}
static void R_SetFrustum (void)
r_oldviewleaf = r_viewleaf;
r_viewleaf = Mod_PointInLeaf (r_origin, cl.worldmodel);
- V_SetContentsColor (r_viewleaf->contents);
- V_CalcBlend ();
-
-// r_cache_thrash = false;
-
- c_brush_polys = 0;
- c_alias_polys = 0;
- c_light_polys = 0;
- c_faces = 0;
- c_nodes = 0;
- c_leafs = 0;
- c_models = 0;
- c_bmodels = 0;
- c_sprites = 0;
- c_particles = 0;
-// c_dlights = 0;
-
R_AnimateLight ();
}
-static void MYgluPerspective(GLdouble fovx, GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar )
-{
- GLdouble xmax, ymax;
-
- xmax = zNear * tan( fovx * M_PI / 360.0 ) * aspect;
- ymax = zNear * tan( fovy * M_PI / 360.0 );
-
- if (r_viewleaf->contents != CONTENTS_EMPTY && r_viewleaf->contents != CONTENTS_SOLID)
- {
- xmax *= (sin(cl.time * 4.7) * 0.03 + 0.97);
- ymax *= (sin(cl.time * 3.0) * 0.03 + 0.97);
- }
-
- glFrustum(-xmax, xmax, -ymax, ymax, zNear, zFar );
-}
-
-
-/*
-=============
-R_SetupGL
-=============
-*/
-static void R_SetupGL (void)
-{
- if (!r_render.integer)
- return;
-
-// glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // LordHavoc: moved to SCR_UpdateScreen
- gldepthmin = 0;
- gldepthmax = 1;
- glDepthFunc (GL_LEQUAL);
-
- glDepthRange (gldepthmin, gldepthmax);
-
- // update farclip based on previous frame
- r_farclip = r_newfarclip;
-
- // set up viewpoint
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity ();
-
- // y is weird beause OpenGL is bottom to top, we use top to bottom
- glViewport(r_refdef.x, vid.realheight - (r_refdef.y + r_refdef.height), r_refdef.width, r_refdef.height);
-// yfov = 2*atan((float)r_refdef.height/r_refdef.width)*180/M_PI;
- MYgluPerspective (r_refdef.fov_x, r_refdef.fov_y, r_refdef.width/r_refdef.height, 4, r_farclip);
-
- glCullFace(GL_FRONT);
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity ();
-
- glRotatef (-90, 1, 0, 0); // put Z going up
- glRotatef (90, 0, 0, 1); // put Z going up
- glRotatef (-r_refdef.viewangles[2], 1, 0, 0);
- glRotatef (-r_refdef.viewangles[0], 0, 1, 0);
- glRotatef (-r_refdef.viewangles[1], 0, 0, 1);
- glTranslatef (-r_refdef.vieworg[0], -r_refdef.vieworg[1], -r_refdef.vieworg[2]);
-
-// glGetFloatv (GL_MODELVIEW_MATRIX, r_world_matrix);
-
- //
- // set drawing parms
- //
-// if (gl_cull.integer)
- glEnable(GL_CULL_FACE);
-// else
-// glDisable(GL_CULL_FACE);
-
- glEnable(GL_BLEND); // was Disable
- glEnable(GL_DEPTH_TEST);
- glDepthMask(1);
-}
+static int blendviewpolyindex[3] = {0, 1, 2};
static void R_BlendView(void)
{
- if (!r_render.integer)
- return;
+ rmeshinfo_t m;
+ float tvxyz[3][4], r;
- if (v_blend[3] < 0.01f)
+ if (r_refdef.viewblend[3] < 0.01f)
return;
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity ();
- glOrtho (0, 1, 1, 0, -99999, 99999);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity ();
- glDisable (GL_DEPTH_TEST);
- glDisable (GL_CULL_FACE);
- glDisable(GL_TEXTURE_2D);
- glEnable(GL_BLEND);
- glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glBegin (GL_TRIANGLES);
- if (lighthalf)
- glColor4f (v_blend[0] * 0.5f, v_blend[1] * 0.5f, v_blend[2] * 0.5f, v_blend[3]);
- else
- glColor4fv (v_blend);
- glVertex2f (-5, -5);
- glVertex2f (10, -5);
- glVertex2f (-5, 10);
- glEnd ();
-
- glEnable (GL_CULL_FACE);
- glEnable (GL_DEPTH_TEST);
- glDisable(GL_BLEND);
- glEnable(GL_TEXTURE_2D);
+ memset(&m, 0, sizeof(m));
+ m.transparent = false;
+ m.blendfunc1 = GL_SRC_ALPHA;
+ m.blendfunc2 = GL_ONE;
+ m.depthdisable = true; // magic
+ m.numtriangles = 1;
+ m.numverts = 3;
+ m.index = blendviewpolyindex;
+ m.vertex = &tvxyz[0][0];
+ m.vertexstep = sizeof(float[4]);
+ m.cr = r_refdef.viewblend[0];
+ m.cg = r_refdef.viewblend[1];
+ m.cb = r_refdef.viewblend[2];
+ m.ca = r_refdef.viewblend[3];
+ r = 64000;
+ tvxyz[0][0] = r_origin[0] + vpn[0] * 1.5 - vright[0] * r - vup[0] * r;
+ tvxyz[0][1] = r_origin[1] + vpn[1] * 1.5 - vright[1] * r - vup[1] * r;
+ tvxyz[0][2] = r_origin[2] + vpn[2] * 1.5 - vright[2] * r - vup[2] * r;
+ r *= 3;
+ tvxyz[1][0] = tvxyz[0][0] + vup[0] * r;
+ tvxyz[1][1] = tvxyz[0][1] + vup[1] * r;
+ tvxyz[1][2] = tvxyz[0][2] + vup[2] * r;
+ tvxyz[2][0] = tvxyz[0][0] + vright[0] * r;
+ tvxyz[2][1] = tvxyz[0][1] + vright[1] * r;
+ tvxyz[2][2] = tvxyz[0][2] + vright[2] * r;
+ R_Mesh_Draw(&m);
}
/*
void R_RenderView (void)
{
if (!cl.worldmodel)
- Host_Error ("R_RenderView: NULL worldmodel");
+ return; //Host_Error ("R_RenderView: NULL worldmodel");
// FIXME: move to client
R_MoveExplosions();
R_SetupFrame();
R_SetFrustum();
- R_SetupGL();
R_SetupFog();
R_SkyStartFrame();
- R_Mesh_Clear();
if (r_ser.integer)
R_Clip_StartFrame();
R_BuildLightList();
+ R_Mesh_Start();
+
R_TimeReport("setup");
R_DrawWorld();
R_MarkWorldLights();
R_TimeReport("marklights");
- if (skyrendermasked && R_DrawBModelSky())
+ if (skyrendermasked)
{
- R_TimeReport("bmodelsky");
+ if (R_DrawBModelSky())
+ R_TimeReport("bmodelsky");
+ }
+ else
+ {
+ R_DrawViewModel();
+ R_TimeReport("viewmodel");
}
R_SetupForWorldRendering();
R_PrepareSurfaces();
R_TimeReport("surfprep");
- R_DrawSurfacesAll();
+ R_DrawSurfaces(SHADERSTAGE_SKY);
+ R_DrawSurfaces(SHADERSTAGE_NORMAL);
R_TimeReport("surfdraw");
if (r_drawportals.integer)
}
// don't let sound skip if going slow
- if (!intimerefresh && !r_speeds2.integer)
+ if (!intimerefresh && !r_speeds.integer)
S_ExtraUpdate ();
- R_DrawViewModel();
+ if (skyrendermasked)
+ {
+ R_DrawViewModel();
+ R_TimeReport("viewmodel");
+ }
+
R_DrawModels();
R_TimeReport("models");
- R_DrawDecals();
- R_TimeReport("decals");
-
R_DrawParticles();
R_TimeReport("particles");
// draw transparent meshs
R_Mesh_AddTransparent();
- R_TimeReport("sorttrans");
+ R_TimeReport("addtrans");
- // render any queued meshs
- R_Mesh_Render();
- R_TimeReport("meshrender");
+ R_DrawCoronas();
+ R_TimeReport("coronas");
R_BlendView();
R_TimeReport("blendview");
- Mem_CheckSentinelsGlobal();
- R_TimeReport("memtest");
+ // render any queued meshs
+ R_Mesh_Finish();
+ R_TimeReport("meshfinish");
}
+