CModelLoader: Eliminate some sign conversion warnings
This commit is contained in:
parent
80d5983229
commit
87fac0896d
|
@ -18,16 +18,16 @@ void CModelLoader::LoadWorldMeshHeader(IInputStream& rModel)
|
||||||
void CModelLoader::LoadAttribArrays(IInputStream& rModel)
|
void CModelLoader::LoadAttribArrays(IInputStream& rModel)
|
||||||
{
|
{
|
||||||
// Positions
|
// Positions
|
||||||
if (mFlags & EModelLoaderFlag::HalfPrecisionPositions) // 16-bit (DKCR only)
|
if ((mFlags & EModelLoaderFlag::HalfPrecisionPositions) != 0) // 16-bit (DKCR only)
|
||||||
{
|
{
|
||||||
mPositions.resize(mpSectionMgr->CurrentSectionSize() / 0x6);
|
mPositions.resize(mpSectionMgr->CurrentSectionSize() / 0x6);
|
||||||
constexpr float Divisor = 8192.f; // Might be incorrect! Needs verification via size comparison.
|
constexpr float Divisor = 8192.f; // Might be incorrect! Needs verification via size comparison.
|
||||||
|
|
||||||
for (auto& position : mPositions)
|
for (auto& position : mPositions)
|
||||||
{
|
{
|
||||||
position.X = rModel.ReadShort() / Divisor;
|
position.X = static_cast<float>(rModel.ReadShort()) / Divisor;
|
||||||
position.Y = rModel.ReadShort() / Divisor;
|
position.Y = static_cast<float>(rModel.ReadShort()) / Divisor;
|
||||||
position.Z = rModel.ReadShort() / Divisor;
|
position.Z = static_cast<float>(rModel.ReadShort()) / Divisor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // 32-bit
|
else // 32-bit
|
||||||
|
@ -41,16 +41,16 @@ void CModelLoader::LoadAttribArrays(IInputStream& rModel)
|
||||||
mpSectionMgr->ToNextSection();
|
mpSectionMgr->ToNextSection();
|
||||||
|
|
||||||
// Normals
|
// Normals
|
||||||
if (mFlags & EModelLoaderFlag::HalfPrecisionNormals) // 16-bit
|
if ((mFlags & EModelLoaderFlag::HalfPrecisionNormals) != 0) // 16-bit
|
||||||
{
|
{
|
||||||
mNormals.resize(mpSectionMgr->CurrentSectionSize() / 0x6);
|
mNormals.resize(mpSectionMgr->CurrentSectionSize() / 0x6);
|
||||||
const float Divisor = (mVersion < EGame::DKCReturns) ? 32768.f : 16384.f;
|
const float Divisor = (mVersion < EGame::DKCReturns) ? 32768.f : 16384.f;
|
||||||
|
|
||||||
for (auto& normal : mNormals)
|
for (auto& normal : mNormals)
|
||||||
{
|
{
|
||||||
normal.X = rModel.ReadShort() / Divisor;
|
normal.X = static_cast<float>(rModel.ReadShort()) / Divisor;
|
||||||
normal.Y = rModel.ReadShort() / Divisor;
|
normal.Y = static_cast<float>(rModel.ReadShort()) / Divisor;
|
||||||
normal.Z = rModel.ReadShort() / Divisor;
|
normal.Z = static_cast<float>(rModel.ReadShort()) / Divisor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // 32-bit
|
else // 32-bit
|
||||||
|
@ -81,15 +81,15 @@ void CModelLoader::LoadAttribArrays(IInputStream& rModel)
|
||||||
mpSectionMgr->ToNextSection();
|
mpSectionMgr->ToNextSection();
|
||||||
|
|
||||||
// Lightmap UVs
|
// Lightmap UVs
|
||||||
if (mFlags & EModelLoaderFlag::LightmapUVs)
|
if ((mFlags & EModelLoaderFlag::LightmapUVs) != 0)
|
||||||
{
|
{
|
||||||
mTex1.resize(mpSectionMgr->CurrentSectionSize() / 0x4);
|
mTex1.resize(mpSectionMgr->CurrentSectionSize() / 0x4);
|
||||||
const float Divisor = (mVersion < EGame::DKCReturns) ? 32768.f : 8192.f;
|
const float Divisor = (mVersion < EGame::DKCReturns) ? 32768.f : 8192.f;
|
||||||
|
|
||||||
for (auto& vec : mTex1)
|
for (auto& vec : mTex1)
|
||||||
{
|
{
|
||||||
vec.X = rModel.ReadShort() / Divisor;
|
vec.X = static_cast<float>(rModel.ReadShort()) / Divisor;
|
||||||
vec.Y = rModel.ReadShort() / Divisor;
|
vec.Y = static_cast<float>(rModel.ReadShort()) / Divisor;
|
||||||
}
|
}
|
||||||
|
|
||||||
mpSectionMgr->ToNextSection();
|
mpSectionMgr->ToNextSection();
|
||||||
|
@ -137,7 +137,7 @@ SSurface* CModelLoader::LoadSurface(IInputStream& rModel)
|
||||||
|
|
||||||
for (uint32 iMtxAttr = 0; iMtxAttr < 8; iMtxAttr++)
|
for (uint32 iMtxAttr = 0; iMtxAttr < 8; iMtxAttr++)
|
||||||
{
|
{
|
||||||
if (VtxDesc & static_cast<uint>(EVertexAttribute::PosMtx << iMtxAttr))
|
if ((VtxDesc & static_cast<uint>(EVertexAttribute::PosMtx << iMtxAttr)) != 0)
|
||||||
rModel.Seek(0x1, SEEK_CUR);
|
rModel.Seek(0x1, SEEK_CUR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -146,9 +146,9 @@ SSurface* CModelLoader::LoadSurface(IInputStream& rModel)
|
||||||
// tex0 can also be read from either UV buffer; depends what the material says.
|
// tex0 can also be read from either UV buffer; depends what the material says.
|
||||||
|
|
||||||
// Position
|
// Position
|
||||||
if (VtxDesc & EVertexAttribute::Position)
|
if ((VtxDesc & EVertexAttribute::Position) != 0)
|
||||||
{
|
{
|
||||||
uint16 PosIndex = rModel.ReadShort() & 0xFFFF;
|
const uint16 PosIndex = rModel.ReadShort() & 0xFFFF;
|
||||||
Vtx.Position = mPositions[PosIndex];
|
Vtx.Position = mPositions[PosIndex];
|
||||||
Vtx.ArrayPosition = PosIndex;
|
Vtx.ArrayPosition = PosIndex;
|
||||||
|
|
||||||
|
@ -157,13 +157,13 @@ SSurface* CModelLoader::LoadSurface(IInputStream& rModel)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Normal
|
// Normal
|
||||||
if (VtxDesc & EVertexAttribute::Normal)
|
if ((VtxDesc & EVertexAttribute::Normal) != 0)
|
||||||
Vtx.Normal = mNormals[rModel.ReadShort() & 0xFFFF];
|
Vtx.Normal = mNormals[rModel.ReadShort() & 0xFFFF];
|
||||||
|
|
||||||
// Color
|
// Color
|
||||||
for (size_t iClr = 0; iClr < Vtx.Color.size(); iClr++)
|
for (size_t iClr = 0; iClr < Vtx.Color.size(); iClr++)
|
||||||
{
|
{
|
||||||
if (VtxDesc & static_cast<uint32>(EVertexAttribute::Color0 << iClr))
|
if ((VtxDesc & static_cast<uint32>(EVertexAttribute::Color0 << iClr)) != 0)
|
||||||
Vtx.Color[iClr] = mColors[rModel.ReadShort() & 0xFFFF];
|
Vtx.Color[iClr] = mColors[rModel.ReadShort() & 0xFFFF];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,9 +171,9 @@ SSurface* CModelLoader::LoadSurface(IInputStream& rModel)
|
||||||
if (mVersion < EGame::DKCReturns)
|
if (mVersion < EGame::DKCReturns)
|
||||||
{
|
{
|
||||||
// Tex0
|
// Tex0
|
||||||
if (VtxDesc & EVertexAttribute::Tex0)
|
if ((VtxDesc & EVertexAttribute::Tex0) != 0)
|
||||||
{
|
{
|
||||||
if ((mFlags & EModelLoaderFlag::LightmapUVs) && (pMat->Options() & EMaterialOption::ShortTexCoord))
|
if ((mFlags & EModelLoaderFlag::LightmapUVs) != 0 && (pMat->Options() & EMaterialOption::ShortTexCoord) != 0)
|
||||||
Vtx.Tex[0] = mTex1[rModel.ReadShort() & 0xFFFF];
|
Vtx.Tex[0] = mTex1[rModel.ReadShort() & 0xFFFF];
|
||||||
else
|
else
|
||||||
Vtx.Tex[0] = mTex0[rModel.ReadShort() & 0xFFFF];
|
Vtx.Tex[0] = mTex0[rModel.ReadShort() & 0xFFFF];
|
||||||
|
@ -182,7 +182,7 @@ SSurface* CModelLoader::LoadSurface(IInputStream& rModel)
|
||||||
// Tex1-7
|
// Tex1-7
|
||||||
for (size_t iTex = 1; iTex < 7; iTex++)
|
for (size_t iTex = 1; iTex < 7; iTex++)
|
||||||
{
|
{
|
||||||
if (VtxDesc & static_cast<uint32>(EVertexAttribute::Tex0 << iTex))
|
if ((VtxDesc & static_cast<uint32>(EVertexAttribute::Tex0 << iTex)) != 0)
|
||||||
Vtx.Tex[iTex] = mTex0[rModel.ReadShort() & 0xFFFF];
|
Vtx.Tex[iTex] = mTex0[rModel.ReadShort() & 0xFFFF];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -191,7 +191,7 @@ SSurface* CModelLoader::LoadSurface(IInputStream& rModel)
|
||||||
// Tex0-7
|
// Tex0-7
|
||||||
for (size_t iTex = 0; iTex < 7; iTex++)
|
for (size_t iTex = 0; iTex < 7; iTex++)
|
||||||
{
|
{
|
||||||
if (VtxDesc & static_cast<uint32>(EVertexAttribute::Tex0 << iTex))
|
if ((VtxDesc & static_cast<uint32>(EVertexAttribute::Tex0 << iTex)) != 0)
|
||||||
{
|
{
|
||||||
if (!mSurfaceUsingTex1)
|
if (!mSurfaceUsingTex1)
|
||||||
Vtx.Tex[iTex] = mTex0[rModel.ReadShort() & 0xFFFF];
|
Vtx.Tex[iTex] = mTex0[rModel.ReadShort() & 0xFFFF];
|
||||||
|
@ -264,7 +264,7 @@ void CModelLoader::LoadSurfaceHeaderDKCR(IInputStream& rModel, SSurface *pSurf)
|
||||||
pSurf->MaterialID = static_cast<uint32>(rModel.ReadShort());
|
pSurf->MaterialID = static_cast<uint32>(rModel.ReadShort());
|
||||||
rModel.Seek(0x2, SEEK_CUR);
|
rModel.Seek(0x2, SEEK_CUR);
|
||||||
mSurfaceUsingTex1 = (rModel.ReadByte() == 1);
|
mSurfaceUsingTex1 = (rModel.ReadByte() == 1);
|
||||||
uint32 ExtraSize = rModel.ReadByte();
|
uint32 ExtraSize = static_cast<uint8>(rModel.ReadByte());
|
||||||
|
|
||||||
if (ExtraSize > 0)
|
if (ExtraSize > 0)
|
||||||
{
|
{
|
||||||
|
@ -404,16 +404,16 @@ std::unique_ptr<CModel> CModelLoader::LoadCMDL(IInputStream& rCMDL, CResourceEnt
|
||||||
if (Magic == 0xDEADBABE)
|
if (Magic == 0xDEADBABE)
|
||||||
{
|
{
|
||||||
Version = rCMDL.ReadLong();
|
Version = rCMDL.ReadLong();
|
||||||
uint32 Flags = rCMDL.ReadLong();
|
const uint32 Flags = rCMDL.ReadLong();
|
||||||
AABox = CAABox(rCMDL);
|
AABox = CAABox(rCMDL);
|
||||||
BlockCount = rCMDL.ReadLong();
|
BlockCount = rCMDL.ReadLong();
|
||||||
MatSetCount = rCMDL.ReadLong();
|
MatSetCount = rCMDL.ReadLong();
|
||||||
|
|
||||||
if (Flags & 0x1)
|
if ((Flags & 0x1) != 0)
|
||||||
Loader.mFlags |= EModelLoaderFlag::Skinned;
|
Loader.mFlags |= EModelLoaderFlag::Skinned;
|
||||||
if (Flags & 0x2)
|
if ((Flags & 0x2) != 0)
|
||||||
Loader.mFlags |= EModelLoaderFlag::HalfPrecisionNormals;
|
Loader.mFlags |= EModelLoaderFlag::HalfPrecisionNormals;
|
||||||
if (Flags & 0x4)
|
if ((Flags & 0x4) != 0)
|
||||||
Loader.mFlags |= EModelLoaderFlag::LightmapUVs;
|
Loader.mFlags |= EModelLoaderFlag::LightmapUVs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -428,14 +428,14 @@ std::unique_ptr<CModel> CModelLoader::LoadCMDL(IInputStream& rCMDL, CResourceEnt
|
||||||
|
|
||||||
// todo: unknown flags
|
// todo: unknown flags
|
||||||
Loader.mFlags = EModelLoaderFlag::HalfPrecisionNormals | EModelLoaderFlag::LightmapUVs;
|
Loader.mFlags = EModelLoaderFlag::HalfPrecisionNormals | EModelLoaderFlag::LightmapUVs;
|
||||||
if (Flags & 0x10)
|
if ((Flags & 0x10) != 0)
|
||||||
Loader.mFlags |= EModelLoaderFlag::VisibilityGroups;
|
Loader.mFlags |= EModelLoaderFlag::VisibilityGroups;
|
||||||
if (Flags & 0x20)
|
if ((Flags & 0x20) != 0)
|
||||||
Loader.mFlags |= EModelLoaderFlag::HalfPrecisionPositions;
|
Loader.mFlags |= EModelLoaderFlag::HalfPrecisionPositions;
|
||||||
|
|
||||||
// Visibility group data
|
// Visibility group data
|
||||||
// Skipping for now - should read in eventually
|
// Skipping for now - should read in eventually
|
||||||
if (Flags & 0x10)
|
if ((Flags & 0x10) != 0)
|
||||||
{
|
{
|
||||||
rCMDL.Seek(0x4, SEEK_CUR);
|
rCMDL.Seek(0x4, SEEK_CUR);
|
||||||
const uint32 VisGroupCount = rCMDL.ReadLong();
|
const uint32 VisGroupCount = rCMDL.ReadLong();
|
||||||
|
@ -581,9 +581,8 @@ void CModelLoader::BuildWorldMeshes(std::vector<std::unique_ptr<CModel>>& rkIn,
|
||||||
// This function takes the gigantic models with all surfaces combined from MP2/3/DKCR and splits the surfaces to reform the original uncombined meshes.
|
// This function takes the gigantic models with all surfaces combined from MP2/3/DKCR and splits the surfaces to reform the original uncombined meshes.
|
||||||
std::map<uint32, CModel*> OutputMap;
|
std::map<uint32, CModel*> OutputMap;
|
||||||
|
|
||||||
for (size_t iMdl = 0; iMdl < rkIn.size(); iMdl++)
|
for (auto& pModel : rkIn)
|
||||||
{
|
{
|
||||||
auto& pModel = rkIn[iMdl];
|
|
||||||
pModel->mHasOwnSurfaces = false;
|
pModel->mHasOwnSurfaces = false;
|
||||||
pModel->mHasOwnMaterials = false;
|
pModel->mHasOwnMaterials = false;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue