#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; }