Fix all mingw errors & warnings (#411)

* Use COMPAT_MODE macro to fix errors with mingw gcc 12.2

* MxOmni::m_timerRunning is a MxBool

* MxDirect3D::m_unk0x88c is a MxBool

* MxBackgroundAudioManager::m_unk0x13c is a MxS32

* Fix warning: deleting 'void*' is undefined [-Wdelete-incomplete]

* Fix inline function 'void TglImpl::RendererImpl::Destroy()' used but never defined

* Fix warning: inline function 'MxStreamerSubClass1::MxStreamerSubClass1(undefined4)' used but never defined

* Use `FALSE` for m_timerRunning

* Format

* Format

* Remove comment

* Limit scope for variables in compat mode

* clang-format

---------

Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
Anonymous Maarten
2024-01-07 18:30:45 +01:00
committed by GitHub
parent bb7e4df11b
commit fbe7f8bbb0
16 changed files with 144 additions and 40 deletions

View File

@@ -136,8 +136,8 @@ typedef struct _D3DRMIMAGE
int bytes_per_line; /* number of bytes of memory for a int bytes_per_line; /* number of bytes of memory for a
scanline. This must be a multiple scanline. This must be a multiple
of 4. */ of 4. */
void* buffer1; /* memory to render into (first buffer). */ char* buffer1; /* memory to render into (first buffer). */
void* buffer2; /* second rendering buffer for double char* buffer2; /* second rendering buffer for double
buffering, set to NULL for single buffering, set to NULL for single
buffering. */ buffering. */
unsigned long red_mask; unsigned long red_mask;

View File

@@ -132,9 +132,18 @@ BOOL IsleApp::SetupLegoOmni()
char mediaPath[256]; char mediaPath[256];
GetProfileStringA("LEGO Island", "MediaPath", "", mediaPath, sizeof(mediaPath)); GetProfileStringA("LEGO Island", "MediaPath", "", mediaPath, sizeof(mediaPath));
#ifdef COMPAT_MODE
BOOL failure;
{
MxOmniCreateParam param(mediaPath, (struct HWND__*) m_windowHandle, m_videoParam, MxOmniCreateFlags());
failure = Lego()->Create(param) == FAILURE;
}
#else
BOOL failure = BOOL failure =
Lego()->Create(MxOmniCreateParam(mediaPath, (struct HWND__*) m_windowHandle, m_videoParam, MxOmniCreateFlags()) Lego()->Create(MxOmniCreateParam(mediaPath, (struct HWND__*) m_windowHandle, m_videoParam, MxOmniCreateFlags())
) == FAILURE; ) == FAILURE;
#endif
if (!failure) { if (!failure) {
VariableTable()->SetVariable("ACTOR_01", ""); VariableTable()->SetVariable("ACTOR_01", "");
TickleManager()->SetClientTickleInterval(VideoManager(), 10); TickleManager()->SetClientTickleInterval(VideoManager(), 10);

View File

@@ -34,9 +34,15 @@ void MxAtomId::Destroy()
if (!AtomIdCounterSet()) if (!AtomIdCounterSet())
return; return;
// The dtor is called on the counter object immediately, #ifdef COMPAT_MODE
// so this syntax should be correct. MxAtomIdCounterSet::iterator it;
{
MxAtomIdCounter id_counter(m_internal);
it = AtomIdCounterSet()->find(&id_counter);
}
#else
MxAtomIdCounterSet::iterator it = AtomIdCounterSet()->find(&MxAtomIdCounter(m_internal)); MxAtomIdCounterSet::iterator it = AtomIdCounterSet()->find(&MxAtomIdCounter(m_internal));
#endif
MxAtomIdCounter* counter = (MxAtomIdCounter*) (*it); MxAtomIdCounter* counter = (MxAtomIdCounter*) (*it);
counter->Dec(); counter->Dec();

View File

@@ -104,7 +104,7 @@ void MxBackgroundAudioManager::FUN_1007ee70()
m_unk0x138 = NULL; m_unk0x138 = NULL;
m_action2.SetObjectId(-1); m_action2.SetObjectId(-1);
m_action2.SetAtomId(MxAtomId()); m_action2.SetAtomId(MxAtomId());
m_unk0x13c = NULL; m_unk0x13c = 0;
} }
} }
@@ -133,7 +133,7 @@ void MxBackgroundAudioManager::FUN_1007ef40()
m_unk0x138 = NULL; m_unk0x138 = NULL;
m_action2.SetObjectId(-1); m_action2.SetObjectId(-1);
m_action2.SetAtomId(MxAtomId()); m_action2.SetAtomId(MxAtomId());
m_unk0x13c = NULL; m_unk0x13c = 0;
} }
} }
} }

