mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2025-02-11 04:35:24 +01:00
129 lines
3.5 KiB
GLSL
129 lines
3.5 KiB
GLSL
//
|
|
// Simple passthrough vertex shader
|
|
//
|
|
attribute vec3 in_Position; // (x,y,z)
|
|
//attribute vec3 in_Normal; // (x,y,z) unused in this shader.
|
|
attribute vec4 in_Colour; // (r,g,b,a)
|
|
attribute vec2 in_TextureCoord; // (u,v)
|
|
|
|
varying vec2 v_vTexcoord;
|
|
varying vec4 v_vColour;
|
|
|
|
void main() {
|
|
vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0);
|
|
gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos;
|
|
|
|
v_vColour = in_Colour;
|
|
v_vTexcoord = in_TextureCoord;
|
|
}
|
|
|
|
//######################_==_YOYO_SHADER_MARKER_==_######################@~
|
|
// Gabor noise
|
|
// By shader god Inigo Quilez (https://iquilezles.org)
|
|
// MIT License
|
|
|
|
varying vec2 v_vTexcoord;
|
|
varying vec4 v_vColour;
|
|
|
|
uniform float seed;
|
|
|
|
uniform vec2 alignment;
|
|
uniform int alignmentUseSurf;
|
|
uniform sampler2D alignmentSurf;
|
|
float align;
|
|
|
|
uniform vec2 sharpness;
|
|
uniform int sharpnessUseSurf;
|
|
uniform sampler2D sharpnessSurf;
|
|
float sharp;
|
|
|
|
uniform vec2 rotation;
|
|
uniform int rotationUseSurf;
|
|
uniform sampler2D rotationSurf;
|
|
float rot;
|
|
|
|
uniform vec2 scale;
|
|
uniform int scaleUseSurf;
|
|
uniform sampler2D scaleSurf;
|
|
|
|
uniform vec2 dimension;
|
|
uniform vec2 position;
|
|
uniform float trRotation;
|
|
|
|
uniform vec2 augment;
|
|
|
|
vec2 hash(vec2 p) { return fract(sin(vec2(
|
|
dot(p, vec2(127.1324, 311.7874)) * (152.6178612 + seed / 10000.),
|
|
dot(p, vec2(269.8355, 183.3961)) * (437.5453123 + seed / 10000.)
|
|
)) * 43758.5453); }
|
|
|
|
vec3 gabor_wave(in vec2 p) {
|
|
vec2 ip = floor(p);
|
|
vec2 fp = fract(p);
|
|
|
|
float fa = sharp;
|
|
float fr = align * 6.283185;
|
|
float rt = rot;
|
|
|
|
vec3 av = vec3(0.0, 0.0, 0.0);
|
|
vec3 at = vec3(0.0, 0.0, 0.0);
|
|
|
|
for( int j = -2; j <= 2; j++ )
|
|
for( int i = -2; i <= 2; i++ ) {
|
|
vec2 o = vec2( i, j );
|
|
vec2 h = hash(ip + o);
|
|
vec2 r = fp - (o + h);
|
|
|
|
vec2 k = normalize(-1.0 + 2.0 * hash(ip + o + augment) );
|
|
|
|
float d = dot(r, r);
|
|
float l = dot(r, k) + rt;
|
|
float w = exp(-fa * d);
|
|
vec2 cs = vec2( cos(fr * l + rt), sin(fr * l + rt) );
|
|
|
|
av += w * vec3(cs.x, -2.0 * fa * r * cs.x - cs.y * fr * k );
|
|
at += w * vec3(1.0, -2.0 * fa * r);
|
|
}
|
|
|
|
return vec3( av.x, av.yz - av.x * at.yz / at.x ) / at.x;
|
|
}
|
|
|
|
void main() {
|
|
|
|
vec2 sca = scale;
|
|
if(scaleUseSurf == 1) {
|
|
vec4 _vMap = texture2D( scaleSurf, v_vTexcoord );
|
|
sca = vec2(mix(scale.x, scale.y, (_vMap.r + _vMap.g + _vMap.b) / 3.));
|
|
}
|
|
|
|
rot = rotation.x;
|
|
if(rotationUseSurf == 1) {
|
|
vec4 _vMap = texture2D( rotationSurf, v_vTexcoord );
|
|
rot = mix(rotation.x, rotation.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
|
|
}
|
|
rot = radians(rot);
|
|
|
|
align = alignment.x;
|
|
if(alignmentUseSurf == 1) {
|
|
vec4 _vMap = texture2D( alignmentSurf, v_vTexcoord );
|
|
align = mix(alignment.x, alignment.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
|
|
}
|
|
|
|
sharp = sharpness.x;
|
|
if(sharpnessUseSurf == 1) {
|
|
vec4 _vMap = texture2D( sharpnessSurf, v_vTexcoord );
|
|
sharp = mix(sharpness.x, sharpness.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
|
|
}
|
|
|
|
|
|
float r = radians(trRotation);
|
|
vec2 pos = v_vTexcoord;
|
|
pos.x *= (dimension.x / dimension.y);
|
|
pos = (pos - position / dimension) * mat2(cos(r), -sin(r), sin(r), cos(r)) * scale;
|
|
|
|
vec3 f = gabor_wave(pos);
|
|
vec3 col = vec3(0.5 + 0.5 * f.x);
|
|
|
|
gl_FragColor = vec4( col, 1.0 );
|
|
}
|
|
|