From eaf055dff46dc09629644bf6a914b11ac25913f7 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Fri, 8 Apr 2016 00:19:51 +0200 Subject: [PATCH] - floatified the remaining parts of gl_walls.cpp. --- src/gl/scene/gl_wall.h | 6 ++-- src/gl/scene/gl_walls.cpp | 58 +++++++++++++++++---------------- src/gl/textures/gl_material.cpp | 16 ++++----- src/gl/textures/gl_material.h | 4 +-- src/gl/textures/gl_texture.cpp | 13 ++++---- src/gl/textures/gl_texture.h | 3 +- 6 files changed, 50 insertions(+), 50 deletions(-) diff --git a/src/gl/scene/gl_wall.h b/src/gl/scene/gl_wall.h index b71b194ef8..8bd39b3728 100644 --- a/src/gl/scene/gl_wall.h +++ b/src/gl/scene/gl_wall.h @@ -191,13 +191,13 @@ private: bool DoHorizon(seg_t * seg,sector_t * fs, vertex_t * v1,vertex_t * v2); bool SetWallCoordinates(seg_t * seg, FTexCoordInfo *tci, float ceilingrefheight, - float topleft, float topright, float bottomleft, float bottomright, fixed_t t_ofs); + float topleft, float topright, float bottomleft, float bottomright, float t_ofs); void DoTexture(int type,seg_t * seg,int peg, - fixed_t ceilingrefheight,fixed_t floorrefheight, + float ceilingrefheight, float floorrefheight, float CeilingHeightstart,float CeilingHeightend, float FloorHeightstart,float FloorHeightend, - fixed_t v_offset); + float v_offset); void DoMidTexture(seg_t * seg, bool drawfogboundary, sector_t * front, sector_t * back, diff --git a/src/gl/scene/gl_walls.cpp b/src/gl/scene/gl_walls.cpp index 0ce1eb304b..86b330d7e1 100644 --- a/src/gl/scene/gl_walls.cpp +++ b/src/gl/scene/gl_walls.cpp @@ -428,7 +428,7 @@ bool GLWall::DoHorizon(seg_t * seg,sector_t * fs, vertex_t * v1,vertex_t * v2) // //========================================================================== bool GLWall::SetWallCoordinates(seg_t * seg, FTexCoordInfo *tci, float texturetop, - float topleft, float topright, float bottomleft, float bottomright, fixed_t t_ofs) + float topleft, float topright, float bottomleft, float bottomright, float t_ofs) { // // @@ -442,7 +442,7 @@ bool GLWall::SetWallCoordinates(seg_t * seg, FTexCoordInfo *tci, float textureto { float length = seg->sidedef ? seg->sidedef->TexelLength : Dist2(glseg.x1, glseg.y1, glseg.x2, glseg.y2); - l_ul = tci->FloatToTexU(FIXED2FLOAT(tci->TextureOffset(t_ofs))); + l_ul = tci->FloatToTexU(tci->TextureOffset(t_ofs)); texlength = tci->FloatToTexU(length); } else @@ -593,16 +593,16 @@ void GLWall::CheckTexturePosition() // //========================================================================== void GLWall::DoTexture(int _type,seg_t * seg, int peg, - fixed_t ceilingrefheight,fixed_t floorrefheight, + float ceilingrefheight,float floorrefheight, float topleft,float topright, float bottomleft,float bottomright, - fixed_t v_offset) + float v_offset) { if (topleft<=bottomleft && topright<=bottomright) return; // The Vertex values can be destroyed in this function and must be restored aferward! GLSeg glsave=glseg; - int lh=ceilingrefheight-floorrefheight; + float flh=ceilingrefheight-floorrefheight; int texpos; switch (_type) @@ -624,11 +624,11 @@ void GLWall::DoTexture(int _type,seg_t * seg, int peg, type = _type; - float floatceilingref = FIXED2FLOAT(ceilingrefheight + tci.RowOffset(seg->sidedef->GetTextureYOffset(texpos))); - if (peg) floatceilingref += tci.mRenderHeight - FIXED2FLOAT(lh + v_offset); + float floatceilingref = ceilingrefheight + tci.RowOffset(seg->sidedef->GetTextureYOffsetF(texpos)); + if (peg) floatceilingref += tci.mRenderHeight - flh - v_offset; if (!SetWallCoordinates(seg, &tci, floatceilingref, topleft, topright, bottomleft, bottomright, - seg->sidedef->GetTextureXOffset(texpos))) return; + seg->sidedef->GetTextureXOffsetF(texpos))) return; if (seg->linedef->special == Line_Mirror && _type == RENDERWALL_M1S && gl_mirrors) { @@ -686,7 +686,7 @@ void GLWall::DoMidTexture(seg_t * seg, bool drawfogboundary, tci.mRenderHeight = -tci.mRenderHeight; tci.mScaleY = -tci.mScaleY; } - float rowoffset = FIXED2FLOAT(tci.RowOffset(seg->sidedef->GetTextureYOffset(side_t::mid))); + float rowoffset = tci.RowOffset(seg->sidedef->GetTextureYOffsetF(side_t::mid)); if ((seg->linedef->flags & ML_DONTPEGBOTTOM) >0) { texturebottom = MAX(realfront->GetPlaneTexZF(sector_t::floor), realback->GetPlaneTexZF(sector_t::floor)) + rowoffset; @@ -827,8 +827,8 @@ void GLWall::DoMidTexture(seg_t * seg, bool drawfogboundary, // If so we should use horizontal texture clamping to prevent filtering artifacts // at the edges. - fixed_t textureoffset = tci.TextureOffset(FLOAT2FIXED(t_ofs)); - int righttex=(textureoffset>>FRACBITS)+seg->sidedef->TexelLength; + float textureoffset = tci.TextureOffset(t_ofs); + int righttex = int(textureoffset) + seg->sidedef->TexelLength; if ((textureoffset == 0 && righttex <= tci.mRenderWidth) || (textureoffset >= 0 && righttex == tci.mRenderWidth)) @@ -849,7 +849,7 @@ void GLWall::DoMidTexture(seg_t * seg, bool drawfogboundary, tci.mRenderHeight = -tci.mRenderHeight; tci.mScaleY = -tci.mScaleY; } - SetWallCoordinates(seg, &tci, texturetop, topleft, topright, bottomleft, bottomright, FLOAT2FIXED(t_ofs)); + SetWallCoordinates(seg, &tci, texturetop, topleft, topright, bottomleft, bottomright, t_ofs); // // @@ -1034,21 +1034,20 @@ void GLWall::BuildFFBlock(seg_t * seg, F3DFloor * rover, gltexture->GetTexCoordInfo(&tci, mastersd->GetTextureXScale(side_t::mid), mastersd->GetTextureYScale(side_t::mid)); } - to = FIXED2FLOAT((rover->flags&(FF_UPPERTEXTURE | FF_LOWERTEXTURE)) ? - 0 : tci.TextureOffset(mastersd->GetTextureXOffset(side_t::mid))); + to = (rover->flags&(FF_UPPERTEXTURE | FF_LOWERTEXTURE)) ? 0 : tci.TextureOffset(mastersd->GetTextureXOffsetF(side_t::mid)); - ul = tci.FloatToTexU(to + FIXED2FLOAT(tci.TextureOffset(seg->sidedef->GetTextureXOffset(side_t::mid)))); + ul = tci.FloatToTexU(to + tci.TextureOffset(seg->sidedef->GetTextureXOffsetF(side_t::mid))); texlength = tci.FloatToTexU(seg->sidedef->TexelLength); uplft.u = lolft.u = ul + texlength * glseg.fracleft; uprgt.u = lorgt.u = ul + texlength * glseg.fracright; - fixed_t rowoffset = tci.RowOffset(seg->sidedef->GetTextureYOffset(side_t::mid)); + float rowoffset = tci.RowOffset(seg->sidedef->GetTextureYOffsetF(side_t::mid)); to = (rover->flags&(FF_UPPERTEXTURE | FF_LOWERTEXTURE)) ? - 0.f : FIXED2FLOAT(tci.RowOffset(mastersd->GetTextureYOffset(side_t::mid))); + 0.f : tci.RowOffset(mastersd->GetTextureYOffsetF(side_t::mid)); - to += FIXED2FLOAT(rowoffset) + rover->top.model->GetPlaneTexZF(rover->top.isceiling); + to += rowoffset + rover->top.model->GetPlaneTexZF(rover->top.isceiling); uplft.v = tci.FloatToTexV(to - ff_topleft); uprgt.v = tci.FloatToTexV(to - ff_topright); @@ -1324,6 +1323,7 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector) float ffh1; float fch2; float ffh2; + float frefz, crefz; sector_t * realfront; sector_t * realback; sector_t * segfront; @@ -1354,6 +1354,8 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector) segfront = frontsector; segback = backsector; } + frefz = realfront->GetPlaneTexZF(sector_t::floor); + crefz = realfront->GetPlaneTexZF(sector_t::ceiling); if (seg->sidedef == seg->linedef->sidedef[0]) { @@ -1466,7 +1468,7 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector) if (gltexture) { DoTexture(RENDERWALL_M1S, seg, (seg->linedef->flags & ML_DONTPEGBOTTOM) > 0, - realfront->GetPlaneTexZ(sector_t::ceiling), realfront->GetPlaneTexZ(sector_t::floor), // must come from the original! + crefz, frefz, // must come from the original! fch1, fch2, ffh1, ffh2, 0); } } @@ -1501,7 +1503,7 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector) if (gltexture) { DoTexture(RENDERWALL_TOP, seg, (seg->linedef->flags & (ML_DONTPEGTOP)) == 0, - realfront->GetPlaneTexZ(sector_t::ceiling), realback->GetPlaneTexZ(sector_t::ceiling), + frefz, crefz, fch1, fch2, bch1a, bch2a, 0); } else if (!(seg->sidedef->Flags & WALLF_POLYOBJ)) @@ -1514,7 +1516,7 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector) if (gltexture) { DoTexture(RENDERWALL_TOP, seg, (seg->linedef->flags & (ML_DONTPEGTOP)) == 0, - realfront->GetPlaneTexZ(sector_t::ceiling), realback->GetPlaneTexZ(sector_t::ceiling), + frefz, crefz, fch1, fch2, bch1a, bch2a, 0); } } @@ -1523,7 +1525,7 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector) // skip processing if the back is a malformed subsector if (seg->PartnerSeg != NULL && !(seg->PartnerSeg->Subsector->hacked & 4)) { - gl_drawinfo->AddUpperMissingTexture(seg->sidedef, sub, bch1a); + gl_drawinfo->AddUpperMissingTexture(seg->sidedef, sub, FLOAT2FIXED(bch1a)); } } } @@ -1578,11 +1580,11 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector) if (gltexture) { DoTexture(RENDERWALL_BOTTOM, seg, (seg->linedef->flags & ML_DONTPEGBOTTOM) > 0, - realback->GetPlaneTexZ(sector_t::floor), realfront->GetPlaneTexZ(sector_t::floor), + frefz, crefz, bfh1, bfh2, ffh1, ffh2, frontsector->GetTexture(sector_t::ceiling) == skyflatnum && backsector->GetTexture(sector_t::ceiling) == skyflatnum ? - realfront->GetPlaneTexZ(sector_t::floor) - realback->GetPlaneTexZ(sector_t::ceiling) : - realfront->GetPlaneTexZ(sector_t::floor) - realfront->GetPlaneTexZ(sector_t::ceiling)); + frefz - realback->GetPlaneTexZF(sector_t::ceiling) : + frefz - crefz); } else if (!(seg->sidedef->Flags & WALLF_POLYOBJ)) { @@ -1597,8 +1599,8 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector) if (gltexture) { DoTexture(RENDERWALL_BOTTOM, seg, (seg->linedef->flags & ML_DONTPEGBOTTOM) > 0, - realback->GetPlaneTexZ(sector_t::floor), realfront->GetPlaneTexZ(sector_t::floor), - bfh1, bfh2, ffh1, ffh2, realfront->GetPlaneTexZ(sector_t::floor) - realfront->GetPlaneTexZ(sector_t::ceiling)); + realback->GetPlaneTexZF(sector_t::floor), frefz, + bfh1, bfh2, ffh1, ffh2, frefz - crefz); } } else if (backsector->GetTexture(sector_t::floor) != skyflatnum) @@ -1606,7 +1608,7 @@ void GLWall::Process(seg_t *seg, sector_t * frontsector, sector_t * backsector) // skip processing if the back is a malformed subsector if (seg->PartnerSeg != NULL && !(seg->PartnerSeg->Subsector->hacked & 4)) { - gl_drawinfo->AddLowerMissingTexture(seg->sidedef, sub, bfh1); + gl_drawinfo->AddLowerMissingTexture(seg->sidedef, sub, FLOAT2FIXED(bfh1)); } } } diff --git a/src/gl/textures/gl_material.cpp b/src/gl/textures/gl_material.cpp index ea68116039..3b2ee60af3 100644 --- a/src/gl/textures/gl_material.cpp +++ b/src/gl/textures/gl_material.cpp @@ -327,17 +327,17 @@ const FHardwareTexture *FGLTexture::Bind(int texunit, int clampmode, int transla // //=========================================================================== -fixed_t FTexCoordInfo::RowOffset(fixed_t rowoffset) const +float FTexCoordInfo::RowOffset(float rowoffset) const { if (mTempScaleY == FRACUNIT) { if (mScaleY==FRACUNIT || mWorldPanning) return rowoffset; - else return FixedDiv(rowoffset, mScaleY); + else return rowoffset * FIXED2FLOAT(mScaleY); } else { - if (mWorldPanning) return FixedDiv(rowoffset, mTempScaleY); - else return FixedDiv(rowoffset, mScaleY); + if (mWorldPanning) return rowoffset * FIXED2FLOAT(mTempScaleY); + else return rowoffset * FIXED2FLOAT(mScaleY); } } @@ -347,17 +347,17 @@ fixed_t FTexCoordInfo::RowOffset(fixed_t rowoffset) const // //=========================================================================== -fixed_t FTexCoordInfo::TextureOffset(fixed_t textureoffset) const +float FTexCoordInfo::TextureOffset(float textureoffset) const { if (mTempScaleX == FRACUNIT) { if (mScaleX==FRACUNIT || mWorldPanning) return textureoffset; - else return FixedDiv(textureoffset, mScaleX); + else return textureoffset * FIXED2FLOAT(mScaleX); } else { - if (mWorldPanning) return FixedDiv(textureoffset, mTempScaleX); - else return FixedDiv(textureoffset, mScaleX); + if (mWorldPanning) return textureoffset * FIXED2FLOAT(mTempScaleX); + else return textureoffset * FIXED2FLOAT(mScaleX); } } diff --git a/src/gl/textures/gl_material.h b/src/gl/textures/gl_material.h index ac1ccc2740..525d506704 100644 --- a/src/gl/textures/gl_material.h +++ b/src/gl/textures/gl_material.h @@ -39,8 +39,8 @@ struct FTexCoordInfo float FloatToTexU(float v) const { return v / mRenderWidth; } float FloatToTexV(float v) const { return v / mRenderHeight; } - fixed_t RowOffset(fixed_t ofs) const; - fixed_t TextureOffset(fixed_t ofs) const; + float RowOffset(float ofs) const; + float TextureOffset(float ofs) const; fixed_t TextureAdjustWidth() const; }; diff --git a/src/gl/textures/gl_texture.cpp b/src/gl/textures/gl_texture.cpp index 0ad87fbfea..50671e4bd5 100644 --- a/src/gl/textures/gl_texture.cpp +++ b/src/gl/textures/gl_texture.cpp @@ -177,7 +177,7 @@ void gl_GenerateGlobalBrightmapFromColormap() // component becomes one. // //=========================================================================== -PalEntry averageColor(const DWORD *data, int size, fixed_t maxout_factor) +PalEntry averageColor(const DWORD *data, int size, int maxout) { int i; unsigned int r, g, b; @@ -203,12 +203,11 @@ PalEntry averageColor(const DWORD *data, int size, fixed_t maxout_factor) int maxv=MAX(MAX(r,g),b); - if(maxv && maxout_factor) + if(maxv && maxout) { - maxout_factor = FixedMul(maxout_factor, 255); - r = Scale(r, maxout_factor, maxv); - g = Scale(g, maxout_factor, maxv); - b = Scale(b, maxout_factor, maxv); + r = Scale(r, maxout, maxv); + g = Scale(g, maxout, maxv); + b = Scale(b, maxout, maxv); } return PalEntry(255,r,g,b); } @@ -366,7 +365,7 @@ void FTexture::GetGlowColor(float *data) if (buffer) { - gl_info.GlowColor = averageColor((DWORD *) buffer, w*h, 6*FRACUNIT/10); + gl_info.GlowColor = averageColor((DWORD *) buffer, w*h, 153); delete[] buffer; } diff --git a/src/gl/textures/gl_texture.h b/src/gl/textures/gl_texture.h index a70ccebc59..a1c471ea83 100644 --- a/src/gl/textures/gl_texture.h +++ b/src/gl/textures/gl_texture.h @@ -58,14 +58,13 @@ protected: void gl_GenerateGlobalBrightmapFromColormap(); -PalEntry averageColor(const DWORD *data, int size, fixed_t maxout); +PalEntry averageColor(const DWORD *data, int size, int maxout); unsigned char *gl_CreateUpsampledTextureBuffer ( const FTexture *inputTexture, unsigned char *inputBuffer, const int inWidth, const int inHeight, int &outWidth, int &outHeight, bool hasAlpha ); int CheckDDPK3(FTexture *tex); int CheckExternalFile(FTexture *tex, bool & hascolorkey); -PalEntry averageColor(const DWORD *data, int size, fixed_t maxout); #endif // __GL_HQRESIZE_H__