thunderbrew/src/gx/Device.cpp

67 lines
1.4 KiB
C++

#include "gx/Device.hpp"
#include "gx/CGxDevice.hpp"
#include "gx/Gx.hpp"
CGxDevice* g_theGxDevicePtr = nullptr;
CGxDevice* GxDevCreate(EGxApi api, int32_t (*windowProc)(void* window, uint32_t message, uintptr_t wparam, intptr_t lparam), const CGxFormat& format) {
CGxDevice* device;
switch (api) {
case GxApi_OpenGl:
device = CGxDevice::NewOpenGl();
#if defined(WHOA_SYSTEM_WIN)
case GxApi_D3d9:
device = CGxDevice::NewD3d();
break;
case GxApi_D3d9Ex:
device = CGxDevice::NewD3d9Ex();
break;
case GxApi_D3d10:
case GxApi_D3d11:
// Error
break;
#endif
#if defined(WHOA_SYSTEM_MAC)
case GxApi_GLL:
device = CGxDevice::NewGLL();
break;
#endif
#if defined(WHOA_BUILD_GLSDL)
case GxApi_GLSDL:
device = CGxDevice::NewGLSDL();
break;
#endif
default:
// Error
break;
}
g_theGxDevicePtr = device;
if (g_theGxDevicePtr->DeviceCreate(windowProc, format)) {
return g_theGxDevicePtr;
} else {
if (g_theGxDevicePtr) {
delete g_theGxDevicePtr;
}
return nullptr;
}
}
EGxApi GxDevApi() {
return g_theGxDevicePtr->m_api;
}
void* GxDevWindow() {
return g_theGxDevicePtr->DeviceWindow();
}
int32_t GxMasterEnable(EGxMasterEnables state) {
return g_theGxDevicePtr->MasterEnable(state);
}