2911fc03db
(clutter_stage_egl_realize): Use ES 2 renderable type when building for GLES 2. * clutter/eglnative/clutter-event-egl.c (get_backend_time): Added a NULL for the microseconds parameter of g_timer_elapsed. * clutter/eglnative/clutter-stage-egl.h: * clutter/eglnative/clutter-egl.h: * clutter/eglnative/clutter-backend-egl.h: Include clutter-egl-headers.h instead of including the GL headers directly so it can include gl2.h when building for GLES 2. * clutter/eglnative/clutter-egl-headers.h: * clutter/eglnative/Makefile.am (libclutter_eglnative_la_SOURCES): Added clutter-egl-headers.h * clutter/cogl/gles/cogl-fixed-fragment-shader.glsl: GLES 2 doesn't provide a default precision for floats in the fragment shader and it will reject the shader if there isn't one.
94 lines
2.2 KiB
GLSL
94 lines
2.2 KiB
GLSL
/* 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 bool texture_2d_enabled;
|
|
uniform sampler2D texture_unit;
|
|
uniform bool alpha_only;
|
|
|
|
/* Fogging options */
|
|
uniform bool fog_enabled;
|
|
uniform vec4 fog_color;
|
|
|
|
/* Alpha test options */
|
|
uniform bool alpha_test_enabled;
|
|
uniform int alpha_test_func;
|
|
uniform float alpha_test_ref;
|
|
|
|
/* Alpha test functions */
|
|
const int GL_NEVER = 0x0200;
|
|
const int GL_LESS = 0x0201;
|
|
const int GL_EQUAL = 0x0202;
|
|
const int GL_LEQUAL = 0x0203;
|
|
const int GL_GREATER = 0x0204;
|
|
const int GL_NOTEQUAL = 0x0205;
|
|
const int GL_GEQUAL = 0x0206;
|
|
|
|
void
|
|
main (void)
|
|
{
|
|
if (texture_2d_enabled)
|
|
{
|
|
if (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;
|
|
}
|
|
else
|
|
gl_FragColor = frag_color * texture2D (texture_unit, tex_coord);
|
|
}
|
|
else
|
|
gl_FragColor = frag_color;
|
|
|
|
if (fog_enabled)
|
|
/* Mix the calculated color with the fog color */
|
|
gl_FragColor.rgb = mix (fog_color.rgb, gl_FragColor.rgb, fog_amount);
|
|
|
|
/* Alpha testing */
|
|
if (alpha_test_enabled)
|
|
{
|
|
if (alpha_test_func == GL_NEVER)
|
|
discard;
|
|
else if (alpha_test_func == GL_LESS)
|
|
{
|
|
if (gl_FragColor.a >= alpha_test_ref)
|
|
discard;
|
|
}
|
|
else if (alpha_test_func == GL_EQUAL)
|
|
{
|
|
if (gl_FragColor.a != alpha_test_ref)
|
|
discard;
|
|
}
|
|
else if (alpha_test_func == GL_LEQUAL)
|
|
{
|
|
if (gl_FragColor.a > alpha_test_ref)
|
|
discard;
|
|
}
|
|
else if (alpha_test_func == GL_GREATER)
|
|
{
|
|
if (gl_FragColor.a <= alpha_test_ref)
|
|
discard;
|
|
}
|
|
else if (alpha_test_func == GL_NOTEQUAL)
|
|
{
|
|
if (gl_FragColor.a == alpha_test_ref)
|
|
discard;
|
|
}
|
|
else if (alpha_test_func == GL_GEQUAL)
|
|
{
|
|
if (gl_FragColor.a < alpha_test_ref)
|
|
discard;
|
|
}
|
|
}
|
|
}
|