重定义模块职责

This commit is contained in:
2026-08-30 00:38:56 +08:00
parent 96828ce084
commit 7216a1703f
36 changed files with 2052 additions and 2638 deletions
+2 -3
View File
@@ -16,11 +16,10 @@ Frame_3D::Frame_3D(Frame_Identity identity, Frame_3D_Output output,
begin(identity, output, output_format);
}
void Frame_3D::begin(Frame_Identity identity, Frame_3D_Output output,
Pixel_Format output_format, Frame_Request_Source source,
const Frame_Policy::State& frame_policy) {
Pixel_Format output_format, Frame_Request_Source source) {
if (output_format != native_pixel_format)
throw std::invalid_argument("Frame_3D output pixel format is unsupported");
Render_Frame::begin(identity, source, frame_policy);
Render_Frame::begin(identity, source);
d->output = output;
d->output_format = output_format;
d->extent = {};
+1 -2
View File
@@ -38,8 +38,7 @@ public:
void begin(Frame_Identity identity,
Frame_3D_Output output = Frame_3D_Output::pixels,
Pixel_Format output_format = native_pixel_format,
Frame_Request_Source source = Frame_Request_Source::unspecified,
const Frame_Policy::State& frame_policy = {});
Frame_Request_Source source = Frame_Request_Source::unspecified);
[[nodiscard]] Extent extent() const noexcept;
[[nodiscard]] std::span<const std::byte> pixels() const noexcept;
[[nodiscard]] std::shared_ptr<const std::vector<std::byte>> share_pixels() const noexcept;
@@ -7,4 +7,36 @@ Render_Scene_3D::Render_Result Render_Scene_3D::render(
return double_buffer::detail::Internal_Access::get(this).render(
this, frame, std::move(callbacks));
}
Render_Frame_Result Render_Scene_3D::render_frame(
not_null<Render_Frame*> frame, Render_Frame_Callbacks callbacks) {
auto* concrete = dynamic_cast<Frame_3D*>(frame.get());
if (!concrete) return Render_Frame_Result::incompatible_frame;
const auto result = render(
not_null{concrete},
Frame_Callbacks{
.submitted = [callback = std::move(callbacks.submitted)](
not_null<Frame_3D*> submitted,
bool released_after_submission) mutable {
if (callback)
callback(submitted, released_after_submission);
},
.completed = [callback = std::move(callbacks.completed)](
not_null<Frame_3D*> completed) mutable {
if (callback) callback(completed);
}});
switch (result) {
case Render_Result::submitted:
return Render_Frame_Result::submitted;
case Render_Result::frame_pipeline_busy:
return Render_Frame_Result::frame_pipeline_busy;
case Render_Result::view_inactive:
return Render_Frame_Result::view_inactive;
case Render_Result::empty_viewport:
return Render_Frame_Result::empty_viewport;
case Render_Result::backend_unavailable:
return Render_Frame_Result::backend_unavailable;
}
return Render_Frame_Result::backend_unavailable;
}
}
@@ -13,7 +13,7 @@
namespace aethera::render_3d {
namespace detail { struct Datoviz_Visual_Operations; }
/* 执行公共 Renderable 图,并把结果无等待地提交给 Datoviz 渲染域。 */
struct Render_Scene_3D : Def<Render_Scene_3D, Scene> {
struct Render_Scene_3D : Def<Render_Scene_3D, Scene>, Render_Frame_Scene {
struct Prop : Prev_Prop {
Extent viewport{560, 320}; /* 离屏渲染目标尺寸,单位为像素。 */
Linear_Color clear_color{}; /* 每帧开始时写入的线性背景色。 */
@@ -59,6 +59,9 @@ struct Render_Scene_3D : Def<Render_Scene_3D, Scene> {
using Render_Result_Type = Render_Result;
using Render_Frame_Type = Frame_3D;
[[nodiscard]] Render_Result render(not_null<Frame_3D*> frame, Frame_Callbacks callbacks);
[[nodiscard]] Render_Frame_Result render_frame(
not_null<Render_Frame*> frame,
Render_Frame_Callbacks callbacks) override;
/*
* 无等待写入调用方拥有的 Frame;Scene 始终只借用地址。最多三个借用可在
* CPU Prepare、GPU 和读回阶段重叠,完成全部写入并清除借用后调用唯一完成回调。