Funkin/source/funkin/graphics/shaders/StrokeShader.hx

65 lines
1.7 KiB
Haxe

package funkin.graphics.shaders;
import flixel.system.FlxAssets.FlxShader;
import flixel.util.FlxColor;
class StrokeShader extends FlxShader
{
// MOSTLY STOLEN FROM AUSTIN EAST LOL!
// https://gist.github.com/AustinEast/d3892fdf6a6079366fffde071f0c2bae
public var width(default, set):Float = 0;
public var height(default, set):Float = 0;
public var col(default, set):FlxColor = 0xFFFFFFFF;
function set_width(val):Float
{
size.value = [val, height];
return val;
}
function set_height(val):Float
{
size.value = [width, val];
return val;
}
function set_col(val:FlxColor):FlxColor
{
color.value = [val.red, val.green, val.blue, val.alpha];
return val;
}
@:glFragmentSource('
#pragma header
uniform vec2 size;
uniform vec4 color;
void main()
{
vec4 sample = flixel_texture2D(bitmap, openfl_TextureCoordv);
if (sample.a == 0.) {
float w = size.x / openfl_TextureSize.x;
float h = size.y / openfl_TextureSize.y;
if (flixel_texture2D(bitmap, vec2(openfl_TextureCoordv.x + w, openfl_TextureCoordv.y)).a != 0.
|| flixel_texture2D(bitmap, vec2(openfl_TextureCoordv.x - w, openfl_TextureCoordv.y)).a != 0.
|| flixel_texture2D(bitmap, vec2(openfl_TextureCoordv.x, openfl_TextureCoordv.y + h)).a != 0.
|| flixel_texture2D(bitmap, vec2(openfl_TextureCoordv.x, openfl_TextureCoordv.y - h)).a != 0.)
sample = color;
}
gl_FragColor = sample;
}
')
public function new(color:FlxColor = 0xFFFFFFFF, width:Float = 1, height:Float = 1)
{
super();
col = color;
this.width = width;
this.height = height;
}
}