32 lines
1.4 KiB
C++
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"
|