#pragma once #include "../base/Geometry.h" #include "../base/Object_Semantics.h" #include "../architecture/Frame_Scheduler.h" #include "../render/Render_Output.h" #include #include #include namespace renderive { struct Render_Frame_Surface_Handle { virtual ~Render_Frame_Surface_Handle() = default; }; struct Render_Frame_Surface : Move_Only { Render_Frame_Surface() = default; Render_Frame_Surface(Render_Output* output, std::uint64_t input_version, std::unique_ptr handle) : output(output), input_version(input_version), handle(std::move(handle)) {} Render_Frame_Surface(Render_Frame_Surface&&) noexcept = default; Render_Frame_Surface& operator=(Render_Frame_Surface&&) noexcept = default; ~Render_Frame_Surface() = default; Render_Output* output{}; std::uint64_t input_version{}; std::unique_ptr handle; [[nodiscard]] explicit operator bool() const { return output && handle; } }; struct Render_Surface_Publish_Result { Rect dirty_rect; std::shared_ptr superseded_frame_record; std::shared_ptr dropped_frame_record; std::uint64_t update_request_id{}; std::uint64_t update_request_time{}; bool request_present{}; }; } // namespace renderive