Files
Aerofoil/GpShell/GpAppEnvironment.h

78 lines
2.4 KiB
C
Raw Normal View History

#pragma once
2019-12-31 05:20:07 -05:00
#include "GpDisplayDriverTickStatus.h"
2019-12-21 18:40:17 -05:00
#include "GpVOSEventQueue.h"
#include "HostSuspendCallID.h"
#include <stdint.h>
namespace PortabilityLayer
{
union HostSuspendCallArgument;
2019-12-21 18:40:17 -05:00
class HostVOSEventQueue;
class HostSystemServices;
}
2019-12-21 18:40:17 -05:00
struct IGpDisplayDriver;
struct IGpAudioDriver;
2019-12-29 17:39:19 -05:00
struct IGpInputDriver;
struct IGpFiber;
2020-09-12 14:01:51 -04:00
struct IGpFontHandler;
class GpAppEnvironment
{
public:
GpAppEnvironment();
~GpAppEnvironment();
void Init();
2019-12-31 05:20:07 -05:00
GpDisplayDriverTickStatus_t Tick(IGpFiber *vosFiber);
2019-12-21 18:40:17 -05:00
void Render();
bool AdjustRequestedResolution(uint32_t &physicalWidth, uint32_t &physicalHeight, uint32_t &virtualWidth, uint32_t &virtualheight, float &pixelScaleX, float &pixelScaleY);
2019-12-21 18:40:17 -05:00
void SetDisplayDriver(IGpDisplayDriver *displayDriver);
void SetAudioDriver(IGpAudioDriver *audioDriver);
2019-12-29 17:39:19 -05:00
void SetInputDrivers(IGpInputDriver *const* inputDrivers, size_t numDrivers);
2020-09-12 14:01:51 -04:00
void SetFontHandler(IGpFontHandler *fontHandler);
2019-12-24 02:35:24 -05:00
void SetVOSEventQueue(GpVOSEventQueue *eventQueue);
void SetSystemServices(PortabilityLayer::HostSystemServices *systemServices);
private:
enum ApplicationState
{
ApplicationState_NotStarted,
ApplicationState_WaitingForEvents,
ApplicationState_Running,
ApplicationState_Terminated,
ApplicationState_SystemCall,
ApplicationState_TimedSuspend,
2020-10-16 20:06:47 -04:00
ApplicationState_Synchronizing,
};
static void StaticAppThreadFunc(void *context);
void AppThreadFunc();
void InitializeApplicationState();
void SynchronizeState();
static void StaticSuspendHookFunc(void *context, PortabilityLayer::HostSuspendCallID callID, const PortabilityLayer::HostSuspendCallArgument *args, PortabilityLayer::HostSuspendCallArgument *returnValue);
void DispatchSystemCall(PortabilityLayer::HostSuspendCallID callID, const PortabilityLayer::HostSuspendCallArgument *args, PortabilityLayer::HostSuspendCallArgument *returnValue);
ApplicationState m_applicationState;
IGpDisplayDriver *m_displayDriver;
IGpAudioDriver *m_audioDriver;
2019-12-29 17:39:19 -05:00
IGpInputDriver *const* m_inputDrivers;
2020-09-12 14:01:51 -04:00
IGpFontHandler *m_fontHandler;
2019-12-24 02:35:24 -05:00
GpVOSEventQueue *m_vosEventQueue;
PortabilityLayer::HostSystemServices *m_systemServices;
IGpFiber *m_applicationFiber;
IGpFiber *m_vosFiber;
uint32_t m_delaySuspendTicks;
2019-12-29 17:39:19 -05:00
size_t m_numInputDrivers;
PortabilityLayer::HostSuspendCallID m_suspendCallID;
const PortabilityLayer::HostSuspendCallArgument *m_suspendArgs;
PortabilityLayer::HostSuspendCallArgument *m_suspendReturnValue;
};