(&mut self, frame: RenderFrame<'_>)
| 971 | let mut caches = AHashMap::new(); |
| 972 | let bg = CacheProbe { |
| 973 | resolution: [3840, 2160], |
| 974 | mesh_count: 34, |
| 975 | transforms: vec![glam::Mat4::IDENTITY.to_cols_array_2d(); 34], |
| 976 | pipe: "raw-bg", |
| 977 | vertex_hook: false, |
| 978 | alpha_mode: 0, |
| 979 | pixels: [20, 40, 80, 255], |
| 980 | }; |
| 981 | let logo = CacheProbe { |
| 982 | resolution: [2464, 464], |
| 983 | mesh_count: 1, |
| 984 | transforms: vec![glam::Mat4::from_scale(glam::Vec3::splat(0.88)).to_cols_array_2d()], |
| 985 | pipe: "std-logo", |
| 986 | vertex_hook: true, |
| 987 | alpha_mode: 0, |
| 988 | pixels: [240, 80, 120, 255], |
| 989 | }; |
| 990 | camera_stream_cache_entry(&mut caches, first, || bg.clone()); |
| 991 | camera_stream_cache_entry(&mut caches, second, || logo.clone()); |
| 992 | |
| 993 | // Hide/show A, reload its material + shader, then switch its alpha |
| 994 | // mode. B must retain its exact cache throughout. |
| 995 | caches.remove(&first); |
| 996 | assert_eq!(caches.get(&second).map(Box::as_ref), Some(&logo)); |
| 997 | let reentered = camera_stream_cache_entry(&mut caches, first, || bg.clone()); |
| 998 | reentered.pipe = "raw-bg-reloaded"; |
| 999 | reentered.vertex_hook = true; |
| 1000 | reentered.alpha_mode = 2; |
| 1001 | reentered.pixels = [30, 60, 100, 255]; |
| 1002 | |
| 1003 | assert_eq!(caches.get(&second).map(Box::as_ref), Some(&logo)); |
| 1004 | let reentered = caches.get(&first).expect("bg cache should reenter"); |
| 1005 | assert_eq!(reentered.mesh_count, bg.mesh_count); |
| 1006 | assert_eq!(reentered.transforms, bg.transforms); |
| 1007 | assert_eq!(caches.len(), 2); |
| 1008 | } |
| 1009 | |
| 1010 | #[test] |
| 1011 | fn thousand_stream_slots_allocate_only_used_spatial_columns() { |
| 1012 | let nodes: Vec<_> = (0..1_000) |
| 1013 | .map(|index| NodeID::from_parts(index + 1, 0)) |
| 1014 | .collect(); |
| 1015 | let mut two_d = AHashMap::new(); |
| 1016 | let mut three_d = AHashMap::new(); |
| 1017 | |
| 1018 | for node in nodes.iter().step_by(100) { |
| 1019 | camera_stream_cache_entry(&mut two_d, *node, || "2d"); |
| 1020 | } |
| 1021 | for node in nodes.iter().skip(50).step_by(200) { |
| 1022 | camera_stream_cache_entry(&mut three_d, *node, || "3d"); |
| 1023 | } |
| 1024 | |
| 1025 | assert_eq!(nodes.len(), 1_000); |
| 1026 | assert_eq!(two_d.len(), 10); |
| 1027 | assert_eq!(three_d.len(), 5); |
| 1028 | } |
| 1029 | } |
no test coverage detected