/*** cogl_fixed_fragment_shader_start ***/ /* There is no default precision for floats in fragment shaders in GLES 2 so we need to define one */ precision mediump float; /* Inputs from the vertex shader */ varying vec4 frag_color; varying vec2 tex_coord; varying float fog_amount; /* Texturing options */ uniform sampler2D texture_unit; /* Fogging options */ uniform vec4 fog_color; /* Alpha test options */ uniform float alpha_test_ref; void main (void) { /*** cogl_fixed_fragment_shader_texture_alpha_only ***/ /* If the texture only has an alpha channel (eg, with the textures from the pango renderer) then the RGB components will be black. We want to use the RGB from the current color in that case */ gl_FragColor = frag_color; gl_FragColor.a *= texture2D (texture_unit, tex_coord).a; /*** cogl_fixed_fragment_shader_texture ***/ /* This pointless extra variable is needed to work around an apparent bug in the PowerVR drivers. Without it the alpha blending seems to stop working */ vec4 frag_color_copy = frag_color; gl_FragColor = frag_color_copy * texture2D (texture_unit, tex_coord); /*** cogl_fixed_fragment_shader_solid_color ***/ gl_FragColor = frag_color; /*** cogl_fixed_fragment_shader_fog ***/ /* Mix the calculated color with the fog color */ gl_FragColor.rgb = mix (fog_color.rgb, gl_FragColor.rgb, fog_amount); /* Alpha testing */ /*** cogl_fixed_fragment_shader_alpha_never ***/ discard; /*** cogl_fixed_fragment_shader_alpha_less ***/ if (gl_FragColor.a >= alpha_test_ref) discard; /*** cogl_fixed_fragment_shader_alpha_equal ***/ if (gl_FragColor.a != alpha_test_ref) discard; /*** cogl_fixed_fragment_shader_alpha_lequal ***/ if (gl_FragColor.a > alpha_test_ref) discard; /*** cogl_fixed_fragment_shader_alpha_greater ***/ if (gl_FragColor.a <= alpha_test_ref) discard; /*** cogl_fixed_fragment_shader_alpha_notequal ***/ if (gl_FragColor.a == alpha_test_ref) discard; /*** cogl_fixed_fragment_shader_alpha_gequal ***/ if (gl_FragColor.a < alpha_test_ref) discard; /*** cogl_fixed_fragment_shader_end ***/ }