CModelLoader: Eliminate some sign conversion warnings

This commit is contained in:
Lioncash 2020-06-18 15:31:39 -04:00
parent 80d5983229
commit 87fac0896d
1 changed files with 29 additions and 30 deletions

View File

@ -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;