Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_light/src/cluster/test.rs
6849 views
1
use bevy_math::UVec2;
2
3
use super::{ClusterConfig, Clusters};
4
5
fn test_cluster_tiling(config: ClusterConfig, screen_size: UVec2) -> Clusters {
6
let dims = config.dimensions_for_screen_size(screen_size);
7
8
// note: near & far do not affect tiling
9
let mut clusters = Clusters::default();
10
clusters.update(screen_size, dims);
11
12
// check we cover the screen
13
assert!(clusters.tile_size.x * clusters.dimensions.x >= screen_size.x);
14
assert!(clusters.tile_size.y * clusters.dimensions.y >= screen_size.y);
15
// check a smaller number of clusters would not cover the screen
16
assert!(clusters.tile_size.x * (clusters.dimensions.x - 1) < screen_size.x);
17
assert!(clusters.tile_size.y * (clusters.dimensions.y - 1) < screen_size.y);
18
// check a smaller tile size would not cover the screen
19
assert!((clusters.tile_size.x - 1) * clusters.dimensions.x < screen_size.x);
20
assert!((clusters.tile_size.y - 1) * clusters.dimensions.y < screen_size.y);
21
// check we don't have more clusters than pixels
22
assert!(clusters.dimensions.x <= screen_size.x);
23
assert!(clusters.dimensions.y <= screen_size.y);
24
25
clusters
26
}
27
28
#[test]
29
// check tiling for small screen sizes
30
fn test_default_cluster_setup_small_screensizes() {
31
for x in 1..100 {
32
for y in 1..100 {
33
let screen_size = UVec2::new(x, y);
34
let clusters = test_cluster_tiling(ClusterConfig::default(), screen_size);
35
assert!(clusters.dimensions.x * clusters.dimensions.y * clusters.dimensions.z <= 4096);
36
}
37
}
38
}
39
40
#[test]
41
// check tiling for long thin screen sizes
42
fn test_default_cluster_setup_small_x() {
43
for x in 1..10 {
44
for y in 1..5000 {
45
let screen_size = UVec2::new(x, y);
46
let clusters = test_cluster_tiling(ClusterConfig::default(), screen_size);
47
assert!(clusters.dimensions.x * clusters.dimensions.y * clusters.dimensions.z <= 4096);
48
49
let screen_size = UVec2::new(y, x);
50
let clusters = test_cluster_tiling(ClusterConfig::default(), screen_size);
51
assert!(clusters.dimensions.x * clusters.dimensions.y * clusters.dimensions.z <= 4096);
52
}
53
}
54
}
55
56