Skip to content
Snippets Groups Projects
Commit d28b7403 authored by Pavel Dobryakov's avatar Pavel Dobryakov
Browse files

improve touch handling

parent 2ca3e061
No related branches found
No related tags found
No related merge requests found
...@@ -70,7 +70,6 @@ function pointerPrototype () { ...@@ -70,7 +70,6 @@ function pointerPrototype () {
let pointers = []; let pointers = [];
let splatStack = []; let splatStack = [];
let bloomFramebuffers = [];
pointers.push(new pointerPrototype()); pointers.push(new pointerPrototype());
const { gl, ext } = getWebGLContext(canvas); const { gl, ext } = getWebGLContext(canvas);
...@@ -902,6 +901,7 @@ let divergence; ...@@ -902,6 +901,7 @@ let divergence;
let curl; let curl;
let pressure; let pressure;
let bloom; let bloom;
let bloomFramebuffers = [];
let sunrays; let sunrays;
let sunraysTemp; let sunraysTemp;
...@@ -1429,9 +1429,11 @@ canvas.addEventListener('mousedown', e => { ...@@ -1429,9 +1429,11 @@ canvas.addEventListener('mousedown', e => {
}); });
canvas.addEventListener('mousemove', e => { canvas.addEventListener('mousemove', e => {
let pointer = pointers[0];
if (!pointer.down) return;
let posX = scaleByPixelRatio(e.offsetX); let posX = scaleByPixelRatio(e.offsetX);
let posY = scaleByPixelRatio(e.offsetY); let posY = scaleByPixelRatio(e.offsetY);
updatePointerMoveData(pointers[0], posX, posY); updatePointerMoveData(pointer, posX, posY);
}); });
window.addEventListener('mouseup', () => { window.addEventListener('mouseup', () => {
...@@ -1444,9 +1446,11 @@ canvas.addEventListener('touchstart', e => { ...@@ -1444,9 +1446,11 @@ canvas.addEventListener('touchstart', e => {
while (touches.length >= pointers.length) while (touches.length >= pointers.length)
pointers.push(new pointerPrototype()); pointers.push(new pointerPrototype());
for (let i = 0; i < touches.length; i++) { for (let i = 0; i < touches.length; i++) {
let pointer = pointers[i + 1];
if (pointer.down) continue;
let posX = scaleByPixelRatio(touches[i].pageX); let posX = scaleByPixelRatio(touches[i].pageX);
let posY = scaleByPixelRatio(touches[i].pageY); let posY = scaleByPixelRatio(touches[i].pageY);
updatePointerDownData(pointers[i + 1], touches[i].identifier, posX, posY); updatePointerDownData(pointer, touches[i].identifier, posX, posY);
} }
}); });
...@@ -1454,9 +1458,11 @@ canvas.addEventListener('touchmove', e => { ...@@ -1454,9 +1458,11 @@ canvas.addEventListener('touchmove', e => {
e.preventDefault(); e.preventDefault();
const touches = e.targetTouches; const touches = e.targetTouches;
for (let i = 0; i < touches.length; i++) { for (let i = 0; i < touches.length; i++) {
let pointer = pointers[i + 1];
if (!pointer.down) continue;
let posX = scaleByPixelRatio(touches[i].pageX); let posX = scaleByPixelRatio(touches[i].pageX);
let posY = scaleByPixelRatio(touches[i].pageY); let posY = scaleByPixelRatio(touches[i].pageY);
updatePointerMoveData(pointers[i + 1], posX, posY); updatePointerMoveData(pointer, posX, posY);
} }
}, false); }, false);
...@@ -1465,6 +1471,7 @@ window.addEventListener('touchend', e => { ...@@ -1465,6 +1471,7 @@ window.addEventListener('touchend', e => {
for (let i = 0; i < touches.length; i++) for (let i = 0; i < touches.length; i++)
{ {
let pointer = pointers.find(p => p.id == touches[i].identifier); let pointer = pointers.find(p => p.id == touches[i].identifier);
if (pointer == null) continue;
updatePointerUpData(pointer); updatePointerUpData(pointer);
} }
}); });
...@@ -1490,13 +1497,13 @@ function updatePointerDownData (pointer, id, posX, posY) { ...@@ -1490,13 +1497,13 @@ function updatePointerDownData (pointer, id, posX, posY) {
} }
function updatePointerMoveData (pointer, posX, posY) { function updatePointerMoveData (pointer, posX, posY) {
pointer.moved = pointer.down;
pointer.prevTexcoordX = pointer.texcoordX; pointer.prevTexcoordX = pointer.texcoordX;
pointer.prevTexcoordY = pointer.texcoordY; pointer.prevTexcoordY = pointer.texcoordY;
pointer.texcoordX = posX / canvas.width; pointer.texcoordX = posX / canvas.width;
pointer.texcoordY = 1.0 - posY / canvas.height; pointer.texcoordY = 1.0 - posY / canvas.height;
pointer.deltaX = correctDeltaX(pointer.texcoordX - pointer.prevTexcoordX); pointer.deltaX = correctDeltaX(pointer.texcoordX - pointer.prevTexcoordX);
pointer.deltaY = correctDeltaY(pointer.texcoordY - pointer.prevTexcoordY); pointer.deltaY = correctDeltaY(pointer.texcoordY - pointer.prevTexcoordY);
pointer.moved = Math.abs(pointer.deltaX) > 0 || Math.abs(pointer.deltaY) > 0;
} }
function updatePointerUpData (pointer) { function updatePointerUpData (pointer) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment