Clear WS_CLIPCHILDREN on the client's window
CI / build (push) Successful in 54s

The client creates its 3D view's window with it, so not adding it wasn't
enough: covered entirely by the renderer's window, the client's window got no
WM_PAINT and the client still drew about once a second.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
dhkatzandClaude Opus 5.5 committed 2026-10-28 18:18:23 -07:00
1 parent 97b1d36466
commit 7bf29f3e4c
2 files changed
+6 -4

No files matched your search

+4 -3
View File
@@ -89,9 +89,10 @@ std::unique_ptr<RendererProcess> RendererProcess::start(HWND window, protocol::V
.reserved = 0};
// The renderer's window goes on top of the client's 3D view, as a child window. The client's window mustn't clip
// its children (WS_CLIPCHILDREN): the client draws a frame when its window gets WM_PAINT, which a window entirely
// covered by clipped children never gets (it then drew about once a second). The renderer's swap chain is a flip
// model one, which the compositor shows above the client's drawing anyway.
// its children (WS_CLIPCHILDREN, which the client creates it with): the client draws a frame when its window gets
// WM_PAINT, which a window entirely covered by clipped children never gets (it then drew about once a second). The
// renderer's swap chain is a flip model one, which the compositor shows above the client's drawing anyway.
SetWindowLongW(window, GWL_STYLE, GetWindowLongW(window, GWL_STYLE) & ~WS_CLIPCHILDREN);
const auto exe = running_copy(module_folder() / L"t5de-renderer.exe");
std::wstring command = std::format(L"\"{}\" --channel {} --parent {}", exe.wstring(), name, GetCurrentProcessId());
STARTUPINFOW startup{.cb = sizeof(STARTUPINFOW)};