From 3741e0eecf724c42c99d43bd0c466576ad378210 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sun, 31 Mar 2024 22:11:55 -0600 Subject: [PATCH] actual Godot compatibility changes --- shader-test/source/PlayState.kiss | 2 +- src/kiss_flixel/ShaderFrontend.hx | 66 +++++++++++++------ .../shaders}/MirroredOrnament.frag | 0 3 files changed, 46 insertions(+), 22 deletions(-) rename {shader-test/source => src/kiss_flixel/shaders}/MirroredOrnament.frag (100%) diff --git a/shader-test/source/PlayState.kiss b/shader-test/source/PlayState.kiss index 9af80cd..6e70998 100644 --- a/shader-test/source/PlayState.kiss +++ b/shader-test/source/PlayState.kiss @@ -17,7 +17,7 @@ (bg.screenCenter) (set bg.alpha 0.5) (add bg)) - (set shader (new MirroredOrnament)) + (set shader (new kiss_flixel.shaders.MirroredOrnament)) // (set shader.data.invert.value [true]) // (set shader.data.color1.value [1.0 1.0 1.0 1.0]) // (set shader.data.color2.value [0.0 0.0 0.0 1.0]) diff --git a/src/kiss_flixel/ShaderFrontend.hx b/src/kiss_flixel/ShaderFrontend.hx index 123714e..5e6651e 100644 --- a/src/kiss_flixel/ShaderFrontend.hx +++ b/src/kiss_flixel/ShaderFrontend.hx @@ -102,6 +102,7 @@ class ShaderFrontend implements FrontendPlugin { var colorOut = ""; var coordIn = ""; + transformedCode += "const float PI = 3.1415926535897932384626433832795;\n"; function nextToken() { glslStream.dropWhitespace(); @@ -132,36 +133,59 @@ class ShaderFrontend implements FrontendPlugin { default: } + // Shadertoy compatibility: case Some("iResolution"): transformedCode += "openfl_TextureSize"; - case Some("mainImage"): - dropNext("("); - dropNext("out"); - dropNext("vec4"); - switch (nextToken()) { - case Some(symbol): - colorOut = symbol; - default: - error(); - } - dropNext(","); - dropNext("in"); - dropNext("vec2"); - switch (nextToken()) { - case Some(symbol): - coordIn = symbol; - default: - error(); - } - dropNext(")"); - transformedCode += "main() "; + case Some("void"): + switch (nextToken()) { + case Some("mainImage"): + dropNext("("); + dropNext("out"); + dropNext("vec4"); + switch (nextToken()) { + case Some(symbol): + colorOut = symbol; + default: + error(); + } + dropNext(","); + dropNext("in"); + dropNext("vec2"); + switch (nextToken()) { + case Some(symbol): + coordIn = symbol; + default: + error(); + } + dropNext(")"); + transformedCode += "void main() "; + case Some("fragment"): + dropNext("()"); + transformedCode += "void main() "; + case Some(other): + transformedCode += 'void $other'; + default: + throw "expected name of void function"; + } case Some(name) if (name == colorOut): transformedCode += "gl_FragColor"; case Some(name) if (name == coordIn): transformedCode += "openfl_TextureCoordv * openfl_TextureSize"; + // Godot compatibility + case Some("TIME"): + transformedCode += "iTime"; + case Some("COLOR"): + transformedCode += "gl_FragColor"; + + // Not totally sure this actually is a 1-to-1 equivalency: + case Some("SCREEN_UV"): + transformedCode += "openfl_TextureCoordv"; + case Some("SCREEN_PIXEL_SIZE"): + transformedCode += "vec2(1 / openfl_TextureSize.x, 1 / openfl_TextureSize.y)"; + case Some("uniform"): var uType = expect("uniform type", nextToken); diff --git a/shader-test/source/MirroredOrnament.frag b/src/kiss_flixel/shaders/MirroredOrnament.frag similarity index 100% rename from shader-test/source/MirroredOrnament.frag rename to src/kiss_flixel/shaders/MirroredOrnament.frag