mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2026-06-06 08:42:35 +00:00
Minor improvements to GFX linker
This commit is contained in:
@@ -44,10 +44,7 @@ namespace BSP
|
|||||||
assert(indexCount % 3 == 0);
|
assert(indexCount % 3 == 0);
|
||||||
gfxWorld->draw.indexCount = static_cast<int>(indexCount);
|
gfxWorld->draw.indexCount = static_cast<int>(indexCount);
|
||||||
gfxWorld->draw.indices = m_memory.Alloc<uint16_t>(indexCount);
|
gfxWorld->draw.indices = m_memory.Alloc<uint16_t>(indexCount);
|
||||||
for (size_t indexIdx = 0; indexIdx < indexCount; indexIdx++)
|
memcpy(gfxWorld->draw.indices, bsp->gfxWorld.indices.data(), sizeof(uint16_t) * indexCount);
|
||||||
{
|
|
||||||
gfxWorld->draw.indices[indexIdx] = bsp->gfxWorld.indices.at(indexIdx);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GfxWorldLinker::loadMapSurfaces(BSPData* bsp, GfxWorld* gfxWorld)
|
bool GfxWorldLinker::loadMapSurfaces(BSPData* bsp, GfxWorld* gfxWorld)
|
||||||
@@ -118,7 +115,7 @@ namespace BSP
|
|||||||
gfxSurface->tris.himipRadiusInvSq = 0.0f;
|
gfxSurface->tris.himipRadiusInvSq = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
// doesn't seem to matter what order the sorted surfs go in
|
// Some code uses Sorted surfs to index surfaces, so for simplicity keep the indexes sequential and from 0
|
||||||
gfxWorld->dpvs.sortedSurfIndex = m_memory.Alloc<uint16_t>(surfaceCount);
|
gfxWorld->dpvs.sortedSurfIndex = m_memory.Alloc<uint16_t>(surfaceCount);
|
||||||
for (size_t surfIdx = 0; surfIdx < surfaceCount; surfIdx++)
|
for (size_t surfIdx = 0; surfIdx < surfaceCount; surfIdx++)
|
||||||
gfxWorld->dpvs.sortedSurfIndex[surfIdx] = static_cast<uint16_t>(surfIdx);
|
gfxWorld->dpvs.sortedSurfIndex[surfIdx] = static_cast<uint16_t>(surfIdx);
|
||||||
@@ -128,13 +125,13 @@ namespace BSP
|
|||||||
|
|
||||||
// set all surface types to lit opaque
|
// set all surface types to lit opaque
|
||||||
gfxWorld->dpvs.litSurfsBegin = 0;
|
gfxWorld->dpvs.litSurfsBegin = 0;
|
||||||
gfxWorld->dpvs.litSurfsEnd = static_cast<unsigned int>(surfaceCount);
|
gfxWorld->dpvs.litSurfsEnd = static_cast<unsigned int>(surfaceCount - 1);
|
||||||
gfxWorld->dpvs.emissiveOpaqueSurfsBegin = static_cast<unsigned int>(surfaceCount);
|
gfxWorld->dpvs.emissiveOpaqueSurfsBegin = static_cast<unsigned int>(surfaceCount - 1);
|
||||||
gfxWorld->dpvs.emissiveOpaqueSurfsEnd = static_cast<unsigned int>(surfaceCount);
|
gfxWorld->dpvs.emissiveOpaqueSurfsEnd = static_cast<unsigned int>(surfaceCount - 1);
|
||||||
gfxWorld->dpvs.emissiveTransSurfsBegin = static_cast<unsigned int>(surfaceCount);
|
gfxWorld->dpvs.emissiveTransSurfsBegin = static_cast<unsigned int>(surfaceCount - 1);
|
||||||
gfxWorld->dpvs.emissiveTransSurfsEnd = static_cast<unsigned int>(surfaceCount);
|
gfxWorld->dpvs.emissiveTransSurfsEnd = static_cast<unsigned int>(surfaceCount - 1);
|
||||||
gfxWorld->dpvs.litTransSurfsBegin = static_cast<unsigned int>(surfaceCount);
|
gfxWorld->dpvs.litTransSurfsBegin = static_cast<unsigned int>(surfaceCount - 1);
|
||||||
gfxWorld->dpvs.litTransSurfsEnd = static_cast<unsigned int>(surfaceCount);
|
gfxWorld->dpvs.litTransSurfsEnd = static_cast<unsigned int>(surfaceCount - 1);
|
||||||
|
|
||||||
// visdata is written to by the game
|
// visdata is written to by the game
|
||||||
// all visdata is alligned by 128
|
// all visdata is alligned by 128
|
||||||
@@ -340,10 +337,13 @@ namespace BSP
|
|||||||
gfxWorld->shadowGeom = m_memory.Alloc<GfxShadowGeometry>(gfxWorld->primaryLightCount);
|
gfxWorld->shadowGeom = m_memory.Alloc<GfxShadowGeometry>(gfxWorld->primaryLightCount);
|
||||||
for (unsigned int lightIdx = 0; lightIdx < gfxWorld->primaryLightCount; lightIdx++)
|
for (unsigned int lightIdx = 0; lightIdx < gfxWorld->primaryLightCount; lightIdx++)
|
||||||
{
|
{
|
||||||
|
|
||||||
gfxWorld->shadowGeom[lightIdx].smodelCount = 0;
|
gfxWorld->shadowGeom[lightIdx].smodelCount = 0;
|
||||||
gfxWorld->shadowGeom[lightIdx].surfaceCount = 0;
|
|
||||||
gfxWorld->shadowGeom[lightIdx].smodelIndex = nullptr;
|
gfxWorld->shadowGeom[lightIdx].smodelIndex = nullptr;
|
||||||
gfxWorld->shadowGeom[lightIdx].sortedSurfIndex = nullptr;
|
|
||||||
|
// sorted surfs is written to by the game
|
||||||
|
gfxWorld->shadowGeom[lightIdx].surfaceCount = gfxWorld->dpvs.staticSurfaceCount;
|
||||||
|
gfxWorld->shadowGeom[lightIdx].sortedSurfIndex = m_memory.Alloc<uint16_t>(gfxWorld->dpvs.staticSurfaceCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
gfxWorld->lightRegion = m_memory.Alloc<GfxLightRegion>(gfxWorld->primaryLightCount);
|
gfxWorld->lightRegion = m_memory.Alloc<GfxLightRegion>(gfxWorld->primaryLightCount);
|
||||||
@@ -362,7 +362,7 @@ namespace BSP
|
|||||||
|
|
||||||
void GfxWorldLinker::loadLightGrid(GfxWorld* gfxWorld)
|
void GfxWorldLinker::loadLightGrid(GfxWorld* gfxWorld)
|
||||||
{
|
{
|
||||||
// there is almost no basis for the values in this code, they were chosen based on what looks correct when reverse engineering.
|
// the values in this code were chosen based on what looked correct when reverse engineering.
|
||||||
|
|
||||||
// mins and maxs define the range that the lightgrid will work in.
|
// mins and maxs define the range that the lightgrid will work in.
|
||||||
// unknown how these values are calculated, but the below values are larger
|
// unknown how these values are calculated, but the below values are larger
|
||||||
|
|||||||
Reference in New Issue
Block a user