diff --git a/source/src/worldrender.cpp b/source/src/worldrender.cpp index 70e79e29..8fd31045 100644 --- a/source/src/worldrender.cpp +++ b/source/src/worldrender.cpp @@ -117,9 +117,10 @@ void render_seg_new(float vx, float vy, float vh, int mip, int x, int y, int xs, int ry = vyy+lodbot; float fsize = (float)(1<occluded = isoccluded(camera1->o.x, camera1->o.y, (float)(ox<occluded = isoccluded(camera1->o.x, camera1->o.y, (float)(ox<>mip; @@ -139,60 +140,68 @@ void render_seg_new(float vx, float vy, float vh, int mip, int x, int y, int xs, // also deferred, and render them recursively. Anything left (perfect mips and higher lods) we // render here. - #define LOOPH {for(int yy = y; yyoccluded) continue; \ - if(s->defer && mip && xx>=lx && xx=ly && yyoccluded) continue; #define LOOPD sqr *t = SWS(s,1,0,mfactor); \ - sqr *u = SWS(s,1,1,mfactor); \ - sqr *v = SWS(s,0,1,mfactor); + sqr *v = SWS(s,0,1,mfactor); \ + sqr *u = SWS(v,1,0,mfactor); int rendered = 0; - LOOPH // floors + LOOPH // floors + if(s->defer && mip && xx>=lx && xx=ly && yyoccluded = 1; // shortcut for the other LOOPHs int start = xx; - sqr *next; - while(xxdefer && !next->occluded) xx++; // collect 2xN rect of lower mip + while(xxoccluded = 1;} // collect 2xN rect of lower mip render_seg_new(vx, vy, vh, mip-1, start*2, yy*2, xx*2+2, yy*2+2); continue; } rendered++; - LOOPD switch(s->type) { case SPACE: case CHF: if(s->floor<=vh && render_floor) { - render_flat(s->ftex, xx<floor, s, t, u, v, false); + sqr *v = SWS(s,0,1,mfactor); + render_flat(s->ftex, xx<floor, s, s + 1, v + 1, v, false); if(s->floorftex, xx<floor-s->vdelta/4.0ftype) { case SPACE: case FHF: if(s->ceil>=vh && render_ceil) - render_flat(s->ctex, xx<ceil, s, t, u, v, true); + { + sqr *v = SWS(s,0,1,mfactor); + render_flat(s->ctex, xx<ceil, s, s + 1, v + 1, v, true); + } break; case CHF: + { + LOOPD render_flatdelta(s->ctex, xx<type!=SEMISOLID || issemi(mip, xx, yy+1, 0, 0, 1, 0))) render_wall(s, v, xx, yy+1, xx+1, yy+1, mip, v, u, true, 3); // bot } - }} + }}} extern vector tagclipcubes; extern bool showtagclipfocus; extern int showtagclips; - if(editmode && !showtagclipfocus && showtagclips) LOOPH continue; // tag clips + if(editmode && !showtagclipfocus && showtagclips) LOOPH // tag clips if(mip) { int ix1 = xx<tag & TAGANYCLIP && s->type != SOLID) tagclipcubes.add(xx + (yy << 16)); - }} + }}} } void distlod(int &low, int &high, int angle, float widef)