v_shield/
platform_sync.rs1#[derive(Debug, Clone, Copy, PartialEq)]
27pub enum PlatformSyncMode {
28 X11,
30 OpenGL,
32 Auto,
34}
35
36pub struct PlatformSync {
43 enabled: bool,
45 mode: PlatformSyncMode,
47 frame: u64,
49}
50
51impl PlatformSync {
52 pub fn new() -> Self {
54 let mode = Self::detect_mode();
55 #[cfg(debug_assertions)]
56 println!(
57 "[PLATFORM SYNC] Detectado modo: {:?} (Termux-X11 compatible)",
58 mode
59 );
60 Self {
61 enabled: true,
62 mode,
63 frame: 0,
64 }
65 }
66
67 fn detect_mode() -> PlatformSyncMode {
69 if std::env::var("DISPLAY").is_ok() {
71 PlatformSyncMode::X11
72 } else {
73 PlatformSyncMode::OpenGL
74 }
75 }
76
77 pub fn sync(&mut self) {
79 if !self.enabled {
80 return;
81 }
82
83 self.frame += 1;
84
85 match self.mode {
86 PlatformSyncMode::X11 => {
87 self.xflush();
88 self.xsync();
89 }
90 PlatformSyncMode::OpenGL => {
91 self.gl_flush();
92 }
93 PlatformSyncMode::Auto => {
94 self.xflush();
96 self.gl_flush();
97 }
98 }
99 }
100
101 fn xflush(&self) {
103 #[cfg(debug_assertions)]
107 eprintln!("[PLATFORM SYNC] XFlush: stub (SDL2/raylib manejan internamente)");
108 }
109
110 fn xsync(&self) {
112 #[cfg(debug_assertions)]
114 eprintln!("[PLATFORM SYNC] XSync: stub (SDL2/raylib manejan internamente)");
115 }
116
117 fn gl_flush(&self) {
119 }
122
123 pub fn enable(&mut self) {
125 self.enabled = true;
126 }
127
128 pub fn disable(&mut self) {
130 self.enabled = false;
131 }
132
133 pub fn set_mode(&mut self, mode: PlatformSyncMode) {
135 self.mode = mode;
136 }
137
138 pub fn mode(&self) -> PlatformSyncMode {
140 self.mode
141 }
142
143 pub fn frame_count(&self) -> u64 {
145 self.frame
146 }
147}
148
149impl Default for PlatformSync {
150 fn default() -> Self {
151 Self::new()
152 }
153}
154
155#[cfg(test)]
156mod tests {
157 use super::*;
158
159 #[test]
160 fn test_platform_sync_new() {
161 let sync = PlatformSync::new();
162 assert!(sync.enabled);
163 assert_eq!(sync.frame, 0);
164 }
165
166 #[test]
167 fn test_platform_sync_enable_disable() {
168 let mut sync = PlatformSync::new();
169 sync.disable();
170 assert!(!sync.enabled);
171 sync.enable();
172 assert!(sync.enabled);
173 }
174
175 #[test]
176 fn test_platform_sync_sync_disabled() {
177 let mut sync = PlatformSync::new();
178 sync.disable();
179 sync.sync(); assert_eq!(sync.frame, 0);
181 }
182
183 #[test]
184 fn test_platform_sync_mode() {
185 let mut sync = PlatformSync::new();
186 sync.set_mode(PlatformSyncMode::OpenGL);
187 assert_eq!(sync.mode(), PlatformSyncMode::OpenGL);
188 sync.set_mode(PlatformSyncMode::X11);
189 assert_eq!(sync.mode(), PlatformSyncMode::X11);
190 }
191
192 #[test]
193 fn test_platform_sync_default() {
194 let sync = PlatformSync::default();
195 assert!(sync.enabled);
196 }
197}