summaryrefslogtreecommitdiff
path: root/src/engine/renderva.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/renderva.cpp')
-rw-r--r--src/engine/renderva.cpp33
1 files changed, 5 insertions, 28 deletions
diff --git a/src/engine/renderva.cpp b/src/engine/renderva.cpp
index dada6d3..a98614a 100644
--- a/src/engine/renderva.cpp
+++ b/src/engine/renderva.cpp
@@ -528,9 +528,7 @@ struct renderstate {
VSlot *vslot, *texgenvslot;
vec2 texgenscroll;
int texgendim;
- int visibledynlights;
- uint dynlightmask;
- renderstate() : colormask(true), depthmask(true), blending(false), alphaing(0), vbuf(0), vattribs(false), vquery(false), colorscale(1, 1, 1), alphascale(0), slot(NULL), texgenslot(NULL), vslot(NULL), texgenvslot(NULL), texgenscroll(0, 0), texgendim(-1), visibledynlights(0), dynlightmask(0) {
+ renderstate() : colormask(true), depthmask(true), blending(false), alphaing(0), vbuf(0), vattribs(false), vquery(false), colorscale(1, 1, 1), alphascale(0), slot(NULL), texgenslot(NULL), vslot(NULL), texgenvslot(NULL), texgenscroll(0, 0), texgendim(-1) {
loopk(8) textures[k] = 0;
}
};
@@ -580,8 +578,6 @@ struct geombatch {
int compare(const geombatch &b) const {
if(va->vbuf < b.va->vbuf) return -1;
if(va->vbuf > b.va->vbuf) return 1;
- if(va->dynlightmask < b.va->dynlightmask) return -1;
- if(va->dynlightmask > b.va->dynlightmask) return 1;
if(vslot.slot->shader < b.vslot.slot->shader) return -1;
if(vslot.slot->shader > b.vslot.slot->shader) return 1;
if(vslot.slot->params.length() < b.vslot.slot->params.length()) return -1;
@@ -718,10 +714,6 @@ static void changebatchtmus(renderstate &cur, int pass, geombatch &b) {
tmu++;
}
if(changed) glActiveTexture_(GL_TEXTURE0);
- if(cur.dynlightmask != b.va->dynlightmask) {
- cur.visibledynlights = setdynlights(b.va);
- cur.dynlightmask = b.va->dynlightmask;
- }
}
static void changeslottmus(renderstate &cur, int pass, Slot &slot, VSlot &vslot) {
@@ -758,16 +750,6 @@ static void changeslottmus(renderstate &cur, int pass, Slot &slot, VSlot &vslot)
cur.vslot = &vslot;
}
-static void changeshader(renderstate &cur, Shader *s, Slot &slot, VSlot &vslot, bool shadowed) {
- if(!cur.blending && !cur.alphaing) {
- if(shadowed) s->setvariant(cur.visibledynlights, 3, slot, vslot);
- else s->setvariant(cur.visibledynlights, 2, slot, vslot);
- }
- else if(shadowed) s->setvariant(cur.visibledynlights, 1, slot, vslot);
- else if(!cur.visibledynlights) s->set(slot, vslot);
- else s->setvariant(cur.visibledynlights-1, 0, slot, vslot);
-}
-
static void changetexgen(renderstate &cur, int dim, Slot &slot, VSlot &vslot) {
if(cur.texgenslot != &slot || cur.texgenvslot != &vslot) {
Texture *curtex = !cur.texgenslot || cur.texgenslot->sts.empty() ? notexture : cur.texgenslot->sts[0].t,
@@ -803,7 +785,6 @@ static void renderbatch(renderstate &cur, int pass, geombatch &b) {
ushort len = curbatch->es.length[curbatch->va->shadowed ? 0 : 1];
if(len) {
if(rendered < 0) {
- changeshader(cur, b.vslot.slot->shader, *b.vslot.slot, b.vslot, false);
rendered = 0;
gbatches++;
}
@@ -818,7 +799,6 @@ static void renderbatch(renderstate &cur, int pass, geombatch &b) {
if(shadowed) for(geombatch *curbatch = shadowed;; curbatch = &geombatches[curbatch->batch]) {
if(curbatch->va->shadowed && curbatch->es.length[1] > curbatch->es.length[0]) {
if(rendered < 1) {
- changeshader(cur, b.vslot.slot->shader, *b.vslot.slot, b.vslot, true);
rendered = 1;
gbatches++;
}
@@ -912,10 +892,8 @@ void renderva(renderstate &cur, vtxarray *va, int pass = RENDERPASS_LIGHTMAP, bo
case RENDERPASS_LIGHTMAP:
if(!cur.alphaing) vverts += va->verts;
va->shadowed = false;
- va->dynlightmask = 0;
if(!drawtex && !cur.alphaing) {
va->shadowed = isshadowmapreceiver(va);
- calcdynlightmask(va);
}
if(doquery) startvaquery(va, { if(geombatches.length()) renderbatches(cur, pass); });
mergetexs(cur, va);
@@ -943,7 +921,7 @@ void cleanupva() {
cleanupbb();
}
-void setupgeom(renderstate &cur) {
+void setupgeom() {
GLOBALPARAMF(colorparams, 2, 2, 2, 1);
GLOBALPARAM(camera, camera1->o);
GLOBALPARAMF(ambient, ambientcolor.x/255.0f, ambientcolor.y/255.0f, ambientcolor.z/255.0f);
@@ -970,10 +948,9 @@ void rendergeom(void) {
}
if(!doZP) {
if(shadowmap && mainpass) rendershadowmap();
- setupgeom(cur);
+ setupgeom();
if(doSM) pushshadowmap();
}
- finddynlights();
resetbatches();
int blends = 0;
for(vtxarray *va = visibleva; va; va = va->next) {
@@ -1015,7 +992,7 @@ void rendergeom(void) {
if(doZP) {
glFlush();
if(shadowmap && mainpass) rendershadowmap();
- setupgeom(cur);
+ setupgeom();
if(doSM) pushshadowmap();
if(!multipassing) { multipassing = true; glDepthFunc(GL_LEQUAL); }
cur.texgendim = -1;
@@ -1087,7 +1064,7 @@ void renderalphageom(void) {
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
if(cur.vattribs) disablevattribs(cur, false);
if(cur.vbuf) disablevbuf(cur);
- setupgeom(cur);
+ setupgeom();
glDepthFunc(GL_LEQUAL);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);