38 lines
1.1 KiB
GLSL
38 lines
1.1 KiB
GLSL
|
|
uniform mat4 ViewProjectionMatrix;
|
|
|
|
uniform float sphere_size;
|
|
uniform ivec3 grid_resolution;
|
|
uniform vec3 corner;
|
|
uniform vec3 increment_x;
|
|
uniform vec3 increment_y;
|
|
uniform vec3 increment_z;
|
|
uniform vec3 screen_vecs[2];
|
|
|
|
uniform int call_id; /* we don't want the builtin callId which would be 0. */
|
|
uniform int baseId;
|
|
|
|
flat out uint finalId;
|
|
|
|
void main()
|
|
{
|
|
vec3 ls_cell_location;
|
|
/* Keep in sync with update_irradiance_probe */
|
|
ls_cell_location.z = float(gl_VertexID % grid_resolution.z);
|
|
ls_cell_location.y = float((gl_VertexID / grid_resolution.z) % grid_resolution.y);
|
|
ls_cell_location.x = float(gl_VertexID / (grid_resolution.z * grid_resolution.y));
|
|
|
|
vec3 ws_cell_location = corner +
|
|
(increment_x * ls_cell_location.x + increment_y * ls_cell_location.y +
|
|
increment_z * ls_cell_location.z);
|
|
|
|
gl_Position = ViewProjectionMatrix * vec4(ws_cell_location, 1.0);
|
|
gl_PointSize = 2.0f;
|
|
|
|
finalId = uint(baseId + call_id);
|
|
|
|
#ifdef USE_WORLD_CLIP_PLANES
|
|
world_clip_planes_calc_clip_distance(ws_cell_location);
|
|
#endif
|
|
}
|