- Changed the default key for am_toggletexture to P so as not to conflict with the default chat key.

- fixed: Extraction of partner segs was broken in the internal node builder.
- removed some obsolete code for a never implemented render data caching system.
- made output of 'dumpgeometry' CCMD only go to the log file because printing it to the console takes several minutes, even for small maps.
- version bump to 1.5.02.


git-svn-id: http://mancubus.net/svn/hosted/gzdoom/trunk@916 b0f79afe-0144-0410-b225-9a4edf0717df
This commit is contained in:
Christoph Oelckers 2010-08-28 11:19:10 +00:00
parent 801d3d43bf
commit 4005528b42
8 changed files with 32 additions and 271 deletions

View file

@ -176,7 +176,7 @@ static const FBinding DefAutomapBindings[] =
{
{ "f", "am_togglefollow" },
{ "g", "am_togglegrid" },
{ "t", "am_toggletexture" },
{ "p", "am_toggletexture" },
{ "m", "am_setmark" },
{ "c", "am_clearmarks" },
{ "0", "am_gobig" },

View file

@ -445,52 +445,6 @@ void gl_RecalcVertexHeights(vertex_t * v)
}
//==========================================================================
//
// Mark sectors dirty
//
//==========================================================================
int DirtyCount;
void sector_t::SetDirty(bool dolines, bool dovertices)
{
Dirty.Clock();
if (currentrenderer == 1 && this == &sectors[sectornum])
{
dirty = true;
if (dirtyframe[0] != gl_frameCount)
{
DirtyCount++;
dirtyframe[0] = gl_frameCount;
for(unsigned i = 0; i < e->SectorDependencies.Size(); i++)
e->SectorDependencies[i]->dirty = true;
}
if (dolines)
{
if (dirtyframe[1] != gl_frameCount)
{
dirtyframe[1] = gl_frameCount;
for(unsigned i = 0; i < e->SideDependencies.Size(); i++)
e->SideDependencies[i]->dirty = true;
}
}
if (dovertices)
{
if (dirtyframe[2] != gl_frameCount)
{
dirtyframe[2] = gl_frameCount;
for(unsigned i = 0; i < e->VertexDependencies.Size(); i++)
e->VertexDependencies[i]->dirty = true;
}
}
}
Dirty.Unclock();
}
void gl_InitData()
@ -513,55 +467,39 @@ CCMD(dumpgeometry)
{
sector_t * sector = &sectors[i];
Printf("Sector %d\n",i);
Printf(PRINT_LOG, "Sector %d\n",i);
for(int j=0;j<sector->subsectorcount;j++)
{
subsector_t * sub = sector->subsectors[j];
Printf(" Subsector %d - real sector = %d - %s\n", sub-subsectors, sub->sector->sectornum, sub->hacked&1? "hacked":"");
Printf(PRINT_LOG, " Subsector %d - real sector = %d - %s\n", sub-subsectors, sub->sector->sectornum, sub->hacked&1? "hacked":"");
for(DWORD k=0;k<sub->numlines;k++)
{
seg_t * seg = sub->firstline + k;
if (seg->linedef)
{
Printf(" (%4.4f, %4.4f), (%4.4f, %4.4f) - seg %d, linedef %d, side %d",
Printf(PRINT_LOG, " (%4.4f, %4.4f), (%4.4f, %4.4f) - seg %d, linedef %d, side %d",
FIXED2FLOAT(seg->v1->x), FIXED2FLOAT(seg->v1->y), FIXED2FLOAT(seg->v2->x), FIXED2FLOAT(seg->v2->y),
seg-segs, seg->linedef-lines, seg->sidedef != seg->linedef->sidedef[0]);
}
else
{
Printf(" (%4.4f, %4.4f), (%4.4f, %4.4f) - seg %d, miniseg",
Printf(PRINT_LOG, " (%4.4f, %4.4f), (%4.4f, %4.4f) - seg %d, miniseg",
FIXED2FLOAT(seg->v1->x), FIXED2FLOAT(seg->v1->y), FIXED2FLOAT(seg->v2->x), FIXED2FLOAT(seg->v2->y),
seg-segs);
}
if (seg->PartnerSeg)
{
subsector_t * sub2 = seg->PartnerSeg->Subsector();
Printf(", back sector = %d, real back sector = %d", sub2->render_sector->sectornum, seg->PartnerSeg->frontsector->sectornum);
Printf(PRINT_LOG, ", back sector = %d, real back sector = %d", sub2->render_sector->sectornum, seg->PartnerSeg->frontsector->sectornum);
}
Printf("\n");
else if (seg->backsector)
{
Printf(PRINT_LOG, ", back sector = %d (no partnerseg)", seg->backsector->sectornum);
}
Printf(PRINT_LOG, "\n");
}
}
}
}
CCMD(dumpdependencies)
{
for(int i=0;i<numsectors;i++)
{
Printf(PRINT_LOG, "Dependencies of sector %d\n", i);
for(unsigned j = 0; j < sectors[i].e->VertexDependencies.Size(); j++)
{
Printf(PRINT_LOG,"\tVertex %d\n", int(sectors[i].e->VertexDependencies[j] - vertexes));
}
for(unsigned j = 0; j < sectors[i].e->SideDependencies.Size(); j++)
{
Printf(PRINT_LOG,"\tSide %d (Line %d)\n", int(sectors[i].e->SideDependencies[j] - sides), (sectors[i].e->SideDependencies[j]->linedef-lines));
}
for(unsigned j = 0; j < sectors[i].e->SectorDependencies.Size(); j++)
{
Printf(PRINT_LOG,"\tSector %d\n", int(sectors[i].e->SectorDependencies[j] - sectors));
}
}
}

View file

@ -116,14 +116,6 @@ static void PrepareSectorData()
TArray<subsector_t *> undetermined;
subsector_t * ss;
// Account for ZDoom space optimizations that cannot be done for GL
for(i=0;i<numsegs;i++)
{
unsigned int partner= glsegextras[i].PartnerSeg;
if (partner < numsegs) segs[i].PartnerSeg = &segs[partner];
else segs[i].PartnerSeg = NULL;
}
// look up sector number for each subsector
for (i = 0; i < numsubsectors; i++)
{
@ -271,130 +263,6 @@ static void PrepareTransparentDoors(sector_t * sector)
}
//===========================================================================
//
// collect other objects depending on sector changes
//
//===========================================================================
static void AddDependency(sector_t *mysec, sector_t *addsec, int *checkmap)
{
int mysecnum = int(mysec - sectors);
int addsecnum = int(addsec - sectors);
if (addsec != mysec)
{
if (checkmap[addsecnum] < mysecnum)
{
checkmap[addsecnum] = mysecnum;
mysec->e->SectorDependencies.Push(addsec);
}
}
// This ignores vertices only used for seg splitting because those aren't needed here
for(int i=0; i < addsec->linecount; i++)
{
line_t *l = addsec->lines[i];
int vtnum1 = int(l->v1 - vertexes);
int vtnum2 = int(l->v2 - vertexes);
if (checkmap[numsectors + vtnum1] < mysecnum)
{
checkmap[numsectors + vtnum1] = mysecnum;
mysec->e->VertexDependencies.Push(&vertexes[vtnum1]);
}
if (checkmap[numsectors + vtnum2] < mysecnum)
{
checkmap[numsectors + vtnum2] = mysecnum;
mysec->e->VertexDependencies.Push(&vertexes[vtnum2]);
}
}
}
//===========================================================================
//
// Sets up dependency lists for invalidating precalculated data
//
//===========================================================================
static void SetupDependencies()
{
int *checkmap = new int[numvertexes + numlines + numsectors];
TArray<int> *vt_linelists = new TArray<int>[numvertexes];
for(int i=0;i<numlines;i++)
{
line_t * line = &lines[i];
int v1i = int(line->v1 - vertexes);
int v2i = int(line->v2 - vertexes);
vt_linelists[v1i].Push(i);
vt_linelists[v2i].Push(i);
}
memset(checkmap, -1, sizeof(int) * (numvertexes + numlines + numsectors));
for(int i=0;i<numsectors;i++)
{
sector_t *mSector = &sectors[i];
AddDependency(mSector, mSector, checkmap);
for(unsigned j = 0; j < mSector->e->FakeFloor.Sectors.Size(); j++)
{
sector_t *sec = mSector->e->FakeFloor.Sectors[j];
// no need to make sectors dependent that don't make visual use of the heightsec
if (sec->GetHeightSec() == mSector)
{
AddDependency(mSector, sec, checkmap);
}
}
for(unsigned j = 0; j < mSector->e->XFloor.attached.Size(); j++)
{
sector_t *sec = mSector->e->XFloor.attached[j];
extsector_t::xfloor &x = sec->e->XFloor;
for(unsigned l = 0;l < x.ffloors.Size(); l++)
{
// Check if we really need to bother with this 3D floor
F3DFloor * rover = x.ffloors[l];
if (rover->model != mSector) continue;
if (!(rover->flags & FF_EXISTS)) continue;
if (rover->flags&FF_NOSHADE) continue; // FF_NOSHADE doesn't create any wall splits
AddDependency(mSector, sec, checkmap);
break;
}
}
for(unsigned j = 0; j < mSector->e->VertexDependencies.Size(); j++)
{
int vtindex = int(mSector->e->VertexDependencies[j] - vertexes);
for(unsigned k = 0; k < vt_linelists[vtindex].Size(); k++)
{
int ln = vt_linelists[vtindex][k];
if (checkmap[numvertexes + numsectors + ln] < i)
{
checkmap[numvertexes + numsectors + ln] = i;
side_t *sd1 = lines[ln].sidedef[0];
side_t *sd2 = lines[ln].sidedef[1];
if (sd1 != NULL) mSector->e->SideDependencies.Push(sd1);
if (sd2 != NULL) mSector->e->SideDependencies.Push(sd2);
}
}
}
mSector->e->SectorDependencies.ShrinkToFit();
mSector->e->SideDependencies.ShrinkToFit();
mSector->e->VertexDependencies.ShrinkToFit();
}
delete [] checkmap;
delete [] vt_linelists;
}
//==========================================================================
//
//
@ -533,6 +401,12 @@ static void PrepareSegs()
for(int i=0;i<numsegs;i++)
{
seg_t *seg = &segs[i];
// Account for ZDoom space optimizations that cannot be done for GL
unsigned int partner= glsegextras[i].PartnerSeg;
if (partner < numsegs) seg->PartnerSeg = &segs[partner];
else seg->PartnerSeg = NULL;
if (seg->sidedef == NULL) continue; // miniseg
int sidenum = int(seg->sidedef - sides);
@ -594,7 +468,6 @@ void gl_PreprocessLevel()
PrepareSegs();
PrepareSectorData();
InitVertexData();
SetupDependencies();
for(i=0;i<numsectors;i++)
{
sectors[i].dirty = true;
@ -604,11 +477,6 @@ void gl_PreprocessLevel()
gl_InitPortals();
for(i=0;i<numsides;i++)
{
sides[i].dirty = true;
}
if (GLRenderer != NULL)
{
GLRenderer->SetupLevel();

View file

@ -163,23 +163,6 @@ ADD_STAT(lightstats)
return out;
}
extern int DirtyCount;
ADD_STAT(dirty)
{
static FString buff;
static int lasttime=0;
int t=I_FPSTime();
if (t-lasttime>1000)
{
buff.Format("Dirty=%2.8f (%d)\n", Dirty.TimeMS(), DirtyCount);
lasttime=t;
}
Dirty.Reset();
DirtyCount = 0;
return buff;
}
void AppendMissingTextureStats(FString &out);
extern int viewpitch;

View file

@ -115,7 +115,15 @@ void FNodeBuilder::Extract (node_t *&outNodes, int &nodeCount,
for (i = 0; i < segCount; ++i)
{
outSegs[i] = *(seg_t *)&segs[i];
outSegExtras[i].PartnerSeg = segs[i].Partner;
if (segs[i].Partner != DWORD_MAX)
{
outSegExtras[i].PartnerSeg = Segs[segs[i].Partner].storedseg;
}
else
{
outSegExtras[i].PartnerSeg = DWORD_MAX;
}
}
}
else

View file

@ -418,11 +418,6 @@ struct extsector_t
TArray<lightlist_t> lightlist; // 3D light list
TArray<sector_t*> attached; // 3D floors attached to this sector
} XFloor;
// Links to other objects that get invalidated when this sector changes
TArray<sector_t *> SectorDependencies;
TArray<side_t *> SideDependencies;
TArray<vertex_t *> VertexDependencies;
void Serialize(FArchive &arc);
};
@ -488,18 +483,14 @@ struct sector_t
splane planes[2];
void SetDirty(bool dolines, bool dovertices);
void SetXOffset(int pos, fixed_t o)
{
planes[pos].xform.xoffs = o;
//SetDirty(false, false);
}
void AddXOffset(int pos, fixed_t o)
{
planes[pos].xform.xoffs += o;
//SetDirty(false, false);
}
fixed_t GetXOffset(int pos) const
@ -510,13 +501,11 @@ struct sector_t
void SetYOffset(int pos, fixed_t o)
{
planes[pos].xform.yoffs = o;
//SetDirty(false, false);
}
void AddYOffset(int pos, fixed_t o)
{
planes[pos].xform.yoffs += o;
//SetDirty(false, false);
}
fixed_t GetYOffset(int pos, bool addbase = true) const
@ -534,7 +523,6 @@ struct sector_t
void SetXScale(int pos, fixed_t o)
{
planes[pos].xform.xscale = o;
//SetDirty(false, false);
}
fixed_t GetXScale(int pos) const
@ -545,7 +533,6 @@ struct sector_t
void SetYScale(int pos, fixed_t o)
{
planes[pos].xform.yscale = o;
//SetDirty(false, false);
}
fixed_t GetYScale(int pos) const
@ -556,7 +543,6 @@ struct sector_t
void SetAngle(int pos, angle_t o)
{
planes[pos].xform.angle = o;
//SetDirty(false, false);
}
angle_t GetAngle(int pos, bool addbase = true) const
@ -575,7 +561,6 @@ struct sector_t
{
planes[pos].xform.base_yoffs = y;
planes[pos].xform.base_angle = o;
//SetDirty(false, false);
}
int GetFlags(int pos) const
@ -597,7 +582,6 @@ struct sector_t
void SetPlaneLight(int pos, int level)
{
planes[pos].Light = level;
//dirty = true;
}
FTextureID GetTexture(int pos) const
@ -610,7 +594,6 @@ struct sector_t
FTextureID old = planes[pos].Texture;
planes[pos].Texture = tex;
if (floorclip && pos == floor && tex != old) AdjustFloorClip();
SetDirty(true, false);
}
fixed_t GetPlaneTexZ(int pos) const
@ -621,13 +604,11 @@ struct sector_t
void SetPlaneTexZ(int pos, fixed_t val)
{
planes[pos].TexZ = val;
SetDirty(true, true);
}
void ChangePlaneTexZ(int pos, fixed_t val)
{
planes[pos].TexZ += val;
SetDirty(true, true);
}
sector_t *GetHeightSec() const
@ -638,13 +619,11 @@ struct sector_t
void ChangeLightLevel(int newval)
{
lightlevel = (BYTE)clamp(lightlevel + newval, 0, 255);
//SetDirty(true, false);
}
void SetLightLevel(int newval)
{
lightlevel = (BYTE)clamp(newval, 0, 255);
//SetDirty(true, false);
}
int GetLightLevel() const
@ -850,7 +829,6 @@ struct side_t
void SetLight(SWORD l)
{
Light = l;
//dirty = true;
}
FTextureID GetTexture(int which) const
@ -860,20 +838,17 @@ struct side_t
void SetTexture(int which, FTextureID tex)
{
textures[which].texture = tex;
dirty = true;
}
void SetTextureXOffset(int which, fixed_t offset)
{
textures[which].xoffset = offset;
//dirty = true;
}
void SetTextureXOffset(fixed_t offset)
{
textures[top].xoffset =
textures[mid].xoffset =
textures[bottom].xoffset = offset;
//dirty = true;
}
fixed_t GetTextureXOffset(int which) const
{
@ -882,20 +857,17 @@ struct side_t
void AddTextureXOffset(int which, fixed_t delta)
{
textures[which].xoffset += delta;
//dirty = true;
}
void SetTextureYOffset(int which, fixed_t offset)
{
textures[which].yoffset = offset;
//dirty = true;
}
void SetTextureYOffset(fixed_t offset)
{
textures[top].yoffset =
textures[mid].yoffset =
textures[bottom].yoffset = offset;
//dirty = true;
}
fixed_t GetTextureYOffset(int which) const
{
@ -904,18 +876,15 @@ struct side_t
void AddTextureYOffset(int which, fixed_t delta)
{
textures[which].yoffset += delta;
//dirty = true;
}
void SetTextureXScale(int which, fixed_t scale)
{
textures[which].xscale = scale <= 0? FRACUNIT : scale;
//dirty = true;
}
void SetTextureXScale(fixed_t scale)
{
textures[top].xscale = textures[mid].xscale = textures[bottom].xscale = scale <= 0? FRACUNIT : scale;
//dirty = true;
}
fixed_t GetTextureXScale(int which) const
{
@ -924,19 +893,16 @@ struct side_t
void MultiplyTextureXScale(int which, fixed_t delta)
{
textures[which].xscale = FixedMul(textures[which].xscale, delta);
//dirty = true;
}
void SetTextureYScale(int which, fixed_t scale)
{
textures[which].yscale = scale <= 0? FRACUNIT : scale;
//dirty = true;
}
void SetTextureYScale(fixed_t scale)
{
textures[top].yscale = textures[mid].yscale = textures[bottom].yscale = scale <= 0? FRACUNIT : scale;
//dirty = true;
}
fixed_t GetTextureYScale(int which) const
{
@ -945,7 +911,6 @@ struct side_t
void MultiplyTextureYScale(int which, fixed_t delta)
{
textures[which].yscale = FixedMul(textures[which].yscale, delta);
//dirty = true;
}
DInterpolation *SetInterpolation(int position);
@ -956,7 +921,6 @@ struct side_t
//For GL
FLightNode * lighthead[2]; // all blended lights that may affect this wall
bool dirty; // GL info needs to be recalculated
seg_t **segs; // all segs belonging to this sidedef in ascending order. Used for precise rendering
int numsegs;

View file

@ -3,5 +3,5 @@
// This file was automatically generated by the
// updaterevision tool. Do not edit by hand.
#define ZD_SVN_REVISION_STRING "2615"
#define ZD_SVN_REVISION_NUMBER 2615
#define ZD_SVN_REVISION_STRING "2617"
#define ZD_SVN_REVISION_NUMBER 2617

View file

@ -41,15 +41,15 @@
/** Lots of different version numbers **/
#define DOTVERSIONSTR_NOREV "1.5.1"
#define DOTVERSIONSTR_NOREV "1.5.2"
#define ZDVER_STRING "2.5.0"
// The version string the user actually sees.
#define DOTVERSIONSTR DOTVERSIONSTR_NOREV " (r" SVN_REVISION_STRING ") / ZDoom " ZDVER_STRING " (r" ZD_SVN_REVISION_STRING ")"
// The version as seen in the Windows resource
#define RC_FILEVERSION 1,5,1,SVN_REVISION_NUMBER
#define RC_PRODUCTVERSION 1,5,1,0
#define RC_FILEVERSION 1,5,2,SVN_REVISION_NUMBER
#define RC_PRODUCTVERSION 1,5,2,0
#define RC_FILEVERSION2 DOTVERSIONSTR
#define RC_PRODUCTVERSION2 "1.5"