mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-26 09:54:18 +00:00
Beta addrs for ViewLODList (#898)
* Beta addrs for ViewLODList * unsigned char
This commit is contained in:
@@ -11,14 +11,31 @@ DECOMP_SIZE_ASSERT(LODList<ViewLOD>, 0x10)
|
||||
DECOMP_SIZE_ASSERT(ViewLODList, 0x18)
|
||||
|
||||
// GLOBAL: LEGO1 0x10101064
|
||||
int g_unk0x10101064 = 0;
|
||||
// GLOBAL: BETA10 0x10205d08
|
||||
int ViewLODListManager::g_ROINameUID = 0;
|
||||
|
||||
#ifdef _DEBUG
|
||||
// FUNCTION: BETA10 0x10178310
|
||||
inline void ViewLODList::Dump(void (*pTracer)(const char*, ...)) const
|
||||
{
|
||||
pTracer(" ViewLODList<0x%x>: Capacity=%d, Size=%d, RefCount=%d\n", this, Capacity(), Size(), m_refCount);
|
||||
|
||||
for (int i = 0; i < (int) Size(); i++) {
|
||||
ViewLOD* lod = const_cast<ViewLOD*>(this->operator[](i));
|
||||
pTracer(" [%d]: ViewLOD<0x%x>: Vertices=%d\n", i, lod, lod->NVerts());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// FUNCTION: LEGO1 0x100a6fd0
|
||||
// FUNCTION: BETA10 0x101783a3
|
||||
ViewLODListManager::ViewLODListManager()
|
||||
{
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100a7130
|
||||
// FUNCTION: BETA10 0x1017841c
|
||||
// FUNCTION: ALPHA 0x100e3402
|
||||
ViewLODListManager::~ViewLODListManager()
|
||||
{
|
||||
ViewLODListMap::iterator iterator;
|
||||
@@ -28,9 +45,6 @@ ViewLODListManager::~ViewLODListManager()
|
||||
const ROIName& rROIName = (*iterator).first;
|
||||
ViewLODList* pLODList = (*iterator).second;
|
||||
|
||||
// LODList's refCount should be 0
|
||||
assert(pLODList->m_refCount == 0);
|
||||
|
||||
// ???who pops and deletes LODObjects
|
||||
while (pLODList->Size() > 0) {
|
||||
delete const_cast<ViewLOD*>(pLODList->PopBack());
|
||||
@@ -48,6 +62,8 @@ ViewLODListManager::~ViewLODListManager()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100a72c0
|
||||
// FUNCTION: BETA10 0x101785ef
|
||||
// FUNCTION: ALPHA 0x100e35d2
|
||||
ViewLODList* ViewLODListManager::Create(const ROIName& rROIName, int lodCount)
|
||||
{
|
||||
// returned ViewLODList has a refCount of 1, i.e. caller must call Release()
|
||||
@@ -57,7 +73,7 @@ ViewLODList* ViewLODListManager::Create(const ROIName& rROIName, int lodCount)
|
||||
int refCount;
|
||||
char* pROIName;
|
||||
|
||||
assert(!Lookup(rROIName));
|
||||
// assert(!Lookup(rROIName)); // alpha only
|
||||
|
||||
pLODList = new ViewLODList(lodCount, this);
|
||||
refCount = pLODList->AddRef();
|
||||
@@ -68,11 +84,11 @@ ViewLODList* ViewLODListManager::Create(const ROIName& rROIName, int lodCount)
|
||||
list->Release();
|
||||
|
||||
char num[12];
|
||||
sprintf(num, "%d", g_unk0x10101064);
|
||||
sprintf(num, "%d", g_ROINameUID);
|
||||
pROIName = new char[strlen(rROIName) + strlen(num) + 1];
|
||||
strcpy(pROIName, rROIName);
|
||||
strcat(pROIName, num);
|
||||
g_unk0x10101064++;
|
||||
g_ROINameUID++;
|
||||
}
|
||||
else {
|
||||
pROIName = new char[strlen(rROIName) + 1];
|
||||
@@ -82,12 +98,13 @@ ViewLODList* ViewLODListManager::Create(const ROIName& rROIName, int lodCount)
|
||||
m_map[pROIName] = pLODList;
|
||||
|
||||
// NOTE: Lookup() adds a refCount
|
||||
assert((Lookup(rROIName) == pLODList) && (pLODList->Release() == 1));
|
||||
assert((Lookup(pROIName) == pLODList) && (pLODList->Release() == 1));
|
||||
|
||||
return pLODList;
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x100a75b0
|
||||
// FUNCTION: BETA10 0x101787d8
|
||||
ViewLODList* ViewLODListManager::Lookup(const ROIName& p_roiName) const
|
||||
{
|
||||
// returned ViewLODList's refCount is increased, i.e. caller must call Release()
|
||||
@@ -106,7 +123,30 @@ ViewLODList* ViewLODListManager::Lookup(const ROIName& p_roiName) const
|
||||
return pLODList;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x100a7680
|
||||
void ViewLODListManager::Destroy(ViewLODList* lodList)
|
||||
// FUNCTION: LEGO1 0x100a7680
|
||||
// FUNCTION: BETA10 0x1017886b
|
||||
unsigned char ViewLODListManager::Destroy(ViewLODList* lodList)
|
||||
{
|
||||
ViewLODListMap::iterator iterator;
|
||||
char deleted = FALSE;
|
||||
|
||||
for (iterator = m_map.begin(); !(iterator == m_map.end()); ++iterator) {
|
||||
const ROIName& rROIName = (*iterator).first;
|
||||
ViewLODList* pLODList = (*iterator).second;
|
||||
|
||||
if (lodList == pLODList) {
|
||||
while (pLODList->Size() > 0) {
|
||||
delete const_cast<ViewLOD*>(pLODList->PopBack());
|
||||
}
|
||||
|
||||
delete pLODList;
|
||||
delete[] const_cast<char*>(rROIName);
|
||||
m_map.erase(iterator);
|
||||
|
||||
deleted = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return deleted;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user