#version 330 #extension GL_ARB_separate_shader_objects : require #include #include #include #include #include #ifndef MULTIDRAW_TERRAIN #include #endif uniform sampler2D Sampler0; layout(location = 0) in float sphericalVertexDistance; layout(location = 1) in float cylindricalVertexDistance; layout(location = 2) in vec4 vertexColor; layout(location = 3) in vec2 texCoord0; layout(location = 4) in float chunkVisibility; #ifndef OIT_ALPHA_ONLY layout(location = 0) out vec4 fragColor; #endif vec4 calculateFinalColor(vec4 color) { #ifdef OIT_ACCUMULATE color = sampleColorForAccumulation(color); vec4 fogColor = vec4(FogColor.rgb * color.a, FogColor.a); #else vec4 fogColor = FogColor; #endif return apply_fog(color, sphericalVertexDistance, cylindricalVertexDistance, FogEnvironmentalStart, FogEnvironmentalEnd, FogRenderDistanceStart, FogRenderDistanceEnd, fogColor); } void main() { vec4 color = (UseRgss == 1 ? sampleRGSS(Sampler0, texCoord0, 1.0f / TextureSize) : sampleNearest(Sampler0, texCoord0, 1.0f / TextureSize)) * vertexColor; #ifndef OIT_ALPHA_ONLY color = mix(FogColor * vec4(1, 1, 1, color.a), color, chunkVisibility); #endif #ifdef ALPHA_CUTOUT if (color.a < ALPHA_CUTOUT) { discard; } #endif #ifdef OIT_ALPHA_ONLY executeAlphaOnlyPhase(gl_FragCoord.z, color.a); #else fragColor = calculateFinalColor(color); #endif }