29 lines
942 B
GLSL
29 lines
942 B
GLSL
#version 450
|
|
|
|
layout(location = 0) in vec3 fragPosition;
|
|
layout(location = 1) in vec4 fragWeights;
|
|
layout(location = 2) in vec2 fragUV;
|
|
|
|
layout(binding = 1) uniform sampler2DArray terrainTexArray;
|
|
|
|
layout(location = 0) out vec4 outColor;
|
|
|
|
void main() {
|
|
vec4 colorGrass = texture(terrainTexArray, vec3(fragUV, 0.0)); // Index 0
|
|
vec4 colorRock = texture(terrainTexArray, vec3(fragUV, 1.0)); // Index 1
|
|
vec4 colorSand = texture(terrainTexArray, vec3(fragUV, 2.0)); // Index 2
|
|
vec4 colorMud = texture(terrainTexArray, vec3(fragUV, 3.0)); // Index 3
|
|
|
|
vec4 dynamicTerrainColor =
|
|
(colorGrass * fragWeights.r) +
|
|
(colorRock * fragWeights.g) +
|
|
(colorSand * fragWeights.b) +
|
|
(colorMud * fragWeights.a);
|
|
|
|
float totalWeight = fragWeights.r + fragWeights.g + fragWeights.b + fragWeights.a;
|
|
if (totalWeight > 0.0) {
|
|
dynamicTerrainColor /= totalWeight;
|
|
}
|
|
|
|
outColor = dynamicTerrainColor;
|
|
}
|