View File

@@ -97,10 +97,17 @@ void MxCompositePresenter::EndAction()
MxPresenter::EndAction(); MxPresenter::EndAction();
if (action && action->GetOrigin()) { if (action && action->GetOrigin()) {
#ifdef COMPAT_MODE
{
MxEndActionNotificationParam param(c_notificationEndAction, this, action, FALSE);
NotificationManager()->Send(action->GetOrigin(), &param);
}
#else
NotificationManager()->Send( NotificationManager()->Send(
action->GetOrigin(), action->GetOrigin(),
&MxEndActionNotificationParam(c_notificationEndAction, this, action, FALSE) &MxEndActionNotificationParam(c_notificationEndAction, this, action, FALSE)
); );
#endif
} }
} }

View File

@@ -14,7 +14,7 @@ MxDirect3D::MxDirect3D()
{ {
this->m_pDirect3d = NULL; this->m_pDirect3d = NULL;
this->m_pDirect3dDevice = NULL; this->m_pDirect3dDevice = NULL;
this->m_unk0x88c = NULL; this->m_unk0x88c = 0;
this->m_assignedDevice = NULL; this->m_assignedDevice = NULL;
} }

View File

@@ -23,8 +23,16 @@ MxDiskStreamController::~MxDiskStreamController()
m_unk0xc4 = FALSE; m_unk0xc4 = FALSE;
m_unk0x70 = FALSE; m_unk0x70 = FALSE;
if (m_provider) if (m_provider) {
#ifdef COMPAT_MODE
{
MxDSAction action;
m_provider->VTable0x20(&action);
}
#else
m_provider->VTable0x20(&MxDSAction()); m_provider->VTable0x20(&MxDSAction());
#endif
}
MxDSAction* action; MxDSAction* action;
while (m_unk0x3c.PopFront(action)) while (m_unk0x3c.PopFront(action))
@@ -299,9 +307,16 @@ MxResult MxDiskStreamController::VTable0x24(MxDSAction* p_action)
MxAutoLocker lock(&this->m_criticalSection); MxAutoLocker lock(&this->m_criticalSection);
if (m_unk0x54.Find(p_action, FALSE) == NULL) { if (m_unk0x54.Find(p_action, FALSE) == NULL) {
if (VTable0x30(p_action) == SUCCESS) { if (VTable0x30(p_action) == SUCCESS) {
#ifdef COMPAT_MODE
{
MxEndActionNotificationParam param(c_notificationEndAction, NULL, p_action, TRUE);
MxOmni::GetInstance()->NotifyCurrentEntity(&param);
}
#else
MxOmni::GetInstance()->NotifyCurrentEntity( MxOmni::GetInstance()->NotifyCurrentEntity(
&MxEndActionNotificationParam(c_notificationEndAction, NULL, p_action, TRUE) &MxEndActionNotificationParam(c_notificationEndAction, NULL, p_action, TRUE)
); );
#endif
} }
} }

View File

@@ -160,10 +160,17 @@ void MxMediaPresenter::EndAction()
} }
if (action && action->GetOrigin()) { if (action && action->GetOrigin()) {
#ifdef COMPAT_MODE
{
MxEndActionNotificationParam param(c_notificationEndAction, this, action, FALSE);
NotificationManager()->Send(action->GetOrigin(), &param);
}
#else
NotificationManager()->Send( NotificationManager()->Send(
action->GetOrigin(), action->GetOrigin(),
&MxEndActionNotificationParam(c_notificationEndAction, this, action, FALSE) &MxEndActionNotificationParam(c_notificationEndAction, this, action, FALSE)
); );
#endif
} }
} }
} }

View File

