oxihuman_viewer/
render_queue_view.rs1#![allow(dead_code)]
4
5#[derive(Debug, Clone)]
9pub struct RenderQueueView {
10 pub enabled: bool,
11 pub queue_depth: u32,
12 pub show_priority_colors: bool,
13 pub max_priority: u32,
14 pub sort_key_bits: u8,
15}
16
17impl RenderQueueView {
18 pub fn new() -> Self {
19 Self {
20 enabled: false,
21 queue_depth: 0,
22 show_priority_colors: true,
23 max_priority: 255,
24 sort_key_bits: 64,
25 }
26 }
27}
28
29impl Default for RenderQueueView {
30 fn default() -> Self {
31 Self::new()
32 }
33}
34
35pub fn new_render_queue_view() -> RenderQueueView {
37 RenderQueueView::new()
38}
39
40pub fn rqv_set_enabled(v: &mut RenderQueueView, enabled: bool) {
42 v.enabled = enabled;
43}
44
45pub fn rqv_set_queue_depth(v: &mut RenderQueueView, depth: u32) {
47 v.queue_depth = depth;
48}
49
50pub fn rqv_set_show_priority_colors(v: &mut RenderQueueView, show: bool) {
52 v.show_priority_colors = show;
53}
54
55pub fn rqv_set_max_priority(v: &mut RenderQueueView, max: u32) {
57 v.max_priority = max.max(1);
58}
59
60pub fn rqv_normalize_priority(v: &RenderQueueView, priority: u32) -> f32 {
62 (priority.min(v.max_priority) as f32 / v.max_priority as f32).clamp(0.0, 1.0)
63}
64
65pub fn render_queue_view_to_json(v: &RenderQueueView) -> String {
67 format!(
68 r#"{{"enabled":{},"queue_depth":{},"show_priority_colors":{},"max_priority":{},"sort_key_bits":{}}}"#,
69 v.enabled, v.queue_depth, v.show_priority_colors, v.max_priority, v.sort_key_bits
70 )
71}
72
73#[cfg(test)]
74mod tests {
75 use super::*;
76
77 #[test]
78 fn test_defaults() {
79 let v = new_render_queue_view();
80 assert!(!v.enabled);
81 assert_eq!(v.max_priority, 255);
82 }
83
84 #[test]
85 fn test_enable() {
86 let mut v = new_render_queue_view();
87 rqv_set_enabled(&mut v, true);
88 assert!(v.enabled);
89 }
90
91 #[test]
92 fn test_queue_depth_set() {
93 let mut v = new_render_queue_view();
94 rqv_set_queue_depth(&mut v, 500);
95 assert_eq!(v.queue_depth, 500);
96 }
97
98 #[test]
99 fn test_priority_colors_toggle() {
100 let mut v = new_render_queue_view();
101 rqv_set_show_priority_colors(&mut v, false);
102 assert!(!v.show_priority_colors);
103 }
104
105 #[test]
106 fn test_max_priority_min() {
107 let mut v = new_render_queue_view();
108 rqv_set_max_priority(&mut v, 0);
109 assert_eq!(v.max_priority, 1);
110 }
111
112 #[test]
113 fn test_normalize_priority_mid() {
114 let v = new_render_queue_view();
115 let n = rqv_normalize_priority(&v, 128);
116 assert!(n > 0.0 && n < 1.0);
117 }
118
119 #[test]
120 fn test_normalize_priority_max() {
121 let v = new_render_queue_view();
122 assert!((rqv_normalize_priority(&v, 255) - 1.0).abs() < 1e-5);
123 }
124
125 #[test]
126 fn test_normalize_priority_zero() {
127 let v = new_render_queue_view();
128 assert_eq!(rqv_normalize_priority(&v, 0), 0.0);
129 }
130
131 #[test]
132 fn test_json_keys() {
133 let v = new_render_queue_view();
134 let s = render_queue_view_to_json(&v);
135 assert!(s.contains("sort_key_bits"));
136 }
137
138 #[test]
139 fn test_clone() {
140 let v = new_render_queue_view();
141 let v2 = v.clone();
142 assert_eq!(v2.max_priority, v.max_priority);
143 }
144}