Skip to main content

oxihuman_viewer/
render_queue_view.rs

1// Copyright (C) 2026 COOLJAPAN OU (Team KitaSan)
2// SPDX-License-Identifier: Apache-2.0
3#![allow(dead_code)]
4
5//! Render queue priority view — visualizes render queue depth and object sort order.
6
7/// Render queue view configuration.
8#[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
35/// Create a new render queue view.
36pub fn new_render_queue_view() -> RenderQueueView {
37    RenderQueueView::new()
38}
39
40/// Enable or disable render queue debug overlay.
41pub fn rqv_set_enabled(v: &mut RenderQueueView, enabled: bool) {
42    v.enabled = enabled;
43}
44
45/// Update current queue depth.
46pub fn rqv_set_queue_depth(v: &mut RenderQueueView, depth: u32) {
47    v.queue_depth = depth;
48}
49
50/// Toggle priority color-coding of objects.
51pub fn rqv_set_show_priority_colors(v: &mut RenderQueueView, show: bool) {
52    v.show_priority_colors = show;
53}
54
55/// Set max priority value for normalization.
56pub fn rqv_set_max_priority(v: &mut RenderQueueView, max: u32) {
57    v.max_priority = max.max(1);
58}
59
60/// Normalize a priority value to 0–1 range.
61pub 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
65/// Serialize to JSON-like string.
66pub 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}