From 3922bd0b6bc9d6adef45665458d13b30469ca4d8 Mon Sep 17 00:00:00 2001 From: treeform Date: Sun, 8 Mar 2026 11:57:07 -0700 Subject: [PATCH 1/4] loadExtensions compat --- src/windy/platforms/win32/platform.nim | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/windy/platforms/win32/platform.nim b/src/windy/platforms/win32/platform.nim index 82f1bb1..0174e25 100644 --- a/src/windy/platforms/win32/platform.nim +++ b/src/windy/platforms/win32/platform.nim @@ -1161,6 +1161,10 @@ elif Backend == DirectXBackend: proc loadGraphicsContext() = discard + proc loadExtensions*() = + ## No-op in DirectX mode for OpenGL-compatible callers. + discard + proc makeContextCurrent*(window: Window) = discard From 8fa45976fe424d1cc8fe53884bfb222473d660c4 Mon Sep 17 00:00:00 2001 From: treeform Date: Sun, 8 Mar 2026 12:27:02 -0700 Subject: [PATCH 2/4] keep vsync var on the window --- src/windy/platforms/win32/platform.nim | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/windy/platforms/win32/platform.nim b/src/windy/platforms/win32/platform.nim index 0174e25..5350d53 100644 --- a/src/windy/platforms/win32/platform.nim +++ b/src/windy/platforms/win32/platform.nim @@ -87,6 +87,7 @@ type hWnd: HWND hdc: HDC hglrc: HGLRC + vsync*: bool iconHandle: HICON customCursor: HCURSOR @@ -1221,6 +1222,7 @@ proc newWindow*( result.title = title result.hWnd = createWindow(windowClassName, title) result.size = size + result.vsync = vsync discard SetPropW(result.hWnd, cast[ptr WCHAR](windowPropKey[0].addr), 1) @@ -1245,6 +1247,10 @@ proc newWindow*( proc title*(window: Window): string = window.state.title +proc vsync*(window: Window): bool = + ## Returns true when vertical sync is enabled for this window. + window.vsync + proc icon*(window: Window): Image = window.state.icon From 57a022fc37a4c6a0fd52750bdd5b71862dc78064 Mon Sep 17 00:00:00 2001 From: treeform Date: Fri, 13 Mar 2026 20:32:55 -0700 Subject: [PATCH 3/4] Update to useDirectX --- src/windy/platforms/win32/platform.nim | 74 ++++++++++++-------------- 1 file changed, 33 insertions(+), 41 deletions(-) diff --git a/src/windy/platforms/win32/platform.nim b/src/windy/platforms/win32/platform.nim index 5350d53..8e10ef0 100644 --- a/src/windy/platforms/win32/platform.nim +++ b/src/windy/platforms/win32/platform.nim @@ -4,19 +4,11 @@ import pixie/fileformats/bmp, pixie/images, urlly, utils, vmath, windefs, zippy -type BackendKind = enum - OpenGLBackend - DirectXBackend - -when defined(windyOpenGl): - {.hint: "Using OpenGL backend".} - const Backend = OpenGLBackend -elif defined(useDirectX): +when defined(useDirectX): {.hint: "Using DirectX backend".} - const Backend = DirectXBackend else: - # Use OpenGL by default - const Backend = OpenGLBackend + # OpenGL + {.hint: "Using OpenGL backend".} const windowClassName = "WINDY0" @@ -229,15 +221,15 @@ proc createWindow(windowClassName, title: string): HWND = if result == 0: raise newException(WindyError, "Creating native window failed") -when Backend == OpenGLBackend: +when defined(useDirectX): + proc destoryGraphicsContext(window: Window) = + discard +else: # OpenGL proc destoryGraphicsContext(window: Window) = if window.hglrc != 0: discard wglMakeCurrent(window.hdc, 0) discard wglDeleteContext(window.hglrc) window.hglrc = 0 -elif Backend == DirectXBackend: - proc destoryGraphicsContext(window: Window) = - discard proc destroy(window: Window) = ## Destroys the window and its graphics context. @@ -1056,7 +1048,32 @@ proc wndProc( DefWindowProcW(hWnd, uMsg, wParam, lParam) -when Backend == OpenGLBackend: +when defined(useDirectX): + + proc loadGraphicsContext() = + discard + + proc loadExtensions*() = + ## No-op in DirectX mode for OpenGL-compatible callers. + discard + + proc makeContextCurrent*(window: Window) = + discard + + proc swapBuffers*(window: Window) = + discard + + proc createGraphicsContext( + window: Window, + depthBits: int, + stencilBits: int, + msaa: MSAA, + vsync: bool, + openglVersion: OpenGLVersion + ) = + discard ShowWindow(window.hWnd, SW_HIDE) + +else: # OpenGL proc loadGraphicsContext() = loadOpenGL() @@ -1157,31 +1174,6 @@ when Backend == OpenGLBackend: if wglSwapIntervalEXT(if vsync: 1 else: 0) == 0: raise newException(WindyError, "Error setting swap interval") -elif Backend == DirectXBackend: - - proc loadGraphicsContext() = - discard - - proc loadExtensions*() = - ## No-op in DirectX mode for OpenGL-compatible callers. - discard - - proc makeContextCurrent*(window: Window) = - discard - - proc swapBuffers*(window: Window) = - discard - - proc createGraphicsContext( - window: Window, - depthBits: int, - stencilBits: int, - msaa: MSAA, - vsync: bool, - openglVersion: OpenGLVersion - ) = - discard ShowWindow(window.hWnd, SW_HIDE) - proc init() {.raises: [].} = if initialized: From 56cde50f962227b8f48cf4b854953fb40ee5937d Mon Sep 17 00:00:00 2001 From: treeform Date: Sun, 15 Mar 2026 11:27:53 -0700 Subject: [PATCH 4/4] Add small vulkan stub too. --- src/windy/platforms/win32/platform.nim | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/windy/platforms/win32/platform.nim b/src/windy/platforms/win32/platform.nim index 8e10ef0..d0228f1 100644 --- a/src/windy/platforms/win32/platform.nim +++ b/src/windy/platforms/win32/platform.nim @@ -6,6 +6,8 @@ import when defined(useDirectX): {.hint: "Using DirectX backend".} +elif defined(useVulkan): + {.hint: "Using Vulkan backend".} else: # OpenGL {.hint: "Using OpenGL backend".} @@ -221,7 +223,7 @@ proc createWindow(windowClassName, title: string): HWND = if result == 0: raise newException(WindyError, "Creating native window failed") -when defined(useDirectX): +when defined(useDirectX) or defined(useVulkan): proc destoryGraphicsContext(window: Window) = discard else: # OpenGL @@ -1048,13 +1050,12 @@ proc wndProc( DefWindowProcW(hWnd, uMsg, wParam, lParam) -when defined(useDirectX): +when defined(useDirectX) or defined(useVulkan): proc loadGraphicsContext() = discard proc loadExtensions*() = - ## No-op in DirectX mode for OpenGL-compatible callers. discard proc makeContextCurrent*(window: Window) =