feat(gx): handle custom window proc in device creation

This commit is contained in:
fallenoak 2023-03-14 16:49:01 -05:00 committed by GitHub
parent de0050d111
commit 9ccd1884f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 13 additions and 11 deletions

View File

@ -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);
}

View File

@ -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;

View File

@ -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)

View File

@ -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);

View File

@ -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

View File

@ -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);

View File

@ -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();

View File

@ -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&);