Files
Aerofoil/PortabilityLayer/DisplayDeviceManager.cpp

78 lines
1.7 KiB
C++

#include "DisplayDeviceManager.h"
#include "HostDisplayDriver.h"
#include "PLQuickdraw.h"
#include "MemoryManager.h"
namespace PortabilityLayer
{
class DisplayDeviceManagerImpl final : public DisplayDeviceManager
{
public:
DisplayDeviceManagerImpl();
void Init() override;
void Shutdown() override;
GDevice **GetMainDevice() override;
void IncrementTickCount(uint32_t count) override;
uint32_t GetTickCount() override;
static DisplayDeviceManagerImpl *GetInstance();
private:
GDHandle m_mainDevice;
uint32_t m_tickCount;
static DisplayDeviceManagerImpl ms_instance;
};
DisplayDeviceManagerImpl::DisplayDeviceManagerImpl()
: m_mainDevice(nullptr)
, m_tickCount(1)
{
}
void DisplayDeviceManagerImpl::Init()
{
m_mainDevice = MemoryManager::GetInstance()->NewHandle<GDevice>();
HostDisplayDriver::GetInstance()->GetDisplayResolution(nullptr, nullptr, &(*m_mainDevice)->pixelFormat);
}
void DisplayDeviceManagerImpl::Shutdown()
{
MemoryManager::GetInstance()->ReleaseHandle(reinterpret_cast<MMHandleBlock*>(m_mainDevice));
}
GDevice **DisplayDeviceManagerImpl::GetMainDevice()
{
return m_mainDevice;
}
void DisplayDeviceManagerImpl::IncrementTickCount(uint32_t count)
{
m_tickCount += count;
}
uint32_t DisplayDeviceManagerImpl::GetTickCount()
{
return m_tickCount;
}
DisplayDeviceManagerImpl *DisplayDeviceManagerImpl::GetInstance()
{
return &ms_instance;
}
DisplayDeviceManagerImpl DisplayDeviceManagerImpl::ms_instance;
DisplayDeviceManager *DisplayDeviceManager::GetInstance()
{
return DisplayDeviceManagerImpl::GetInstance();
}
}