mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-11 18:51:16 +00:00
Cleanup
This commit is contained in:
parent
bfd7e3d9f0
commit
71be68d144
@ -14,7 +14,7 @@ DECOMP_SIZE_ASSERT(LegoLOD::Mesh, 0x08)
|
|||||||
|
|
||||||
// GLOBAL: LEGO1 0x101013d4
|
// GLOBAL: LEGO1 0x101013d4
|
||||||
// GLOBAL: BETA10 0x10207230
|
// GLOBAL: BETA10 0x10207230
|
||||||
LPDIRECT3DRMMATERIAL g_unk0x101013d4 = NULL;
|
LPDIRECT3DRMMATERIAL g_lodMaterial = NULL;
|
||||||
|
|
||||||
// GLOBAL: LEGO1 0x101013dc
|
// GLOBAL: LEGO1 0x101013dc
|
||||||
// GLOBAL: BETA10 0x10207238
|
// GLOBAL: BETA10 0x10207238
|
||||||
@ -31,16 +31,16 @@ inline BOOL GetMeshData(IDirect3DRMMesh** mesh, D3DRMGROUPINDEX* index, Tgl::Mes
|
|||||||
// FUNCTION: BETA10 0x1018ce90
|
// FUNCTION: BETA10 0x1018ce90
|
||||||
LegoLOD::LegoLOD(Tgl::Renderer* p_renderer) : ViewLOD(p_renderer)
|
LegoLOD::LegoLOD(Tgl::Renderer* p_renderer) : ViewLOD(p_renderer)
|
||||||
{
|
{
|
||||||
if (g_unk0x101013d4 == NULL) {
|
if (g_lodMaterial == NULL) {
|
||||||
#ifdef BETA10
|
#ifdef BETA10
|
||||||
IDirect3DRM2* d3drm = NULL;
|
IDirect3DRM2* d3drm = NULL;
|
||||||
assert((p_renderer != NULL));
|
assert((p_renderer != NULL));
|
||||||
GetD3DRM_legolod(d3drm, p_renderer);
|
GetD3DRM_legolod(d3drm, p_renderer);
|
||||||
if (d3drm->CreateMaterial(10.0, &g_unk0x101013d4)) {
|
if (d3drm->CreateMaterial(10.0, &g_lodMaterial)) {
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
GetD3DRM_legolod(p_renderer)->CreateMaterial(10.0, &g_unk0x101013d4);
|
GetD3DRM_legolod(p_renderer)->CreateMaterial(10.0, &g_lodMaterial);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,16 +69,8 @@ LegoLOD::~LegoLOD()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Consider moving somewhere else and refactor other code;
|
|
||||||
// alternative: AssertIfBeta10(0), more versatile
|
|
||||||
#ifdef BETA10
|
#ifdef BETA10
|
||||||
#define Assert0IfBeta10() assert(0)
|
/// This class does not exist in LEGO1.
|
||||||
#else
|
|
||||||
#define Assert0IfBeta10()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef BETA10
|
|
||||||
/// This class does not appear to exist in LEGO1.
|
|
||||||
class UnknownBeta0x1018e7e0 {
|
class UnknownBeta0x1018e7e0 {
|
||||||
public:
|
public:
|
||||||
// FUNCTION: BETA10 0x1018e7e0
|
// FUNCTION: BETA10 0x1018e7e0
|
||||||
@ -119,7 +111,7 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
LegoS32 numVerts = 0;
|
LegoS32 numVerts = 0;
|
||||||
LegoS32 numNormals = 0;
|
LegoS32 numNormals = 0;
|
||||||
LegoS32 numTextureVertices = 0;
|
LegoS32 numTextureVertices = 0;
|
||||||
LegoMesh* mesh = NULL;
|
LegoMesh* legoMesh = NULL;
|
||||||
LegoU32(*polyIndices)[3] = NULL;
|
LegoU32(*polyIndices)[3] = NULL;
|
||||||
LegoU32(*textureIndices)[3] = NULL;
|
LegoU32(*textureIndices)[3] = NULL;
|
||||||
LegoTextureInfo* textureInfo = NULL;
|
LegoTextureInfo* textureInfo = NULL;
|
||||||
@ -127,7 +119,7 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
LegoU32 numPolys, numVertices, numTextureIndices, meshIndex;
|
LegoU32 numPolys, numVertices, numTextureIndices, meshIndex;
|
||||||
LegoU32 i, indexBackwards, indexForwards, tempNumVertsAndNormals;
|
LegoU32 i, indexBackwards, indexForwards, tempNumVertsAndNormals;
|
||||||
LegoFloat red, green, blue, alpha;
|
LegoFloat red, green, blue, alpha;
|
||||||
IDirect3DRMMesh* mesh2;
|
IDirect3DRMMesh* d3dmesh;
|
||||||
D3DRMGROUPINDEX index;
|
D3DRMGROUPINDEX index;
|
||||||
|
|
||||||
unsigned char paletteEntries[256];
|
unsigned char paletteEntries[256];
|
||||||
@ -172,7 +164,7 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
indexForwards = 0;
|
indexForwards = 0;
|
||||||
|
|
||||||
if (p_storage->Read(&tempNumVertsAndNormals, sizeof(LegoU32)) != SUCCESS) {
|
if (p_storage->Read(&tempNumVertsAndNormals, sizeof(LegoU32)) != SUCCESS) {
|
||||||
Assert0IfBeta10();
|
assertIfBeta10(0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,7 +173,7 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
numNormals = (*((LegoU16*) &tempNumVertsAndNormals + 1) >> 1) & MAXSHORT;
|
numNormals = (*((LegoU16*) &tempNumVertsAndNormals + 1) >> 1) & MAXSHORT;
|
||||||
|
|
||||||
if (p_storage->Read(&numTextureVertices, sizeof(LegoS32)) != SUCCESS) {
|
if (p_storage->Read(&numTextureVertices, sizeof(LegoS32)) != SUCCESS) {
|
||||||
Assert0IfBeta10();
|
assertIfBeta10(0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +181,7 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
vertices = new float[numVerts][sizeOfArray(*vertices)];
|
vertices = new float[numVerts][sizeOfArray(*vertices)];
|
||||||
if (p_storage->Read(vertices, numVerts * 3 * sizeof(float)) != SUCCESS) {
|
if (p_storage->Read(vertices, numVerts * 3 * sizeof(float)) != SUCCESS) {
|
||||||
// LINE: BETA10 0x1018d443
|
// LINE: BETA10 0x1018d443
|
||||||
Assert0IfBeta10();
|
assertIfBeta10(0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -197,8 +189,7 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
if (numNormals > 0) {
|
if (numNormals > 0) {
|
||||||
normals = new float[numNormals][sizeOfArray(*normals)];
|
normals = new float[numNormals][sizeOfArray(*normals)];
|
||||||
if (p_storage->Read(normals, numNormals * 3 * sizeof(float)) != SUCCESS) {
|
if (p_storage->Read(normals, numNormals * 3 * sizeof(float)) != SUCCESS) {
|
||||||
// LINE: BETA10
|
assertIfBeta10(0);
|
||||||
Assert0IfBeta10();
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -207,7 +198,7 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
textureVertices = new float[numTextureVertices][sizeOfArray(*textureVertices)];
|
textureVertices = new float[numTextureVertices][sizeOfArray(*textureVertices)];
|
||||||
if (p_storage->Read(textureVertices, numTextureVertices * 2 * sizeof(float)) != SUCCESS) {
|
if (p_storage->Read(textureVertices, numTextureVertices * 2 * sizeof(float)) != SUCCESS) {
|
||||||
// LINE: BETA10 0x1018d513
|
// LINE: BETA10 0x1018d513
|
||||||
Assert0IfBeta10();
|
assertIfBeta10(0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -218,37 +209,32 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
Tgl::ShadingModel shadingModel;
|
Tgl::ShadingModel shadingModel;
|
||||||
|
|
||||||
if (p_storage->Read(&numPolys, 2) != SUCCESS) {
|
if (p_storage->Read(&numPolys, 2) != SUCCESS) {
|
||||||
// LINE: BETA10
|
assertIfBeta10(0);
|
||||||
Assert0IfBeta10();
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_numPolys += numPolys & USHRT_MAX;
|
m_numPolys += numPolys & USHRT_MAX;
|
||||||
|
|
||||||
if (p_storage->Read(&numVertices, 2) != SUCCESS) {
|
if (p_storage->Read(&numVertices, 2) != SUCCESS) {
|
||||||
// LINE: BETA10
|
assertIfBeta10(0);
|
||||||
Assert0IfBeta10();
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
polyIndices = new LegoU32[numPolys & USHRT_MAX][sizeOfArray(*polyIndices)];
|
polyIndices = new LegoU32[numPolys & USHRT_MAX][sizeOfArray(*polyIndices)];
|
||||||
if (p_storage->Read(polyIndices, (numPolys & USHRT_MAX) * 3 * sizeof(LegoU32)) != SUCCESS) {
|
if (p_storage->Read(polyIndices, (numPolys & USHRT_MAX) * 3 * sizeof(LegoU32)) != SUCCESS) {
|
||||||
// LINE: BETA10
|
assertIfBeta10(0);
|
||||||
Assert0IfBeta10();
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_storage->Read(&numTextureIndices, sizeof(numTextureIndices)) != SUCCESS) {
|
if (p_storage->Read(&numTextureIndices, sizeof(numTextureIndices)) != SUCCESS) {
|
||||||
// LINE: BETA10
|
assertIfBeta10(0);
|
||||||
Assert0IfBeta10();
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (numTextureIndices > 0) {
|
if (numTextureIndices > 0) {
|
||||||
textureIndices = new LegoU32[numPolys & USHRT_MAX][sizeOfArray(*textureIndices)];
|
textureIndices = new LegoU32[numPolys & USHRT_MAX][sizeOfArray(*textureIndices)];
|
||||||
if (p_storage->Read(textureIndices, (numPolys & USHRT_MAX) * 3 * sizeof(LegoU32)) != SUCCESS) {
|
if (p_storage->Read(textureIndices, (numPolys & USHRT_MAX) * 3 * sizeof(LegoU32)) != SUCCESS) {
|
||||||
// LINE: BETA10
|
assertIfBeta10(0);
|
||||||
Assert0IfBeta10();
|
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -256,14 +242,14 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
textureIndices = NULL;
|
textureIndices = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
mesh = new LegoMesh();
|
legoMesh = new LegoMesh();
|
||||||
|
|
||||||
if (mesh->Read(p_storage) != SUCCESS) {
|
if (legoMesh->Read(p_storage) != SUCCESS) {
|
||||||
Assert0IfBeta10();
|
assertIfBeta10(0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (mesh->GetShading()) {
|
switch (legoMesh->GetShading()) {
|
||||||
case LegoMesh::e_flat:
|
case LegoMesh::e_flat:
|
||||||
shadingModel = Tgl::Flat;
|
shadingModel = Tgl::Flat;
|
||||||
break;
|
break;
|
||||||
@ -276,8 +262,8 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
|
|
||||||
m_numVertices += numVertices & USHRT_MAX;
|
m_numVertices += numVertices & USHRT_MAX;
|
||||||
|
|
||||||
textureName = mesh->GetTextureName();
|
textureName = legoMesh->GetTextureName();
|
||||||
materialName = mesh->GetMaterialName();
|
materialName = legoMesh->GetMaterialName();
|
||||||
|
|
||||||
if (HasInhPrefix(textureName) || HasInhPrefix(materialName)) {
|
if (HasInhPrefix(textureName) || HasInhPrefix(materialName)) {
|
||||||
meshIndex = indexBackwards;
|
meshIndex = indexBackwards;
|
||||||
@ -305,7 +291,7 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (m_melems[meshIndex].m_tglMesh == NULL) {
|
if (m_melems[meshIndex].m_tglMesh == NULL) {
|
||||||
Assert0IfBeta10();
|
assertIfBeta10(0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -316,17 +302,17 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
if (textureName != NULL) {
|
if (textureName != NULL) {
|
||||||
if (mesh->GetUseAlias() &&
|
if (legoMesh->GetUseAlias() &&
|
||||||
LegoROI::GetPaletteEntries(textureName, paletteEntries, sizeOfArray(paletteEntries))) {
|
LegoROI::GetPaletteEntries(textureName, paletteEntries, sizeOfArray(paletteEntries))) {
|
||||||
#ifdef BETA10
|
#ifdef BETA10
|
||||||
textureName = (const LegoChar*) paletteEntries;
|
textureName = (const LegoChar*) paletteEntries;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
textureInfo = p_textureContainer->Get(mesh->GetTextureName());
|
textureInfo = p_textureContainer->Get(legoMesh->GetTextureName());
|
||||||
|
|
||||||
if (textureInfo == NULL) {
|
if (textureInfo == NULL) {
|
||||||
Assert0IfBeta10();
|
assertIfBeta10(0);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -335,13 +321,15 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
assert(Succeeded( tglResult ));
|
assert(Succeeded( tglResult ));
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
// TODO: Fix BETA10 call
|
#ifdef BETA10
|
||||||
|
// This typecast is invalid, `textureInfo` had a different type in BETA10
|
||||||
LegoTextureInfo::SetGroupTexture(m_melems[meshIndex].m_tglMesh, textureInfo);
|
tglResult = m_melems[meshIndex].m_tglMesh->SetTexture((TglImpl::TextureImpl*) textureInfo);
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
assert(Succeeded( tglResult ));
|
assert(Succeeded( tglResult ));
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
#else
|
||||||
|
LegoTextureInfo::SetGroupTexture(m_melems[meshIndex].m_tglMesh, textureInfo);
|
||||||
|
#endif
|
||||||
|
|
||||||
m_melems[meshIndex].m_textured = TRUE;
|
m_melems[meshIndex].m_textured = TRUE;
|
||||||
}
|
}
|
||||||
@ -352,14 +340,14 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
blue = 1.0F;
|
blue = 1.0F;
|
||||||
alpha = 0.0F;
|
alpha = 0.0F;
|
||||||
|
|
||||||
if (mesh->GetUseAlias()) {
|
if (legoMesh->GetUseAlias()) {
|
||||||
LegoROI::GetRGBAColor(materialName, red, green, blue, alpha);
|
LegoROI::GetRGBAColor(materialName, red, green, blue, alpha);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
red = mesh->GetColor().GetRed() / 255.0;
|
red = legoMesh->GetColor().GetRed() / 255.0;
|
||||||
green = mesh->GetColor().GetGreen() / 255.0;
|
green = legoMesh->GetColor().GetGreen() / 255.0;
|
||||||
blue = mesh->GetColor().GetBlue() / 255.0;
|
blue = legoMesh->GetColor().GetBlue() / 255.0;
|
||||||
alpha = mesh->GetAlpha();
|
alpha = legoMesh->GetAlpha();
|
||||||
}
|
}
|
||||||
|
|
||||||
tglResult = m_melems[meshIndex].m_tglMesh->SetColor(red, green, blue, alpha);
|
tglResult = m_melems[meshIndex].m_tglMesh->SetColor(red, green, blue, alpha);
|
||||||
@ -369,14 +357,14 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
// clang-format on
|
// clang-format on
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mesh->GetUnknown0x0d() > 0) {
|
if (legoMesh->GetUnknown0x0d() > 0) {
|
||||||
GetMeshData(&mesh2, &index, m_melems[meshIndex].m_tglMesh);
|
GetMeshData(&d3dmesh, &index, m_melems[meshIndex].m_tglMesh);
|
||||||
mesh2->SetGroupMaterial(index, g_unk0x101013d4);
|
d3dmesh->SetGroupMaterial(index, g_lodMaterial);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mesh != NULL) {
|
if (legoMesh != NULL) {
|
||||||
delete mesh;
|
delete legoMesh;
|
||||||
mesh = NULL;
|
legoMesh = NULL;
|
||||||
}
|
}
|
||||||
if (polyIndices != NULL) {
|
if (polyIndices != NULL) {
|
||||||
delete[] polyIndices;
|
delete[] polyIndices;
|
||||||
@ -413,8 +401,8 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text
|
|||||||
if (textureVertices != NULL) {
|
if (textureVertices != NULL) {
|
||||||
delete[] textureVertices;
|
delete[] textureVertices;
|
||||||
}
|
}
|
||||||
if (mesh != NULL) {
|
if (legoMesh != NULL) {
|
||||||
delete mesh;
|
delete legoMesh;
|
||||||
}
|
}
|
||||||
if (polyIndices != NULL) {
|
if (polyIndices != NULL) {
|
||||||
delete[] polyIndices;
|
delete[] polyIndices;
|
||||||
|
|||||||
@ -23,6 +23,12 @@
|
|||||||
#define sizeOfArray(arr) (sizeof(arr) / sizeof(arr[0]))
|
#define sizeOfArray(arr) (sizeof(arr) / sizeof(arr[0]))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef BETA10
|
||||||
|
#define assertIfBeta10(A) assert(A)
|
||||||
|
#else
|
||||||
|
#define assertIfBeta10(A)
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef unsigned char undefined;
|
typedef unsigned char undefined;
|
||||||
typedef unsigned short undefined2;
|
typedef unsigned short undefined2;
|
||||||
typedef unsigned int undefined4;
|
typedef unsigned int undefined4;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user