diff options
| author | Tim Foley <tfoleyNV@users.noreply.github.com> | 2018-08-06 15:52:38 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-08-06 15:52:38 -0700 |
| commit | 73ff6907d723003d30e400f661876e7960de574f (patch) | |
| tree | 76fb87e0d7cdf6310c4a62753556dbf061842d7b /tools/gfx/window.cpp | |
| parent | 68d705f6c805c9b4d31b386e065762e6db13ad18 (diff) | |
Add basic support for "Dear IMGUI" (#625)
This isn't being made visible just yet, but it will allow us to have a simple UI for loading models into the model-viewer example.
In order to support rendering with IMGUI I had to add the following to the `Renderer` layer:
* viewports
* scissor rects
* blend support
These are really only fully implemented for D3D11, but adding them to the other back-ends should be a reasonably small task.
Diffstat (limited to 'tools/gfx/window.cpp')
| -rw-r--r-- | tools/gfx/window.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/tools/gfx/window.cpp b/tools/gfx/window.cpp index ee9f50813..9bc63b896 100644 --- a/tools/gfx/window.cpp +++ b/tools/gfx/window.cpp @@ -111,22 +111,53 @@ int runWindowsApplication( struct Window { HWND handle; + WNDPROC nativeHook; }; +void setNativeWindowHook(Window* window, WNDPROC proc) +{ + window->nativeHook = proc; +} + static LRESULT CALLBACK windowProc( HWND windowHandle, UINT message, WPARAM wParam, LPARAM lParam) { + Window* window = (Window*) GetWindowLongPtrW(windowHandle, GWLP_USERDATA); + + // Give the installed filter a chance to intercept messages. + // (This is used for ImGui) + if( window ) + { + if(auto nativeHook = window->nativeHook) + { + auto result = nativeHook(windowHandle, message, wParam, lParam); + if(result) + return result; + } + } + // TODO: Actually implement some reasonable logic here. switch (message) { + case WM_CREATE: + { + auto createInfo = (CREATESTRUCTW*) lParam; + window = (Window*) createInfo->lpCreateParams; + window->handle = windowHandle; + + SetWindowLongPtrW(windowHandle, GWLP_USERDATA, (LONG)window); + } + break; + case WM_CLOSE: PostQuitMessage(0); return 0; } + return DefWindowProcW(windowHandle, message, wParam, lParam); } @@ -159,6 +190,8 @@ static ATOM getWindowClassAtom() Window* createWindow(WindowDesc const& desc) { Window* window = new Window(); + window->handle = nullptr; + window->nativeHook = nullptr; OSString windowTitle(desc.title); |
