27 lines
1.4 KiB
C++
27 lines
1.4 KiB
C++
#pragma once
|
|
#include "../base/Frame_3D.hpp"
|
|
#include "Backend_Types.hpp"
|
|
#include <functional>
|
|
#include <memory>
|
|
namespace aethera::render_3d::detail {
|
|
class Async_Render_Backend final {
|
|
public:
|
|
using Frame_Callback = std::function<void(Frame_3D*)>;
|
|
Async_Render_Backend(std::uint32_t gpu_index, bool validation_enabled, Visual_Family visual_family, Scene_3D_Parameters parameters);
|
|
~Async_Render_Backend();
|
|
Async_Render_Backend(const Async_Render_Backend&) = delete;
|
|
Async_Render_Backend& operator=(const Async_Render_Backend&) = delete;
|
|
/* 将绘制意图无等待提交到调用方拥有的帧;frame 必须存活到完成回调返回。 */
|
|
void render(const Prepared_Visual& visual, Scene_3D_Parameters parameters, Frame_3D* frame);
|
|
/* 设置完成帧出口;回调在 Datoviz Render Domain 线程执行。 */
|
|
void set_frame_callback(Frame_Callback callback);
|
|
[[nodiscard]] bool available() const noexcept;
|
|
enum class Dispatch_Event_Result : std::uint8_t { queued, ignored, invalid_event, queue_full, backend_unavailable };
|
|
/* 无等待提交事件所有权;queue_full 时调用方保留事件并在下一次 Prepare 重试。 */
|
|
[[nodiscard]] Dispatch_Event_Result dispatch_event(std::shared_ptr<const Event> event, Extent viewport);
|
|
private:
|
|
struct Implementation;
|
|
std::shared_ptr<Implementation> implementation_; /* 隔离实现并覆盖所有已入队异步工作的生命周期。 */
|
|
};
|
|
}
|