50 lines
2.5 KiB
C++
50 lines
2.5 KiB
C++
#pragma once
|
|
#include "../architecture/Frame_Scheduler.h"
|
|
#include "../architecture/Update_Completion.h"
|
|
#include "../base/Geometry.h"
|
|
#include "Flow_Diagnostics.h"
|
|
#include "Frame_Flow_Host.h"
|
|
#include "Present_Surface_Lease.h"
|
|
#include "Render_Surface.h"
|
|
#include <cstdint>
|
|
#include <memory>
|
|
#include <memory_resource>
|
|
#include <vector>
|
|
|
|
namespace renderive {
|
|
|
|
class Renderable_Runtime;
|
|
class Renderable;
|
|
|
|
class Frame_Flow {
|
|
public:
|
|
virtual ~Frame_Flow() = default;
|
|
|
|
virtual void attach(Frame_Flow_Host& host) = 0;
|
|
[[nodiscard]] virtual std::unique_ptr<Renderable_Runtime> create_renderable_runtime(Renderable& owner) const = 0;
|
|
[[nodiscard]] virtual Frame_Flow_Runtime_Snapshot runtime_snapshot(std::uint64_t now_ns, bool destroying) const = 0;
|
|
virtual void advance_edit_version() = 0;
|
|
virtual void cancel_all_update_states() = 0;
|
|
[[nodiscard]] virtual Render_Frame_Surface begin_render_frame() = 0;
|
|
virtual void cancel_render_frame(Render_Frame_Surface&& surface) = 0;
|
|
virtual void discard_render_frame(Render_Frame_Surface&& surface) = 0;
|
|
[[nodiscard]] virtual Render_Surface_Publish_Result publish_rendered_frame(Render_Frame_Surface&& surface, std::uint64_t now_ns) = 0;
|
|
[[nodiscard]] virtual Render_Surface_Publish_Result request_present(std::uint64_t now_ns) = 0;
|
|
[[nodiscard]] virtual Present_Surface_Lease begin_present(std::uint64_t now_ns, std::shared_ptr<Frame_Lifecycle_Record>& returned_frame_record) = 0;
|
|
[[nodiscard]] virtual std::shared_ptr<Frame_Lifecycle_Record> end_present(Present_Surface_Lease&& surface, std::uint64_t paint_begin_ns, std::uint64_t paint_end_ns) = 0;
|
|
virtual void activate_view(std::uint64_t now_ns) = 0;
|
|
virtual void deactivate_view() = 0;
|
|
[[nodiscard]] virtual bool view_active() const = 0;
|
|
virtual void notify_model_dirty(Dirty_Reason reason, std::uint64_t now_ns) = 0;
|
|
virtual void notify_viewport_changed(Size viewport, std::uint64_t now_ns) = 0;
|
|
virtual void notify_render_finished(Frame_Lifecycle_Record& frame, std::uint64_t now_ns) = 0;
|
|
virtual void notify_paint_finished(std::uint64_t now_ns) = 0;
|
|
virtual void notify_frame_returned(Frame_Lifecycle_Record& frame, std::uint64_t now_ns) = 0;
|
|
virtual void notify_timer_fired(std::uint64_t now_ns) = 0;
|
|
virtual void drain_frame_update_states(std::pmr::vector<std::shared_ptr<Update_State>>& output) = 0;
|
|
[[nodiscard]] virtual Flow_Diagnostics diagnostics() const = 0;
|
|
virtual void shutdown() = 0;
|
|
};
|
|
|
|
} // namespace renderive
|