Files
Aethera/render_2D/render_2D/module/scene/Render_Scene_2D.hpp
T
2026-09-03 16:57:18 +08:00

32 lines
1.4 KiB
C++

#pragma once
#include "frame/Frame_2D.hpp"
#include "export/export.h"
#include "model/Model.hpp"
#include "model/attachment/dirty/Dirty_Concurrent.hpp"
#include "model/attachment/dag/Dag_Relation.hpp"
#include "rely_facade.h"
#include <exception>
#include <functional>
#include "scene/src/Scene.hpp"
namespace aethera::render_2d {
/* 执行二维 Renderable DAG 并向调用方拥有的物理帧合成像素。 */
struct Render_Scene_2D : Def<Render_Scene_2D, Scene, Dirty_Import_Struct_Concurrent<Prop_Tag>> {
using Scene_Renderable_Facade = scene::Renderable;
struct Prop : Prev<Prop_Tag> {
Size viewport{}; /* 最终帧像素尺寸;空尺寸不提交渲染。 */
Color background{Color::black()}; /* 每帧绘制 Renderable 前写入的背景颜色。 */
bool view_active{}; /* true 时允许产生新的完成帧。 */
};
struct Private;
using Completion = std::function<void(Frame_2D *, std::exception_ptr)>;
Render_Scene_2D();
~Render_Scene_2D() noexcept;
/* frame 是非拥有借用,并须存活到 completion 返回;同一 Scene 仅允许一帧在途。 */
[[nodiscard]] Render_Scene_2D_Result render(Frame_2D* frame, Completion completion);
void activate_view();
void deactivate_view();
};
} // namespace aethera::render_2d
#include "Render_Scene_2D.ipp"