Clean up game thread in SDL version

This commit is contained in:
elasota
2020-10-12 00:37:11 -04:00
parent 522e99afb9
commit 5fbf3f5df0
6 changed files with 14 additions and 1 deletions

View File

@@ -11,6 +11,11 @@ void GpFiber_Win32::YieldTo(IGpFiber *toFiber)
SwitchToFiber(static_cast<GpFiber_Win32*>(toFiber)->m_fiber);
}
void GpFiber_Win32::YieldToTerminal(IGpFiber *toFiber)
{
YieldTo(toFiber);
}
void GpFiber_Win32::Destroy()
{
this->~GpFiber_Win32();

View File

@@ -6,6 +6,7 @@ class GpFiber_Win32 final : public IGpFiber
{
public:
void YieldTo(IGpFiber *toFiber) override;
void YieldToTerminal(IGpFiber *toFiber) override;
void Destroy() override;
static IGpFiber *Create(LPVOID fiber);

View File

@@ -19,6 +19,11 @@ void GpFiber_SDL::YieldTo(IGpFiber *toFiber)
m_event->Wait();
}
void GpFiber_SDL::YieldToTerminal(IGpFiber *toFiber)
{
static_cast<GpFiber_SDL*>(toFiber)->m_event->Signal();
}
void GpFiber_SDL::Destroy()
{
delete this;

View File

@@ -16,6 +16,7 @@ public:
~GpFiber_SDL();
void YieldTo(IGpFiber *fromFiber) override;
void YieldToTerminal(IGpFiber *fromFiber) override;
void Destroy() override;
private:

View File

@@ -5,5 +5,6 @@
struct IGpFiber
{
virtual void YieldTo(IGpFiber *toFiber) = 0;
virtual void YieldToTerminal(IGpFiber *toFiber) = 0;
virtual void Destroy() = 0;
};

View File

@@ -141,7 +141,7 @@ void GpAppEnvironment::AppThreadFunc()
GpAppInterface_Get()->ApplicationMain();
m_applicationState = ApplicationState_Terminated;
m_applicationFiber->YieldTo(m_vosFiber);
m_applicationFiber->YieldToTerminal(m_vosFiber);
}
void GpAppEnvironment::InitializeApplicationState()