summaryrefslogtreecommitdiff
path: root/src/engine/rendergl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/rendergl.cpp')
-rw-r--r--src/engine/rendergl.cpp211
1 files changed, 34 insertions, 177 deletions
diff --git a/src/engine/rendergl.cpp b/src/engine/rendergl.cpp
index 6049951..5ada421 100644
--- a/src/engine/rendergl.cpp
+++ b/src/engine/rendergl.cpp
@@ -599,7 +599,7 @@ void gl_init()
glClearDepth(1);
glDepthFunc(GL_LESS);
glDisable(GL_DEPTH_TEST);
-
+
glEnable(GL_LINE_SMOOTH);
//glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
@@ -621,7 +621,7 @@ VAR(wireframe, 0, 0, 1);
ICOMMAND(getcamyaw, "", (), floatret(camera1->yaw));
ICOMMAND(getcampitch, "", (), floatret(camera1->pitch));
ICOMMAND(getcamroll, "", (), floatret(camera1->roll));
-ICOMMAND(getcampos, "", (),
+ICOMMAND(getcampos, "", (),
{
defformatstring(pos, "%s %s %s", floatstr(camera1->o.x), floatstr(camera1->o.y), floatstr(camera1->o.z));
result(pos);
@@ -652,7 +652,7 @@ void setcammatrix()
void setcamprojmatrix(bool init = true, bool flush = false)
{
if(init)
- {
+ {
setcammatrix();
}
@@ -672,7 +672,7 @@ void setcamprojmatrix(bool init = true, bool flush = false)
fogplane.x /= projmatrix.a.x;
fogplane.y /= projmatrix.b.y;
fogplane.z /= projmatrix.c.w;
- GLOBALPARAMF(fogplane, fogplane.x, fogplane.y, 0, fogplane.z);
+ GLOBALPARAMF(fogplane, fogplane.x, fogplane.y, 0, fogplane.z);
}
else
{
@@ -771,7 +771,7 @@ FVARP(sensitivity, 1e-3f, 3, 1000);
FVARP(sensitivityscale, 1e-3f, 1, 1000);
VARP(invmouse, 0, 0, 1);
FVARP(mouseaccel, 0, 0, 1000);
-
+
VAR(thirdperson, 0, 0, 2);
FVAR(thirdpersondistance, 0, 20, 50);
FVAR(thirdpersonup, -25, 0, 25);
@@ -795,12 +795,12 @@ void mousemove(int dx, int dy)
float cursens = sensitivity, curaccel = mouseaccel;
if(zoom)
{
- if(zoomautosens)
+ if(zoomautosens)
{
cursens = float(sensitivity*zoomfov)/fov;
curaccel = float(mouseaccel*zoomfov)/fov;
}
- else
+ else
{
cursens = zoomsens;
curaccel = zoomaccel;
@@ -844,7 +844,7 @@ void recomputecamera()
camera1->type = ENT_CAMERA;
camera1->move = -1;
camera1->eyeheight = camera1->aboveeye = camera1->radius = camera1->xradius = camera1->yradius = 2;
-
+
matrix3 orient;
orient.identity();
orient.rotate_around_z(camera1->yaw*RAD);
@@ -852,7 +852,7 @@ void recomputecamera()
orient.rotate_around_y(camera1->roll*-RAD);
vec dir = vec(orient.b).neg(), side = vec(orient.a).neg(), up = orient.c;
- if(game::collidecamera())
+ if(game::collidecamera())
{
movecamera(camera1, dir, thirdpersondistance, 1);
movecamera(camera1, dir, clamp(thirdpersondistance - camera1->o.dist(player->o), 0.0f, 1.0f), 0.1f);
@@ -873,7 +873,7 @@ void recomputecamera()
movecamera(camera1, side, clamp(dist - camera1->o.dist(pos), 0.0f, 1.0f), 0.1f);
}
}
- else
+ else
{
camera1->o.add(vec(dir).mul(thirdpersondistance));
if(thirdpersonup) camera1->o.add(vec(up).mul(thirdpersonup));
@@ -939,7 +939,7 @@ void enablepolygonoffset(GLenum type)
glEnable(type);
return;
}
-
+
bool clipped = reflectz < 1e15f && reflectclip;
nooffsetmatrix = projmatrix;
@@ -954,7 +954,7 @@ void disablepolygonoffset(GLenum type)
glDisable(type);
return;
}
-
+
projmatrix = nooffsetmatrix;
setcamprojmatrix(false, true);
}
@@ -962,8 +962,8 @@ void disablepolygonoffset(GLenum type)
void calcspherescissor(const vec &center, float size, float &sx1, float &sy1, float &sx2, float &sy2)
{
vec worldpos(center), e;
- if(reflecting) worldpos.z = 2*reflectz - worldpos.z;
- cammatrix.transform(worldpos, e);
+ if(reflecting) worldpos.z = 2*reflectz - worldpos.z;
+ cammatrix.transform(worldpos, e);
if(e.z > 2*size) { sx1 = sy1 = 1; sx2 = sy2 = -1; return; }
float zzrr = e.z*e.z - size*size,
dx = e.x*e.x + zzrr, dy = e.y*e.y + zzrr,
@@ -1034,7 +1034,7 @@ int pushscissor(float sx1, float sy1, float sx2, float sy2)
glScissor(sx, sy, sw, sh);
if(scissoring<=1) glEnable(GL_SCISSOR_TEST);
-
+
return scissoring;
}
@@ -1452,7 +1452,7 @@ void drawreflection(float z, bool refract, int fogdepth, const bvec &col)
rendergame();
if(refracting && z>=0 && !isthirdperson() && fabs(camera1->o.z-z) <= 0.5f*(player->eyeheight + player->aboveeye))
- {
+ {
matrix4 oldprojmatrix = projmatrix, avatarproj;
avatarproj.perspective(curavatarfov, aspect, nearplane, farplane);
if(reflectclip)
@@ -1477,7 +1477,7 @@ void drawreflection(float z, bool refract, int fogdepth, const bvec &col)
if(fading) glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
- if(reflectclip && z>=0) projmatrix = noclipmatrix;
+ if(reflectclip && z>=0) projmatrix = noclipmatrix;
if(reflecting)
{
@@ -1488,7 +1488,7 @@ void drawreflection(float z, bool refract, int fogdepth, const bvec &col)
popfogdist();
popfogcolor();
-
+
reflectz = 1e16f;
refracting = 0;
reflecting = fading = fogging = false;
@@ -1513,7 +1513,7 @@ void drawcubemap(int size, const vec &o, float yaw, float pitch, const cubemapsi
cmcamera.roll = 0;
camera1 = &cmcamera;
setviewcell(camera1->o);
-
+
int fogmat = lookupmaterial(o)&(MATF_VOLUME|MATF_INDEX);
setfog(fogmat);
@@ -1653,146 +1653,6 @@ vec calcmodelpreviewpos(const vec &radius, float &yaw)
return vec(0, dist, 0).rotate_around_x(camera1->pitch*RAD);
}
-GLuint minimaptex = 0;
-vec minimapcenter(0, 0, 0), minimapradius(0, 0, 0), minimapscale(0, 0, 0);
-
-void clearminimap()
-{
- if(minimaptex) { glDeleteTextures(1, &minimaptex); minimaptex = 0; }
-}
-
-VARR(minimapheight, 0, 0, 2<<16);
-bvec minimapcolor(0, 0, 0);
-HVARFR(minimapcolour, 0, 0, 0xFFFFFF,
-{
- minimapcolor = bvec((minimapcolour>>16)&0xFF, (minimapcolour>>8)&0xFF, minimapcolour&0xFF);
-});
-VARR(minimapclip, 0, 0, 1);
-VARFP(minimapsize, 7, 8, 10, { if(minimaptex) drawminimap(); });
-
-void bindminimap()
-{
- glBindTexture(GL_TEXTURE_2D, minimaptex);
-}
-
-void clipminimap(ivec &bbmin, ivec &bbmax, cube *c = worldroot, const ivec &co = ivec(0, 0, 0), int size = worldsize>>1)
-{
- loopi(8)
- {
- ivec o(i, co, size);
- if(c[i].children) clipminimap(bbmin, bbmax, c[i].children, o, size>>1);
- else if(!isentirelysolid(c[i]) && (c[i].material&MATF_CLIP)!=MAT_CLIP)
- {
- loopk(3) bbmin[k] = min(bbmin[k], o[k]);
- loopk(3) bbmax[k] = max(bbmax[k], o[k] + size);
- }
- }
-}
-
-void drawminimap()
-{
- if(!game::needminimap()) { clearminimap(); return; }
-
- renderprogress(0, "generating mini-map...", 0, !renderedframe);
-
- int size = 1<<minimapsize, sizelimit = min(hwtexsize, min(screenw, screenh));
- while(size > sizelimit) size /= 2;
- if(!minimaptex) glGenTextures(1, &minimaptex);
-
- ivec bbmin(worldsize, worldsize, worldsize), bbmax(0, 0, 0);
- loopv(valist)
- {
- vtxarray *va = valist[i];
- loopk(3)
- {
- if(va->geommin[k]>va->geommax[k]) continue;
- bbmin[k] = min(bbmin[k], va->geommin[k]);
- bbmax[k] = max(bbmax[k], va->geommax[k]);
- }
- }
- if(minimapclip)
- {
- ivec clipmin(worldsize, worldsize, worldsize), clipmax(0, 0, 0);
- clipminimap(clipmin, clipmax);
- loopk(2) bbmin[k] = max(bbmin[k], clipmin[k]);
- loopk(2) bbmax[k] = min(bbmax[k], clipmax[k]);
- }
-
- minimapradius = vec(bbmax).sub(vec(bbmin)).mul(0.5f);
- minimapcenter = vec(bbmin).add(minimapradius);
- minimapradius.x = minimapradius.y = max(minimapradius.x, minimapradius.y);
- minimapscale = vec((0.5f - 1.0f/size)/minimapradius.x, (0.5f - 1.0f/size)/minimapradius.y, 1.0f);
-
- drawtex = DRAWTEX_MINIMAP;
-
- physent *oldcamera = camera1;
- static physent cmcamera;
- cmcamera = *player;
- cmcamera.reset();
- cmcamera.type = ENT_CAMERA;
- cmcamera.o = vec(minimapcenter.x, minimapcenter.y, max(minimapcenter.z + minimapradius.z + 1, float(minimapheight)));
- cmcamera.yaw = 0;
- cmcamera.pitch = -90;
- cmcamera.roll = 0;
- camera1 = &cmcamera;
- setviewcell(vec(-1, -1, -1));
-
- projmatrix.ortho(-minimapradius.x, minimapradius.x, -minimapradius.y, minimapradius.y, 0, camera1->o.z + 1);
- projmatrix.a.mul(-1);
- setcamprojmatrix();
-
- setnofog(minimapcolor.tocolor());
-
- glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
-
- glViewport(0, 0, size, size);
-
- glEnable(GL_CULL_FACE);
- glEnable(GL_DEPTH_TEST);
-
- glFrontFace(GL_CCW);
-
- xtravertsva = xtraverts = glde = gbatches = 0;
-
- visiblecubes(false);
- queryreflections();
- drawreflections();
-
- loopi(minimapheight > 0 && minimapheight < minimapcenter.z + minimapradius.z ? 2 : 1)
- {
- if(i)
- {
- glClear(GL_DEPTH_BUFFER_BIT);
- camera1->o.z = minimapheight;
- setcamprojmatrix();
- }
- rendergeom();
- rendermapmodels();
- renderwater();
- rendermaterials();
- renderalphageom();
- }
-
- glFrontFace(GL_CW);
-
- glDisable(GL_DEPTH_TEST);
- glDisable(GL_CULL_FACE);
-
- glViewport(0, 0, screenw, screenh);
-
- camera1 = oldcamera;
- drawtex = 0;
-
- glBindTexture(GL_TEXTURE_2D, minimaptex);
- glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB5, 0, 0, size, size, 0);
- setuptexparameters(minimaptex, NULL, 3, 1, GL_RGB5, GL_TEXTURE_2D);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
- GLfloat border[4] = { minimapcolor.x/255.0f, minimapcolor.y/255.0f, minimapcolor.z/255.0f, 1.0f };
- glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, border);
- glBindTexture(GL_TEXTURE_2D, 0);
-}
-
bool deferdrawtextures = false;
void drawtextures()
@@ -1800,7 +1660,6 @@ void drawtextures()
if(minimized) { deferdrawtextures = true; return; }
deferdrawtextures = false;
genenvmaps();
- drawminimap();
}
GLuint motiontex = 0;
@@ -1870,7 +1729,7 @@ void gl_drawframe()
int w = screenw, h = screenh;
aspect = forceaspect ? forceaspect : w/float(h);
fovy = 2*atan2(tan(curfov/2*RAD), aspect)/RAD;
-
+
int fogmat = lookupmaterial(camera1->o)&(MATF_VOLUME|MATF_INDEX), abovemat = MAT_AIR;
float fogblend = 1.0f, causticspass = 0.0f;
if(isliquid(fogmat&MATF_VOLUME))
@@ -1881,7 +1740,7 @@ void gl_drawframe()
if(caustics && (fogmat&MATF_VOLUME)==MAT_WATER && camera1->o.z < z)
causticspass = min(z - camera1->o.z, 1.0f);
}
- else fogmat = MAT_AIR;
+ else fogmat = MAT_AIR;
setfog(fogmat, fogblend, abovemat);
if(fogmat!=MAT_AIR)
{
@@ -1901,10 +1760,10 @@ void gl_drawframe()
xtravertsva = xtraverts = glde = gbatches = 0;
visiblecubes();
-
+
glClear(GL_DEPTH_BUFFER_BIT|(wireframe && editmode ? GL_COLOR_BUFFER_BIT : 0));
- if(wireframe && editmode) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+ if(wireframe && editmode) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
if(limitsky()) drawskybox(farplane, true);
@@ -1979,7 +1838,7 @@ void damagecompass(int n, const vec &loc)
{
if(!usedamagecompass || minimized) return;
vec delta(loc);
- delta.sub(camera1->o);
+ delta.sub(camera1->o);
float yaw = 0, pitch;
if(delta.magnitude() > 4)
{
@@ -2087,7 +1946,7 @@ void loadcrosshair(const char *name, int i)
{
if(i < 0 || i >= MAXCROSSHAIRS) return;
crosshairs[i] = name ? textureload(name, 3, true) : notexture;
- if(crosshairs[i] == notexture)
+ if(crosshairs[i] == notexture)
{
name = game::defaultcrosshair(i);
if(!name) name = "data/crosshair.png";
@@ -2102,7 +1961,7 @@ void loadcrosshair_(const char *name, int *i)
COMMANDN(loadcrosshair, loadcrosshair_, "si");
-ICOMMAND(getcrosshair, "i", (int *i),
+ICOMMAND(getcrosshair, "i", (int *i),
{
const char *name = "";
if(*i >= 0 && *i < MAXCROSSHAIRS)
@@ -2112,7 +1971,7 @@ ICOMMAND(getcrosshair, "i", (int *i),
}
result(name);
});
-
+
void writecrosshairs(stream *f)
{
loopi(MAXCROSSHAIRS) if(crosshairs[i] && crosshairs[i]!=notexture)
@@ -2137,13 +1996,13 @@ void drawcrosshair(int w, int h)
g3d_cursorpos(cx, cy);
}
else
- {
+ {
int index = game::selectcrosshair(color);
if(index < 0) return;
if(!crosshairfx) index = 0;
if(!crosshairfx || !crosshaircolors) color = vec(1, 1, 1);
crosshair = crosshairs[index];
- if(!crosshair)
+ if(!crosshair)
{
loadcrosshair(NULL, index);
crosshair = crosshairs[index];
@@ -2198,7 +2057,7 @@ void gl_drawhud()
hudmatrix.ortho(0, w, h, 0, -1, 1);
resethudmatrix();
-
+
gle::colorf(1, 1, 1);
extern int debugsm;
@@ -2223,10 +2082,10 @@ void gl_drawhud()
}
glEnable(GL_BLEND);
-
+
extern void debugparticles();
debugparticles();
-
+
if(!mainmenu)
{
drawdamagescreen(w, h);
@@ -2274,12 +2133,12 @@ void gl_drawhud()
char *dst = buf;
const char *src = &buf[!wallclock24 && buf[0]=='0' ? 1 : 0];
while(*src) *dst++ = tolower(*src++);
- *dst++ = '\0';
+ *dst++ = '\0';
draw_text(buf, conw-5*FONTH, conh-FONTH*3/2-roffset);
roffset += FONTH;
}
}
-
+
if(editmode || showeditstats)
{
static int laststats = 0, prevstats[8] = { 0, 0, 0, 0, 0, 0, 0 }, curstats[8] = { 0, 0, 0, 0, 0, 0, 0 };
@@ -2378,8 +2237,6 @@ void cleanupgl()
{
cleanupmotionblur();
- clearminimap();
-
cleanupscreenquad();
gle::cleanup();