#version 330 #extension GL_ARB_separate_shader_objects : require #ifdef GLINT #include #endif #include #include #include uniform sampler2D Sampler0; #ifdef GLINT uniform sampler2D GlintSampler; #endif #ifndef OIT_ALPHA_ONLY layout(location = 0) in float sphericalVertexDistance; layout(location = 1) in float cylindricalVertexDistance; #endif layout(location = 2) in vec4 vertexColor; #ifndef OIT_ALPHA_ONLY layout(location = 3) in vec4 lightMapColor; layout(location = 4) in vec4 overlayColor; #endif layout(location = 5) in vec2 texCoord0; #ifdef GLINT layout(location = 6) in vec2 texCoordGlint; #endif #ifndef OIT_ALPHA_ONLY layout(location = 0) out vec4 fragColor; #endif #ifndef OIT_ALPHA_ONLY vec4 calculateFinalColor(vec4 color) { color.rgb = mix(overlayColor.rgb, color.rgb, overlayColor.a); color *= lightMapColor; #ifdef GLINT vec4 glintColor = GlintAlpha * texture(GlintSampler, texCoordGlint);// Glint color modulator? // Matches BlendFuntion.GLINT color.rgb += glintColor.rgb * glintColor.rgb; #endif #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); } #endif void main() { vec4 color = texture(Sampler0, texCoord0); #ifdef ALPHA_CUTOUT if (color.a < ALPHA_CUTOUT) { discard; } #endif color *= vertexColor * ColorModulator; #ifdef GLINT color.a = max(color.a, GlintAlpha); #endif #ifdef OIT_ALPHA_ONLY executeAlphaOnlyPhase(gl_FragCoord.z, color.a); #else fragColor = calculateFinalColor(color); #endif }