From fef91382e69159b52c3660e81e263c4a8de34882 Mon Sep 17 00:00:00 2001 From: Mark Langen Date: Thu, 30 Nov 2023 23:35:27 -0800 Subject: [PATCH] Check all inline destructors --- LEGO1/tgl/d3drm/camera.cpp | 10 ++----- LEGO1/tgl/d3drm/device.cpp | 10 ++----- LEGO1/tgl/d3drm/group.cpp | 10 ++----- LEGO1/tgl/d3drm/impl.h | 56 +++++++++++++++++++++++++++++++----- LEGO1/tgl/d3drm/light.cpp | 10 ++----- LEGO1/tgl/d3drm/renderer.cpp | 14 +++++++-- LEGO1/tgl/d3drm/texture.cpp | 10 ++----- LEGO1/tgl/d3drm/unk.cpp | 10 ++----- LEGO1/tgl/d3drm/view.cpp | 10 ++----- 9 files changed, 75 insertions(+), 65 deletions(-) diff --git a/LEGO1/tgl/d3drm/camera.cpp b/LEGO1/tgl/d3drm/camera.cpp index fb3966cc..f843cbec 100644 --- a/LEGO1/tgl/d3drm/camera.cpp +++ b/LEGO1/tgl/d3drm/camera.cpp @@ -5,14 +5,8 @@ using namespace TglImpl; DECOMP_SIZE_ASSERT(Camera, 0x4); DECOMP_SIZE_ASSERT(CameraImpl, 0x8); -// Inlined only -CameraImpl::~CameraImpl() -{ - if (m_data) { - m_data->Release(); - m_data = NULL; - } -} +// OFFSET: LEGO1 0x100a2560 TEMPLATE +// TglImpl::LightImpl::`scalar deleting destructor' // OFFSET: LEGO1 0x100a36f0 void* CameraImpl::ImplementationDataPtr() diff --git a/LEGO1/tgl/d3drm/device.cpp b/LEGO1/tgl/d3drm/device.cpp index dc7748b7..3350670c 100644 --- a/LEGO1/tgl/d3drm/device.cpp +++ b/LEGO1/tgl/d3drm/device.cpp @@ -4,14 +4,8 @@ using namespace TglImpl; -// Inlined only -DeviceImpl::~DeviceImpl() -{ - if (m_data) { - m_data->Release(); - m_data = NULL; - } -} +// OFFSET: LEGO1 0x100a22c0 TEMPLATE +// TglImpl::LightImpl::`scalar deleting destructor' // OFFSET: LEGO1 0x100a2bf0 void* DeviceImpl::ImplementationDataPtr() diff --git a/LEGO1/tgl/d3drm/group.cpp b/LEGO1/tgl/d3drm/group.cpp index 3ab1d8f0..bdbf160b 100644 --- a/LEGO1/tgl/d3drm/group.cpp +++ b/LEGO1/tgl/d3drm/group.cpp @@ -2,14 +2,8 @@ using namespace TglImpl; -// Inlined only -GroupImpl::~GroupImpl() -{ - if (m_data) { - m_data->Release(); - m_data = NULL; - } -} +// OFFSET: LEGO1 0x100a2480 TEMPLATE +// TglImpl::GroupImpl::`scalar deleting destructor' // OFFSET: LEGO1 0x100a31d0 void* GroupImpl::ImplementationDataPtr() diff --git a/LEGO1/tgl/d3drm/impl.h b/LEGO1/tgl/d3drm/impl.h index 31af6bec..bbc7baa0 100644 --- a/LEGO1/tgl/d3drm/impl.h +++ b/LEGO1/tgl/d3drm/impl.h @@ -89,7 +89,13 @@ class RendererImpl : public Renderer { class DeviceImpl : public Device { public: DeviceImpl() : m_data(0) {} - ~DeviceImpl(); + ~DeviceImpl() + { + if (m_data) { + m_data->Release(); + m_data = NULL; + } + } virtual void* ImplementationDataPtr(); @@ -120,7 +126,13 @@ class DeviceImpl : public Device { class ViewImpl : public View { public: ViewImpl() : m_data(0) {} - ~ViewImpl(); + ~ViewImpl() + { + if (m_data) { + m_data->Release(); + m_data = NULL; + } + } virtual void* ImplementationDataPtr(); @@ -166,7 +178,13 @@ class ViewImpl : public View { class CameraImpl : public Camera { public: CameraImpl() : m_data(0) {} - ~CameraImpl(); + ~CameraImpl() + { + if (m_data) { + m_data->Release(); + m_data = NULL; + } + } virtual void* ImplementationDataPtr(); @@ -185,7 +203,13 @@ class CameraImpl : public Camera { class LightImpl : public Light { public: LightImpl() : m_data(0) {} - ~LightImpl(); + ~LightImpl() + { + if (m_data) { + m_data->Release(); + m_data = NULL; + } + } virtual void* ImplementationDataPtr(); @@ -245,7 +269,13 @@ class MeshImpl : public Mesh { class GroupImpl : public Group { public: GroupImpl() : m_data(0) {} - ~GroupImpl(); + ~GroupImpl() + { + if (m_data) { + m_data->Release(); + m_data = NULL; + } + } virtual void* ImplementationDataPtr(); @@ -278,7 +308,13 @@ class GroupImpl : public Group { class UnkImpl : public Unk { public: UnkImpl() : m_data(0) {} - ~UnkImpl(); + ~UnkImpl() + { + if (m_data) { + m_data->Release(); + m_data = NULL; + } + } virtual void* ImplementationDataPtr(); @@ -332,7 +368,13 @@ class TglD3DRMIMAGE { class TextureImpl : public Texture { public: TextureImpl() : m_data(0) {} - ~TextureImpl(); + ~TextureImpl() + { + if (m_data) { + m_data->Release(); + m_data = NULL; + } + } virtual void* ImplementationDataPtr(); diff --git a/LEGO1/tgl/d3drm/light.cpp b/LEGO1/tgl/d3drm/light.cpp index 2364179c..3fc137f6 100644 --- a/LEGO1/tgl/d3drm/light.cpp +++ b/LEGO1/tgl/d3drm/light.cpp @@ -5,14 +5,8 @@ using namespace TglImpl; DECOMP_SIZE_ASSERT(Light, 0x4); DECOMP_SIZE_ASSERT(LightImpl, 0x8); -// Inlined only -LightImpl::~LightImpl() -{ - if (m_data) { - m_data->Release(); - m_data = NULL; - } -} +// OFFSET: LEGO1 0x100a2640 TEMPLATE +// TglImpl::LightImpl::`scalar deleting destructor' // OFFSET: LEGO1 0x100a3770 void* LightImpl::ImplementationDataPtr() diff --git a/LEGO1/tgl/d3drm/renderer.cpp b/LEGO1/tgl/d3drm/renderer.cpp index 02f51c76..25d4353c 100644 --- a/LEGO1/tgl/d3drm/renderer.cpp +++ b/LEGO1/tgl/d3drm/renderer.cpp @@ -13,6 +13,9 @@ Renderer* Tgl::CreateRenderer() return renderer; } +// OFFSET: LEGO1 0x100a16d0 TEMPLATE +// TglImpl::RendererImpl::`scalar deleting destructor' + // GLOBAL OFFSET: LEGO1 0x1010103c IDirect3DRM* g_pD3DRM = NULL; @@ -31,12 +34,19 @@ Result RendererImpl::Create() return (m_data != NULL) ? Success : Error; } +inline void RendererDestroy(IDirect3DRM* pRenderer) +{ + int refCount = pRenderer->Release(); + if (refCount <= 0) { + g_pD3DRM = NULL; + } +} + // Inlined only void RendererImpl::Destroy() { if (m_data) { - if (m_data->Release() == 0) - g_pD3DRM = NULL; + RendererDestroy(m_data); m_data = NULL; } } diff --git a/LEGO1/tgl/d3drm/texture.cpp b/LEGO1/tgl/d3drm/texture.cpp index d8c69738..f42981b5 100644 --- a/LEGO1/tgl/d3drm/texture.cpp +++ b/LEGO1/tgl/d3drm/texture.cpp @@ -126,14 +126,8 @@ Result TglD3DRMIMAGE::InitializePalette(int paletteSize, PaletteEntry* pEntries) return Success; } -// Inlined only -TextureImpl::~TextureImpl() -{ - if (m_data) { - m_data->Release(); - m_data = NULL; - } -} +// OFFSET: LEGO1 0x100a2800 TEMPLATE +// TglImpl::TextureImpl::`scalar deleting destructor' // OFFSET: LEGO1 0x100a3c10 Result TextureImpl::SetTexels(int width, int height, int bitsPerTexel, void* pTexels) diff --git a/LEGO1/tgl/d3drm/unk.cpp b/LEGO1/tgl/d3drm/unk.cpp index 53eb72ca..7500157b 100644 --- a/LEGO1/tgl/d3drm/unk.cpp +++ b/LEGO1/tgl/d3drm/unk.cpp @@ -5,14 +5,8 @@ using namespace TglImpl; DECOMP_SIZE_ASSERT(Unk, 0x4); DECOMP_SIZE_ASSERT(UnkImpl, 0x8); -// Inlined only -UnkImpl::~UnkImpl() -{ - if (m_data) { - m_data->Release(); - m_data = NULL; - } -} +// OFFSET: LEGO1 0x100a2720 TEMPLATE +// TglImpl::LightImpl::`scalar deleting destructor' // OFFSET: LEGO1 0x100a3830 void* UnkImpl::ImplementationDataPtr() diff --git a/LEGO1/tgl/d3drm/view.cpp b/LEGO1/tgl/d3drm/view.cpp index c51a692a..bf9f5dc5 100644 --- a/LEGO1/tgl/d3drm/view.cpp +++ b/LEGO1/tgl/d3drm/view.cpp @@ -119,14 +119,8 @@ inline IDirect3DRMFrame* ViewportGetLightFrame(IDirect3DRMViewport* pViewport) return ViewportGetData(pViewport)->m_pLightFrame; } -// Inlined only -ViewImpl::~ViewImpl() -{ - if (m_data) { - m_data->Release(); - m_data = NULL; - } -} +// OFFSET: LEGO1 0x100a23a0 TEMPLATE +// TglImpl::LightImpl::`scalar deleting destructor' // OFFSET: LEGO1 0x100a2d80 void* ViewImpl::ImplementationDataPtr()