actual Godot compatibility changes

This commit is contained in:
2024-03-31 22:11:55 -06:00
parent 893be91d12
commit 3741e0eecf
3 changed files with 46 additions and 22 deletions

View File

@@ -17,7 +17,7 @@
(bg.screenCenter) (bg.screenCenter)
(set bg.alpha 0.5) (set bg.alpha 0.5)
(add bg)) (add bg))
(set shader (new MirroredOrnament)) (set shader (new kiss_flixel.shaders.MirroredOrnament))
// (set shader.data.invert.value [true]) // (set shader.data.invert.value [true])
// (set shader.data.color1.value [1.0 1.0 1.0 1.0]) // (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]) // (set shader.data.color2.value [0.0 0.0 0.0 1.0])

View File

@@ -102,6 +102,7 @@ class ShaderFrontend implements FrontendPlugin {
var colorOut = ""; var colorOut = "";
var coordIn = ""; var coordIn = "";
transformedCode += "const float PI = 3.1415926535897932384626433832795;\n";
function nextToken() { function nextToken() {
glslStream.dropWhitespace(); glslStream.dropWhitespace();
@@ -132,36 +133,59 @@ class ShaderFrontend implements FrontendPlugin {
default: default:
} }
// Shadertoy compatibility:
case Some("iResolution"): case Some("iResolution"):
transformedCode += "openfl_TextureSize"; transformedCode += "openfl_TextureSize";
case Some("mainImage"): case Some("void"):
dropNext("("); switch (nextToken()) {
dropNext("out"); case Some("mainImage"):
dropNext("vec4"); dropNext("(");
switch (nextToken()) { dropNext("out");
case Some(symbol): dropNext("vec4");
colorOut = symbol; switch (nextToken()) {
default: case Some(symbol):
error(); colorOut = symbol;
} default:
dropNext(","); error();
dropNext("in"); }
dropNext("vec2"); dropNext(",");
switch (nextToken()) { dropNext("in");
case Some(symbol): dropNext("vec2");
coordIn = symbol; switch (nextToken()) {
default: case Some(symbol):
error(); coordIn = symbol;
} default:
dropNext(")"); error();
transformedCode += "main() "; }
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): case Some(name) if (name == colorOut):
transformedCode += "gl_FragColor"; transformedCode += "gl_FragColor";
case Some(name) if (name == coordIn): case Some(name) if (name == coordIn):
transformedCode += "openfl_TextureCoordv * openfl_TextureSize"; 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"): case Some("uniform"):
var uType = expect("uniform type", nextToken); var uType = expect("uniform type", nextToken);