改链式调用
This commit is contained in:
@@ -9,8 +9,7 @@ namespace aethera::render_2d {
|
||||
/* 执行二维 Renderable 图、合成颜色层并发布最终像素帧。 */
|
||||
struct Render_Scene_2D : Def<Render_Scene_2D, Scene,
|
||||
Dependency_Graph_Type<Paint_Tag, Renderable_2D_Base>,
|
||||
Dependency_Graph_Type<Paint_Cache_Tag, Renderable_2D_Base>
|
||||
> {
|
||||
Dependency_Graph_Type<Paint_Cache_Tag, Renderable_2D_Base>> {
|
||||
struct Prop : Prev_Prop {
|
||||
Size viewport{}; /* 最终帧的像素尺寸;空尺寸不执行渲染。 */
|
||||
Color background{Color::black()}; /* 每帧合成前写入的背景颜色。 */
|
||||
@@ -25,10 +24,11 @@ struct Render_Scene_2D : Def<Render_Scene_2D, Scene,
|
||||
template <typename Object>
|
||||
struct Builder : Prev_Builder<Object> {
|
||||
using Base = Prev_Builder<Object>;
|
||||
using Final_Builder = typename Object::Builder;
|
||||
Builder();
|
||||
template <Attached Renderable_Object>
|
||||
requires std::derived_from<Renderable_Object, Renderable_2D_Base>
|
||||
Builder& add_renderable(Renderable_Object* renderable);
|
||||
Final_Builder& add_renderable(Renderable_Object* renderable);
|
||||
[[nodiscard]] std::expected<std::unique_ptr<Object>, Dependency_Graph_Error> build();
|
||||
private:
|
||||
std::vector<std::function<std::expected<void, Dependency_Graph_Error>(Object*)>> attachments{}; /* 仅在 build 期间绑定已构造 Renderable。 */
|
||||
|
||||
@@ -10,7 +10,7 @@ Render_Scene_2D::Builder<Object>::Builder() : Base() {}
|
||||
template <typename Object>
|
||||
template <Attached Renderable_Object>
|
||||
requires std::derived_from<Renderable_Object, Renderable_2D_Base>
|
||||
Render_Scene_2D::Builder<Object>& Render_Scene_2D::Builder<Object>::add_renderable(Renderable_Object* renderable) {
|
||||
typename Render_Scene_2D::Builder<Object>::Final_Builder& Render_Scene_2D::Builder<Object>::add_renderable(Renderable_Object* renderable) {
|
||||
attachments.emplace_back([renderable](Object* scene) {
|
||||
auto& data = Base::private_access(renderable).template get<Renderable_2D_Base::Base_Tag>();
|
||||
if (!data.scene_attach)
|
||||
@@ -18,7 +18,7 @@ Render_Scene_2D::Builder<Object>& Render_Scene_2D::Builder<Object>::add_renderab
|
||||
auto attach = std::move(data.scene_attach);
|
||||
return attach(scene);
|
||||
});
|
||||
return *this;
|
||||
return static_cast<Final_Builder&>(*this);
|
||||
}
|
||||
template <typename Object>
|
||||
std::expected<std::unique_ptr<Object>, Dependency_Graph_Error> Render_Scene_2D::Builder<Object>::build() {
|
||||
|
||||
Reference in New Issue
Block a user