Shadow shader!
This commit is contained in:
BIN
shader-test/assets/images/flymanEdited.png
Normal file
BIN
shader-test/assets/images/flymanEdited.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 48 KiB |
@@ -18,6 +18,7 @@
|
|||||||
(array Class<FlxState>
|
(array Class<FlxState>
|
||||||
CheckerBoardState
|
CheckerBoardState
|
||||||
InvertState
|
InvertState
|
||||||
MirroredOrnamentState)
|
MirroredOrnamentState
|
||||||
|
ShadowState)
|
||||||
|
|
||||||
->choice (FlxG.switchState (Type.createInstance choice [])))))
|
->choice (FlxG.switchState (Type.createInstance choice [])))))
|
37
shader-test/source/ShadowState.kiss
Normal file
37
shader-test/source/ShadowState.kiss
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
(import flixel.FlxState)
|
||||||
|
(import flixel.FlxG)
|
||||||
|
(import flixel.FlxSprite)
|
||||||
|
(import flixel.util.FlxColor)
|
||||||
|
(import flixel.FlxCamera)
|
||||||
|
(import openfl.filters.BitmapFilter)
|
||||||
|
(import openfl.filters.ShaderFilter)
|
||||||
|
(import flixel.system.FlxAssets.FlxShader)
|
||||||
|
|
||||||
|
(extends FlxState)
|
||||||
|
|
||||||
|
(prop &mut shader null)
|
||||||
|
(prop &mut fgCamera null)
|
||||||
|
|
||||||
|
(prop &mut x 200)
|
||||||
|
(prop &mut y 200)
|
||||||
|
|
||||||
|
(prop &mut sprite null)
|
||||||
|
|
||||||
|
(method &override :Void create []
|
||||||
|
(super.create)
|
||||||
|
|
||||||
|
(set FlxG.camera.bgColor FlxColor.WHITE)
|
||||||
|
|
||||||
|
(set fgCamera (new FlxCamera))
|
||||||
|
(set fgCamera.bgColor FlxColor.TRANSPARENT)
|
||||||
|
(FlxG.cameras.add fgCamera)
|
||||||
|
|
||||||
|
(set sprite (new FlxSprite x y "assets/images/flymanEdited.png"))
|
||||||
|
(set sprite.cameras [fgCamera])
|
||||||
|
(add sprite)
|
||||||
|
|
||||||
|
(set shader (new kiss_flixel.shaders.Shadow))
|
||||||
|
(kiss_flixel.CameraTools.addShaderFilter fgCamera (array FlxShader shader)))
|
||||||
|
|
||||||
|
(method &override :Void update [:Float elapsed]
|
||||||
|
(super.update elapsed))
|
@@ -187,11 +187,17 @@ class ShaderFrontend implements FrontendPlugin {
|
|||||||
transformedCode += "iTime";
|
transformedCode += "iTime";
|
||||||
case Some("COLOR"):
|
case Some("COLOR"):
|
||||||
transformedCode += "gl_FragColor";
|
transformedCode += "gl_FragColor";
|
||||||
|
case Some("TEXTURE"):
|
||||||
|
transformedCode += "bitmap";
|
||||||
|
|
||||||
|
case Some("texture"):
|
||||||
|
transformedCode += "flixel_texture2D";
|
||||||
|
|
||||||
// Not totally sure this actually is a 1-to-1 equivalency:
|
// Not totally sure this actually is a 1-to-1 equivalency:
|
||||||
case Some("SCREEN_UV"):
|
case Some("SCREEN_UV" | "UV"):
|
||||||
transformedCode += "openfl_TextureCoordv";
|
transformedCode += "openfl_TextureCoordv";
|
||||||
case Some("SCREEN_PIXEL_SIZE"):
|
|
||||||
|
case Some("SCREEN_PIXEL_SIZE" | "TEXTURE_PIXEL_SIZE"):
|
||||||
transformedCode += "vec2(1.0 / openfl_TextureSize.x, 1.0 / openfl_TextureSize.y)";
|
transformedCode += "vec2(1.0 / openfl_TextureSize.x, 1.0 / openfl_TextureSize.y)";
|
||||||
|
|
||||||
// Uniform handling:
|
// Uniform handling:
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
#pragma header
|
#pragma header
|
||||||
|
|
||||||
// Source: https://godotshaders.com/shader/animated-mirrored-ornament/
|
// Source: https://godotshaders.com/shader/animated-mirrored-ornament/
|
||||||
// Modified by Nat
|
// by FencerDevLog (CC0)
|
||||||
|
// Ported to kiss-flixel by NQNStudios
|
||||||
|
|
||||||
uniform vec3 color_a = vec3(0.5);
|
uniform vec3 color_a = vec3(0.5);
|
||||||
uniform vec3 color_b = vec3(0.5);
|
uniform vec3 color_b = vec3(0.5);
|
||||||
|
28
src/kiss_flixel/shaders/Shadow.frag
Normal file
28
src/kiss_flixel/shaders/Shadow.frag
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
// Based on https://gist.github.com/deakcor/f9dfed4cf82cbd86b49bd1b56a6ebd9e
|
||||||
|
// by deakcor
|
||||||
|
// Ported to kiss-flixel by NQNStudios
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shadow 2D.
|
||||||
|
* License: CC0
|
||||||
|
* https://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
*/
|
||||||
|
uniform vec2 deform = vec2(2.0, 2.0);
|
||||||
|
uniform vec2 offset = vec2(0.0, 0.0);
|
||||||
|
uniform vec4 modulate = vec4(0.5, 0.5, 0.5, 1); // : hint_color;
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
vec2 ps = TEXTURE_PIXEL_SIZE;
|
||||||
|
vec2 uv = UV;
|
||||||
|
float sizex = openfl_TextureSize.x; // float(textureSize(TEXTURE,int(ps.x)).x);
|
||||||
|
float sizey = openfl_TextureSize.y; // float(textureSize(TEXTURE,int(ps.y)).y);
|
||||||
|
uv.y+=offset.y*ps.y;
|
||||||
|
uv.x+=offset.x*ps.x;
|
||||||
|
float decalx=((uv.y-ps.x*sizex)*deform.x);
|
||||||
|
float decaly=((uv.y-ps.y*sizey)*deform.y);
|
||||||
|
uv.x += decalx;
|
||||||
|
uv.y += decaly;
|
||||||
|
vec4 shadow = vec4(modulate.rgb, texture(TEXTURE, uv).a * modulate.a);
|
||||||
|
vec4 col = texture(TEXTURE, UV);
|
||||||
|
COLOR = mix(shadow, col, col.a);
|
||||||
|
}
|
Reference in New Issue
Block a user