Files
junisaber/assets/shaders/stageAdditive.js

51 lines
1.5 KiB
JavaScript
Raw Normal View History

2018-12-05 21:01:39 +01:00
module.exports = {
vertexShader : `
varying vec2 uvs;
varying vec3 worldPos;
void main() {
uvs.xy = uv.xy;
vec4 p = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
worldPos = (modelMatrix * vec4( position, 1.0 )).xyz;
gl_Position = p;
}
`,
fragmentShader: `
varying vec2 uvs;
varying vec3 worldPos;
uniform vec3 tunnelNeon;
uniform vec3 leftLaser;
uniform vec3 rightLaser;
uniform vec3 floorNeon;
uniform vec3 textGlow;
uniform sampler2D src;
void main() {
float mask;
vec4 col = texture2D(src, uvs);
// tunnel neon
mask = step(0.87, uvs.x) * step(0.5, uvs.y) * (1.0 - step(0.935, uvs.x)) * ( 1.0 - step(0.75, uvs.y));
col.xyz = mix(col.xyz, col.xyz * tunnelNeon, mask);
// floor & corridor neons
mask = step(0.935, uvs.x) * step(0.5, uvs.y) * ( 1.0 - step(0.75, uvs.y));
col.xyz = mix(col.xyz, col.xyz * floorNeon, mask);
// left laser
mask = step(0.5, uvs.x) * (1.0 - step(0.625, uvs.x)) * (1.0 - step(0.5, uvs.y));
col.xyz = mix(col.xyz, col.xyz * leftLaser, mask);
// right laser
mask = step(0.625, uvs.x) * (1.0 - step(0.75, uvs.x)) * (1.0 - step(0.5, uvs.y));
col.xyz = mix(col.xyz, col.xyz * rightLaser, mask);
// text glows
mask = step(0.87, uvs.x) * step(0.25, uvs.y) * (1.0 - step(0.935, uvs.x)) * ( 1.0 - step(0.5, uvs.y));
col.xyz = mix(col.xyz, col.xyz * textGlow, mask);
gl_FragColor = col;
}
`
};