mirror of
https://github.com/brl/mutter.git
synced 2025-01-11 12:12:25 +00:00
8366a906e2
* clutter/clutter-feature.h: * clutter/clutter-texture.c: * clutter/clutter-texture.h: * clutter/cogl/cogl.h: * clutter/cogl/gl/cogl.c: * clutter/cogl/gles/cogl.c: * tests/Makefile.am: * tests/test.fbo.c: Add initial support for FBO's in Clutter (OpenGL only so far). See new clutter_texture_new_from_actor() Initial implementation, needs work. * clutter/x11/clutter-stage-x11.c: (clutter_stage_x11_set_cursor_visible): Fall back to again not relying on xfixes to hide cursor. *sigh* * clutter/clutter-deprecated.h: Add clutter_group_find_child_by_id
101 lines
2.8 KiB
C
101 lines
2.8 KiB
C
/*#define TEST_GROUP */
|
|
|
|
#include <clutter/clutter.h>
|
|
|
|
#include <errno.h>
|
|
#include <stdlib.h>
|
|
#include <glib.h>
|
|
|
|
|
|
gint
|
|
main (gint argc,
|
|
gchar *argv[])
|
|
{
|
|
ClutterColor color={0x33, 0x44, 0x55, 0xff};
|
|
ClutterActor *fbo;
|
|
ClutterActor *actor;
|
|
ClutterActor *actor2;
|
|
ClutterActor *group;
|
|
ClutterShader *shader;
|
|
ClutterActor *stage;
|
|
ClutterActor *rectangle;
|
|
ClutterActor *clone;
|
|
GdkPixbuf *pixbuf;
|
|
GError *error = NULL;
|
|
|
|
clutter_init (&argc, &argv);
|
|
|
|
stage = clutter_stage_get_default ();
|
|
clutter_stage_set_color (CLUTTER_STAGE (stage), &color);
|
|
|
|
pixbuf = gdk_pixbuf_new_from_file ("redhand.png", &error);
|
|
if (!pixbuf)
|
|
g_error("pixbuf load failed: %s", error ? error->message : "Unknown");
|
|
|
|
/* actor = clutter_texture_new_from_pixbuf (pixbuf);*/
|
|
|
|
group = clutter_group_new ();
|
|
{
|
|
ClutterColor nothing = {0, 0,0,0};
|
|
rectangle = clutter_rectangle_new_with_color (¬hing);
|
|
clutter_actor_set_size (rectangle, 800, 270);
|
|
}
|
|
|
|
actor2 = clutter_texture_new_from_pixbuf (pixbuf);
|
|
clutter_container_add_actor (CLUTTER_CONTAINER (group), actor2);
|
|
{
|
|
ClutterColor yellow = {0xff, 0xff, 0x00, 0xff};
|
|
actor = clutter_label_new_with_text ("Sans 50px", "Hello hadyness");
|
|
clutter_label_set_color (CLUTTER_LABEL (actor), &yellow);
|
|
}
|
|
|
|
clutter_container_add_actor (CLUTTER_CONTAINER (group), actor);
|
|
clutter_container_add_actor (CLUTTER_CONTAINER (group), rectangle);
|
|
clutter_actor_set_position (actor, 0, 15);
|
|
|
|
clutter_actor_show_all (group);
|
|
|
|
fbo = clutter_texture_new_from_actor (group);
|
|
|
|
clutter_container_add_actor (CLUTTER_CONTAINER (stage), fbo);
|
|
clutter_actor_set_position (fbo, 20, 120);
|
|
clutter_actor_set_position (actor2, 130, 20);
|
|
|
|
shader = clutter_shader_new ();
|
|
clutter_shader_set_fragment_source (shader,
|
|
|
|
"uniform float radius ;"
|
|
"uniform sampler2DRect rectTexture;"
|
|
""
|
|
"void main()"
|
|
"{"
|
|
" vec4 color = texture2DRect(rectTexture, gl_TexCoord[0].st);"
|
|
" float u;"
|
|
" float v;"
|
|
" int count = 1;"
|
|
" for (u=-radius;u<radius;u++)"
|
|
" for (v=-radius;v<radius;v++)"
|
|
" {"
|
|
" color += texture2DRect(rectTexture, vec2(gl_TexCoord[0].s + u * 2.0, gl_TexCoord[0].t +v * 2.0));"
|
|
" count ++;"
|
|
" }"
|
|
""
|
|
" gl_FragColor = color / float(count);"
|
|
|
|
"}",
|
|
-1
|
|
);
|
|
|
|
clone = clutter_clone_texture_new (fbo);
|
|
clutter_container_add_actor (CLUTTER_CONTAINER (stage), clone);
|
|
clutter_actor_set_position (clone, 40, 300);
|
|
|
|
|
|
if(1)clutter_actor_apply_shader (clone, shader);
|
|
if(1)clutter_actor_set_shader_param (clone, "radius", 2.0);
|
|
|
|
|
|
clutter_actor_show_all (stage);
|
|
clutter_main ();
|
|
}
|