mirror of
https://github.com/thunderbrewhq/thunderbrew
synced 2025-04-16 01:55:21 +03:00
feat(gx): handle custom window proc in device creation
This commit is contained in:
parent
de0050d111
commit
9ccd1884f3
@ -198,9 +198,8 @@ const CGxCaps& CGxDevice::Caps() const {
|
||||
return this->m_caps;
|
||||
}
|
||||
|
||||
int32_t CGxDevice::DeviceCreate(long (*windowProc)(void*, uint32_t, uint32_t, long), const CGxFormat& format) {
|
||||
// TODO
|
||||
// this->m_windowProc = windowProc;
|
||||
int32_t CGxDevice::DeviceCreate(int32_t (*windowProc)(void* window, uint32_t message, uint32_t wparam, int32_t lparam), const CGxFormat& format) {
|
||||
this->m_windowProc = windowProc;
|
||||
|
||||
return this->DeviceSetFormat(format);
|
||||
}
|
||||
|
@ -71,6 +71,7 @@ class CGxDevice {
|
||||
CGxCaps m_caps;
|
||||
int32_t m_shaderProfiles[GxShTargets_Last] = { 6, 0, 0, 0, 12, 0 }; // TODO placeholder
|
||||
TSHashTable<CGxShader, HASHKEY_STRI> m_shaderList[GxShTargets_Last];
|
||||
int32_t (*m_windowProc)(void* window, uint32_t message, uint32_t wparam, int32_t lparam) = nullptr;
|
||||
int32_t m_context = 0;
|
||||
int32_t intF5C = 0;
|
||||
int32_t m_windowVisible = 0;
|
||||
@ -104,7 +105,7 @@ class CGxDevice {
|
||||
virtual void ITexMarkAsUpdated(CGxTex*) = 0;
|
||||
virtual void IRsSendToHw(EGxRenderState) = 0;
|
||||
virtual void ICursorCreate(const CGxFormat& format);
|
||||
virtual int32_t DeviceCreate(long (*)(void*, uint32_t, uint32_t, long), const CGxFormat&);
|
||||
virtual int32_t DeviceCreate(int32_t (*windowProc)(void* window, uint32_t message, uint32_t wparam, int32_t lparam), const CGxFormat&);
|
||||
virtual int32_t DeviceSetFormat(const CGxFormat&);
|
||||
virtual void DeviceWM(EGxWM wm, uintptr_t param1, uintptr_t param2) = 0;
|
||||
virtual void CapsWindowSize(CRect&) = 0;
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
CGxDevice* g_theGxDevicePtr = nullptr;
|
||||
|
||||
CGxDevice* GxDevCreate(EGxApi api, long (*windowProc)(void*, uint32_t, uint32_t, long), const CGxFormat& format) {
|
||||
CGxDevice* GxDevCreate(EGxApi api, int32_t (*windowProc)(void* window, uint32_t message, uint32_t wparam, int32_t lparam), const CGxFormat& format) {
|
||||
CGxDevice* device;
|
||||
|
||||
#if defined(WHOA_SYSTEM_WIN)
|
||||
|
@ -9,7 +9,7 @@ class CGxFormat;
|
||||
|
||||
extern CGxDevice* g_theGxDevicePtr;
|
||||
|
||||
CGxDevice* GxDevCreate(EGxApi, long (*)(void*, uint32_t, uint32_t, long), const CGxFormat&);
|
||||
CGxDevice* GxDevCreate(EGxApi api, int32_t (*windowProc)(void* window, uint32_t message, uint32_t wparam, int32_t lparam), const CGxFormat& format);
|
||||
|
||||
EGxApi GxDevApi(void);
|
||||
|
||||
|
@ -357,7 +357,9 @@ LRESULT CGxDeviceD3d::WindowProcD3d(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO
|
||||
if (device && device->m_windowProc) {
|
||||
return device->m_windowProc(hWnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||
}
|
||||
@ -428,7 +430,7 @@ int32_t CGxDeviceD3d::CreatePoolAPI(CGxPool* pool) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int32_t CGxDeviceD3d::DeviceCreate(long (*windowProc)(void*, uint32_t, uint32_t, long), const CGxFormat& format) {
|
||||
int32_t CGxDeviceD3d::DeviceCreate(int32_t (*windowProc)(void* window, uint32_t message, uint32_t wparam, int32_t lparam), const CGxFormat& format) {
|
||||
this->m_ownhwnd = 1;
|
||||
|
||||
// TODO gamma ramp
|
||||
|
@ -241,7 +241,7 @@ class CGxDeviceD3d : public CGxDevice {
|
||||
// Virtual member functions
|
||||
virtual void ITexMarkAsUpdated(CGxTex* texId);
|
||||
virtual void IRsSendToHw(EGxRenderState which);
|
||||
virtual int32_t DeviceCreate(long (*windowProc)(void*, uint32_t, uint32_t, long), const CGxFormat& format);
|
||||
virtual int32_t DeviceCreate(int32_t (*windowProc)(void* window, uint32_t message, uint32_t wparam, int32_t lparam), const CGxFormat& format);
|
||||
virtual int32_t DeviceSetFormat(const CGxFormat& format);
|
||||
virtual void DeviceWM(EGxWM wm, uintptr_t param1, uintptr_t param2);
|
||||
virtual void CapsWindowSize(CRect& dst);
|
||||
|
@ -140,7 +140,7 @@ void CGxDeviceGLL::CapsWindowSizeInScreenCoords(CRect& dst) {
|
||||
}
|
||||
}
|
||||
|
||||
int32_t CGxDeviceGLL::DeviceCreate(long (*windowProc)(void*, uint32_t, uint32_t, long), const CGxFormat& format) {
|
||||
int32_t CGxDeviceGLL::DeviceCreate(int32_t (*windowProc)(void* window, uint32_t message, uint32_t wparam, int32_t lparam), const CGxFormat& format) {
|
||||
CGRect rect;
|
||||
Rect* bounds;
|
||||
Rect* zoomedBounds = GetSavedZoomedWindowBounds();
|
||||
|
@ -29,7 +29,7 @@ class CGxDeviceGLL : public CGxDevice {
|
||||
// Virtual member functions
|
||||
virtual void ITexMarkAsUpdated(CGxTex*);
|
||||
virtual void IRsSendToHw(EGxRenderState);
|
||||
virtual int32_t DeviceCreate(long (*)(void*, uint32_t, uint32_t, long), const CGxFormat&);
|
||||
virtual int32_t DeviceCreate(int32_t (*windowProc)(void* window, uint32_t message, uint32_t wparam, int32_t lparam), const CGxFormat&);
|
||||
virtual int32_t DeviceSetFormat(const CGxFormat&);
|
||||
virtual void DeviceWM(EGxWM wm, uintptr_t param1, uintptr_t param2) {};
|
||||
virtual void CapsWindowSize(CRect&);
|
||||
|
Loading…
Reference in New Issue
Block a user