Draw the whole 3D view in place of the client's renderer
CI / build (push) Failing after 0s

The full view is now the default. While the renderer process covers the whole
view (Channel::covering, set after each frame it presents), the adapter skips
the client's renderer's clears and draws, decided per frame; the client's
renderer still gets state and resources, and draws again as soon as the
renderer process stops covering the view.

The client's window no longer gets WS_CLIPCHILDREN: the client draws when its
window gets WM_PAINT, which a window entirely covered by clipped children never
gets (it fell to about one frame a second). The flip model swap chain shows
above the client's drawing anyway.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
dhkatzandClaude Opus 5.5 committed 2026-10-28 18:14:17 -07:00
1 parent 64e152de3c
commit 2d9da249fa
9 files changed
+74 -27

No files matched your search

+8 -3
View File
@@ -7,9 +7,10 @@
namespace t5de::protocol {
inline constexpr std::uint32_t version = 2;
inline constexpr std::uint32_t version = 3;
// Which part of the client's 3D view the renderer process draws (the client's own renderer draws all of it, under).
// Which part of the client's 3D view the renderer process draws. Full is the default; the others are for comparing
// with the client's renderer, which then draws the whole view under the renderer process's window.
enum class View : std::uint32_t {
Off, // none
Split, // the right half, to compare with the client's renderer on the left
@@ -30,9 +31,13 @@ struct Channel {
std::uint32_t capacity;
std::uint32_t chunkSize;
std::uint32_t chunkFlags; // chunkEndsFrame
// Set by the renderer process while its window covers the whole 3D view and it's presenting frames: the client's
// renderer then needn't draw (the adapter skips its draws; it draws again as soon as this is cleared).
std::uint32_t covering;
std::uint32_t reserved;
};
static_assert(sizeof(Channel) == 40, "same layout in 32-bit and 64-bit builds");
static_assert(sizeof(Channel) == 48, "same layout in 32-bit and 64-bit builds");
inline constexpr std::uint32_t chunkEndsFrame = 1;
inline constexpr std::uint32_t channelCapacity = 16 * 1024 * 1024;