49 lines
1.2 KiB
GLSL
49 lines
1.2 KiB
GLSL
#version 450 core
|
|
|
|
layout (set = 0, binding = 0) uniform Matrices {
|
|
mat4 view;
|
|
mat4 proj;
|
|
float time;
|
|
vec3 cam_pos;
|
|
vec3 cam_dir;
|
|
vec4 frustum[6];
|
|
vec2 viewport;
|
|
float tess_factor;
|
|
float tess_edge_size;
|
|
};
|
|
|
|
layout(set = 0, binding = 1) uniform sampler2D heightmap;
|
|
|
|
layout(quads, equal_spacing, ccw) in;
|
|
|
|
|
|
layout (location = 0) in vec3 norm[];
|
|
layout (location = 1) in vec2 texCoord[];
|
|
layout (location = 2) in vec3 pos[];
|
|
|
|
layout (location = 0) out vec3 _norm;
|
|
layout (location = 1) out vec2 _texCoord;
|
|
layout (location = 2) out vec3 _pos;
|
|
|
|
|
|
void main() {
|
|
/* interpolation of UV coordinates */
|
|
vec2 uv1 = mix(texCoord[0], texCoord[1], gl_TessCoord.x);
|
|
vec2 uv2 = mix(texCoord[3], texCoord[2], gl_TessCoord.x);
|
|
_texCoord = mix(uv1, uv2, gl_TessCoord.y);
|
|
|
|
|
|
vec3 norm1 = mix(norm[0], norm[1], gl_TessCoord.x);
|
|
vec3 norm2 = mix(norm[3], norm[2], gl_TessCoord.x);
|
|
_norm = mix(norm1, norm2, gl_TessCoord.y);
|
|
|
|
/* not displacing yet */
|
|
vec4 pos1 = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);
|
|
vec4 pos2 = mix(gl_in[3].gl_Position, gl_in[2].gl_Position, gl_TessCoord.x);
|
|
|
|
vec4 fpos = mix(pos1, pos2, gl_TessCoord.y);
|
|
fpos.y = 15.0 * texture(heightmap, _texCoord).r;
|
|
|
|
_pos = fpos.xyz;
|
|
gl_Position = proj * view * fpos;
|
|
} |