Example #1
0
int
main (int argc, char **argv)
{
	cairo_t *cr;
	cairo_surface_t *dst, *src;
	CustomEffect *effect;
	PixelShader *shader;
	int stride = width * 4;
        Rect bounds = Rect (0, 0, width, height);
	gpointer data;
	bool status;

	if (argc < 2) {
		printf ("usage: %s SHADERFILE\n", argv[0]);
		return 1;
	}

	gtk_init (&argc, &argv);

	runtime_init_desktop ();

	data = g_malloc0 (height * stride);
        dst = cairo_image_surface_create_for_data ((unsigned char *) data,
                                                   CAIRO_FORMAT_ARGB32,
                                                   width, height, stride);
	src = cairo_surface_create_similar (dst,
					    CAIRO_CONTENT_COLOR_ALPHA,
					    width, height);
        cr = cairo_create (dst);

	effect = new CustomEffect ();
	shader = new PixelShader ();

	shader->SetTokensFromPath (argv[1]);
	effect->SetPixelShader (shader);

	status = effect->Render (cr, src, NULL, 0, 0, width, height);

	effect->unref ();
	shader->unref ();

        cairo_destroy (cr);
	cairo_surface_destroy (src);
	cairo_surface_destroy (dst);
	g_free (data);

	runtime_shutdown ();

	return status != true;
}