43 lines
1.3 KiB
C++
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
|