#pragma once #include #include namespace MTL { class Device; class RenderPassDescriptor; } namespace CA { class MetalDrawable; } // The Cocoa bridge borrows these API objects for a single call. Ownership of // command buffers and readback storage stays inside the C++ renderer. class OrchardRenderer final { public: explicit OrchardRenderer(MTL::Device* device, bool verify_pixels); ~OrchardRenderer(); OrchardRenderer(const OrchardRenderer&) = delete; OrchardRenderer& operator=(const OrchardRenderer&) = delete; OrchardRenderer(OrchardRenderer&&) = delete; OrchardRenderer& operator=(OrchardRenderer&&) = delete; [[nodiscard]] bool has_capacity(); void draw(MTL::RenderPassDescriptor* pass, CA::MetalDrawable* drawable); void finish(); [[nodiscard]] std::size_t submitted() const noexcept; [[nodiscard]] std::size_t verified() const noexcept; private: struct Impl; std::unique_ptr impl_; };