mirror of
https://github.com/DrBeef/Raze.git
synced 2025-01-19 07:31:03 +00:00
- interface from Section2 to the flat processing.
This commit is contained in:
parent
69593fd5c7
commit
ca19c265f8
3 changed files with 52 additions and 19 deletions
|
@ -597,7 +597,7 @@ void BunchDrawer::ProcessSection(int sectionnum, bool portal)
|
|||
|
||||
SetupFlat.Clock();
|
||||
HWFlat flat;
|
||||
flat.ProcessSector(di, §or[sectnum], sectionnum);
|
||||
flat.ProcessSector(di, §or[sectnum], nullptr, sectionnum);
|
||||
SetupFlat.Unclock();
|
||||
|
||||
//Todo: process subsectors
|
||||
|
|
|
@ -31,6 +31,7 @@ class VSMatrix;
|
|||
struct FSpriteModelFrame;
|
||||
class FRenderState;
|
||||
struct voxmodel_t;
|
||||
struct Section2;
|
||||
|
||||
struct HWSectorPlane
|
||||
{
|
||||
|
@ -252,7 +253,8 @@ public:
|
|||
class HWFlat
|
||||
{
|
||||
public:
|
||||
int section;
|
||||
int oldsection;
|
||||
Section2* section;
|
||||
sectortype * sec;
|
||||
tspritetype* Sprite; // for flat sprites.
|
||||
FGameTexture *texture;
|
||||
|
@ -279,7 +281,7 @@ public:
|
|||
//void SetupLights(HWDrawInfo *di, FLightNode *head, FDynLightData &lightdata, int portalgroup);
|
||||
|
||||
void PutFlat(HWDrawInfo* di, int whichplane);
|
||||
void ProcessSector(HWDrawInfo *di, sectortype * frontsector, int sectionnum, int which = 7 /*SSRF_RENDERALL*/); // cannot use constant due to circular dependencies.
|
||||
void ProcessSector(HWDrawInfo *di, sectortype * frontsector, Section2* sectionp, int sectionnum, int which = 7 /*SSRF_RENDERALL*/); // cannot use constant due to circular dependencies.
|
||||
void ProcessFlatSprite(HWDrawInfo* di, tspritetype* sprite, sectortype* sector);
|
||||
|
||||
void DrawSubsectors(HWDrawInfo *di, FRenderState &state);
|
||||
|
|
|
@ -98,21 +98,45 @@ void HWFlat::MakeVertices()
|
|||
bool canvas = texture->isHardwareCanvas();
|
||||
if (Sprite == nullptr)
|
||||
{
|
||||
auto mesh = sectorGeometry.get(section, plane, geoofs);
|
||||
if (!mesh) return;
|
||||
auto ret = screen->mVertexData->AllocVertices(mesh->vertices.Size());
|
||||
auto vp = ret.first;
|
||||
float base = (plane == 0 ? sec->floorz : sec->ceilingz) * (1/-256.f);
|
||||
for (unsigned i = 0; i < mesh->vertices.Size(); i++)
|
||||
#if 0
|
||||
if (section != nullptr)
|
||||
{
|
||||
auto& pt = mesh->vertices[i];
|
||||
auto& uv = mesh->texcoords[i];
|
||||
vp->SetVertex(pt.X, base + pt.Z, pt.Y);
|
||||
vp->SetTexCoord(uv.X, canvas? 1.f - uv.Y : uv.Y);
|
||||
vp++;
|
||||
auto mesh = sectionGeometry.get(section, plane, geoofs);
|
||||
|
||||
auto ret = screen->mVertexData->AllocVertices(mesh->indices.Size());
|
||||
auto vp = ret.first;
|
||||
float base = (plane == 0 ? sec->floorz : sec->ceilingz) * (1 / -256.f);
|
||||
for (unsigned i = 0; i < mesh->indices.Size(); i++)
|
||||
{
|
||||
auto ii = mesh->indicess[i];
|
||||
auto& pt = mesh->vertices[ii];
|
||||
auto& uv = mesh->texcoords[ii];
|
||||
vp->SetVertex(pt.X, base + pt.Z, pt.Y);
|
||||
vp->SetTexCoord(uv.X, canvas ? 1.f - uv.Y : uv.Y);
|
||||
vp++;
|
||||
}
|
||||
vertindex = ret.second;
|
||||
vertcount = mesh->indices.Size();
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
auto mesh = sectorGeometry.get(oldsection, plane, geoofs);
|
||||
if (!mesh) return;
|
||||
auto ret = screen->mVertexData->AllocVertices(mesh->vertices.Size());
|
||||
auto vp = ret.first;
|
||||
float base = (plane == 0 ? sec->floorz : sec->ceilingz) * (1 / -256.f);
|
||||
for (unsigned i = 0; i < mesh->vertices.Size(); i++)
|
||||
{
|
||||
auto& pt = mesh->vertices[i];
|
||||
auto& uv = mesh->texcoords[i];
|
||||
vp->SetVertex(pt.X, base + pt.Z, pt.Y);
|
||||
vp->SetTexCoord(uv.X, canvas ? 1.f - uv.Y : uv.Y);
|
||||
vp++;
|
||||
}
|
||||
vertindex = ret.second;
|
||||
vertcount = mesh->vertices.Size();
|
||||
}
|
||||
vertindex = ret.second;
|
||||
vertcount = mesh->vertices.Size();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -158,7 +182,7 @@ void HWFlat::DrawFlat(HWDrawInfo *di, FRenderState &state, bool translucent)
|
|||
|
||||
if (!Sprite)
|
||||
{
|
||||
auto mesh = sectorGeometry.get(section, plane, geoofs);
|
||||
auto mesh = sectorGeometry.get(oldsection, plane, geoofs);
|
||||
state.SetNormal(mesh->normal);
|
||||
}
|
||||
else
|
||||
|
@ -238,7 +262,7 @@ void HWFlat::PutFlat(HWDrawInfo *di, int whichplane)
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void HWFlat::ProcessSector(HWDrawInfo *di, sectortype * frontsector, int section_, int which)
|
||||
void HWFlat::ProcessSector(HWDrawInfo *di, sectortype * frontsector, Section2* sectionp, int section_, int which)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
if (sectnum(sec) == gl_breaksec)
|
||||
|
@ -256,7 +280,8 @@ void HWFlat::ProcessSector(HWDrawInfo *di, sectortype * frontsector, int section
|
|||
|
||||
visibility = sectorVisibility(frontsector);
|
||||
sec = frontsector;
|
||||
section = section_;
|
||||
oldsection = section_;
|
||||
section = sectionp;
|
||||
Sprite = nullptr;
|
||||
geoofs = di->geoofs;
|
||||
|
||||
|
@ -346,6 +371,12 @@ void HWFlat::ProcessSector(HWDrawInfo *di, sectortype * frontsector, int section
|
|||
}
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// Process a floor sprite
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
void HWFlat::ProcessFlatSprite(HWDrawInfo* di, tspritetype* sprite, sectortype* sector)
|
||||
{
|
||||
int tilenum = sprite->picnum;
|
||||
|
|
Loading…
Reference in a new issue