mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2024-12-27 07:26:33 +01:00
83 lines
2.2 KiB
Text
83 lines
2.2 KiB
Text
|
//
|
||
|
// Simple passthrough fragment shader
|
||
|
//
|
||
|
varying vec2 v_vTexcoord;
|
||
|
varying vec4 v_vColour;
|
||
|
|
||
|
uniform vec2 dimension;
|
||
|
|
||
|
uniform vec2 k;
|
||
|
uniform int kUseSurf;
|
||
|
uniform sampler2D kSurf;
|
||
|
|
||
|
uniform vec2 f;
|
||
|
uniform int fUseSurf;
|
||
|
uniform sampler2D fSurf;
|
||
|
|
||
|
uniform vec2 dt;
|
||
|
uniform int dtUseSurf;
|
||
|
uniform sampler2D dtSurf;
|
||
|
|
||
|
uniform float dd;
|
||
|
|
||
|
uniform vec2 da;
|
||
|
uniform int daUseSurf;
|
||
|
uniform sampler2D daSurf;
|
||
|
|
||
|
uniform vec2 db;
|
||
|
uniform int dbUseSurf;
|
||
|
uniform sampler2D dbSurf;
|
||
|
|
||
|
float random (in vec2 st, float seed) { return fract(sin(dot(st.xy + vec2(21.456, 46.856), vec2(12.989, 78.233))) * (43758.545 + seed)); }
|
||
|
|
||
|
vec2 samp(float sx, float sy) { return texture2D( gm_BaseTexture, v_vTexcoord + vec2(sx, sy) / dimension ).xy; }
|
||
|
|
||
|
void main() {
|
||
|
#region
|
||
|
float _k = k.x;
|
||
|
if(kUseSurf == 1) {
|
||
|
vec4 _vMap = texture2D( kSurf, v_vTexcoord );
|
||
|
_k = mix(k.x, k.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
|
||
|
}
|
||
|
|
||
|
float _f = f.x;
|
||
|
if(fUseSurf == 1) {
|
||
|
vec4 _vMap = texture2D( fSurf, v_vTexcoord );
|
||
|
_f = mix(f.x, f.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
|
||
|
}
|
||
|
|
||
|
float _dt = dt.x;
|
||
|
if(dtUseSurf == 1) {
|
||
|
vec4 _vMap = texture2D( dtSurf, v_vTexcoord );
|
||
|
_dt = mix(dt.x, dt.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
|
||
|
}
|
||
|
|
||
|
float _da = da.x;
|
||
|
if(daUseSurf == 1) {
|
||
|
vec4 _vMap = texture2D( daSurf, v_vTexcoord );
|
||
|
_da = mix(da.x, da.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
|
||
|
}
|
||
|
|
||
|
float _db = db.x;
|
||
|
if(dbUseSurf == 1) {
|
||
|
vec4 _vMap = texture2D( dbSurf, v_vTexcoord );
|
||
|
_db = mix(db.x, db.y, (_vMap.r + _vMap.g + _vMap.b) / 3.);
|
||
|
}
|
||
|
#endregion
|
||
|
|
||
|
vec2 _0 = samp(-1., -1.), _1 = samp(0., -1.), _2 = samp(1., -1.);
|
||
|
vec2 _3 = samp(-1., 0.), _4 = samp(0., 0.), _5 = samp(1., 0.);
|
||
|
vec2 _6 = samp(-1., 1.), _7 = samp(0., 1.), _8 = samp(1., 1.);
|
||
|
|
||
|
vec2 lap = _0 * 0.05 + _1 * 0.2 + _2 * 0.05 +
|
||
|
_3 * 0.2 + _4 * -1. + _5 * 0.2 +
|
||
|
_6 * 0.05 + _7 * 0.2 + _8 * 0.05;
|
||
|
|
||
|
vec2 reaction = vec2(-1., 1.) * _4.x * _4.y * _4.y;
|
||
|
vec2 disipation = vec2(_f * (1. - _4.x), -(_k + _f) * _4.y);
|
||
|
vec2 diffusion = lap * vec2(_da, _db) * dd;
|
||
|
|
||
|
vec2 _new = _4 + (reaction + disipation + diffusion) * _dt;
|
||
|
|
||
|
gl_FragColor = vec4(_new, 0., 1.);
|
||
|
}
|