mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-20 14:11:16 +00:00
Plug memory leaks of 1st level of Information Center
This commit is contained in:
parent
bd537c3f1b
commit
7a1d52e8e3
@ -203,6 +203,8 @@ LegoGameState::~LegoGameState()
|
|||||||
}
|
}
|
||||||
|
|
||||||
delete[] m_savePath;
|
delete[] m_savePath;
|
||||||
|
|
||||||
|
delete LegoOmni::GetInstance()->GetUserActor();
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10039780
|
// FUNCTION: LEGO1 0x10039780
|
||||||
|
|||||||
@ -157,6 +157,7 @@ void LegoPhonemePresenter::EndAction()
|
|||||||
TextureContainer()->EraseCached(phoneme->GetCachedTextureInfo());
|
TextureContainer()->EraseCached(phoneme->GetCachedTextureInfo());
|
||||||
TextureContainer()->EraseCached(phoneme->GetTextureInfo());
|
TextureContainer()->EraseCached(phoneme->GetTextureInfo());
|
||||||
cursor.Destroy();
|
cursor.Destroy();
|
||||||
|
phoneme = NULL;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
phoneme->SetCount(phoneme->GetCount() - 1);
|
phoneme->SetCount(phoneme->GetCount() - 1);
|
||||||
@ -166,6 +167,9 @@ void LegoPhonemePresenter::EndAction()
|
|||||||
if (!m_isPartOfAnimMM) {
|
if (!m_isPartOfAnimMM) {
|
||||||
CharacterManager()->ReleaseActor(m_roiName.GetData());
|
CharacterManager()->ReleaseActor(m_roiName.GetData());
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
delete phoneme;
|
||||||
|
phoneme = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -119,7 +119,7 @@ void LegoTextureContainer::EraseCached(LegoTextureInfo* p_textureInfo)
|
|||||||
if ((*it).first == p_textureInfo) {
|
if ((*it).first == p_textureInfo) {
|
||||||
(*it).second = FALSE;
|
(*it).second = FALSE;
|
||||||
|
|
||||||
if (p_textureInfo->m_texture->Release() == TRUE) {
|
if (p_textureInfo->m_texture->Release() == 1) {
|
||||||
delete p_textureInfo;
|
delete p_textureInfo;
|
||||||
m_cached.erase(it);
|
m_cached.erase(it);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,7 +43,13 @@ inline Result LightSetColor(IDirect3DRMFrame2* pLight, float r, float g, float b
|
|||||||
result = ResultVal(lights->GetElement(0, &light));
|
result = ResultVal(lights->GetElement(0, &light));
|
||||||
assert(Succeeded(result));
|
assert(Succeeded(result));
|
||||||
|
|
||||||
return ResultVal(light->SetColorRGB(r, g, b));
|
lights->Release();
|
||||||
|
|
||||||
|
result = ResultVal(light->SetColorRGB(r, g, b));
|
||||||
|
|
||||||
|
light->Release();
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100a37e0
|
// FUNCTION: LEGO1 0x100a37e0
|
||||||
|
|||||||
@ -25,16 +25,6 @@ HRESULT Direct3DRMMeshImpl::Clone(int flags, GUID iid, void** object)
|
|||||||
|
|
||||||
auto* clone = new Direct3DRMMeshImpl(*this);
|
auto* clone = new Direct3DRMMeshImpl(*this);
|
||||||
|
|
||||||
for (auto& group : clone->m_groups) {
|
|
||||||
// Reusing the same texture and material on the new mesh instead of cloning them might not be correct
|
|
||||||
if (group.texture) {
|
|
||||||
group.texture->AddRef();
|
|
||||||
}
|
|
||||||
if (group.material) {
|
|
||||||
group.material->AddRef();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*object = static_cast<IDirect3DRMMesh*>(clone);
|
*object = static_cast<IDirect3DRMMesh*>(clone);
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
@ -154,12 +144,13 @@ HRESULT Direct3DRMMeshImpl::SetGroupMaterial(D3DRMGROUPINDEX groupIndex, IDirect
|
|||||||
return DDERR_INVALIDPARAMS;
|
return DDERR_INVALIDPARAMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
material->AddRef();
|
||||||
|
|
||||||
auto& group = m_groups[groupIndex];
|
auto& group = m_groups[groupIndex];
|
||||||
if (group.material) {
|
if (group.material) {
|
||||||
group.material->Release();
|
group.material->Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
material->AddRef();
|
|
||||||
m_groups[groupIndex].material = material;
|
m_groups[groupIndex].material = material;
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
@ -170,15 +161,13 @@ HRESULT Direct3DRMMeshImpl::SetGroupTexture(D3DRMGROUPINDEX groupIndex, IDirect3
|
|||||||
return DDERR_INVALIDPARAMS;
|
return DDERR_INVALIDPARAMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
texture->AddRef();
|
||||||
|
|
||||||
auto& group = m_groups[groupIndex];
|
auto& group = m_groups[groupIndex];
|
||||||
if (group.texture) {
|
if (group.texture) {
|
||||||
group.texture->Release();
|
group.texture->Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
texture->AddRef();
|
|
||||||
if (group.texture) {
|
|
||||||
group.texture->Release();
|
|
||||||
}
|
|
||||||
group.texture = texture;
|
group.texture = texture;
|
||||||
group.version++;
|
group.version++;
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
|
|||||||
@ -232,13 +232,14 @@ HRESULT DirectDrawSurfaceImpl::SetPalette(LPDIRECTDRAWPALETTE lpDDPalette)
|
|||||||
m_texture->Changed(FALSE, TRUE);
|
m_texture->Changed(FALSE, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lpDDPalette->AddRef();
|
||||||
|
|
||||||
if (m_palette) {
|
if (m_palette) {
|
||||||
m_palette->Release();
|
m_palette->Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_palette = lpDDPalette;
|
m_palette = lpDDPalette;
|
||||||
SDL_SetSurfacePalette(m_surface, ((DirectDrawPaletteImpl*) m_palette)->m_palette);
|
SDL_SetSurfacePalette(m_surface, ((DirectDrawPaletteImpl*) m_palette)->m_palette);
|
||||||
m_palette->AddRef();
|
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -214,13 +214,14 @@ HRESULT FrameBufferImpl::SetPalette(LPDIRECTDRAWPALETTE lpDDPalette)
|
|||||||
MINIWIN_NOT_IMPLEMENTED();
|
MINIWIN_NOT_IMPLEMENTED();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lpDDPalette->AddRef();
|
||||||
|
|
||||||
if (m_palette) {
|
if (m_palette) {
|
||||||
m_palette->Release();
|
m_palette->Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_palette = lpDDPalette;
|
m_palette = lpDDPalette;
|
||||||
SDL_SetSurfacePalette(m_transferBuffer->m_surface, ((DirectDrawPaletteImpl*) m_palette)->m_palette);
|
SDL_SetSurfacePalette(m_transferBuffer->m_surface, ((DirectDrawPaletteImpl*) m_palette)->m_palette);
|
||||||
m_palette->AddRef();
|
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -21,8 +21,8 @@ struct Direct3DRMObjectBaseImpl : public T {
|
|||||||
it->first(this, it->second);
|
it->first(this, it->second);
|
||||||
}
|
}
|
||||||
m_callbacks.clear();
|
m_callbacks.clear();
|
||||||
|
SDL_free(m_name);
|
||||||
}
|
}
|
||||||
SDL_free(m_name);
|
|
||||||
return this->T::Release();
|
return this->T::Release();
|
||||||
}
|
}
|
||||||
HRESULT AddDestroyCallback(D3DRMOBJECTCALLBACK callback, void* arg) override
|
HRESULT AddDestroyCallback(D3DRMOBJECTCALLBACK callback, void* arg) override
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user