reorganized sqr storage for better cache usage

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@4113 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
Lee Salzman
2009-01-04 18:42:09 +00:00
parent 2f27cba52c
commit 4d6ffecf29
8 changed files with 51 additions and 50 deletions
+36 -36
View File
@@ -144,7 +144,7 @@ void finishstrips() { stripend(verts); }
sqr sbright, sdark;
VARP(lighterror, 1, 4, 100);
void render_flat(int wtex, int x, int y, int size, int h, sqr *l1, sqr *l2, sqr *l3, sqr *l4, bool isceil) // floor/ceil quads
void render_flat(int wtex, int x, int y, int size, int h, sqr *l1, sqr *l4, sqr *l3, sqr *l2, bool isceil) // floor/ceil quads
{
if(showm) { l3 = l1 = &sbright; l4 = l2 = &sdark; }
@@ -156,7 +156,7 @@ void render_flat(int wtex, int x, int y, int size, int h, sqr *l1, sqr *l2, sqr
float xo = xf*x;
float yo = yf*y;
bool first = !floorstrip || y!=oy+size || striptex!=wtex || h!=oh || x!=ox;
bool first = !floorstrip || x!=ox+size || striptex!=wtex || h!=oh || y!=oy;
if(first) // start strip here
{
@@ -164,17 +164,17 @@ void render_flat(int wtex, int x, int y, int size, int h, sqr *l1, sqr *l2, sqr
firstindex = verts.length();
striptex = wtex;
oh = h;
ox = x;
oy = y;
floorstrip = true;
if(isceil)
{
vert(x+size, y, h, l2, xo+xs, yo);
vert(x, y, h, l1, xo, yo);
vert(x, y, h, l1, xo, yo);
vert(x, y+size, h, l2, xo, yo+ys);
}
else
{
vert(x, y, h, l1, xo, yo);
vert(x+size, y, h, l2, xo+xs, yo);
vert(x, y+size, h, l2, xo, yo+ys);
vert(x, y, h, l1, xo, yo);
}
ol3r = l1->r;
ol3g = l1->g;
@@ -208,20 +208,20 @@ void render_flat(int wtex, int x, int y, int size, int h, sqr *l1, sqr *l2, sqr
if(isceil)
{
vert(x+size, y, h, l4, xo+xs, yo);
vert(x+size, y+size, h, l3, xo+xs, yo+ys);
vert(x, y+size, h, l4, xo, yo+ys);
}
else
{
vert(x, y+size, h, l4, xo, yo+ys);
vert(x+size, y+size, h, l3, xo+xs, yo+ys);
vert(x+size, y+size, h, l3, xo+xs, yo+ys);
vert(x+size, y, h, l4, xo+xs, yo);
}
oy = y;
ox = x;
nquads++;
}
void render_flatdelta(int wtex, int x, int y, int size, float h1, float h2, float h3, float h4, sqr *l1, sqr *l2, sqr *l3, sqr *l4, bool isceil) // floor/ceil quads on a slope
void render_flatdelta(int wtex, int x, int y, int size, float h1, float h4, float h3, float h2, sqr *l1, sqr *l4, sqr *l3, sqr *l2, bool isceil) // floor/ceil quads on a slope
{
if(showm) { l3 = l1 = &sbright; l4 = l2 = &sdark; }
@@ -233,24 +233,24 @@ void render_flatdelta(int wtex, int x, int y, int size, float h1, float h2, floa
float xo = xf*x;
float yo = yf*y;
bool first = !deltastrip || y!=oy+size || striptex!=wtex || x!=ox;
bool first = !deltastrip || x!=ox+size || striptex!=wtex || y!=oy;
if(first)
{
stripend(verts);
firstindex = verts.length();
striptex = wtex;
ox = x;
oy = y;
deltastrip = true;
if(isceil)
{
vert(x+size, y, h2, l2, xo+xs, yo);
vert(x, y, h1, l1, xo, yo);
vert(x, y, h1, l1, xo, yo);
vert(x, y+size, h2, l2, xo, yo+ys);
}
else
{
vert(x, y, h1, l1, xo, yo);
vert(x+size, y, h2, l2, xo+xs, yo);
vert(x, y+size, h2, l2, xo, yo+ys);
vert(x, y, h1, l1, xo, yo);
}
ol3r = l1->r;
ol3g = l1->g;
@@ -262,16 +262,16 @@ void render_flatdelta(int wtex, int x, int y, int size, float h1, float h2, floa
if(isceil)
{
vert(x+size, y, h4, l4, xo+xs, yo);
vert(x+size, y+size, h3, l3, xo+xs, yo+ys);
vert(x, y+size, h4, l4, xo, yo+ys);
}
else
{
vert(x, y+size, h4, l4, xo, yo+ys);
vert(x+size, y+size, h3, l3, xo+xs, yo+ys);
vert(x+size, y+size, h3, l3, xo+xs, yo+ys);
vert(x+size, y, h4, l4, xo+xs, yo);
}
oy = y;
ox = x;
nquads++;
}
@@ -422,7 +422,7 @@ void rendershadow_tris(int x, int y, bool topleft, sqr *h1, sqr *h2)
static void rendershadow_flat(int x, int y, int h) // floor quads
{
bool first = !floorstrip || y!=oy+1 || h!=oh || x!=ox;
bool first = !floorstrip || x!=ox+1 || h!=oh || y!=oy;
if(first) // start strip here
{
@@ -430,41 +430,41 @@ static void rendershadow_flat(int x, int y, int h) // floor quads
firstindex = shadowverts.length();
striptex = DEFAULT_FLOOR;
oh = h;
ox = x;
oy = y;
floorstrip = true;
shadowvert(x, y, h);
shadowvert(x+1, y, h);
shadowvert(x, y+1, h);
shadowvert(x, y, h);
}
else // continue strip
{
shadowverts.setsizenodelete(shadowverts.length()-2);
}
shadowvert(x, y+1, h);
shadowvert(x+1, y+1, h);
shadowvert(x+1, y, h);
oy = y;
ox = x;
}
static void rendershadow_flatdelta(int x, int y, float h1, float h2, float h3, float h4) // floor quads on a slope
static void rendershadow_flatdelta(int x, int y, float h1, float h4, float h3, float h2) // floor quads on a slope
{
bool first = !deltastrip || y!=oy+1 || x!=ox;
bool first = !deltastrip || x!=ox+1 || y!=oy;
if(first)
{
stripend(shadowverts);
firstindex = shadowverts.length();
striptex = DEFAULT_FLOOR;
ox = x;
oy = y;
deltastrip = true;
shadowvert(x, y, h1);
shadowvert(x+1, y, h2);
shadowvert(x, y+1, h2);
shadowvert(x, y, h1);
}
shadowvert(x, y+1, h4);
shadowvert(x+1, y+1, h3);
shadowvert(x+1, y, h4);
oy = y;
ox = x;
}
void rendershadow(int x, int y, int xs, int ys, const vec &texgenS, const vec &texgenT)
@@ -479,7 +479,7 @@ void rendershadow(int x, int y, int xs, int ys, const vec &texgenS, const vec &t
#define df(x) s->floor-(x->vdelta/4.0f)
sqr *w = wmip[0];
for(int xx = x; xx<xs; xx++) for(int yy = y; yy<ys; yy++)
for(int yy = y; yy<ys; yy++) for(int xx = x; xx<xs; xx++)
{
sqr *s = SW(w,xx,yy);
if(s->type==SPACE || s->type==CHF)