diff --git a/src/gx/CGxDevice.cpp b/src/gx/CGxDevice.cpp index 96fa81b..3af9cd8 100644 --- a/src/gx/CGxDevice.cpp +++ b/src/gx/CGxDevice.cpp @@ -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); } diff --git a/src/gx/CGxDevice.hpp b/src/gx/CGxDevice.hpp index bd07002..11f8196 100644 --- a/src/gx/CGxDevice.hpp +++ b/src/gx/CGxDevice.hpp @@ -71,6 +71,7 @@ class CGxDevice { CGxCaps m_caps; int32_t m_shaderProfiles[GxShTargets_Last] = { 6, 0, 0, 0, 12, 0 }; // TODO placeholder TSHashTable 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; diff --git a/src/gx/Device.cpp b/src/gx/Device.cpp index 799eb41..173b3d5 100644 --- a/src/gx/Device.cpp +++ b/src/gx/Device.cpp @@ -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) diff --git a/src/gx/Device.hpp b/src/gx/Device.hpp index db2e9ab..1a041e4 100644 --- a/src/gx/Device.hpp +++ b/src/gx/Device.hpp @@ -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); diff --git a/src/gx/d3d/CGxDeviceD3d.cpp b/src/gx/d3d/CGxDeviceD3d.cpp index d14f202..c264206 100644 --- a/src/gx/d3d/CGxDeviceD3d.cpp +++ b/src/gx/d3d/CGxDeviceD3d.cpp @@ -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 diff --git a/src/gx/d3d/CGxDeviceD3d.hpp b/src/gx/d3d/CGxDeviceD3d.hpp index 9ea7608..43771f7 100644 --- a/src/gx/d3d/CGxDeviceD3d.hpp +++ b/src/gx/d3d/CGxDeviceD3d.hpp @@ -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); diff --git a/src/gx/gll/CGxDeviceGLL.cpp b/src/gx/gll/CGxDeviceGLL.cpp index 951e305..19f97f1 100644 --- a/src/gx/gll/CGxDeviceGLL.cpp +++ b/src/gx/gll/CGxDeviceGLL.cpp @@ -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(); diff --git a/src/gx/gll/CGxDeviceGLL.hpp b/src/gx/gll/CGxDeviceGLL.hpp index 73b2b41..d9de398 100644 --- a/src/gx/gll/CGxDeviceGLL.hpp +++ b/src/gx/gll/CGxDeviceGLL.hpp @@ -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&);