+static void rc_set_shader(CoglHandle material)
+{
+ CoglHandle shader;
+ CoglHandle program;
+
+ shader = cogl_create_shader (COGL_SHADER_TYPE_FRAGMENT);
+ cogl_shader_source (shader,
+ "vec3 checker(vec2 texc, vec3 color0, vec3 color1)"
+ "{"
+ " if (mod(int(floor(texc.x) + floor(texc.y)), 2) == 0)"
+ " return color0;"
+ " else"
+ " return color1;"
+ "}"
+
+ "uniform sampler2D tex;"
+ "void main(void)"
+ "{"
+ " vec3 bg = checker(gl_FragCoord.xy / 16, vec3(0.6, 0.6, 0.6), vec3(0.4, 0.4, 0.4));"
+ " vec4 img4 = texture2D(tex, gl_TexCoord[0].xy);"
+ " vec3 img3 = img4.rgb;"
+ " gl_FragColor = vec4(img3 * img4.a + bg * (1.0 - img4.a), 1.0);"
+ "}"
+ );
+ cogl_shader_compile(shader);
+ gchar *err = cogl_shader_get_info_log(shader);
+ printf("%s\n",err);
+ g_free(err);
+
+ program = cogl_create_program ();
+ cogl_program_attach_shader (program, shader);
+ cogl_handle_unref (shader);
+ cogl_program_link (program);
+
+ gint uniform_no = cogl_program_get_uniform_location (program, "tex");
+ cogl_program_set_uniform_1i (program, uniform_no, 0);
+
+ cogl_material_set_user_program (material, program);
+ cogl_handle_unref (program);
+}
+