- Apply kgsws-CZ's fixes:

* Added new cvar, r_3dfloors for testing, so for example, you can see the FPS difference.
  * ds_p->bkup is not always allocated.
  * Fixed particles visible through 3D floors.
  * Fixed FAKE3D flag names.



SVN r3178 (trunk)
This commit is contained in:
Randy Heit 2011-04-13 02:34:48 +00:00
parent 7ae888e726
commit 0d39257eaf
5 changed files with 19 additions and 16 deletions

View file

@ -12,7 +12,7 @@
#include "r_local.h" #include "r_local.h"
#include "r_bsp.h" #include "r_bsp.h"
#include "r_plane.h" #include "r_plane.h"
#include "c_cvars.h"
#include "r_3dfloors.h" #include "r_3dfloors.h"
// external variables // external variables
@ -28,6 +28,8 @@ HeightLevel *height_cur = NULL;
int CurrentMirror = 0; int CurrentMirror = 0;
int CurrentSkybox = 0; int CurrentSkybox = 0;
CVAR(Int, r_3dfloors, true, 0);
// private variables // private variables
int height_max = -1; int height_max = -1;
TArray<HeightStack> toplist; TArray<HeightStack> toplist;

View file

@ -37,13 +37,13 @@ enum
FAKE3D_FAKECEILING = 2, // fake ceiling, mark seg as FAKE FAKE3D_FAKECEILING = 2, // fake ceiling, mark seg as FAKE
FAKE3D_FAKEBACK = 4, // R_AddLine with fake backsector, mark seg as FAKE FAKE3D_FAKEBACK = 4, // R_AddLine with fake backsector, mark seg as FAKE
FAKE3D_FAKEMASK = 7, FAKE3D_FAKEMASK = 7,
FAKE3D_CLIPBOTFRONT = 8, // use front sector clipping info (bottom)
FAKE3D_CLIPTOPFRONT = 16, // use front sector clipping info (top)
// sorting stage: // sorting stage:
FAKE3D_CLIPBOTTOM = 1, // clip bottom FAKE3D_CLIPBOTTOM = 1, // clip bottom
FAKE3D_CLIPTOP = 2, // clip top FAKE3D_CLIPTOP = 2, // clip top
FAKE3D_REFRESHCLIP = 4, // refresh clip info FAKE3D_REFRESHCLIP = 4, // refresh clip info
FAKE3D_DOWN2UP = 8, // rendering from down to up (floors)
FAKE3D_16 = 16, // what is this?
}; };
extern int fake3D; extern int fake3D;
@ -57,6 +57,7 @@ extern HeightLevel *height_top;
extern HeightLevel *height_cur; extern HeightLevel *height_cur;
extern int CurrentMirror; extern int CurrentMirror;
extern int CurrentSkybox; extern int CurrentSkybox;
EXTERN_CVAR(Int, r_3dfloors);
// functions // functions
void R_3D_DeleteHeights(); void R_3D_DeleteHeights();

View file

