MCPcopy Create free account
hub / github.com/PerroEngine/Perro / render

Method render

perro_source/render_stack/perro_graphics/src/gpu.rs:973–2138  ·  view source on GitHub ↗
(&mut self, frame: RenderFrame<'_>)

Source from the content-addressed store, hash-verified

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}

Callers 2

nextMethod · 0.45

Calls 15

sky_clear_colorFunction · 0.85
water_camera_view_projFunction · 0.85
idMethod · 0.80
depth_prepass_viewMethod · 0.80

Tested by

no test coverage detected