Files
Renderive/YSGraphic_Core/architecture/Render_Config.h
T
2026-07-24 10:54:44 +08:00

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