From 345044db093dc0145e7b18b92035f2d918daab29 Mon Sep 17 00:00:00 2001 From: disinvite Date: Tue, 29 Aug 2023 17:22:13 -0400 Subject: [PATCH] Move a few things around on the Enumerate context obj --- LEGO1/mxdirect3d.cpp | 18 +++++++++++++----- LEGO1/mxdirect3d.h | 12 ++++++------ 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/LEGO1/mxdirect3d.cpp b/LEGO1/mxdirect3d.cpp index a0d4a9f8..a23ae78b 100644 --- a/LEGO1/mxdirect3d.cpp +++ b/LEGO1/mxdirect3d.cpp @@ -67,6 +67,7 @@ void MxDirect3D::Destroy() // This should get deleted by MxDirectDraw::Destroy if (m_pCurrentDeviceModesList) { + // delete m_pCurrentDeviceModesList; // missing? m_pCurrentDeviceModesList = NULL; } @@ -129,10 +130,15 @@ MxDeviceModeFinder::~MxDeviceModeFinder() } // OFFSET: LEGO1 0x1009c070 STUB -BOOL MxDirect3D::FUN_1009c070() +BOOL MxDeviceEnumerate::FUN_1009c070() { - //DirectDrawCreate() - //BuildErrorString("GetCaps failed: %s\n", xxx); + // TODO + // HRESULT ret = DirectDrawCreate(); + HRESULT ret = 0; + if (ret) { + MxDirect3D::BuildErrorString("GetCaps failed: %s\n", + EnumerateErrorToString(ret)); + } //IDirect3D2_EnumDevices return TRUE; } @@ -148,13 +154,14 @@ void MxDirect3D::BuildErrorString(const char *p_format, char *p_msg) // OFFSET: LEGO1 0x1009c6c0 MxResult MxDeviceEnumerate::_DoEnumerate() { + // TODO: what does ECX refer to in this context? if (m_unk010_flag) return FAILURE; HRESULT ret = DirectDrawEnumerate(EnumerateCallback, this); if (ret) { MxDirect3D::BuildErrorString("DirectDrawEnumerate returned error %s\n", - MxDirect3D::D3DErrorToString(ret)); + EnumerateErrorToString(ret)); return FAILURE; } @@ -165,11 +172,12 @@ MxResult MxDeviceEnumerate::_DoEnumerate() // OFFSET: LEGO1 0x1009c710 STUB BOOL FAR PASCAL EnumerateCallback(GUID FAR *, LPSTR, LPSTR, LPVOID) { + // TODO return FALSE; } // OFFSET: LEGO1 0x1009c730 STUB -char *MxDirect3D::D3DErrorToString(HRESULT p_error) +char *MxDeviceEnumerate::EnumerateErrorToString(HRESULT p_error) { // TODO: This is a list of error messages, similar to the function in // MxDirectDraw, except that this one now contains the Direct3D errors. diff --git a/LEGO1/mxdirect3d.h b/LEGO1/mxdirect3d.h index 590a502d..981f7143 100644 --- a/LEGO1/mxdirect3d.h +++ b/LEGO1/mxdirect3d.h @@ -18,18 +18,21 @@ class MxDeviceModeFinder MxDirectDraw::DeviceModesInfo *m_deviceInfo; // +0xe0 }; +// VTABLE 0x100db814 (or 0x100d9cc8?) // SIZE 0x198 class MxDeviceEnumerate { public: MxDeviceEnumerate(); - MxResult _DoEnumerate(); + virtual MxResult _DoEnumerate(); + BOOL FUN_1009c070(); + + static char *EnumerateErrorToString(HRESULT p_error); - undefined4 m_unk000; undefined4 m_unk004; undefined4 m_unk008; undefined4 m_unk00c; - BOOL m_unk010_flag; // +0x20 + MxBool m_unk010_flag; // +0x10 undefined4 m_unknown[97]; }; @@ -59,11 +62,8 @@ class MxDirect3D : public MxDirectDraw BOOL CreateIDirect3D(); BOOL D3DSetMode(); - BOOL FUN_1009c070(); - MxResult _DoEnumerate(); static void BuildErrorString(const char *, char *); - static char *D3DErrorToString(HRESULT p_error); private: MxDeviceModeFinder *m_pDeviceModeFinder; // +0x880