@@ -157,7 +157,7 @@ void MxOmni::Init()
m_timer = NULL; m_timer = NULL;
m_streamer = NULL; m_streamer = NULL;
m_atomIdCounterSet = NULL; m_atomIdCounterSet = NULL;
m_timerRunning = NULL; m_timerRunning = FALSE;
} }
// FUNCTION: LEGO1 0x100af0b0 // FUNCTION: LEGO1 0x100af0b0
@@ -345,14 +345,28 @@ MxResult MxOmni::CreatePresenter(MxStreamController* p_controller, MxDSAction& p
if (object->StartAction(p_controller, &p_action) == SUCCESS) { if (object->StartAction(p_controller, &p_action) == SUCCESS) {
if (sender) { if (sender) {
#ifdef COMPAT_MODE
{
MxType4NotificationParam param(this, &p_action, object);
NotificationManager()->Send(sender, &param);
}
#else
NotificationManager()->Send(sender, &MxType4NotificationParam(this, &p_action, object)); NotificationManager()->Send(sender, &MxType4NotificationParam(this, &p_action, object));
#endif
} }
if (p_action.GetUnknown84()) { if (p_action.GetUnknown84()) {
#ifdef COMPAT_MODE
{
MxStartActionNotificationParam param(c_notificationStartAction, object, &p_action, FALSE);
NotificationManager()->Send(p_action.GetUnknown84(), &param);
}
#else
NotificationManager()->Send( NotificationManager()->Send(
p_action.GetUnknown84(), p_action.GetUnknown84(),
&MxStartActionNotificationParam(c_notificationStartAction, object, &p_action, FALSE) &MxStartActionNotificationParam(c_notificationStartAction, object, &p_action, FALSE)
); );
#endif
} }
result = SUCCESS; result = SUCCESS;
} }

View File

@@ -147,9 +147,16 @@ void MxPresenter::EndAction()
MxAutoLocker lock(&this->m_criticalSection); MxAutoLocker lock(&this->m_criticalSection);
if (!this->m_compositePresenter) { if (!this->m_compositePresenter) {
#ifdef COMPAT_MODE
{
MxEndActionNotificationParam param(c_notificationEndAction, NULL, this->m_action, TRUE);
MxOmni::GetInstance()->NotifyCurrentEntity(&param);
}
#else
MxOmni::GetInstance()->NotifyCurrentEntity( MxOmni::GetInstance()->NotifyCurrentEntity(
&MxEndActionNotificationParam(c_notificationEndAction, NULL, this->m_action, TRUE) &MxEndActionNotificationParam(c_notificationEndAction, NULL, this->m_action, TRUE)
); );
#endif
} }
this->m_action = NULL; this->m_action = NULL;
@@ -195,7 +202,14 @@ void MxPresenter::SendToCompositePresenter(MxOmni* p_omni)
if (m_compositePresenter) { if (m_compositePresenter) {
MxAutoLocker lock(&m_criticalSection); MxAutoLocker lock(&m_criticalSection);
#ifdef COMPAT_MODE
{
MxNotificationParam param(MXPRESENTER_NOTIFICATION, this);
NotificationManager()->Send(m_compositePresenter, &param);
}
#else
NotificationManager()->Send(m_compositePresenter, &MxNotificationParam(MXPRESENTER_NOTIFICATION, this)); NotificationManager()->Send(m_compositePresenter, &MxNotificationParam(MXPRESENTER_NOTIFICATION, this));
#endif
m_action->SetOrigin(p_omni ? p_omni : MxOmni::GetInstance()); m_action->SetOrigin(p_omni ? p_omni : MxOmni::GetInstance());
m_compositePresenter = NULL; m_compositePresenter = NULL;

View File

@@ -55,7 +55,14 @@ MxStreamController::~MxStreamController()
if (m_provider) { if (m_provider) {
MxStreamProvider* provider = m_provider; MxStreamProvider* provider = m_provider;
m_provider = NULL; m_provider = NULL;
#ifdef COMPAT_MODE
{
MxDSAction action;
provider->VTable0x20(&action);
}
#else
provider->VTable0x20(&MxDSAction()); provider->VTable0x20(&MxDSAction());
#endif
delete provider; delete provider;
} }

View File

@@ -81,8 +81,16 @@ MxLong MxStreamer::Close(const char* p_name)
if (c->FUN_100c20d0(ds)) if (c->FUN_100c20d0(ds))
delete c; delete c;
else else {
#ifdef COMPAT_MODE
{
MxStreamerNotification notification(MXSTREAMER_DELETE_NOTIFY, NULL, c);
NotificationManager()->Send(this, &notification);
}
#else
NotificationManager()->Send(this, &MxStreamerNotification(MXSTREAMER_DELETE_NOTIFY, NULL, c)); NotificationManager()->Send(this, &MxStreamerNotification(MXSTREAMER_DELETE_NOTIFY, NULL, c));
#endif
}
return SUCCESS; return SUCCESS;
} }
@@ -185,20 +193,17 @@ MxLong MxStreamer::Notify(MxParam& p_param)
if (c->FUN_100c20d0(ds)) if (c->FUN_100c20d0(ds))
delete c; delete c;
else else {
#ifdef COMPAT_MODE
{
MxStreamerNotification notification(MXSTREAMER_DELETE_NOTIFY, NULL, c);
NotificationManager()->Send(this, &notification);
}
#else
NotificationManager()->Send(this, &MxStreamerNotification(MXSTREAMER_DELETE_NOTIFY, NULL, c)); NotificationManager()->Send(this, &MxStreamerNotification(MXSTREAMER_DELETE_NOTIFY, NULL, c));
#endif
}
} }
return 0; return 0;
} }
// No offset, function is always inlined
MxStreamerSubClass1::MxStreamerSubClass1(undefined4 p_size)
{
m_buffer = NULL;
m_size = p_size;
undefined4* ptr = &m_unk0x08;
for (int i = 0; i >= 0; i--) {
ptr[i] = 0;
}
}

