You can add a Shader in H2D using drawable.addShader
.
var bmp = new Bitmap(hxd.Res.my_image.toTile());
var shader = new SineDeformShader();
shader.speed = 1;
shader.amplitude = .1;
shader.frequency = .5;
shader.texture = bmp.tile.getTexture();
bmp.addShader(shader);
To create a custom shader, extend hxsl.Shader
and write the shader source in static SRC
.
You also need to add @:import h3d.shader.Base2d;
, which exposes helpful parameters (see next section).
@:import
will import definitions and thus assume you have this shader as part of your pipeline.
class SineDeformShader extends hxsl.Shader {
static var SRC = {
@:import h3d.shader.Base2d;
@param var texture : Sampler2D;
@param var speed : Float;
@param var frequency : Float;
@param var amplitude : Float;
function fragment() {
calculatedUV.y += sin(calculatedUV.y * frequency + time * speed) * amplitude; // wave deform
pixelColor = texture.get(calculatedUV);
}
}
}
For 2D shaders, the following parameters are available in the custom shader.
When in doubt, you can look these up in h3d.shader.Base2d
(which you have to import).
var spritePosition : Vec4;
var absolutePosition : Vec4;
var pixelColor : Vec4;
var textureColor : Vec4;
@var var calculatedUV : Vec2;
var outputPosition : Vec4;