Add Destroy methods to TglImpl

This commit is contained in:
disinvite 2025-04-14 21:59:05 -04:00
parent 0bc31450a4
commit 602c9f558d

View File

@ -133,13 +133,7 @@ class DeviceImpl : public Device {
DeviceImpl() : m_data(0) {} DeviceImpl() : m_data(0) {}
// FUNCTION: BETA10 0x1016dd80 // FUNCTION: BETA10 0x1016dd80
~DeviceImpl() override ~DeviceImpl() override { Destroy(); }
{
if (m_data) {
m_data->Release();
m_data = NULL;
}
}
void* ImplementationDataPtr() override; void* ImplementationDataPtr() override;
@ -161,12 +155,29 @@ class DeviceImpl : public Device {
IDirect3DRMDevice2* ImplementationData() const { return m_data; } IDirect3DRMDevice2* ImplementationData() const { return m_data; }
void SetImplementationData(IDirect3DRMDevice2* device) { m_data = device; } void SetImplementationData(IDirect3DRMDevice2* device) { m_data = device; }
inline void Destroy();
friend class RendererImpl; friend class RendererImpl;
private: private:
IDirect3DRMDevice2* m_data; IDirect3DRMDevice2* m_data;
}; };
// FUNCTION: BETA10 0x101708c0
inline void DeviceDestroy(IDirect3DRMDevice2* pDevice)
{
pDevice->Release();
}
// FUNCTION: BETA10 0x10170880
void DeviceImpl::Destroy()
{
if (m_data) {
DeviceDestroy(m_data);
m_data = NULL;
}
}
// VTABLE: LEGO1 0x100db9e8 // VTABLE: LEGO1 0x100db9e8
// VTABLE: BETA10 0x101c3220 // VTABLE: BETA10 0x101c3220
class ViewImpl : public View { class ViewImpl : public View {
@ -175,13 +186,7 @@ class ViewImpl : public View {
ViewImpl() : m_data(0) {} ViewImpl() : m_data(0) {}
// FUNCTION: BETA10 0x1016e5d0 // FUNCTION: BETA10 0x1016e5d0
~ViewImpl() override ~ViewImpl() override { Destroy(); }
{
if (m_data) {
m_data->Release();
m_data = NULL;
}
}
void* ImplementationDataPtr() override; void* ImplementationDataPtr() override;
@ -218,12 +223,29 @@ class ViewImpl : public View {
static Result ViewportCreateAppData(IDirect3DRM2*, IDirect3DRMViewport*, IDirect3DRMFrame2*); static Result ViewportCreateAppData(IDirect3DRM2*, IDirect3DRMViewport*, IDirect3DRMFrame2*);
inline void Destroy();
friend class RendererImpl; friend class RendererImpl;
private: private:
IDirect3DRMViewport* m_data; IDirect3DRMViewport* m_data;
}; };
// FUNCTION: BETA10 0x101711a0
inline void ViewDestroy(IDirect3DRMViewport* pView)
{
pView->Release();
}
// FUNCTION: BETA10 0x10171160
void ViewImpl::Destroy()
{
if (m_data) {
ViewDestroy(m_data);
m_data = NULL;
}
}
// VTABLE: LEGO1 0x100dbad8 // VTABLE: LEGO1 0x100dbad8
// VTABLE: BETA10 0x101c3260 // VTABLE: BETA10 0x101c3260
class CameraImpl : public Camera { class CameraImpl : public Camera {
@ -232,13 +254,7 @@ class CameraImpl : public Camera {
CameraImpl() : m_data(0) {} CameraImpl() : m_data(0) {}
// FUNCTION: BETA10 0x1016f200 // FUNCTION: BETA10 0x1016f200
~CameraImpl() override ~CameraImpl() override { Destroy(); }
{
if (m_data) {
m_data->Release();
m_data = NULL;
}
}
void* ImplementationDataPtr() override; void* ImplementationDataPtr() override;
@ -247,12 +263,29 @@ class CameraImpl : public Camera {
IDirect3DRMFrame2* ImplementationData() const { return m_data; } IDirect3DRMFrame2* ImplementationData() const { return m_data; }
inline void Destroy();
friend class RendererImpl; friend class RendererImpl;
private: private:
IDirect3DRMFrame2* m_data; IDirect3DRMFrame2* m_data;
}; };
// FUNCTION: BETA10 0x10170940
inline void CameraDestroy(IDirect3DRMFrame2* pFrame)
{
pFrame->Release();
}
// FUNCTION: BETA10 0x10170900
void CameraImpl::Destroy()
{
if (m_data) {
CameraDestroy(m_data);
m_data = NULL;
}
}
// VTABLE: LEGO1 0x100dbaf8 // VTABLE: LEGO1 0x100dbaf8
// VTABLE: BETA10 0x101c31e0 // VTABLE: BETA10 0x101c31e0
class LightImpl : public Light { class LightImpl : public Light {
@ -261,13 +294,7 @@ class LightImpl : public Light {
LightImpl() : m_data(0) {} LightImpl() : m_data(0) {}
// FUNCTION: BETA10 0x1016c7e0 // FUNCTION: BETA10 0x1016c7e0
~LightImpl() override ~LightImpl() override { Destroy(); }
{
if (m_data) {
m_data->Release();
m_data = NULL;
}
}
void* ImplementationDataPtr() override; void* ImplementationDataPtr() override;
@ -277,12 +304,29 @@ class LightImpl : public Light {
IDirect3DRMFrame2* ImplementationData() const { return m_data; } IDirect3DRMFrame2* ImplementationData() const { return m_data; }
inline void Destroy();
friend class RendererImpl; friend class RendererImpl;
private: private:
IDirect3DRMFrame2* m_data; IDirect3DRMFrame2* m_data;
}; };
// FUNCTION: BETA10 0x10170390
inline void LightDestroy(IDirect3DRMFrame2* pLight)
{
pLight->Release();
}
// FUNCTION: BETA10 0x10170350
void LightImpl::Destroy()
{
if (m_data) {
LightDestroy(m_data);
m_data = NULL;
}
}
// VTABLE: LEGO1 0x100dbb88 // VTABLE: LEGO1 0x100dbb88
// VTABLE: BETA10 0x101c3340 // VTABLE: BETA10 0x101c3340
class MeshImpl : public Mesh { class MeshImpl : public Mesh {
@ -291,13 +335,7 @@ class MeshImpl : public Mesh {
MeshImpl() : m_data(0) {} MeshImpl() : m_data(0) {}
// FUNCTION: BETA10 0x10170460 // FUNCTION: BETA10 0x10170460
~MeshImpl() override ~MeshImpl() override { Destroy(); }
{
if (m_data) {
delete m_data;
m_data = NULL;
}
}
void* ImplementationDataPtr() override; void* ImplementationDataPtr() override;
@ -324,12 +362,29 @@ class MeshImpl : public Mesh {
const MeshDataType& ImplementationData() const { return m_data; } const MeshDataType& ImplementationData() const { return m_data; }
MeshDataType& ImplementationData() { return m_data; } MeshDataType& ImplementationData() { return m_data; }
inline void Destroy();
friend class RendererImpl; friend class RendererImpl;
private: private:
MeshDataType m_data; MeshDataType m_data;
}; };
// FUNCTION: BETA10 0x10171b40
inline void MeshDestroy(MeshImpl::MeshDataType pMesh)
{
delete pMesh;
}
// FUNCTION: BETA10 0x10171b00
void MeshImpl::Destroy()
{
if (m_data) {
MeshDestroy(m_data);
m_data = NULL;
}
}
// VTABLE: LEGO1 0x100dba68 // VTABLE: LEGO1 0x100dba68
// VTABLE: BETA10 0x101c3150 // VTABLE: BETA10 0x101c3150
class GroupImpl : public Group { class GroupImpl : public Group {
@ -338,13 +393,7 @@ class GroupImpl : public Group {
GroupImpl() : m_data(0) {} GroupImpl() : m_data(0) {}
// FUNCTION: BETA10 0x1016a410 // FUNCTION: BETA10 0x1016a410
~GroupImpl() override ~GroupImpl() override { Destroy(); }
{
if (m_data) {
m_data->Release();
m_data = NULL;
}
}
void* ImplementationDataPtr() override; void* ImplementationDataPtr() override;
@ -369,12 +418,29 @@ class GroupImpl : public Group {
IDirect3DRMFrame2* ImplementationData() const { return m_data; } IDirect3DRMFrame2* ImplementationData() const { return m_data; }
inline void Destroy();
friend class RendererImpl; friend class RendererImpl;
private: private:
IDirect3DRMFrame2* m_data; IDirect3DRMFrame2* m_data;
}; };
// FUNCTION: BETA10 0x1016c2b0
inline void GroupDestroy(IDirect3DRMFrame2* pGroup)
{
pGroup->Release();
}
// FUNCTION: BETA10 0x1016c270
void GroupImpl::Destroy()
{
if (m_data) {
GroupDestroy(m_data);
m_data = NULL;
}
}
// VTABLE: LEGO1 0x100dbb18 // VTABLE: LEGO1 0x100dbb18
// VTABLE: BETA10 0x101c3270 // VTABLE: BETA10 0x101c3270
class MeshBuilderImpl : public MeshBuilder { class MeshBuilderImpl : public MeshBuilder {
@ -383,13 +449,7 @@ class MeshBuilderImpl : public MeshBuilder {
MeshBuilderImpl() : m_data(0) {} MeshBuilderImpl() : m_data(0) {}
// FUNCTION: BETA10 0x1016f5c0 // FUNCTION: BETA10 0x1016f5c0
~MeshBuilderImpl() override ~MeshBuilderImpl() override { Destroy(); }
{
if (m_data) {
m_data->Release();
m_data = NULL;
}
}
void* ImplementationDataPtr() override; void* ImplementationDataPtr() override;
@ -411,6 +471,8 @@ class MeshBuilderImpl : public MeshBuilder {
IDirect3DRMMesh* ImplementationData() const { return m_data; } IDirect3DRMMesh* ImplementationData() const { return m_data; }
inline void Destroy();
friend class RendererImpl; friend class RendererImpl;
private: private:
@ -429,6 +491,21 @@ class MeshBuilderImpl : public MeshBuilder {
IDirect3DRMMesh* m_data; IDirect3DRMMesh* m_data;
}; };
// FUNCTION: BETA10 0x10171220
inline void MeshBuilderDestroy(IDirect3DRMMesh* pMeshBuilder)
{
pMeshBuilder->Release();
}
// FUNCTION: BETA10 0x101711e0
void MeshBuilderImpl::Destroy()
{
if (m_data) {
MeshBuilderDestroy(m_data);
m_data = NULL;
}
}
// No vtable, this is just a simple wrapper around D3DRMIMAGE // No vtable, this is just a simple wrapper around D3DRMIMAGE
class TglD3DRMIMAGE { class TglD3DRMIMAGE {
public: public:
@ -460,13 +537,7 @@ class TextureImpl : public Texture {
TextureImpl() : m_data(0) {} TextureImpl() : m_data(0) {}
// FUNCTION: BETA10 0x1016c2d0 // FUNCTION: BETA10 0x1016c2d0
~TextureImpl() override ~TextureImpl() override { Destroy(); }
{
if (m_data) {
m_data->Release();
m_data = NULL;
}
}
void* ImplementationDataPtr() override; void* ImplementationDataPtr() override;
@ -489,6 +560,8 @@ class TextureImpl : public Texture {
IDirect3DRMTexture* ImplementationData() const { return m_data; } IDirect3DRMTexture* ImplementationData() const { return m_data; }
void SetImplementation(IDirect3DRMTexture* pData) { m_data = pData; } void SetImplementation(IDirect3DRMTexture* pData) { m_data = pData; }
inline void Destroy();
friend class RendererImpl; friend class RendererImpl;
static Result SetImage(IDirect3DRMTexture* pSelf, TglD3DRMIMAGE* pImage); static Result SetImage(IDirect3DRMTexture* pSelf, TglD3DRMIMAGE* pImage);
@ -497,6 +570,21 @@ class TextureImpl : public Texture {
IDirect3DRMTexture* m_data; IDirect3DRMTexture* m_data;
}; };
// FUNCTION: BETA10 0x1016fd40
inline void TextureDestroy(IDirect3DRMTexture* pTexture)
{
pTexture->Release();
}
// FUNCTION: BETA10 0x1016fd00
void TextureImpl::Destroy()
{
if (m_data) {
TextureDestroy(m_data);
m_data = NULL;
}
}
// Translation helpers // Translation helpers
inline D3DRMRENDERQUALITY Translate(ShadingModel tglShadingModel) inline D3DRMRENDERQUALITY Translate(ShadingModel tglShadingModel)
{ {