View File

@@ -14,7 +14,15 @@
// STL. But I haven't figured out what yet (it's definitely not a vector). // STL. But I haven't figured out what yet (it's definitely not a vector).
class MxStreamerSubClass1 { class MxStreamerSubClass1 {
public: public:
inline MxStreamerSubClass1(undefined4 p_size); inline MxStreamerSubClass1(undefined4 p_size)
{
m_buffer = NULL;
m_size = p_size;
undefined4* ptr = &m_unk0x08;
for (int i = 0; i >= 0; i--) {
ptr[i] = 0;
}
}
~MxStreamerSubClass1() { delete[] m_buffer; } ~MxStreamerSubClass1() { delete[] m_buffer; }

View File

@@ -140,7 +140,14 @@ void MxTransitionManager::EndTransition(MxBool p_notifyWorld)
LegoWorld* world = GetCurrentWorld(); LegoWorld* world = GetCurrentWorld();
if (world) { if (world) {
#ifdef COMPAT_MODE
{
MxNotificationParam param(MXTRANSITIONMANAGER_TRANSITIONENDED, this);
world->Notify(param);
}
#else
world->Notify(MxNotificationParam(MXTRANSITIONMANAGER_TRANSITIONENDED, this)); world->Notify(MxNotificationParam(MXTRANSITIONMANAGER_TRANSITIONENDED, this));
#endif
} }
} }
} }

View File

@@ -86,6 +86,25 @@ private:
IDirect3DRM2* m_data; IDirect3DRM2* m_data;
}; };
extern IDirect3DRM2* g_pD3DRM;
inline void RendererDestroy(IDirect3DRM2* pRenderer)
{
int refCount = pRenderer->Release();
if (refCount <= 0) {
g_pD3DRM = NULL;
}
}
// Inlined only
void RendererImpl::Destroy()
{
if (m_data) {
RendererDestroy(m_data);
m_data = NULL;
}
}
// VTABLE 0x100db988 // VTABLE 0x100db988
class DeviceImpl : public Device { class DeviceImpl : public Device {
public: public:

View File

@@ -13,8 +13,11 @@ Renderer* Tgl::CreateRenderer()
return renderer; return renderer;
} }
namespace TglImpl
{
// GLOBAL: LEGO1 0x1010103c // GLOBAL: LEGO1 0x1010103c
IDirect3DRM2* g_pD3DRM = NULL; IDirect3DRM2* g_pD3DRM = NULL;
} // namespace TglImpl
// Inlined only // Inlined only
Result RendererImpl::Create() Result RendererImpl::Create()
@@ -31,23 +34,6 @@ Result RendererImpl::Create()
return (m_data != NULL) ? Success : Error; return (m_data != NULL) ? Success : Error;
} }
inline void RendererDestroy(IDirect3DRM2* pRenderer)
{
int refCount = pRenderer->Release();
if (refCount <= 0) {
g_pD3DRM = NULL;
}
}
// Inlined only
void RendererImpl::Destroy()
{
if (m_data) {
RendererDestroy(m_data);
m_data = NULL;
}
}
// FUNCTION: LEGO1 0x100a1894 // FUNCTION: LEGO1 0x100a1894
Device* RendererImpl::CreateDevice(const DeviceDirect3DCreateData& data) Device* RendererImpl::CreateDevice(const DeviceDirect3DCreateData& data)
{ {