Files
Renderive/Core/flow/Render_Surface.h
T
2026-08-02 14:20:27 +08:00

43 lines
1.3 KiB
C++

#pragma once
#include "../base/Geometry.h"
#include "../base/Object_Semantics.h"
#include "../architecture/Frame_Scheduler.h"
#include "../render/Render_Output.h"
#include <cstdint>
#include <memory>
#include <utility>
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<Render_Frame_Surface_Handle> 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<Render_Frame_Surface_Handle> handle;
[[nodiscard]] explicit operator bool() const {
return output && handle;
}
};
struct Render_Surface_Publish_Result {
Rect dirty_rect;
std::shared_ptr<Frame_Lifecycle_Record> superseded_frame_record;
std::shared_ptr<Frame_Lifecycle_Record> dropped_frame_record;
std::uint64_t update_request_id{};
std::uint64_t update_request_time{};
bool request_present{};
};
} // namespace renderive