#pragma once #include "FluidSim/Machine.hpp" #include "FluidSim/Desktop/OrbitCamera.hpp" #include #include namespace fluidsim::port::desktop { struct MachineRenderStats {std::uint64_t pipe_mesh_builds{},icon_atlas_builds{};std::size_t cached_pipes{};}; class MachineRenderer3D { public: MachineRenderer3D(); ~MachineRenderer3D(); MachineRenderer3D(const MachineRenderer3D&)=delete; MachineRenderer3D& operator=(const MachineRenderer3D&)=delete; void draw(sf::RenderWindow&,const MachineDocument&,const MachineSnapshot*,sf::FloatRect,const OrbitCamera&,std::uint32_t selected,const MachinePart* ghost=nullptr,const std::vector& selection={}); void draw_icon(sf::RenderWindow&,MachinePartKind,sf::FloatRect); MachineRenderStats stats()const; private: struct Impl; std::unique_ptr impl_; }; }