89 lines
2.0 KiB
GLSL
Executable File
89 lines
2.0 KiB
GLSL
Executable File
#type vertex
|
|
#version 410 core
|
|
layout(location = 0) in int a_textureID;
|
|
layout(location = 1) in float a_ambient_occlusion;
|
|
|
|
layout(location = 2) in float a_xPos;
|
|
layout(location = 3) in float a_yPos;
|
|
layout(location = 4) in float a_zPos;
|
|
|
|
layout(location = 5) in float a_a_light;
|
|
layout(location = 6) in float a_r_light;
|
|
layout(location = 7) in float a_g_light;
|
|
layout(location = 8) in float a_b_light;
|
|
|
|
layout(location = 9) in int a_normal;
|
|
|
|
layout(location = 10) in float a_u;
|
|
layout(location = 11) in float a_v;
|
|
|
|
uniform mat4 u_viewMatrix;
|
|
uniform mat4 u_worldMatrix;
|
|
|
|
uniform int u_chunkID_x;
|
|
uniform int u_chunkID_y;
|
|
uniform int u_chunkID_z;
|
|
|
|
uniform int u_textureSize;
|
|
|
|
out vec2 uv;
|
|
out vec3 voxel_light;
|
|
out float ambient_light;
|
|
out float ambient_occlusion;
|
|
|
|
flat out uint normal;
|
|
|
|
void main() {
|
|
voxel_light = vec3(a_r_light, a_g_light, a_b_light);
|
|
ambient_light = a_a_light;
|
|
ambient_occlusion = a_ambient_occlusion;
|
|
|
|
normal = a_normal;
|
|
|
|
int posY = a_textureID / u_textureSize;
|
|
int posX = a_textureID - posY * u_textureSize;
|
|
|
|
uv = vec2((a_u + float(posX)) / float(u_textureSize), (a_v + float(posY)) / float(u_textureSize));
|
|
|
|
gl_Position = u_viewMatrix * u_worldMatrix * vec4(a_xPos + u_chunkID_x * 32, a_yPos + u_chunkID_y * 32, a_zPos + u_chunkID_z * 32, 1.0);
|
|
}
|
|
|
|
#type fragment
|
|
#version 410 core
|
|
|
|
layout(location = 0) out vec4 fragColor;
|
|
layout(location = 1) out int objectID;
|
|
|
|
in vec2 uv;
|
|
in vec3 voxel_light;
|
|
in float ambient_light;
|
|
in float ambient_occlusion;
|
|
|
|
flat in uint normal;
|
|
|
|
uniform int u_objectID;
|
|
uniform sampler2D u_texture;
|
|
|
|
vec3 normalDir[6] = vec3[6](
|
|
vec3(-1, 0, 0),
|
|
vec3( 1, 0, 0),
|
|
vec3( 0, -1, 0),
|
|
vec3( 0, 1, 0),
|
|
vec3( 0, 0, -1),
|
|
vec3( 0, 0, 1)
|
|
);
|
|
|
|
void main()
|
|
{
|
|
objectID = -1;
|
|
|
|
vec3 normalVec = normalDir[normal];
|
|
|
|
vec3 tLight = vec3(ambient_light, ambient_light, ambient_light) + voxel_light;
|
|
tLight = vec3(clamp(tLight.r / 255, 0, 1), clamp(tLight.g / 255, 0, 1), clamp(tLight.b / 255, 0, 1));
|
|
|
|
vec3 col = texture(u_texture, uv).rgb * vec3(tLight);
|
|
col = (col * 3) / (3 + ambient_occlusion);
|
|
fragColor = vec4(col, 1);
|
|
}
|