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.cpp410
1 files changed, 6 insertions, 404 deletions
diff --git a/src/engine/rendergl.cpp b/src/engine/rendergl.cpp
index 997d15a..6d3e705 100644
--- a/src/engine/rendergl.cpp
+++ b/src/engine/rendergl.cpp
@@ -496,9 +496,7 @@ void gl_checkextensions()
if(glversion >= 300 || hasext("GL_EXT_gpu_shader4"))
{
// on DX10 or above class cards (i.e. GF8 or RadeonHD) enable expensive features
- extern int glare, maxdynlights, depthfxsize, blurdepthfx, texcompress;
- waterfallrefract = 1;
- glare = 1;
+ extern int maxdynlights, depthfxsize, blurdepthfx, texcompress;
maxdynlights = MAXDYNLIGHTS;
depthfxsize = 10;
blurdepthfx = 0;
@@ -590,19 +588,7 @@ void setcamprojmatrix(bool init = true, bool flush = false)
GLOBALPARAM(camprojmatrix, camprojmatrix);
- if(fogging)
- {
- vec fogplane(cammatrix.c);
- fogplane.x /= projmatrix.a.x;
- fogplane.y /= projmatrix.b.y;
- fogplane.z /= projmatrix.c.w;
- GLOBALPARAMF(fogplane, fogplane.x, fogplane.y, 0, fogplane.z);
- }
- else
- {
- vec2 lineardepthscale = projmatrix.lineardepthscale();
- GLOBALPARAMF(fogplane, 0, 0, lineardepthscale.x, lineardepthscale.y);
- }
+ vec2 lineardepthscale = projmatrix.lineardepthscale();
if(flush && Shader::lastshader) Shader::lastshader->flushparams();
}
@@ -702,7 +688,7 @@ FVAR(thirdpersonup, -25, 0, 25);
FVAR(thirdpersonside, -25, 0, 25);
physent *camera1 = NULL;
bool detachedcamera = false;
-bool isthirdperson() { return player!=camera1 || detachedcamera || reflecting; }
+bool isthirdperson() { return player!=camera1 || detachedcamera; }
void fixcamerarange()
{
@@ -828,9 +814,6 @@ vec calcavatarpos(const vec &pos, float dist)
return dir.add(camera1->o);
}
-VAR(reflectclip, 0, 6, 64);
-VAR(reflectclipavatar, -64, 0, 64);
-
matrix4 clipmatrix, noclipmatrix;
void renderavatar()
@@ -863,7 +846,7 @@ void enablepolygonoffset(GLenum type)
return;
}
- bool clipped = reflectz < 1e15f && reflectclip;
+ bool clipped = false;
nooffsetmatrix = projmatrix;
projmatrix.d.z += depthoffset * (clipped ? noclipmatrix.c.z : projmatrix.c.z);
@@ -885,7 +868,6 @@ 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(e.z > 2*size) { sx1 = sy1 = 1; sx2 = sy2 = -1; return; }
float zzrr = e.z*e.z - size*size,
@@ -1053,27 +1035,16 @@ void hudquad(float x, float y, float w, float h, float tx, float ty, float tw, f
HUDQUAD(x, y, x+w, y+h, tx, ty, tx+tw, ty+th);
}
-VARR(fog, 16, 4000, 1000024);
-bvec fogcolor(0x80, 0x99, 0xB3);
-HVARFR(fogcolour, 0, 0x8099B3, 0xFFFFFF,
-{
- fogcolor = bvec((fogcolour>>16)&0xFF, (fogcolour>>8)&0xFF, fogcolour&0xFF);
-});
-
static float findsurface(int fogmat, const vec &v, int &abovemat)
{
- fogmat &= MATF_VOLUME;
ivec o(v), co;
int csize;
do
{
cube &c = lookupcube(o, 0, co, csize);
int mat = c.material&MATF_VOLUME;
- if(mat != fogmat)
- {
- abovemat = isliquid(mat) ? (int) c.material : (int) MAT_AIR;
+ abovemat = (int) MAT_AIR;
return o.z;
- }
o.z = co.z + csize;
}
while(o.z < worldsize);
@@ -1081,161 +1052,6 @@ static float findsurface(int fogmat, const vec &v, int &abovemat)
return worldsize;
}
-static void blendfog(int fogmat, float blend, float logblend, float &start, float &end, vec &fogc)
-{
- switch(fogmat&MATF_VOLUME)
- {
- case MAT_WATER:
- {
- const bvec &wcol = getwatercolor(fogmat);
- int wfog = getwaterfog(fogmat);
- fogc.madd(wcol.tocolor(), blend);
- end += logblend*min(fog, max(wfog*4, 32));
- break;
- }
-
- case MAT_LAVA:
- {
- const bvec &lcol = getlavacolor(fogmat);
- int lfog = getlavafog(fogmat);
- fogc.madd(lcol.tocolor(), blend);
- end += logblend*min(fog, max(lfog*4, 32));
- break;
- }
-
- default:
- fogc.madd(fogcolor.tocolor(), blend);
- start += logblend*(fog+64)/8;
- end += logblend*fog;
- break;
- }
-}
-
-vec oldfogcolor(0, 0, 0), curfogcolor(0, 0, 0);
-float oldfogstart = 0, oldfogend = 1000000, curfogstart = 0, curfogend = 1000000;
-
-void setfogcolor(const vec &v)
-{
- GLOBALPARAM(fogcolor, v);
-}
-
-void zerofogcolor()
-{
- setfogcolor(vec(0, 0, 0));
-}
-
-void resetfogcolor()
-{
- setfogcolor(curfogcolor);
-}
-
-void pushfogcolor(const vec &v)
-{
- oldfogcolor = curfogcolor;
- curfogcolor = v;
- resetfogcolor();
-}
-
-void popfogcolor()
-{
- curfogcolor = oldfogcolor;
- resetfogcolor();
-}
-
-void setfogdist(float start, float end)
-{
- GLOBALPARAMF(fogparams, 1/(end - start), end/(end - start));
-}
-
-void clearfogdist()
-{
- setfogdist(0, 1000000);
-}
-
-void resetfogdist()
-{
- setfogdist(curfogstart, curfogend);
-}
-
-void pushfogdist(float start, float end)
-{
- oldfogstart = curfogstart;
- oldfogend = curfogend;
- curfogstart = start;
- curfogend = end;
- resetfogdist();
-}
-
-void popfogdist()
-{
- curfogstart = oldfogstart;
- curfogend = oldfogend;
- resetfogdist();
-}
-
-static void resetfog()
-{
- resetfogcolor();
- resetfogdist();
-
- glClearColor(curfogcolor.r, curfogcolor.g, curfogcolor.b, 1.0f);
-}
-
-static void setfog(int fogmat, float below = 1, int abovemat = MAT_AIR)
-{
- float logscale = 256, logblend = log(1 + (logscale - 1)*below) / log(logscale);
-
- curfogstart = curfogend = 0;
- curfogcolor = vec(0, 0, 0);
- blendfog(fogmat, below, logblend, curfogstart, curfogend, curfogcolor);
- if(below < 1) blendfog(abovemat, 1-below, 1-logblend, curfogstart, curfogend, curfogcolor);
-
- resetfog();
-}
-
-static void blendfogoverlay(int fogmat, float blend, vec &overlay)
-{
- float maxc;
- switch(fogmat&MATF_VOLUME)
- {
- case MAT_WATER:
- {
- const bvec &wcol = getwatercolor(fogmat);
- maxc = max(wcol.r, max(wcol.g, wcol.b));
- overlay.madd(vec(wcol.r, wcol.g, wcol.b).div(min(32.0f + maxc*7.0f/8.0f, 255.0f)).max(0.4f), blend);
- break;
- }
-
- case MAT_LAVA:
- {
- const bvec &lcol = getlavacolor(fogmat);
- maxc = max(lcol.r, max(lcol.g, lcol.b));
- overlay.madd(vec(lcol.r, lcol.g, lcol.b).div(min(32.0f + maxc*7.0f/8.0f, 255.0f)).max(0.4f), blend);
- break;
- }
-
- default:
- overlay.add(blend);
- break;
- }
-}
-
-void drawfogoverlay(int fogmat, float fogblend, int abovemat)
-{
- SETSHADER(fogoverlay);
-
- glEnable(GL_BLEND);
- glBlendFunc(GL_ZERO, GL_SRC_COLOR);
- vec overlay(0, 0, 0);
- blendfogoverlay(fogmat, fogblend, overlay);
- blendfogoverlay(abovemat, 1-fogblend, overlay);
-
- gle::color(overlay);
- screenquad();
-
- glDisable(GL_BLEND);
-}
-
bool renderedgame = false;
void rendergame(bool mainpass)
@@ -1244,171 +1060,6 @@ void rendergame(bool mainpass)
if(!shadowmapping) renderedgame = true;
}
-VARP(skyboxglare, 0, 1, 1);
-
-void drawglare()
-{
- glaring = true;
- refracting = -1;
-
- pushfogcolor(vec(0, 0, 0));
-
- glClearColor(0, 0, 0, 1);
- glClear((skyboxglare && !shouldclearskyboxglare() ? 0 : GL_COLOR_BUFFER_BIT) | GL_DEPTH_BUFFER_BIT);
-
- rendergeom();
-
- if(skyboxglare) drawskybox(farplane, false);
-
- renderreflectedmapmodels();
- rendergame();
- renderavatar();
-
- renderwater();
- rendermaterials();
- renderalphageom();
- renderparticles();
-
- popfogcolor();
-
- refracting = 0;
- glaring = false;
-}
-
-VARP(reflectmms, 0, 1, 1);
-VARR(refractsky, 0, 0, 1);
-
-matrix4 noreflectmatrix;
-
-void drawreflection(float z, bool refract, int fogdepth, const bvec &col)
-{
- reflectz = z < 0 ? 1e16f : z;
- reflecting = !refract;
- refracting = refract ? (z < 0 || camera1->o.z >= z ? -1 : 1) : 0;
- fading = waterrefract && waterfade && z>=0;
- fogging = refracting<0 && z>=0;
- refractfog = fogdepth;
-
- if(fogging)
- {
- pushfogdist(camera1->o.z - z, camera1->o.z - (z - max(refractfog, 1)));
- pushfogcolor(col.tocolor());
- }
- else
- {
- vec color(0, 0, 0);
- float start = 0, end = 0;
- blendfog(MAT_AIR, 1, 1, start, end, color);
- pushfogdist(start, end);
- pushfogcolor(color);
- }
-
- if(fading)
- {
- float scale = fogging ? -0.25f : 0.25f, offset = 2*fabs(scale) - scale*z;
- GLOBALPARAMF(waterfadeparams, scale, offset, -scale, offset + camera1->o.z*scale);
- }
-
- if(reflecting)
- {
- noreflectmatrix = cammatrix;
- cammatrix.reflectz(z);
-
- glFrontFace(GL_CCW);
- }
-
- if(reflectclip && z>=0)
- {
- float zoffset = reflectclip/4.0f, zclip;
- if(refracting<0)
- {
- zclip = z+zoffset;
- if(camera1->o.z<=zclip) zclip = z;
- }
- else
- {
- zclip = z-zoffset;
- if(camera1->o.z>=zclip && camera1->o.z<=z+4.0f) zclip = z;
- if(reflecting) zclip = 2*z - zclip;
- }
- plane clipplane;
- invcammatrix.transposedtransform(plane(0, 0, refracting>0 ? 1 : -1, refracting>0 ? -zclip : zclip), clipplane);
- clipmatrix.clip(clipplane, projmatrix);
- noclipmatrix = projmatrix;
- projmatrix = clipmatrix;
- }
-
- setcamprojmatrix(false, true);
-
- renderreflectedgeom(refracting<0 && z>=0 && caustics, fogging);
-
- if(reflecting || refracting>0 || (refracting<0 && refractsky) || z<0)
- {
- if(fading) glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
- if(reflectclip && z>=0)
- {
- projmatrix = noclipmatrix;
- setcamprojmatrix(false, true);
- }
- drawskybox(farplane, false);
- if(reflectclip && z>=0)
- {
- projmatrix = clipmatrix;
- setcamprojmatrix(false, true);
- }
- if(fading) glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
- }
- else if(fading) glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
-
- renderdecals();
-
- if(reflectmms) renderreflectedmapmodels();
- 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)
- {
- matrix4 avatarclip;
- plane clipplane;
- invcammatrix.transposedtransform(plane(0, 0, refracting, reflectclipavatar/4.0f - refracting*z), clipplane);
- avatarclip.clip(clipplane, avatarproj);
- projmatrix = avatarclip;
- }
- else projmatrix = avatarproj;
- setcamprojmatrix(false, true);
- game::renderavatar();
- projmatrix = oldprojmatrix;
- setcamprojmatrix(false, true);
- }
-
- rendermaterials();
- renderalphageom(fogging);
- renderparticles();
-
- if(fading) glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
-
- if(reflectclip && z>=0) projmatrix = noclipmatrix;
-
- if(reflecting)
- {
- cammatrix = noreflectmatrix;
-
- glFrontFace(GL_CW);
- }
-
- popfogdist();
- popfogcolor();
-
- reflectz = 1e16f;
- refracting = 0;
- reflecting = fading = fogging = false;
-
- setcamprojmatrix(false, true);
-}
-
int drawtex = 0;
void drawcubemap(int size, const vec &o, float yaw, float pitch, const cubemapside &side, bool onlysky)
@@ -1426,10 +1077,6 @@ void drawcubemap(int size, const vec &o, float yaw, float pitch, const cubemapsi
cmcamera.roll = 0;
camera1 = &cmcamera;
- int fogmat = lookupmaterial(o)&(MATF_VOLUME|MATF_INDEX);
-
- setfog(fogmat);
-
int farplane = worldsize*2;
projmatrix.perspective(90.0f, 1.0f, nearplane, farplane);
@@ -1461,16 +1108,9 @@ void drawcubemap(int size, const vec &o, float yaw, float pitch, const cubemapsi
if(!limitsky()) drawskybox(farplane, false);
-// queryreflections();
-
rendermapmodels();
renderalphageom();
-// drawreflections();
-
-// renderwater();
-// rendermaterials();
-
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
}
@@ -1520,8 +1160,6 @@ namespace modelpreview
curfov = 2*atan2(tan(fovy/2*RAD), 1/aspect)/RAD;
farplane = 1024;
- clearfogdist();
- zerofogcolor();
glClearColor(0, 0, 0, 1);
glClear((background ? GL_COLOR_BUFFER_BIT : 0) | GL_DEPTH_BUFFER_BIT);
@@ -1538,10 +1176,6 @@ namespace modelpreview
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
- resetfogdist();
- resetfogcolor();
- glClearColor(curfogcolor.r, curfogcolor.g, curfogcolor.b, 1);
-
aspect = oldaspect;
fovy = oldfovy;
curfov = oldfov;
@@ -1586,25 +1220,6 @@ void gl_drawframe()
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))
- {
- float z = findsurface(fogmat, camera1->o, abovemat) - WATER_OFFSET;
- if(camera1->o.z < z + 1) fogblend = min(z + 1 - camera1->o.z, 1.0f);
- else fogmat = abovemat;
- if(caustics && (fogmat&MATF_VOLUME)==MAT_WATER && camera1->o.z < z)
- causticspass = min(z - camera1->o.z, 1.0f);
- }
- else fogmat = MAT_AIR;
- setfog(fogmat, fogblend, abovemat);
- if(fogmat!=MAT_AIR)
- {
- float blend = abovemat==MAT_AIR ? fogblend : 1.0f;
- fovy += blend*sinf(lastmillis/1000.0)*2.0f;
- aspect += blend*sinf(lastmillis/1000.0+M_PI)*0.1f;
- }
-
farplane = worldsize*2;
projmatrix.perspective(fovy, aspect, nearplane, farplane);
@@ -1623,13 +1238,11 @@ void gl_drawframe()
if(limitsky()) drawskybox(farplane, true);
- rendergeom(causticspass);
+ rendergeom();
extern int outline;
if(!wireframe && editmode && outline) renderoutline();
- queryreflections();
-
if(!limitsky()) drawskybox(farplane, false);
renderdecals(true);
@@ -1640,14 +1253,10 @@ void gl_drawframe()
if(wireframe && editmode) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- drawglaretex();
drawdepthfxtex();
- drawreflections();
if(wireframe && editmode) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- renderwater();
-
rendermaterials();
renderalphageom();
@@ -1658,10 +1267,6 @@ void gl_drawframe()
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
- addglare();
- if(isliquid(fogmat&MATF_VOLUME)) drawfogoverlay(fogmat, fogblend, abovemat);
- renderpostfx();
-
gl_drawhud();
renderedgame = false;
@@ -1670,10 +1275,7 @@ void gl_drawframe()
void gl_drawmainmenu()
{
xtravertsva = xtraverts = glde = gbatches = 0;
-
renderbackground(NULL, NULL, NULL, NULL, true, true);
- renderpostfx();
-
gl_drawhud();
}