This commit is contained in:
Pavel Dobryakov
2017-08-20 22:47:09 +03:00
parent c1487d90d1
commit 318db76e27

View File

@@ -1,4 +1,3 @@
'use strict'; 'use strict';
const canvas = document.getElementsByTagName('canvas')[0]; const canvas = document.getElementsByTagName('canvas')[0];
@@ -14,7 +13,7 @@ const TEXTURE_WIDTH = gl.drawingBufferWidth >> TEXTURE_DOWNSAMPLE;
const TEXTURE_HEIGHT = gl.drawingBufferHeight >> TEXTURE_DOWNSAMPLE; const TEXTURE_HEIGHT = gl.drawingBufferHeight >> TEXTURE_DOWNSAMPLE;
const DENSITY_DISSIPATION = 0.98; const DENSITY_DISSIPATION = 0.98;
const VELOCITY_DISSIPATION = 0.99; const VELOCITY_DISSIPATION = 0.99;
const SPLAT_RADIUS = 0.01; const SPLAT_RADIUS = 0.005;
const CURL = 30; const CURL = 30;
const PRESSURE_ITERATIONS = 30; const PRESSURE_ITERATIONS = 30;
@@ -56,7 +55,7 @@ function compileShader (type, source) {
}; };
const baseVertexShader = compileShader(gl.VERTEX_SHADER, ` const baseVertexShader = compileShader(gl.VERTEX_SHADER, `
precision mediump float; precision highp float;
attribute vec2 aPosition; attribute vec2 aPosition;
varying vec2 vUv; varying vec2 vUv;
@@ -77,7 +76,7 @@ const baseVertexShader = compileShader(gl.VERTEX_SHADER, `
`); `);
const displayShader = compileShader(gl.FRAGMENT_SHADER, ` const displayShader = compileShader(gl.FRAGMENT_SHADER, `
precision mediump float; precision highp float;
varying vec2 vUv; varying vec2 vUv;
varying vec2 vL; varying vec2 vL;
@@ -91,29 +90,8 @@ const displayShader = compileShader(gl.FRAGMENT_SHADER, `
} }
`); `);
const initDensityShader = compileShader(gl.FRAGMENT_SHADER, `
precision mediump float;
varying vec2 vUv;
void main () {
float d = mod(floor(vUv.x * 10.0) + floor(vUv.y * 10.0), 2.0);
gl_FragColor = vec4(vec3(d), 1.0);
}
`);
const initVelocityShader = compileShader(gl.FRAGMENT_SHADER, `
precision mediump float;
varying vec2 vUv;
void main () {
gl_FragColor = vec4(sin(6.28 * vUv.y), sin(6.28 * vUv.x), 0.0, 1.0);
}
`);
const splatShader = compileShader(gl.FRAGMENT_SHADER, ` const splatShader = compileShader(gl.FRAGMENT_SHADER, `
precision mediump float; precision highp float;
varying vec2 vUv; varying vec2 vUv;
uniform sampler2D uTarget; uniform sampler2D uTarget;
@@ -132,7 +110,7 @@ const splatShader = compileShader(gl.FRAGMENT_SHADER, `
`); `);
const advectionManualFilteringShader = compileShader(gl.FRAGMENT_SHADER, ` const advectionManualFilteringShader = compileShader(gl.FRAGMENT_SHADER, `
precision mediump float; precision highp float;
varying vec2 vUv; varying vec2 vUv;
uniform sampler2D uVelocity; uniform sampler2D uVelocity;
@@ -162,7 +140,7 @@ const advectionManualFilteringShader = compileShader(gl.FRAGMENT_SHADER, `
`); `);
const advectionShader = compileShader(gl.FRAGMENT_SHADER, ` const advectionShader = compileShader(gl.FRAGMENT_SHADER, `
precision mediump float; precision highp float;
varying vec2 vUv; varying vec2 vUv;
uniform sampler2D uVelocity; uniform sampler2D uVelocity;
@@ -178,7 +156,7 @@ const advectionShader = compileShader(gl.FRAGMENT_SHADER, `
`); `);
const divergenceShader = compileShader(gl.FRAGMENT_SHADER, ` const divergenceShader = compileShader(gl.FRAGMENT_SHADER, `
precision mediump float; precision highp float;
varying vec2 vUv; varying vec2 vUv;
varying vec2 vL; varying vec2 vL;
@@ -207,7 +185,7 @@ const divergenceShader = compileShader(gl.FRAGMENT_SHADER, `
`); `);
const curlShader = compileShader(gl.FRAGMENT_SHADER, ` const curlShader = compileShader(gl.FRAGMENT_SHADER, `
precision mediump float; precision highp float;
varying vec2 vUv; varying vec2 vUv;
varying vec2 vL; varying vec2 vL;
@@ -227,7 +205,7 @@ const curlShader = compileShader(gl.FRAGMENT_SHADER, `
`); `);
const vorticityShader = compileShader(gl.FRAGMENT_SHADER, ` const vorticityShader = compileShader(gl.FRAGMENT_SHADER, `
precision mediump float; precision highp float;
varying vec2 vUv; varying vec2 vUv;
varying vec2 vL; varying vec2 vL;
@@ -253,7 +231,7 @@ const vorticityShader = compileShader(gl.FRAGMENT_SHADER, `
`); `);
const pressureShader = compileShader(gl.FRAGMENT_SHADER, ` const pressureShader = compileShader(gl.FRAGMENT_SHADER, `
precision mediump float; precision highp float;
varying vec2 vUv; varying vec2 vUv;
varying vec2 vL; varying vec2 vL;
@@ -281,7 +259,7 @@ const pressureShader = compileShader(gl.FRAGMENT_SHADER, `
`); `);
const gradientSubtractShader = compileShader(gl.FRAGMENT_SHADER, ` const gradientSubtractShader = compileShader(gl.FRAGMENT_SHADER, `
precision mediump float; precision highp float;
varying vec2 vUv; varying vec2 vUv;
varying vec2 vL; varying vec2 vL;
@@ -376,8 +354,6 @@ let pressure = createDoubleFBO(TEXTURE_WIDTH, TEXTURE_HEIGHT, gl.RGBA, halfFlo
const displayProgram = new GLProgram(baseVertexShader, displayShader); const displayProgram = new GLProgram(baseVertexShader, displayShader);
const splatProgram = new GLProgram(baseVertexShader, splatShader); const splatProgram = new GLProgram(baseVertexShader, splatShader);
const initDensityProgram = new GLProgram(baseVertexShader, initDensityShader);
const initVelocityProgram = new GLProgram(baseVertexShader, initVelocityShader);
const advectionProgram = new GLProgram(baseVertexShader, support_linear_float ? advectionShader : advectionManualFilteringShader); const advectionProgram = new GLProgram(baseVertexShader, support_linear_float ? advectionShader : advectionManualFilteringShader);
const divergenceProgram = new GLProgram(baseVertexShader, divergenceShader); const divergenceProgram = new GLProgram(baseVertexShader, divergenceShader);
const curlProgram = new GLProgram(baseVertexShader, curlShader); const curlProgram = new GLProgram(baseVertexShader, curlShader);
@@ -505,10 +481,10 @@ canvas.addEventListener('touchmove', (e) => {
e.preventDefault(); e.preventDefault();
const touch = e.touches[0]; const touch = e.touches[0];
pointer.moved = pointer.down; pointer.moved = pointer.down;
pointer.deltax = clampDelta(touch.offsetX - pointer.x); pointer.deltax = clampDelta(touch.pageX - pointer.x);
pointer.deltay = clampDelta(touch.offsetY - pointer.y); pointer.deltay = clampDelta(touch.pageY - pointer.y);
pointer.x = touch.offsetX; pointer.x = touch.pageX;
pointer.y = touch.offsetY; pointer.y = touch.pageY;
}); });
function clampDelta (delta) { function clampDelta (delta) {