blob: f096e82bf87aaa69d533440bfb57fa147a0c0677 [file] [log] [blame]
// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.examples.shadertoy;
using fuchsia.images;
using fuchsia.ui.gfx;
// Shadertoy (www.shadertoy.com) is an online community and tool for creating
// and sharing GLSL shaders. The genius of Shadertoy is that it side-steps the
// need for tedious glue code to bind assets such and meshs to GPU shader code.
// Instead, users simply provide GLSL fragment shader coder, which is bound to
// a predefined set of inputs (see https://www.shadertoy.com/howto).
//
// Shadertoy is also a FIDL interface to a Fuchsia service which provides a host
// environment for GLSL shaders conforming to the specification defined by the
// website (again, see https://www.shadertoy.com/howto), and for binding input
// data to these shaders.
//
// This interface does not concern itself with how to display the images
// rendered by the GLSL code; this is the responsibility of |ShadertoyFactory|,
// which is used to create Shadertoy instances.
protocol Shadertoy {
// Set whether rendering is paused or not.
SetPaused(bool paused);
// Set the GLSL shader code for the Shadertoy. Return true if compilation was
// successful and false otherwise.
// TODO: provide better error reporting when compilation fails.
SetShaderCode(string glsl) -> (bool successful);
// Corresponds to Shadertoy's 'iResolution' shader parameter.
SetResolution(uint32 width, uint32 height);
// Corresponds to Shadertoy's 'iMouse' shader parameter. The value is
// interpreted as follows:
// i_mouse.xy:
// - the position of the last mouse-down event
// i_mouse.zw
// - (when mouse is down) the current position of the mouse
// - (when mouse is up) the position of the last mouse-up event
SetMouse(fuchsia.ui.gfx.vec4 i_mouse);
// Corresponds to Shadertoy's 'iChannel0..3' parameters. Currently only 2D
// samplers are supported (no cubemaps). |channel| must be one of 0, 1, 2, 3.
// TODO: implement cubemap support.
SetImage(uint32 channel, request<fuchsia.images.ImagePipe> image_pipe);
};