@@ -40,7 +40,15 @@ highp float y_to_lat(highp float y) {
40
40
}
41
41
42
42
highp vec3 camera_world_space_position(out vec2 uv, out float n_quads_per_direction, out float quad_width, out float quad_height, out float altitude_correction_factor) {
43
- highp int n_quads_per_direction_int = n_edge_vertices - 1 ;
43
+ highp uvec3 instance_tile_id = unpack_tile_id(instance_tile_id_packed);
44
+
45
+ highp uvec3 dtm_tile_id = instance_tile_id;
46
+ {
47
+ uint dtm_zoom = texelFetch(instance_2_zoom_sampler, ivec2 (uint (gl_InstanceID ), 0 ), 0 ).x;
48
+ decrease_zoom_level_until(dtm_tile_id, dtm_zoom);
49
+ }
50
+
51
+ highp int n_quads_per_direction_int = (n_edge_vertices - 1 ) >> (instance_tile_id.z - dtm_tile_id.z);
44
52
n_quads_per_direction = float (n_quads_per_direction_int);
45
53
// highp vec4 bounds = texelFetch(instance_2_bounds_sampler, ivec2(uint(gl_InstanceID), 0), 0);
46
54
quad_width = (instance_bounds.z - instance_bounds.x) / n_quads_per_direction;
@@ -67,6 +75,14 @@ highp vec3 camera_world_space_position(out vec2 uv, out float n_quads_per_direct
67
75
col = curtain_vertex_id - 3 * n_edge_vertices + 3 ;
68
76
}
69
77
}
78
+ if (row > n_quads_per_direction_int) {
79
+ row = n_quads_per_direction_int;
80
+ curtain_vertex_id = 1 ;
81
+ }
82
+ if (col > n_quads_per_direction_int) {
83
+ col = n_quads_per_direction_int;
84
+ curtain_vertex_id = 1 ;
85
+ }
70
86
// Note: for higher zoom levels it would be enough to calculate the altitude_correction_factor on cpu
71
87
// for lower zoom levels we could bake it into the texture.
72
88
// but there was no measurable difference despite a cos and a atan, so leaving as is for now.
@@ -77,13 +93,13 @@ highp vec3 camera_world_space_position(out vec2 uv, out float n_quads_per_direct
77
93
uv = vec2 (float (col) / n_quads_per_direction, float (row) / n_quads_per_direction);
78
94
79
95
// ///////
80
- highp vec2 geom_uv = uv;
81
- uint geom_zoom = texelFetch(instance_2_zoom_sampler, ivec2 ( uint ( gl_InstanceID ), 0 ), 0 ).x ;
82
- highp uvec3 geom_tile_id = unpack_tile_id(instance_tile_id_packed) ;
83
- decrease_zoom_level_until(geom_tile_id, geom_uv, geom_zoom );
84
- highp float geom_texture_layer_f = float (texelFetch(instance_2_array_index_sampler, ivec2 ( uint ( gl_InstanceID ), 0 ), 0 ).x);
85
- // float altitude_tex = float(geom_texture_layer_f );
86
- float altitude_tex = float (texture(height_tex_sampler, vec3 (geom_uv, geom_texture_layer_f )).r);
96
+ highp vec2 dtm_uv = uv;
97
+ uint dtm_zoom = dtm_tile_id.z ;
98
+ dtm_tile_id = instance_tile_id ;
99
+ decrease_zoom_level_until(dtm_tile_id, dtm_uv, dtm_zoom );
100
+
101
+ highp float dtm_texture_layer_f = float (texelFetch(instance_2_array_index_sampler, ivec2 ( uint ( gl_InstanceID ), 0 ), 0 ).x );
102
+ float altitude_tex = float (texture(height_tex_sampler, vec3 (dtm_uv, dtm_texture_layer_f )).r);
87
103
// //////
88
104
// float altitude_tex = float(texelFetch(height_tex_sampler, ivec3(col, row, height_texture_layer), 0).r);
89
105
float adjusted_altitude = altitude_tex * altitude_correction_factor;
0 commit comments