diff --git a/README.md b/README.md index 02aa022..a12517b 100644 --- a/README.md +++ b/README.md @@ -62,15 +62,17 @@ Example: //!load ... //!steps 5 -uniform int STEP; // this is mandatory! +uniform int STEP; +uniform int STEPS; void fragment() { if (STEP == 0) { - ... + ... } else if (STEP == 1) { - ... + ... + } else if (STEP == STEPS-1) { + ... } - // ... and so on } ``` diff --git a/project.godot b/project.godot index 4d1b011..95da5af 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="Fragmented" -config/version="v10.1" +config/version="v10.2" run/main_scene="res://src/scenes/main.tscn" config/features=PackedStringArray("4.4", "Mobile") config/icon="res://src/assets/icon.png" diff --git a/shaderlib/common.gdshaderinc b/shaderlib/common.gdshaderinc index 8af35dc..9352d6a 100644 --- a/shaderlib/common.gdshaderinc +++ b/shaderlib/common.gdshaderinc @@ -13,3 +13,15 @@ vec4 alpha_blend(vec4 b, vec4 a) { vec3 col = ((a.rgb*a.a) + ((b.rgb*b.a) * (1.0 - a.a)) / alpha); return vec4(col.r, col.g, col.b, alpha); } + +/* + Rotate UV +*/ + +vec2 rotateUV(vec2 uv, float rotation, vec2 center) { + float cosRot = cos(rotation); + float sinRot = sin(rotation); + return vec2( + cosRot * (uv.x - center.x) + sinRot * (uv.y - center.y) + center.x, + cosRot * (uv.y - center.y) - sinRot * (uv.x - center.x) + center.y); +} diff --git a/src/ImageCompositor.gd b/src/ImageCompositor.gd index 9692fb7..9f3e95a 100644 --- a/src/ImageCompositor.gd +++ b/src/ImageCompositor.gd @@ -37,9 +37,9 @@ func validate_shader_compilation(shader: Shader) -> bool: # test if uniform list is empty -> if it is empty, the shader compilation failed return len(shader.get_shader_uniform_list()) > 0 -func shader_has_step_uniform(shader: Shader) -> bool: +func shader_has_uniform(shader: Shader, name: String, type: int) -> bool: for u in shader.get_shader_uniform_list(): - if u["name"] == "STEP" && u["type"] == 2: + if u["name"] == name && u["type"] == type: return true return false @@ -55,7 +55,8 @@ func update(overwrite_image_path: String = "") -> Array: # returns error message return ["No shader opened!"] # get number of steps & check if code has STEP uniform var steps: int = ShaderDirectiveParser.parse_steps_directive(shader.code) - var has_step_uniform: bool = shader_has_step_uniform(shader) + var has_step_uniform: bool = shader_has_uniform(shader, "STEP", 2) + var has_steps_uniform: bool = shader_has_uniform(shader, "STEPS", 2) # validate shader if not validate_shader_compilation(shader): return ["Shader compilation failed!"] @@ -105,6 +106,9 @@ func update(overwrite_image_path: String = "") -> Array: # returns error message image_sprite.material = mat # iterate n times set_vsync(false) # speed up processing + if has_steps_uniform: + # set STEPS param + mat.set_shader_parameter("STEPS", steps) for i in range(steps): if has_step_uniform: # set STEP param