@openglobus/og 0.14.4 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/css/og.css +377 -274
- package/dist/@openglobus/og.css +1 -1
- package/dist/@openglobus/og.esm.js +2 -2
- package/dist/@openglobus/og.esm.js.map +1 -1
- package/dist/@openglobus/og.umd.js +2 -2
- package/dist/@openglobus/og.umd.js.map +1 -1
- package/package.json +18 -17
- package/src/og/Clock.js +218 -194
- package/src/og/Globe.js +1 -3
- package/src/og/Object3d.js +104 -145
- package/src/og/camera/Camera.js +23 -19
- package/src/og/cons.js +107 -107
- package/src/og/control/Atmosphere.js +396 -0
- package/src/og/control/CompassButton.js +11 -18
- package/src/og/control/Control.js +187 -188
- package/src/og/control/GeoImageDragControl.js +84 -66
- package/src/og/control/LayerSwitcher.js +46 -145
- package/src/og/control/Lighting.js +314 -186
- package/src/og/control/RulerSwitcher.js +24 -19
- package/src/og/control/SimpleSkyBackground.js +38 -12
- package/src/og/control/Sun.js +2 -0
- package/src/og/control/ZoomControl.js +30 -42
- package/src/og/control/ruler/RulerScene.js +5 -23
- package/src/og/control/selection/Selection.js +21 -50
- package/src/og/control/selection/SelectionScene.js +15 -29
- package/src/og/control/timeline/TimelineControl.js +99 -0
- package/src/og/control/timeline/TimelineModel.js +133 -0
- package/src/og/control/timeline/TimelineView.js +449 -0
- package/src/og/control/timeline/timelineUtils.js +132 -0
- package/src/og/entity/Entity.js +30 -3
- package/src/og/entity/EntityCollection.js +0 -2
- package/src/og/entity/GeoObject.js +72 -56
- package/src/og/entity/GeoObjectHandler.js +487 -656
- package/src/og/input/input.js +3 -1
- package/src/og/layer/CanvasTiles.js +39 -34
- package/src/og/layer/Layer.js +2 -0
- package/src/og/layer/Material.js +1 -8
- package/src/og/light/LightSource.js +2 -0
- package/src/og/quadTree/Node.js +2 -1
- package/src/og/renderer/Renderer.js +26 -42
- package/src/og/renderer/RendererEvents.js +4 -4
- package/src/og/scene/Planet.js +276 -59
- package/src/og/scene/RenderNode.js +27 -12
- package/src/og/segment/Segment.js +0 -5
- package/src/og/shaders/atmos.js +332 -0
- package/src/og/shaders/drawnode.js +475 -109
- package/src/og/shaders/geoObject.js +96 -51
- package/src/og/shaders/polyline.js +212 -17
- package/src/og/shaders/utils.js +88 -0
- package/src/og/terrain/GlobusTerrain.js +2 -2
- package/src/og/ui/Button.js +106 -0
- package/src/og/ui/ButtonGroup.js +57 -0
- package/src/og/ui/Dialog.js +242 -0
- package/src/og/ui/Slider.js +144 -0
- package/src/og/ui/ToggleButton.js +51 -0
- package/src/og/ui/View.js +190 -0
- package/src/og/utils/shared.js +51 -33
- package/src/og/webgl/Framebuffer.js +308 -387
- package/src/og/webgl/Handler.js +68 -21
- package/src/og/webgl/Multisample.js +8 -0
- package/types/Clock.d.ts +7 -2
- package/types/Object3d.d.ts +14 -3
- package/types/camera/Camera.d.ts +15 -14
- package/types/control/Atmosphere.d.ts +15 -0
- package/types/control/CompassButton.d.ts +1 -2
- package/types/control/GeoImageDragControl.d.ts +7 -1
- package/types/control/LayerSwitcher.d.ts +4 -5
- package/types/control/Lighting.d.ts +32 -7
- package/types/control/SimpleSkyBackground.d.ts +4 -0
- package/types/control/ZoomControl.d.ts +0 -1
- package/types/control/ruler/RulerScene.d.ts +0 -1
- package/types/control/selection/Selection.d.ts +2 -4
- package/types/control/selection/SelectionScene.d.ts +0 -1
- package/types/entity/Entity.d.ts +8 -0
- package/types/entity/GeoObject.d.ts +28 -22
- package/types/entity/GeoObjectHandler.d.ts +16 -56
- package/types/input/input.d.ts +2 -0
- package/types/layer/CanvasTiles.d.ts +1 -0
- package/types/layer/Layer.d.ts +1 -0
- package/types/math/Plane.d.ts +1 -1
- package/types/renderer/Renderer.d.ts +7 -1
- package/types/scene/Planet.d.ts +20 -2
- package/types/scene/RenderNode.d.ts +2 -1
- package/types/segment/Segment.d.ts +1 -1
- package/types/shaders/atmos.d.ts +4 -0
- package/types/shaders/drawnode.d.ts +3 -2
- package/types/shaders/utils.d.ts +1 -0
- package/types/terrain/GlobusTerrain.d.ts +1 -1
- package/types/ui/Button.d.ts +21 -0
- package/types/ui/Dialog.d.ts +41 -0
- package/types/ui/Slider.d.ts +30 -0
- package/types/ui/ToggleButton.d.ts +10 -0
- package/types/ui/View.d.ts +32 -0
- package/types/utils/shared.d.ts +16 -14
- package/types/webgl/Framebuffer.d.ts +2 -5
- package/types/webgl/Handler.d.ts +11 -9
- package/types/webgl/Multisample.d.ts +2 -0
- package/src/og/ajax.js +0 -204
- package/src/og/entity/Object3d.js +0 -504
- package/types/ajax.d.ts +0 -24
- /package/src/og/{control → ui}/UIhelpers.js +0 -0
- /package/types/{control → ui}/UIhelpers.d.ts +0 -0
package/src/og/input/input.js
CHANGED
|
@@ -13,19 +13,17 @@ import { Layer } from "./Layer.js";
|
|
|
13
13
|
* @type {number}
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
const EVENT_NAMES = [
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
*/
|
|
16
|
+
const EVENT_NAMES = [/**
|
|
17
|
+
* Triggered when current tile image has loaded before rendereing.
|
|
18
|
+
* @event og.layer.CanvasTiles#load
|
|
19
|
+
*/
|
|
21
20
|
"load",
|
|
22
21
|
|
|
23
22
|
/**
|
|
24
23
|
* Triggered when all tiles have loaded or loading has stopped.
|
|
25
24
|
* @event og.layer.CanvasTiles#loadend
|
|
26
25
|
*/
|
|
27
|
-
"loadend"
|
|
28
|
-
];
|
|
26
|
+
"loadend"];
|
|
29
27
|
|
|
30
28
|
/**
|
|
31
29
|
* Layer used to rendering each tile as a separate canvas object.
|
|
@@ -50,6 +48,8 @@ class CanvasTiles extends Layer {
|
|
|
50
48
|
|
|
51
49
|
this.events.registerNames(EVENT_NAMES);
|
|
52
50
|
|
|
51
|
+
this.animated = options.animated || false;
|
|
52
|
+
|
|
53
53
|
this.minNativeZoom = options.minNativeZoom || 0;
|
|
54
54
|
/**
|
|
55
55
|
* Current creating tiles couter.
|
|
@@ -176,22 +176,19 @@ class CanvasTiles extends Layer {
|
|
|
176
176
|
that.events.dispatch(e, material);
|
|
177
177
|
}
|
|
178
178
|
requestAnimationFrame(() => {
|
|
179
|
-
that.drawTile(
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
if (material.isLoading) {
|
|
190
|
-
material.applyImage(canvas);
|
|
191
|
-
}
|
|
192
|
-
that._dequeueRequest();
|
|
179
|
+
that.drawTile(material, /**
|
|
180
|
+
* Apply canvas.
|
|
181
|
+
* @callback applyCanvasCallback
|
|
182
|
+
* @param {Object} canvas -
|
|
183
|
+
*/
|
|
184
|
+
function (canvas) {
|
|
185
|
+
that._counter--;
|
|
186
|
+
CanvasTiles.__requestsCounter--;
|
|
187
|
+
if (material.isLoading) {
|
|
188
|
+
material.applyImage(canvas);
|
|
193
189
|
}
|
|
194
|
-
|
|
190
|
+
that._dequeueRequest();
|
|
191
|
+
});
|
|
195
192
|
});
|
|
196
193
|
} else {
|
|
197
194
|
material.textureNotExists();
|
|
@@ -231,10 +228,7 @@ class CanvasTiles extends Layer {
|
|
|
231
228
|
while (this._pendingsQueue.length) {
|
|
232
229
|
var pmat = this._pendingsQueue.pop();
|
|
233
230
|
if (pmat.segment.node) {
|
|
234
|
-
if (
|
|
235
|
-
pmat.segment.initialized &&
|
|
236
|
-
pmat.segment.node.getState() === quadTree.RENDERING
|
|
237
|
-
) {
|
|
231
|
+
if (pmat.segment.initialized && pmat.segment.node.getState() === quadTree.RENDERING) {
|
|
238
232
|
return pmat;
|
|
239
233
|
}
|
|
240
234
|
pmat.isLoading = false;
|
|
@@ -245,14 +239,20 @@ class CanvasTiles extends Layer {
|
|
|
245
239
|
|
|
246
240
|
applyMaterial(material) {
|
|
247
241
|
if (material.isReady) {
|
|
242
|
+
if (material.layer.animated) {
|
|
243
|
+
requestAnimationFrame(() => {
|
|
244
|
+
this.drawTile(material, function (canvas) {
|
|
245
|
+
material.applyImage(canvas);
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
}
|
|
248
249
|
return [0, 0, 1, 1];
|
|
249
250
|
} else if (material.segment.tileZoom < this.minNativeZoom) {
|
|
250
251
|
material.textureNotExists();
|
|
251
252
|
} else {
|
|
252
253
|
|
|
253
254
|
let segment = material.segment;
|
|
254
|
-
let pn = segment.node,
|
|
255
|
-
notEmpty = false;
|
|
255
|
+
let pn = segment.node, notEmpty = false;
|
|
256
256
|
|
|
257
257
|
if (segment.passReady && !material.isLoading) {
|
|
258
258
|
this.loadMaterial(material);
|
|
@@ -270,15 +270,20 @@ class CanvasTiles extends Layer {
|
|
|
270
270
|
}
|
|
271
271
|
|
|
272
272
|
if (notEmpty) {
|
|
273
|
+
|
|
274
|
+
if (material.layer.animated) {
|
|
275
|
+
requestAnimationFrame(() => {
|
|
276
|
+
this.drawTile(material, function (canvas) {
|
|
277
|
+
material.applyImage(canvas);
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
|
|
273
282
|
material.appliedNodeId = pn.nodeId;
|
|
274
283
|
material.texture = psegm.texture;
|
|
284
|
+
|
|
275
285
|
let dZ2 = 1.0 / (2 << (segment.tileZoom - pn.segment.tileZoom - 1));
|
|
276
|
-
return [
|
|
277
|
-
segment.tileX * dZ2 - pn.segment.tileX,
|
|
278
|
-
segment.tileY * dZ2 - pn.segment.tileY,
|
|
279
|
-
dZ2,
|
|
280
|
-
dZ2
|
|
281
|
-
];
|
|
286
|
+
return [segment.tileX * dZ2 - pn.segment.tileX, segment.tileY * dZ2 - pn.segment.tileY, dZ2, dZ2];
|
|
282
287
|
} else {
|
|
283
288
|
material.texture = segment.planet.transparentTexture;
|
|
284
289
|
return [0, 0, 1, 1];
|
package/src/og/layer/Layer.js
CHANGED
package/src/og/layer/Material.js
CHANGED
|
@@ -29,13 +29,6 @@ class Material {
|
|
|
29
29
|
this.pickingReady = false;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
///**
|
|
33
|
-
// * @param {*} layer
|
|
34
|
-
// */
|
|
35
|
-
//assignLayer(layer) {
|
|
36
|
-
// this.layer = layer;
|
|
37
|
-
//}
|
|
38
|
-
|
|
39
32
|
/**
|
|
40
33
|
*
|
|
41
34
|
*/
|
|
@@ -44,7 +37,7 @@ class Material {
|
|
|
44
37
|
}
|
|
45
38
|
|
|
46
39
|
_createTexture(img) {
|
|
47
|
-
return this.layer._planet && this.layer.createTexture(img, this.layer._internalFormat);
|
|
40
|
+
return this.layer._planet && this.layer.createTexture(img, this.layer._internalFormat, this.isReady ? this.texture : null);
|
|
48
41
|
}
|
|
49
42
|
|
|
50
43
|
/**
|
|
@@ -127,9 +127,11 @@ class LightSource {
|
|
|
127
127
|
this._ambient.x = rn._lightsParamsv[index] = this._tempAmbient.x;
|
|
128
128
|
this._ambient.y = rn._lightsParamsv[index + 1] = this._tempAmbient.y;
|
|
129
129
|
this._ambient.z = rn._lightsParamsv[index + 2] = this._tempAmbient.z;
|
|
130
|
+
|
|
130
131
|
this._diffuse.x = rn._lightsParamsv[index + 3] = this._tempDiffuse.x;
|
|
131
132
|
this._diffuse.y = rn._lightsParamsv[index + 4] = this._tempDiffuse.y;
|
|
132
133
|
this._diffuse.z = rn._lightsParamsv[index + 5] = this._tempDiffuse.z;
|
|
134
|
+
|
|
133
135
|
this._specular.x = rn._lightsParamsv[index + 6] = this._tempSpecular.x;
|
|
134
136
|
this._specular.y = rn._lightsParamsv[index + 7] = this._tempSpecular.y;
|
|
135
137
|
this._specular.z = rn._lightsParamsv[index + 8] = this._tempSpecular.z;
|
package/src/og/quadTree/Node.js
CHANGED
|
@@ -351,7 +351,8 @@ class Node {
|
|
|
351
351
|
var bp = ni.segment;
|
|
352
352
|
var ld = ap.gridSize / (bp.gridSize * Math.pow(2, bp.tileZoom - ap.tileZoom));
|
|
353
353
|
|
|
354
|
-
let cs_size = ap.gridSize,
|
|
354
|
+
let cs_size = ap.gridSize,
|
|
355
|
+
opcs_size = bp.gridSize;
|
|
355
356
|
|
|
356
357
|
if (ld > 1) {
|
|
357
358
|
cs_size = Math.ceil(ap.gridSize / ld);
|
|
@@ -21,6 +21,10 @@ let __pickingCallbackCounter__ = 0;
|
|
|
21
21
|
|
|
22
22
|
let __depthCallbackCounter__ = 0;
|
|
23
23
|
|
|
24
|
+
const DIFFUSE = 0;
|
|
25
|
+
const NORMAL = 1;
|
|
26
|
+
const POSITION = 2;
|
|
27
|
+
|
|
24
28
|
/**
|
|
25
29
|
* Represents high level WebGL context interface that starts WebGL handler working in real time.
|
|
26
30
|
* @class
|
|
@@ -193,6 +197,13 @@ class Renderer {
|
|
|
193
197
|
* @type {utils.TextureAtlas}
|
|
194
198
|
*/
|
|
195
199
|
this.billboardsTextureAtlas = new TextureAtlas();
|
|
200
|
+
//TODO global texture atlas
|
|
201
|
+
/**
|
|
202
|
+
* Texture atlas for the billboards images. One atlas per node.
|
|
203
|
+
* @protected
|
|
204
|
+
* @type {utils.TextureAtlas}
|
|
205
|
+
*/
|
|
206
|
+
this.geoObjectsTextureAtlas = new TextureAtlas();
|
|
196
207
|
|
|
197
208
|
/**
|
|
198
209
|
* Texture font atlas for the font families and styles. One atlas per node.
|
|
@@ -389,6 +400,7 @@ class Renderer {
|
|
|
389
400
|
var that = this;
|
|
390
401
|
|
|
391
402
|
this.billboardsTextureAtlas.assignHandler(this.handler);
|
|
403
|
+
this.geoObjectsTextureAtlas.assignHandler(this.handler);
|
|
392
404
|
|
|
393
405
|
this.fontAtlas.assignHandler(this.handler);
|
|
394
406
|
|
|
@@ -459,6 +471,7 @@ class Renderer {
|
|
|
459
471
|
}).init();
|
|
460
472
|
|
|
461
473
|
this.blitFramebuffer = new Framebuffer(this.handler, {
|
|
474
|
+
size: 1,
|
|
462
475
|
useDepth: false,
|
|
463
476
|
internalFormat: this._internalFormat,
|
|
464
477
|
format: this._format,
|
|
@@ -487,10 +500,10 @@ class Renderer {
|
|
|
487
500
|
__resizeTimeout = setTimeout(() => {
|
|
488
501
|
this._resizeEnd();
|
|
489
502
|
this.events.dispatch(this.events.resizeend, this.handler.canvas);
|
|
490
|
-
},
|
|
503
|
+
}, 320);
|
|
491
504
|
};
|
|
492
505
|
|
|
493
|
-
this.
|
|
506
|
+
this.screenFramePositionBuffer = this.handler.createArrayBuffer(
|
|
494
507
|
new Float32Array([1, 1, -1, 1, 1, -1, -1, -1]),
|
|
495
508
|
2,
|
|
496
509
|
4
|
|
@@ -552,36 +565,6 @@ class Renderer {
|
|
|
552
565
|
this.setCurrentScreen(this._currentOutput);
|
|
553
566
|
}
|
|
554
567
|
|
|
555
|
-
// resize() {
|
|
556
|
-
// let c = this.handler.canvas;
|
|
557
|
-
//
|
|
558
|
-
// this.activeCamera.setAspectRatio(c.width / c.height);
|
|
559
|
-
//
|
|
560
|
-
// this.sceneFramebuffer.setSize(c.width, c.height);
|
|
561
|
-
//
|
|
562
|
-
// this.blitFramebuffer && this.blitFramebuffer.setSize(c.width, c.height, true);
|
|
563
|
-
//
|
|
564
|
-
// this.toneMappingFramebuffer && this.toneMappingFramebuffer.setSize(c.width, c.height, true);
|
|
565
|
-
//
|
|
566
|
-
// this.depthFramebuffer && this.depthFramebuffer.setSize(c.clientWidth, c.clientHeight, true);
|
|
567
|
-
//
|
|
568
|
-
// this.screenDepthFramebuffer && this.screenDepthFramebuffer.setSize(c.clientWidth, c.clientHeight, true);
|
|
569
|
-
//
|
|
570
|
-
// if (this.handler.gl.type === "webgl") {
|
|
571
|
-
// this.screenTexture.screen = this.sceneFramebuffer.textures[0];
|
|
572
|
-
// this.screenTexture.picking = this.pickingFramebuffer.textures[0];
|
|
573
|
-
// this.screenTexture.depth = this.screenDepthFramebuffer.textures[0];
|
|
574
|
-
// this.screenTexture.frustum = this.depthFramebuffer.textures[0];
|
|
575
|
-
// } else {
|
|
576
|
-
// this.screenTexture.screen = this.toneMappingFramebuffer.textures[0];
|
|
577
|
-
// this.screenTexture.picking = this.pickingFramebuffer.textures[0];
|
|
578
|
-
// this.screenTexture.depth = this.screenDepthFramebuffer.textures[0];
|
|
579
|
-
// this.screenTexture.frustum = this.depthFramebuffer.textures[0];
|
|
580
|
-
// }
|
|
581
|
-
//
|
|
582
|
-
// this.setCurrentScreen(this._currentOutput);
|
|
583
|
-
// }
|
|
584
|
-
|
|
585
568
|
removeNode(renderNode) {
|
|
586
569
|
renderNode.remove();
|
|
587
570
|
}
|
|
@@ -758,8 +741,8 @@ class Renderer {
|
|
|
758
741
|
let e = this.events;
|
|
759
742
|
e.handleEvents();
|
|
760
743
|
|
|
761
|
-
let
|
|
762
|
-
|
|
744
|
+
let sceneFramebuffer = this.sceneFramebuffer;
|
|
745
|
+
sceneFramebuffer.activate();
|
|
763
746
|
|
|
764
747
|
let h = this.handler,
|
|
765
748
|
gl = h.gl;
|
|
@@ -786,6 +769,7 @@ class Renderer {
|
|
|
786
769
|
while (i--) {
|
|
787
770
|
rn[i].drawNode();
|
|
788
771
|
}
|
|
772
|
+
|
|
789
773
|
this._drawEntityCollections();
|
|
790
774
|
|
|
791
775
|
if (pointerEvent) {
|
|
@@ -793,9 +777,9 @@ class Renderer {
|
|
|
793
777
|
}
|
|
794
778
|
}
|
|
795
779
|
|
|
796
|
-
|
|
780
|
+
sceneFramebuffer.deactivate();
|
|
797
781
|
|
|
798
|
-
this.blitFramebuffer &&
|
|
782
|
+
this.blitFramebuffer && sceneFramebuffer.blitTo(this.blitFramebuffer, 0);
|
|
799
783
|
|
|
800
784
|
if (pointerEvent) {
|
|
801
785
|
// It works ONLY for 0 (closest) frustum
|
|
@@ -825,7 +809,7 @@ class Renderer {
|
|
|
825
809
|
|
|
826
810
|
gl.disable(gl.DEPTH_TEST);
|
|
827
811
|
|
|
828
|
-
gl.bindBuffer(gl.ARRAY_BUFFER, this.
|
|
812
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.screenFramePositionBuffer);
|
|
829
813
|
gl.vertexAttribPointer(p.attributes.corners, 2, gl.FLOAT, false, 0, 0);
|
|
830
814
|
|
|
831
815
|
this.toneMappingFramebuffer.activate();
|
|
@@ -869,7 +853,7 @@ class Renderer {
|
|
|
869
853
|
gl.activeTexture(gl.TEXTURE0);
|
|
870
854
|
gl.bindTexture(gl.TEXTURE_2D, this.outputTexture);
|
|
871
855
|
gl.uniform1i(p.uniforms.texture, 0);
|
|
872
|
-
gl.bindBuffer(gl.ARRAY_BUFFER, this.
|
|
856
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.screenFramePositionBuffer);
|
|
873
857
|
gl.vertexAttribPointer(p.attributes.corners, 2, gl.FLOAT, false, 0, 0);
|
|
874
858
|
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
|
875
859
|
gl.enable(gl.DEPTH_TEST);
|
|
@@ -885,7 +869,7 @@ class Renderer {
|
|
|
885
869
|
var h = this.handler;
|
|
886
870
|
var gl = h.gl;
|
|
887
871
|
|
|
888
|
-
if (
|
|
872
|
+
if (this.activeCamera.isFirstPass) {
|
|
889
873
|
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
890
874
|
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
891
875
|
} else {
|
|
@@ -894,8 +878,8 @@ class Renderer {
|
|
|
894
878
|
|
|
895
879
|
gl.disable(h.gl.BLEND);
|
|
896
880
|
|
|
897
|
-
|
|
898
|
-
|
|
881
|
+
let dp = this._pickingCallbacks;
|
|
882
|
+
let i = dp.length;
|
|
899
883
|
while (i--) {
|
|
900
884
|
/**
|
|
901
885
|
* This callback renders picking frame.
|
|
@@ -938,7 +922,7 @@ class Renderer {
|
|
|
938
922
|
|
|
939
923
|
gl = h.gl;
|
|
940
924
|
|
|
941
|
-
gl.bindBuffer(gl.ARRAY_BUFFER, this.
|
|
925
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.screenFramePositionBuffer);
|
|
942
926
|
gl.vertexAttribPointer(p.attributes.corners, 2, gl.FLOAT, false, 0, 0);
|
|
943
927
|
|
|
944
928
|
sh.activate();
|
|
@@ -311,22 +311,22 @@ class RendererEvents extends Events {
|
|
|
311
311
|
* @protected
|
|
312
312
|
*/
|
|
313
313
|
updateButtonsStates(buttons) {
|
|
314
|
-
|
|
315
|
-
if (buttons & LB_M) {
|
|
314
|
+
let ms = this.mouseState;
|
|
315
|
+
if ((buttons & LB_M) && ms.leftButtonDown) {
|
|
316
316
|
ms.leftButtonDown = true;
|
|
317
317
|
} else {
|
|
318
318
|
ms.leftButtonHold = false;
|
|
319
319
|
ms.leftButtonDown = false;
|
|
320
320
|
}
|
|
321
321
|
|
|
322
|
-
if (buttons & RB_M) {
|
|
322
|
+
if ((buttons & RB_M) && ms.rightButtonDown) {
|
|
323
323
|
ms.rightButtonDown = true;
|
|
324
324
|
} else {
|
|
325
325
|
ms.rightButtonHold = false;
|
|
326
326
|
ms.rightButtonDown = false;
|
|
327
327
|
}
|
|
328
328
|
|
|
329
|
-
if (buttons & MB_M) {
|
|
329
|
+
if ((buttons & MB_M) && ms.middleButtonDown) {
|
|
330
330
|
ms.middleButtonDown = true;
|
|
331
331
|
} else {
|
|
332
332
|
ms.middleButtonHold = false;
|