Pixel-Composer/shaders/sh_brush_linear/sh_brush_linear.fsh
2024-06-10 11:42:24 +07:00

46 lines
1.1 KiB
GLSL

varying vec2 v_vTexcoord;
varying vec4 v_vColour;
const float PI = 3.14159265;
const float ATR = PI / 180.;
uniform int convStepNums;
uniform float itrStepPixLen;
uniform float distanceAttenuation;
uniform float vectorCirculationRate;
uniform vec2 dimension;
uniform float seed;
vec4 getCol(vec2 pos) { return texture2D( gm_BaseTexture, pos / dimension); }
float getD(vec2 pos) { return length(texture2D( gm_BaseTexture, pos / dimension)); }
vec2 grad( vec2 pos, float delta) {
vec2 e = vec2(1., 0.) * delta;
float o = getD(pos);
return vec2(getD(pos + e.xy) - o,
getD(pos + e.yx) - o) / delta;
}
void main() {
vec2 pos = v_vTexcoord * dimension;
float r = 1.;
float acc = 0.;
vec4 res = vec4(0.);
for(int i = 0; i < convStepNums; i++) {
res += getCol(pos) * r;
vec2 dir = grad(pos, itrStepPixLen) + vec2(1) * 0.001;
pos += 2. * normalize(mix(dir, dir.yx * vec2(1, -1), vectorCirculationRate));
acc += r;
r *= distanceAttenuation;
}
res.xyz /= acc;
gl_FragColor = res;
}