diff --git a/examples/color_and_pixelate.gdshader b/examples/color_and_pixelate.gdshader new file mode 100644 index 0000000..f1ea38c --- /dev/null +++ b/examples/color_and_pixelate.gdshader @@ -0,0 +1,13 @@ +shader_type canvas_item; + +#include "res://shaderlib/hsv.gdshaderinc" +#include "res://shaderlib/effects.gdshaderinc" + +//!load ./swamp.jpg + +void fragment() { + COLOR = pixelate(TEXTURE, UV, 200.0); + vec4 hsv = rgb2hsv(COLOR); + COLOR = hsv_offset(COLOR, 0.65, .42-(hsv.y*.3), -.125); + COLOR = hsv_multiply(COLOR, 1.0, 1.0, 1.25); +} diff --git a/examples/hsv.gdshader b/examples/hsv.gdshader deleted file mode 100644 index b4d9100..0000000 --- a/examples/hsv.gdshader +++ /dev/null @@ -1,9 +0,0 @@ -shader_type canvas_item; - -#include "res://shaderlib/hsv.gdshaderinc" - -//!load ./swamp.jpg - -void fragment() { - COLOR = hsv_multiply(hsv_offset(COLOR, -0.3, 0.9, 0.0), 1.0, 0.44, 1.0); -} diff --git a/shaderlib/effects.gdshaderinc b/shaderlib/effects.gdshaderinc new file mode 100644 index 0000000..d9b91f1 --- /dev/null +++ b/shaderlib/effects.gdshaderinc @@ -0,0 +1,14 @@ + +// pixelate by lowering uv resolution +vec4 pixelate(sampler2D tex, vec2 uv, float resolution_x) { + vec2 texture_size = vec2(textureSize(tex, 0)); + vec2 ratio; + if (texture_size.x > texture_size.y) { + ratio = vec2(texture_size.x / texture_size.y, 1.0); + } + else { + ratio = vec2(1.0, texture_size.y / texture_size.x); + } + vec2 r = ratio * resolution_x; + return texture(tex, trunc(uv * r) / r); +} diff --git a/src/Editor.gd b/src/Editor.gd index c30a185..2d1aa6e 100644 --- a/src/Editor.gd +++ b/src/Editor.gd @@ -131,12 +131,14 @@ const gdshader_preprocessor = [ var shaderlib_regex = { "hsv": RegEx.create_from_string(r'\s*\#include\s+\"res\:\/\/shaderlib\/hsv\.gdshaderinc\"'), "transform": RegEx.create_from_string(r'\s*\#include\s+\"res\:\/\/shaderlib\/transform\.gdshaderinc\"'), - "transparency": RegEx.create_from_string(r'\s*\#include\s+\"res\:\/\/shaderlib\/transparency\.gdshaderinc\"') + "transparency": RegEx.create_from_string(r'\s*\#include\s+\"res\:\/\/shaderlib\/transparency\.gdshaderinc\"'), + "effects": RegEx.create_from_string(r'\s*\#include\s+\"res\:\/\/shaderlib\/effects\.gdshaderinc\"') } const shaderlib_functions = { "hsv": ["rgb2hsv", "hsv2rgb", "hsv_offset", "hsv_multiply"], "transform": ["place_texture"], "transparency": ["alpha_blend"], + "effects": ["pixelate"] } # # configure Highlighter