83 lines
2.5 KiB
C++
83 lines
2.5 KiB
C++
#pragma once
|
|
#include <cstdint>
|
|
#include "Triple_Buffer.h"
|
|
namespace YSG {
|
|
/// 绘制或渲染线程获取三缓冲物理块时的策略。
|
|
enum class Plot_Buffer_Acquire_Mode : std::uint8_t {
|
|
/// 缓冲被占用时立即放弃本次获取。
|
|
Try,
|
|
/// 缓冲被占用时等待释放。
|
|
Wait
|
|
};
|
|
/// Plot 级渲染调度策略。
|
|
enum class Plot_Render_Schedule_Mode : std::uint8_t {
|
|
/// 只由定时器周期性检查是否需要提交。
|
|
Timer_Check,
|
|
/// 有新状态时尽快追到最新帧。
|
|
Chase_Latest,
|
|
/// 有新状态时按最大帧率闸门提交。
|
|
Max_Fps,
|
|
/// 只接受显式手动请求。
|
|
Manual
|
|
};
|
|
/// Renderable 级调度策略。
|
|
enum class RenderAble_Render_Schedule_Mode : std::uint8_t {
|
|
/// 使用父 Plot 的调度策略。
|
|
Inherit,
|
|
/// 本对象有新状态时尽快追到最新帧。
|
|
Chase_Latest,
|
|
/// 本对象按自己的最大帧率提交。
|
|
Max_Fps,
|
|
/// 只在 dirty 后参与调度。
|
|
On_Dirty,
|
|
/// 本对象只接受手动请求。
|
|
Manual
|
|
};
|
|
/// 渲染请求来源。
|
|
enum class Render_Request_Source : std::uint8_t {
|
|
/// 调度定时器触发。
|
|
Timer,
|
|
/// 数据或状态 dirty 触发。
|
|
Dirty,
|
|
/// 上一帧完成后触发。
|
|
Finish,
|
|
/// 外部显式请求触发。
|
|
Manual
|
|
};
|
|
/// 把 Plot 公开获取策略转换成底层三缓冲策略。
|
|
inline Triple_Buffer_Mode to_triple_buffer_mode(Plot_Buffer_Acquire_Mode mode) {
|
|
return mode == Plot_Buffer_Acquire_Mode::Wait ? Triple_Buffer_Mode::Wait : Triple_Buffer_Mode::Try;
|
|
}
|
|
/// State 三缓冲角色。
|
|
enum State_Role : std::uint8_t {
|
|
/// GUI/edit 写入角色。
|
|
State_Edit,
|
|
/// 已发布等待 render 消费的角色。
|
|
State_Ready,
|
|
/// render 当前使用角色。
|
|
State_Render
|
|
};
|
|
/// Input 三缓冲角色。
|
|
enum Input_Role : std::uint8_t {
|
|
/// GUI/edit 写入输入角色。
|
|
Input_Edit,
|
|
/// 已发布等待 render 消费的输入角色。
|
|
Input_Ready,
|
|
/// render 当前消费输入角色。
|
|
Input_Render
|
|
};
|
|
/// Color 三缓冲角色。
|
|
enum Color_Role : std::uint8_t {
|
|
/// QWidget paintEvent 当前显示角色。
|
|
Color_Front,
|
|
/// render 已发布等待 paint 消费角色。
|
|
Color_Ready,
|
|
/// render 当前写入角色。
|
|
Color_Render
|
|
};
|
|
/// 按无符号版本号环绕语义判断 a 是否比 b 更新。
|
|
inline bool buffer_version_newer(std::uint64_t a, std::uint64_t b) {
|
|
return static_cast<std::int64_t>(a - b) > 0;
|
|
}
|
|
} // namespace YSG
|