summaryrefslogtreecommitdiff
path: root/src/engine/octarender.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/octarender.cpp')
-rw-r--r--src/engine/octarender.cpp39
1 files changed, 14 insertions, 25 deletions
diff --git a/src/engine/octarender.cpp b/src/engine/octarender.cpp
index d577193..9253379 100644
--- a/src/engine/octarender.cpp
+++ b/src/engine/octarender.cpp
@@ -169,15 +169,15 @@ enum
struct sortkey
{
- ushort tex, lmid, envmap;
+ ushort tex, lmid;
uchar dim, layer, alpha;
sortkey() {}
- sortkey(ushort tex, ushort lmid, uchar dim, uchar layer = LAYER_TOP, ushort envmap = EMID_NONE, uchar alpha = NO_ALPHA)
- : tex(tex), lmid(lmid), envmap(envmap), dim(dim), layer(layer), alpha(alpha)
+ sortkey(ushort tex, ushort lmid, uchar dim, uchar layer = LAYER_TOP, uchar alpha = NO_ALPHA)
+ : tex(tex), lmid(lmid), dim(dim), layer(layer), alpha(alpha)
{}
- bool operator==(const sortkey &o) const { return tex==o.tex && lmid==o.lmid && envmap==o.envmap && dim==o.dim && layer==o.layer && alpha==o.alpha; }
+ bool operator==(const sortkey &o) const { return tex==o.tex && lmid==o.lmid && dim==o.dim && layer==o.layer && alpha==o.alpha; }
};
struct sortval
@@ -301,7 +301,7 @@ struct vacollect : verthash
t.tris[l][j] = addvert(vtx2);
}
}
- sortval *dst = indices.access(sortkey(k.tex, t.unlit, k.dim, k.layer, k.envmap, k.alpha));
+ sortval *dst = indices.access(sortkey(k.tex, t.unlit, k.dim, k.layer, k.alpha));
if(dst) loopl(2) loopvj(t.tris[l]) dst->tris[l].add(t.tris[l][j]);
}
}
@@ -314,7 +314,7 @@ struct vacollect : verthash
{
if(k.lmid>=LMID_RESERVED && lightmaptexs[k.lmid].unlitx>=0)
{
- sortkey ukey(k.tex, LMID_AMBIENT, k.dim, k.layer, k.envmap, k.alpha);
+ sortkey ukey(k.tex, LMID_AMBIENT, k.dim, k.layer, k.alpha);
sortval *uval = indices.access(ukey);
if(uval && uval->unlit<=0)
{
@@ -349,8 +349,6 @@ struct vacollect : verthash
{
if(x.lmid < y.lmid) return true;
if(x.lmid > y.lmid) return false;
- if(x.envmap < y.envmap) return true;
- if(x.envmap > y.envmap) return false;
if(x.dim < y.dim) return true;
if(x.dim > y.dim) return false;
return false;
@@ -435,7 +433,6 @@ struct vacollect : verthash
e.lmid = t.unlit>0 ? t.unlit : k.lmid;
e.dim = k.dim;
e.layer = k.layer;
- e.envmap = k.envmap;
ushort *startbuf = curbuf;
loopl(2)
{
@@ -463,7 +460,6 @@ struct vacollect : verthash
Slot &slot = *lookupvslot(k.tex, false).slot;
loopvj(slot.sts) va->texmask |= 1<<slot.sts[j].type;
- if(slot.shader->type&SHADER_ENVMAP) va->texmask |= 1<<TEX_ENVMAP;
}
}
@@ -712,7 +708,7 @@ void guessnormals(const vec *pos, int numverts, vec *normals)
normals[3] = n2;
}
-void addcubeverts(VSlot &vslot, int orient, int size, vec *pos, int convex, ushort texture, ushort lmid, vertinfo *vinfo, int numverts, int tj = -1, ushort envmap = EMID_NONE, int grassy = 0, bool alpha = false, int layer = LAYER_TOP)
+void addcubeverts(VSlot &vslot, int orient, int size, vec *pos, int convex, ushort texture, ushort lmid, vertinfo *vinfo, int numverts, int tj = -1, int grassy = 0, bool alpha = false, int layer = LAYER_TOP)
{
(void) grassy;
int dim = dimension(orient);
@@ -755,7 +751,7 @@ void addcubeverts(VSlot &vslot, int orient, int size, vec *pos, int convex, usho
}
else
{
- v.norm = vinfo && vinfo[k].norm && envmap != EMID_NONE ? bvec(decodenormal(vinfo[k].norm)) : bvec(128, 128, 255);
+ v.norm = bvec(128, 128, 255);
v.tangent = bvec4(255, 128, 128, 255);
}
index[k] = vc.addvert(v);
@@ -764,7 +760,7 @@ void addcubeverts(VSlot &vslot, int orient, int size, vec *pos, int convex, usho
if(lmid >= LMID_RESERVED) lmid = lm ? lm->tex : LMID_AMBIENT;
- sortkey key(texture, lmid, !vslot.scroll.iszero() ? dim : 3, layer == LAYER_BLEND ? LAYER_BLEND : LAYER_TOP, envmap, alpha ? (vslot.alphaback ? ALPHA_BACK : (vslot.alphafront ? ALPHA_FRONT : NO_ALPHA)) : NO_ALPHA);
+ sortkey key(texture, lmid, !vslot.scroll.iszero() ? dim : 3, layer == LAYER_BLEND ? LAYER_BLEND : LAYER_TOP, alpha ? (vslot.alphaback ? ALPHA_BACK : (vslot.alphafront ? ALPHA_FRONT : NO_ALPHA)) : NO_ALPHA);
addtris(key, orient, verts, index, numverts, convex, shadowmask, tj);
}
@@ -954,19 +950,17 @@ void gencubeverts(cube &c, const ivec &co, int size, int csi)
VSlot &vslot = lookupvslot(c.texture[i], true),
*layer = vslot.layer && !(c.material&MAT_ALPHA) ? &lookupvslot(vslot.layer, true) : NULL;
- ushort envmap = vslot.slot->shader->type&SHADER_ENVMAP ? (int) (vslot.slot->texmask&(1<<TEX_ENVMAP) ? (int) EMID_CUSTOM : (int) closestenvmap(i, co, size)) : (int) EMID_NONE,
- envmap2 = layer && layer->slot->shader->type&SHADER_ENVMAP ? (int) (layer->slot->texmask&(1<<TEX_ENVMAP) ? (int) EMID_CUSTOM : (int) closestenvmap(i, co, size)) : (int) EMID_NONE;
while(tj >= 0 && tjoints[tj].edge < i*(MAXFACEVERTS+1)) tj = tjoints[tj].next;
int hastj = tj >= 0 && tjoints[tj].edge < (i+1)*(MAXFACEVERTS+1) ? tj : -1;
if(!c.ext)
- addcubeverts(vslot, i, size, pos, convex, c.texture[i], LMID_AMBIENT, NULL, numverts, hastj, envmap, 0, (c.material&MAT_ALPHA)!=0);
+ addcubeverts(vslot, i, size, pos, convex, c.texture[i], LMID_AMBIENT, NULL, numverts, hastj, 0, (c.material&MAT_ALPHA)!=0);
else
{
const surfaceinfo &surf = c.ext->surfaces[i];
if(!surf.numverts || surf.numverts&LAYER_TOP)
- addcubeverts(vslot, i, size, pos, convex, c.texture[i], surf.lmid[0], verts, numverts, hastj, envmap, 0, (c.material&MAT_ALPHA)!=0, LAYER_TOP|(surf.numverts&LAYER_BLEND));
+ addcubeverts(vslot, i, size, pos, convex, c.texture[i], surf.lmid[0], verts, numverts, hastj, 0, (c.material&MAT_ALPHA)!=0, LAYER_TOP|(surf.numverts&LAYER_BLEND));
if(surf.numverts&LAYER_BOTTOM)
- addcubeverts(layer ? *layer : vslot, i, size, pos, convex, vslot.layer, surf.lmid[1], surf.numverts&LAYER_DUP ? verts + numverts : verts, numverts, hastj, envmap2);
+ addcubeverts(layer ? *layer : vslot, i, size, pos, convex, vslot.layer, surf.lmid[1], surf.numverts&LAYER_DUP ? verts + numverts : verts, numverts, hastj);
}
}
}
@@ -1074,7 +1068,7 @@ void updatevabbs(bool force)
struct mergedface
{
uchar orient, lmid, numverts;
- ushort mat, tex, envmap;
+ ushort mat, tex;
vertinfo *verts;
int tjoints;
};
@@ -1100,7 +1094,6 @@ int genmergedfaces(cube &c, const ivec &co, int size, int minlevel = -1)
mf.orient = i;
mf.mat = c.material;
mf.tex = c.texture[i];
- mf.envmap = EMID_NONE;
mf.lmid = surf.lmid[0];
mf.numverts = surf.numverts;
mf.verts = c.ext->verts() + surf.verts;
@@ -1115,15 +1108,11 @@ int genmergedfaces(cube &c, const ivec &co, int size, int minlevel = -1)
VSlot &vslot = lookupvslot(mf.tex, true),
*layer = vslot.layer && !(c.material&MAT_ALPHA) ? &lookupvslot(vslot.layer, true) : NULL;
- if(vslot.slot->shader->type&SHADER_ENVMAP)
- mf.envmap = vslot.slot->texmask&(1<<TEX_ENVMAP) ? (int) EMID_CUSTOM : (int) closestenvmap(i, co, size);
- ushort envmap2 = layer && layer->slot->shader->type&SHADER_ENVMAP ? (int) (layer->slot->texmask&(1<<TEX_ENVMAP) ? (int) EMID_CUSTOM : (int) closestenvmap(i, co, size)) : (int) EMID_NONE;
if(surf.numverts&LAYER_TOP) vamerges[level].add(mf);
if(surf.numverts&LAYER_BOTTOM)
{
mf.tex = vslot.layer;
- mf.envmap = envmap2;
mf.lmid = surf.lmid[1];
mf.numverts &= ~LAYER_TOP;
if(surf.numverts&LAYER_DUP) mf.verts += numverts;
@@ -1173,7 +1162,7 @@ void addmergedverts(int level, const ivec &o)
pos[i] = vec(v.x, v.y, v.z).mul(1.0f/8).add(vo);
}
VSlot &vslot = lookupvslot(mf.tex, true);
- addcubeverts(vslot, mf.orient, 1<<level, pos, 0, mf.tex, mf.lmid, mf.verts, numverts, mf.tjoints, mf.envmap, 0, (mf.mat&MAT_ALPHA)!=0, mf.numverts&LAYER_BLEND);
+ addcubeverts(vslot, mf.orient, 1<<level, pos, 0, mf.tex, mf.lmid, mf.verts, numverts, mf.tjoints, 0, (mf.mat&MAT_ALPHA)!=0, mf.numverts&LAYER_BLEND);
vahasmerges |= MERGE_USE;
}
mfl.setsize(0);