46 lines
No EOL
1 KiB
Text
46 lines
No EOL
1 KiB
Text
|
|
vertex_shader [[
|
|
out vec2 v_uv;
|
|
void main()
|
|
{
|
|
v_uv = vec2(gl_VertexID & 1, (gl_VertexID & 2) * 0.5);
|
|
gl_Position = vec4((gl_VertexID & 1) * 2 - 1, (gl_VertexID & 2) - 1, 0, 1);
|
|
}
|
|
]]
|
|
|
|
|
|
|
|
fragment_shader [[
|
|
|
|
uniform sampler2D u_splatmap;
|
|
uniform sampler2DArray u_albedo;
|
|
uniform vec3 u_rel_camera_pos;
|
|
uniform int u_lod;
|
|
uniform int u_step;
|
|
uniform ivec4 u_from_to;
|
|
in vec2 v_uv;
|
|
|
|
out vec4 o_color;
|
|
|
|
void main()
|
|
{
|
|
vec2 splat_uv;
|
|
vec2 size = u_from_to.zw - u_from_to.xy;
|
|
splat_uv.x = (u_from_to.x + v_uv.x * size.x) * u_step / 1024;
|
|
splat_uv.y = (u_from_to.y + v_uv.y * size.y) * u_step / 1024;
|
|
|
|
/*
|
|
|
|
float s = pow(2, u_lod);
|
|
ivec2 ij = ivec2(trunc(trunc(u_rel_camera_pos.xz / s / 2) * s * 2) - ivec2(64 * s, 64 * s));
|
|
|
|
vec2 splat_uv = (ij / 2048.0 + v_uv / 1024.0 * 64 * s);
|
|
splat_uv.y = 1 - splat_uv.y;
|
|
*/
|
|
|
|
vec4 splat = texture(u_splatmap, splat_uv);
|
|
vec4 c2 = texture(u_albedo, vec3(splat_uv * 128, 0.5 + splat.x * 256));
|
|
o_color = vec4(c2.rgb, 1);
|
|
//o_color = vec4(splat.rgb, 1);
|
|
}
|
|
]] |