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]>
46 lines
1.5 KiB
C++
46 lines
1.5 KiB
C++
#pragma once
|
|
// The renderer process (t5de-renderer.exe, 64-bit) an engine draws through: started with the engine, sent the
|
|
// command stream through a shared memory channel (include/t5de/protocol/channel.hpp), and told to exit with it.
|
|
|
|
#include <windows.h>
|
|
|
|
#include <cstddef>
|
|
#include <memory>
|
|
#include <span>
|
|
|
|
#include "t5de/protocol/channel.hpp"
|
|
|
|
namespace t5de {
|
|
|
|
class RendererProcess {
|
|
public:
|
|
// Starts t5de-renderer.exe from this DLL's folder, drawing into part of window; null if it can't.
|
|
static std::unique_ptr<RendererProcess> start(HWND window, protocol::View view);
|
|
|
|
RendererProcess(const RendererProcess&) = delete;
|
|
RendererProcess& operator=(const RendererProcess&) = delete;
|
|
~RendererProcess();
|
|
|
|
// Sends commands, in as many chunks as they take; endsFrame marks the end of a frame. False if the renderer
|
|
// process is gone or stopped taking them (it's then given up on).
|
|
bool send(std::span<const std::byte> commands, bool endsFrame);
|
|
|
|
[[nodiscard]] bool alive() const { return alive_; }
|
|
|
|
// Whether the renderer process covers the whole 3D view (protocol::Channel::covering).
|
|
[[nodiscard]] bool covering() const { return alive_ && channel_->covering != 0; }
|
|
|
|
private:
|
|
RendererProcess() = default;
|
|
|
|
HANDLE mapping_ = nullptr;
|
|
HANDLE ready_ = nullptr;
|
|
HANDLE consumed_ = nullptr;
|
|
HANDLE process_ = nullptr;
|
|
protocol::Channel* channel_ = nullptr;
|
|
std::byte* data_ = nullptr;
|
|
bool alive_ = true;
|
|
};
|
|
|
|
} // namespace t5de
|