[orx-fx] convert to MPP
This commit is contained in:
40
orx-fx/src/shaders/glsl/distort/stack-repeat.frag
Normal file
40
orx-fx/src/shaders/glsl/distort/stack-repeat.frag
Normal file
@@ -0,0 +1,40 @@
|
||||
in vec2 v_texCoord0;
|
||||
uniform sampler2D tex0;// input
|
||||
uniform int repeats;
|
||||
uniform float zoom;
|
||||
uniform float xOrigin;
|
||||
uniform float yOrigin;
|
||||
uniform float xOffset;
|
||||
uniform float yOffset;
|
||||
uniform float rotation;
|
||||
|
||||
out vec4 o_color;
|
||||
void main() {
|
||||
vec2 origin = vec2((xOrigin+1.0)/2.0, (yOrigin+1.0)/2.0);
|
||||
vec2 ts = textureSize(tex0, 0);
|
||||
float r = ts.x/ts.y;
|
||||
vec2 offset = vec2(1.0, r) * vec2(xOffset, yOffset);
|
||||
vec2 uv = v_texCoord0 - vec2(origin);
|
||||
float rad = (rotation/180) * 3.1415926535;
|
||||
vec2 cs0 = vec2(cos(rad), -sin(rad));
|
||||
vec2 cs1 = vec2(sin(rad), cos(rad));
|
||||
mat2 rotStep = mat2(cs0, cs1);
|
||||
|
||||
mat2 rot = rotStep;
|
||||
vec4 c = texture(tex0, v_texCoord0);
|
||||
for (int i = 1; i <= repeats; ++i) {
|
||||
//vec2 s = (uv * (1.0 + zoom) * i) + vec2(0.5);
|
||||
vec2 s = (rot * uv * pow(1.0 + zoom,i*1.0) )+ vec2(origin) + vec2(offset) * i;
|
||||
float f = s.x >= 0.0 && s.y > 0.0 && s.x < 1.0 && s.y < 1.0? 1.0 : 0.0;
|
||||
vec4 sc = texture(tex0, s) * f;
|
||||
|
||||
c = c * (1.0-sc.a) + sc;
|
||||
if (c.a > 1.0) {
|
||||
c.a = 1.0;
|
||||
}
|
||||
rot *= rotStep;
|
||||
}
|
||||
|
||||
|
||||
o_color = c;
|
||||
}
|
||||
Reference in New Issue
Block a user