@ -1238,7 +1238,7 @@ void R_Subsector (subsector_t *sub)
) : NULL; ) : NULL;
// kg3D - fake planes rendering // kg3D - fake planes rendering
if (frontsector->e && frontsector->e->XFloor.ffloors.Size()) if (r_3dfloors && frontsector->e && frontsector->e->XFloor.ffloors.Size())
{ {
backupfp = floorplane; backupfp = floorplane;
backupcp = ceilingplane; backupcp = ceilingplane;
@ -1399,7 +1399,7 @@ void R_Subsector (subsector_t *sub)
if (!outersubsector || line->sidedef == NULL || !(line->sidedef->Flags & WALLF_POLYOBJ)) if (!outersubsector || line->sidedef == NULL || !(line->sidedef->Flags & WALLF_POLYOBJ))
{ {
// kg3D - fake planes bounding calculation // kg3D - fake planes bounding calculation
if (line->backsector && frontsector->e && line->backsector->e->XFloor.ffloors.Size()) if (r_3dfloors && line->backsector && frontsector->e && line->backsector->e->XFloor.ffloors.Size())
{ {
backupfp = floorplane; backupfp = floorplane;
backupcp = ceilingplane; backupcp = ceilingplane;
@ -1423,11 +1423,11 @@ void R_Subsector (subsector_t *sub)
} }
if (frontsector->CenterFloor() >= backsector->CenterFloor()) if (frontsector->CenterFloor() >= backsector->CenterFloor())
{ {
fake3D |= FAKE3D_DOWN2UP; fake3D |= FAKE3D_CLIPBOTFRONT;
} }
if (frontsector->CenterCeiling() <= backsector->CenterCeiling()) if (frontsector->CenterCeiling() <= backsector->CenterCeiling())
{ {
fake3D |= FAKE3D_16; fake3D |= FAKE3D_CLIPTOPFRONT;
} }
R_AddLine(line); // fake R_AddLine(line); // fake
} }
@ -1455,7 +1455,6 @@ void R_Subsector (subsector_t *sub)
void R_RenderBSPNode (void *node) void R_RenderBSPNode (void *node)
{ {
if (numnodes == 0) if (numnodes == 0)
{
R_Subsector (subsectors); R_Subsector (subsectors);
return; return;
} }

View file

@ -1614,7 +1614,7 @@ void R_RenderSegLoop ()
// kg3D - fake planes clipping // kg3D - fake planes clipping
if (fake3D & FAKE3D_REFRESHCLIP) if (fake3D & FAKE3D_REFRESHCLIP)
{ {
if (fake3D & FAKE3D_DOWN2UP) if (fake3D & FAKE3D_CLIPBOTFRONT)
{ {
memcpy (fakeFloor->floorclip+x1, wallbottom+x1, (x2-x1)*sizeof(short)); memcpy (fakeFloor->floorclip+x1, wallbottom+x1, (x2-x1)*sizeof(short));
} }
@ -1626,7 +1626,7 @@ void R_RenderSegLoop ()
} }
memcpy (fakeFloor->floorclip+x1, walllower+x1, (x2-x1)*sizeof(short)); memcpy (fakeFloor->floorclip+x1, walllower+x1, (x2-x1)*sizeof(short));
} }
if (fake3D & FAKE3D_16) if (fake3D & FAKE3D_CLIPTOPFRONT)
{ {
memcpy (fakeFloor->ceilingclip+x1, walltop+x1, (x2-x1)*sizeof(short)); memcpy (fakeFloor->ceilingclip+x1, walltop+x1, (x2-x1)*sizeof(short));
} }
@ -2241,7 +2241,7 @@ void R_StoreWallRange (int start, int stop)
} }
} }
if(!ds_p->fake && backsector->e && backsector->e->XFloor.ffloors.Size()) { if(!ds_p->fake && r_3dfloors && backsector->e && backsector->e->XFloor.ffloors.Size()) {
for(i = 0; i < (int)backsector->e->XFloor.ffloors.Size(); i++) { for(i = 0; i < (int)backsector->e->XFloor.ffloors.Size(); i++) {
F3DFloor *rover = backsector->e->XFloor.ffloors[i]; F3DFloor *rover = backsector->e->XFloor.ffloors[i];
if(rover->flags & FF_RENDERSIDES && (!(rover->flags & FF_INVERTSIDES) || rover->flags & FF_ALLSIDES)) { if(rover->flags & FF_RENDERSIDES && (!(rover->flags & FF_INVERTSIDES) || rover->flags & FF_ALLSIDES)) {
@ -2250,7 +2250,7 @@ void R_StoreWallRange (int start, int stop)
} }
} }
} }
if(!ds_p->fake && frontsector->e && frontsector->e->XFloor.ffloors.Size()) { if(!ds_p->fake && r_3dfloors && frontsector->e && frontsector->e->XFloor.ffloors.Size()) {
for(i = 0; i < (int)frontsector->e->XFloor.ffloors.Size(); i++) { for(i = 0; i < (int)frontsector->e->XFloor.ffloors.Size(); i++) {
F3DFloor *rover = frontsector->e->XFloor.ffloors[i]; F3DFloor *rover = frontsector->e->XFloor.ffloors[i];
if(rover->flags & FF_RENDERSIDES && (rover->flags & FF_ALLSIDES || rover->flags & FF_INVERTSIDES)) { if(rover->flags & FF_RENDERSIDES && (rover->flags & FF_ALLSIDES || rover->flags & FF_INVERTSIDES)) {
@ -2274,6 +2274,10 @@ void R_StoreWallRange (int start, int stop)
maskedtexture = true; maskedtexture = true;
// kg3D - backup for mid and fake walls
ds_p->bkup = R_NewOpening(stop - start);
memcpy(openings + ds_p->bkup, &ceilingclip[start], sizeof(short)*(stop - start));
ds_p->bFogBoundary = IsFogBoundary (frontsector, backsector); ds_p->bFogBoundary = IsFogBoundary (frontsector, backsector);
if (sidedef->GetTexture(side_t::mid).isValid() || ds_p->bFakeBoundary) if (sidedef->GetTexture(side_t::mid).isValid() || ds_p->bFakeBoundary)
{ {
@ -2369,9 +2373,6 @@ void R_StoreWallRange (int start, int stop)
{ {
ds_p->sprtopclip = R_NewOpening (stop - start); ds_p->sprtopclip = R_NewOpening (stop - start);
memcpy (openings + ds_p->sprtopclip, &ceilingclip[start], sizeof(short)*(stop-start)); memcpy (openings + ds_p->sprtopclip, &ceilingclip[start], sizeof(short)*(stop-start));
// kg3D - backup for mid and fake walls
ds_p->bkup = R_NewOpening (stop - start);
memcpy (openings + ds_p->bkup, &ceilingclip[start], sizeof(short)*(stop-start));
} }
if ( ((ds_p->silhouette & SIL_BOTTOM) || maskedtexture) && ds_p->sprbottomclip == -1) if ( ((ds_p->silhouette & SIL_BOTTOM) || maskedtexture) && ds_p->sprbottomclip == -1)

View file

@ -3410,7 +3410,7 @@ void R_ProjectParticle (particle_t *particle, const sector_t *sector, int shade,
vis->cx = tx; vis->cx = tx;
vis->gx = particle->x; vis->gx = particle->x;
vis->gy = particle->y; vis->gy = particle->y;
vis->texturemid = particle->z; // kg3D vis->gz = particle->z; // kg3D
vis->gzb = y1; vis->gzb = y1;
vis->gzt = y2; vis->gzt = y2;
vis->x1 = x1; vis->x1 = x1;