summaryrefslogtreecommitdiff
path: root/clutter/tests/conform/actor-shader-effect.c
diff options
context:
space:
mode:
Diffstat (limited to 'clutter/tests/conform/actor-shader-effect.c')
-rw-r--r--clutter/tests/conform/actor-shader-effect.c288
1 files changed, 0 insertions, 288 deletions
diff --git a/clutter/tests/conform/actor-shader-effect.c b/clutter/tests/conform/actor-shader-effect.c
deleted file mode 100644
index ac99c5b40..000000000
--- a/clutter/tests/conform/actor-shader-effect.c
+++ /dev/null
@@ -1,288 +0,0 @@
-#define CLUTTER_ENABLE_EXPERIMENTAL_API
-#define CLUTTER_DISABLE_DEPRECATION_WARNINGS
-#include <clutter/clutter.h>
-
-/****************************************************************
- Old style shader effect
- This uses clutter_shader_effect_set_source
- ****************************************************************/
-
-static const gchar
-old_shader_effect_source[] =
- "uniform vec3 override_color;\n"
- "\n"
- "void\n"
- "main ()\n"
- "{\n"
- " cogl_color_out = vec4 (override_color, 1.0);\n"
- "}";
-
-typedef struct _FooOldShaderEffectClass
-{
- ClutterShaderEffectClass parent_class;
-} FooOldShaderEffectClass;
-
-typedef struct _FooOldShaderEffect
-{
- ClutterShaderEffect parent;
-} FooOldShaderEffect;
-
-GType foo_old_shader_effect_get_type (void);
-
-G_DEFINE_TYPE (FooOldShaderEffect,
- foo_old_shader_effect,
- CLUTTER_TYPE_SHADER_EFFECT);
-
-static void
-foo_old_shader_effect_paint_target (ClutterOffscreenEffect *effect)
-{
- clutter_shader_effect_set_shader_source (CLUTTER_SHADER_EFFECT (effect),
- old_shader_effect_source);
- clutter_shader_effect_set_uniform (CLUTTER_SHADER_EFFECT (effect),
- "override_color",
- G_TYPE_FLOAT, 3,
- 1.0f, 0.0f, 0.0f);
-
- CLUTTER_OFFSCREEN_EFFECT_CLASS (foo_old_shader_effect_parent_class)->
- paint_target (effect);
-}
-
-static void
-foo_old_shader_effect_class_init (FooOldShaderEffectClass *klass)
-{
- ClutterOffscreenEffectClass *offscreen_effect_class =
- CLUTTER_OFFSCREEN_EFFECT_CLASS (klass);
-
- offscreen_effect_class->paint_target = foo_old_shader_effect_paint_target;
-}
-
-static void
-foo_old_shader_effect_init (FooOldShaderEffect *self)
-{
-}
-
-/****************************************************************
- New style shader effect
- This overrides get_static_shader_source()
- ****************************************************************/
-
-static const gchar
-new_shader_effect_source[] =
- "uniform vec3 override_color;\n"
- "\n"
- "void\n"
- "main ()\n"
- "{\n"
- " cogl_color_out = (vec4 (override_color, 1.0) +\n"
- " vec4 (0.0, 0.0, 1.0, 0.0));\n"
- "}";
-
-typedef struct _FooNewShaderEffectClass
-{
- ClutterShaderEffectClass parent_class;
-} FooNewShaderEffectClass;
-
-typedef struct _FooNewShaderEffect
-{
- ClutterShaderEffect parent;
-} FooNewShaderEffect;
-
-GType foo_new_shader_effect_get_type (void);
-
-G_DEFINE_TYPE (FooNewShaderEffect,
- foo_new_shader_effect,
- CLUTTER_TYPE_SHADER_EFFECT);
-
-static gchar *
-foo_new_shader_effect_get_static_source (ClutterShaderEffect *effect)
-{
- static gboolean already_called = FALSE;
-
- /* This should only be called once even though we have two actors
- using this effect */
- g_assert (!already_called);
-
- already_called = TRUE;
-
- return g_strdup (new_shader_effect_source);
-}
-
-static void
-foo_new_shader_effect_paint_target (ClutterOffscreenEffect *effect)
-{
- clutter_shader_effect_set_uniform (CLUTTER_SHADER_EFFECT (effect),
- "override_color",
- G_TYPE_FLOAT, 3,
- 0.0f, 1.0f, 0.0f);
-
- CLUTTER_OFFSCREEN_EFFECT_CLASS (foo_new_shader_effect_parent_class)->
- paint_target (effect);
-}
-
-static void
-foo_new_shader_effect_class_init (FooNewShaderEffectClass *klass)
-{
- ClutterOffscreenEffectClass *offscreen_effect_class =
- CLUTTER_OFFSCREEN_EFFECT_CLASS (klass);
- ClutterShaderEffectClass *shader_effect_class =
- CLUTTER_SHADER_EFFECT_CLASS (klass);
-
- offscreen_effect_class->paint_target = foo_new_shader_effect_paint_target;
-
- shader_effect_class->get_static_shader_source =
- foo_new_shader_effect_get_static_source;
-}
-
-static void
-foo_new_shader_effect_init (FooNewShaderEffect *self)
-{
-}
-
-/****************************************************************
- Another new style shader effect
- This is the same but with a different shader. This is just
- sanity check that each class gets its own copy of the private
- data
- ****************************************************************/
-
-static const gchar
-another_new_shader_effect_source[] =
- "\n"
- "void\n"
- "main ()\n"
- "{\n"
- " cogl_color_out = vec4 (1.0, 0.0, 1.0, 1.0);\n"
- "}";
-
-typedef struct _FooAnotherNewShaderEffectClass
-{
- ClutterShaderEffectClass parent_class;
-} FooAnotherNewShaderEffectClass;
-
-typedef struct _FooAnotherNewShaderEffect
-{
- ClutterShaderEffect parent;
-} FooAnotherNewShaderEffect;
-
-GType foo_another_new_shader_effect_get_type (void);
-
-G_DEFINE_TYPE (FooAnotherNewShaderEffect,
- foo_another_new_shader_effect,
- CLUTTER_TYPE_SHADER_EFFECT);
-
-static gchar *
-foo_another_new_shader_effect_get_static_source (ClutterShaderEffect *effect)
-{
- return g_strdup (another_new_shader_effect_source);
-}
-
-static void
-foo_another_new_shader_effect_class_init (FooAnotherNewShaderEffectClass *klass)
-{
- ClutterShaderEffectClass *shader_effect_class =
- CLUTTER_SHADER_EFFECT_CLASS (klass);
-
- shader_effect_class->get_static_shader_source =
- foo_another_new_shader_effect_get_static_source;
-}
-
-static void
-foo_another_new_shader_effect_init (FooAnotherNewShaderEffect *self)
-{
-}
-
-/****************************************************************/
-
-static ClutterActor *
-make_actor (GType shader_type)
-{
- ClutterActor *rect;
- const ClutterColor white = { 0xff, 0xff, 0xff, 0xff };
-
- rect = clutter_rectangle_new ();
- clutter_rectangle_set_color (CLUTTER_RECTANGLE (rect), &white);
- clutter_actor_set_size (rect, 50, 50);
-
- clutter_actor_add_effect (rect, g_object_new (shader_type, NULL));
-
- return rect;
-}
-
-static guint32
-get_pixel (CoglFramebuffer *fb,
- int x,
- int y)
-{
- guint8 data[4];
-
- cogl_framebuffer_read_pixels (fb,
- x, y, 1, 1,
- COGL_PIXEL_FORMAT_RGBA_8888_PRE,
- data);
-
- return (((guint32) data[0] << 16) |
- ((guint32) data[1] << 8) |
- data[2]);
-}
-
-static void
-view_painted_cb (ClutterStage *stage,
- ClutterStageView *view,
- gpointer data)
-{
- CoglFramebuffer *fb = clutter_stage_view_get_framebuffer (view);
- gboolean *was_painted = data;
-
- /* old shader effect */
- g_assert_cmpint (get_pixel (fb, 0, 25), ==, 0xff0000);
- /* new shader effect */
- g_assert_cmpint (get_pixel (fb, 100, 25), ==, 0x00ffff);
- /* another new shader effect */
- g_assert_cmpint (get_pixel (fb, 200, 25), ==, 0xff00ff);
- /* new shader effect */
- g_assert_cmpint (get_pixel (fb, 300, 25), ==, 0x00ffff);
-
- *was_painted = TRUE;
-}
-
-static void
-actor_shader_effect (void)
-{
- ClutterActor *stage;
- ClutterActor *rect;
- gboolean was_painted;
-
- if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
- return;
-
- stage = clutter_stage_new ();
-
- rect = make_actor (foo_old_shader_effect_get_type ());
- clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect);
-
- rect = make_actor (foo_new_shader_effect_get_type ());
- clutter_actor_set_x (rect, 100);
- clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect);
-
- rect = make_actor (foo_another_new_shader_effect_get_type ());
- clutter_actor_set_x (rect, 200);
- clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect);
-
- rect = make_actor (foo_new_shader_effect_get_type ());
- clutter_actor_set_x (rect, 300);
- clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect);
-
- clutter_actor_show (stage);
-
- was_painted = FALSE;
- g_signal_connect_after (stage, "paint-view",
- G_CALLBACK (view_painted_cb),
- &was_painted);
-
- while (!was_painted)
- g_main_context_iteration (NULL, FALSE);
-}
-
-CLUTTER_TEST_SUITE (
- CLUTTER_TEST_UNIT ("/actor/shader-effect", actor_shader_effect)
-)