49 lines
1.2 KiB
GLSL
49 lines
1.2 KiB
GLSL
#pragma language glsl4
|
|
|
|
in vec3 PixelNormal;
|
|
//in vec3 PixelColor;
|
|
in vec2 PixelTexture;
|
|
in float PixelBlock;
|
|
|
|
uniform sampler2D terrain_sampler;
|
|
|
|
out vec4 out_color;
|
|
|
|
layout (std430) readonly buffer TexturesLayout
|
|
{
|
|
uint Textures[];
|
|
};
|
|
|
|
void pixelmain()
|
|
{
|
|
vec3 light_direction = normalize(vec3(-1, -0.5, 0.5));
|
|
float diffuse_intensity = max(dot(PixelNormal, light_direction), 0.0);
|
|
|
|
//vec3 color = PixelColor * diffuse_intensity;
|
|
|
|
//int t_ix = int(PixelBlock) / 4;
|
|
//int t_shift = (int(PixelBlock) % 4) * 8;
|
|
//int terrain_ix = int(Textures[t_ix] >> t_shift);
|
|
int terrain_ix = int(Textures[int(PixelBlock)]);
|
|
int terrain_x = terrain_ix % 16;
|
|
int terrain_y = terrain_ix / 16;
|
|
|
|
ivec2 coord = ivec2(terrain_x, terrain_y) * 16;
|
|
coord += ivec2(int(PixelTexture.x * 16.0), int(PixelTexture.y * 16.0));
|
|
|
|
vec4 texture_color = texelFetch(terrain_sampler, coord, 0);
|
|
if (texture_color.w != 1.0) {
|
|
discard;
|
|
return;
|
|
}
|
|
|
|
if (int(PixelBlock) == 18) // leaves
|
|
texture_color.xyz *= vec3(0.125, 0.494, 0.027);
|
|
|
|
|
|
|
|
//out_color = vec4(color, 1.0);
|
|
out_color = vec4((texture_color * diffuse_intensity).xyz, 1.0);
|
|
//out_color = vec4(diffuse_intensity);
|
|
}
|