@openglobus/og 0.15.3 → 0.15.5
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/README.md +3 -7
- package/css/og.css +24 -15
- 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 +1 -1
- package/src/og/Globe.js +4 -0
- package/src/og/LonLat.js +207 -193
- package/src/og/Object3d.js +1 -1
- package/src/og/camera/Camera.js +4 -16
- package/src/og/camera/PlanetCamera.js +12 -6
- package/src/og/control/DebugInfo.js +263 -165
- package/src/og/control/KeyboardNavigation.js +153 -169
- package/src/og/control/MouseNavigation.js +0 -20
- package/src/og/control/RulerSwitcher.js +4 -1
- package/src/og/control/SimpleNavigation.js +123 -128
- package/src/og/control/heightRuler/HeightRuler.js +12 -0
- package/src/og/control/heightRuler/HeightRulerScene.js +224 -0
- package/src/og/control/heightRuler/HeightRulerSwitcher.js +15 -0
- package/src/og/control/index.js +2 -0
- package/src/og/control/ruler/RulerScene.js +106 -79
- package/src/og/ellipsoid/Ellipsoid.js +20 -3
- package/src/og/entity/Entity.js +6 -6
- package/src/og/entity/EntityCollection.js +4 -0
- package/src/og/entity/GeoObjectHandler.js +3 -0
- package/src/og/layer/BaseGeoImage.js +152 -16
- package/src/og/layer/GeoImage.js +0 -91
- package/src/og/layer/GeoTexture2d.js +54 -143
- package/src/og/layer/GeoVideo.js +6 -107
- package/src/og/layer/Material.js +1 -1
- package/src/og/layer/Vector.js +8 -6
- package/src/og/layer/XYZ.js +2 -2
- package/src/og/quadTree/EntityCollectionNode.js +8 -2
- package/src/og/renderer/Renderer.js +91 -94
- package/src/og/renderer/RendererEvents.js +39 -23
- package/src/og/scene/BaseNode.js +113 -113
- package/src/og/scene/Planet.js +20 -13
- package/src/og/scene/RenderNode.js +42 -9
- package/src/og/segment/Segment.js +38 -45
- package/src/og/shaders/geoObject.js +12 -10
- package/src/og/shaders/pickingMask.js +1 -1
- package/src/og/utils/GeoImageCreator.js +61 -21
- package/src/og/utils/VectorTileCreator.js +32 -49
- package/src/og/webgl/Framebuffer.js +5 -0
- package/types/LonLat.d.ts +8 -0
- package/types/camera/PlanetCamera.d.ts +1 -1
- package/types/control/DebugInfo.d.ts +4 -0
- package/types/control/SimpleNavigation.d.ts +1 -0
- package/types/control/heightRuler/HeightRuler.d.ts +6 -0
- package/types/control/heightRuler/HeightRulerScene.d.ts +23 -0
- package/types/control/index.d.ts +2 -1
- package/types/control/ruler/RulerScene.d.ts +8 -5
- package/types/control/selection/SelectionScene.d.ts +0 -1
- package/types/ellipsoid/Ellipsoid.d.ts +13 -1
- package/types/entity/EntityCollection.d.ts +1 -0
- package/types/layer/BaseGeoImage.d.ts +17 -3
- package/types/layer/GeoImage.d.ts +0 -8
- package/types/layer/GeoTexture2d.d.ts +0 -2
- package/types/layer/GeoVideo.d.ts +0 -8
- package/types/layer/XYZ.d.ts +1 -1
- package/types/renderer/Renderer.d.ts +12 -3
- package/types/scene/Axes.d.ts +1 -1
- package/types/scene/BaseNode.d.ts +2 -2
- package/types/scene/Planet.d.ts +0 -5
- package/types/scene/RenderNode.d.ts +16 -9
- package/types/scene/SkyBox.d.ts +1 -1
- package/types/segment/Segment.d.ts +2 -3
- package/types/utils/VectorTileCreator.d.ts +1 -3
- package/types/webgl/Framebuffer.d.ts +1 -0
package/src/og/layer/XYZ.js
CHANGED
|
@@ -44,7 +44,7 @@ class XYZ extends Layer {
|
|
|
44
44
|
* @param {string} name - Layer name.
|
|
45
45
|
* @param {*} options
|
|
46
46
|
*/
|
|
47
|
-
constructor(name, options) {
|
|
47
|
+
constructor(name, options = {}) {
|
|
48
48
|
super(name, options);
|
|
49
49
|
|
|
50
50
|
this.events.registerNames(EVENT_NAMES);
|
|
@@ -316,7 +316,7 @@ class XYZ extends Layer {
|
|
|
316
316
|
clearMaterial(material) {
|
|
317
317
|
if (material.isReady && material.textureExists) {
|
|
318
318
|
!material.texture.default &&
|
|
319
|
-
|
|
319
|
+
material.segment.handler.gl.deleteTexture(material.texture);
|
|
320
320
|
material.texture = null;
|
|
321
321
|
|
|
322
322
|
if (material.image) {
|
|
@@ -282,9 +282,15 @@ class EntityCollectionNode {
|
|
|
282
282
|
}
|
|
283
283
|
|
|
284
284
|
alignEntityToTheGround(entity, segment) {
|
|
285
|
-
|
|
285
|
+
let res = new Vec3();
|
|
286
286
|
segment.getEntityTerrainPoint(entity, res);
|
|
287
|
-
|
|
287
|
+
let alt = (Number(this.layer.relativeToGround) && entity._altitude) || 0.0;
|
|
288
|
+
if (alt) {
|
|
289
|
+
let n = this.layer._planet.ellipsoid.getSurfaceNormal3v(res);
|
|
290
|
+
entity._setCartesian3vSilent(res.addA(n.scale(alt)));
|
|
291
|
+
} else {
|
|
292
|
+
entity._setCartesian3vSilent(res);
|
|
293
|
+
}
|
|
288
294
|
}
|
|
289
295
|
|
|
290
296
|
isVisible() {
|
|
@@ -61,8 +61,7 @@ let __distanceCallbackCounter__ = 0;
|
|
|
61
61
|
let __resizeTimeout;
|
|
62
62
|
|
|
63
63
|
class Renderer {
|
|
64
|
-
constructor(handler, params) {
|
|
65
|
-
params = params || {};
|
|
64
|
+
constructor(handler, params = {}) {
|
|
66
65
|
|
|
67
66
|
/**
|
|
68
67
|
* Div element with WebGL canvas. Assigned in Globe class.
|
|
@@ -139,7 +138,7 @@ class Renderer {
|
|
|
139
138
|
* @public
|
|
140
139
|
* @type {Object}
|
|
141
140
|
*/
|
|
142
|
-
this.colorObjects =
|
|
141
|
+
this.colorObjects = new Map();
|
|
143
142
|
|
|
144
143
|
/**
|
|
145
144
|
* Color picking objects rendering queue.
|
|
@@ -214,11 +213,6 @@ class Renderer {
|
|
|
214
213
|
|
|
215
214
|
this._entityCollections = [];
|
|
216
215
|
|
|
217
|
-
if (params.autoActivate || isEmpty(params.autoActivate)) {
|
|
218
|
-
this.initialize();
|
|
219
|
-
this.start();
|
|
220
|
-
}
|
|
221
|
-
|
|
222
216
|
this._currentOutput = "screen";
|
|
223
217
|
|
|
224
218
|
this._fnScreenFrame = null;
|
|
@@ -226,6 +220,11 @@ class Renderer {
|
|
|
226
220
|
this.labelWorker = new LabelWorker(4);
|
|
227
221
|
|
|
228
222
|
this.__useDistanceFramebuffer__ = true;
|
|
223
|
+
|
|
224
|
+
if (params.autoActivate || isEmpty(params.autoActivate)) {
|
|
225
|
+
this.initialize();
|
|
226
|
+
this.start();
|
|
227
|
+
}
|
|
229
228
|
}
|
|
230
229
|
|
|
231
230
|
/**
|
|
@@ -239,9 +238,7 @@ class Renderer {
|
|
|
239
238
|
addDepthCallback(sender, callback) {
|
|
240
239
|
var id = __depthCallbackCounter__++;
|
|
241
240
|
this._depthCallbacks.push({
|
|
242
|
-
id: id,
|
|
243
|
-
callback: callback,
|
|
244
|
-
sender: sender
|
|
241
|
+
id: id, callback: callback, sender: sender
|
|
245
242
|
});
|
|
246
243
|
return id;
|
|
247
244
|
}
|
|
@@ -258,9 +255,7 @@ class Renderer {
|
|
|
258
255
|
addDistanceCallback(sender, callback) {
|
|
259
256
|
var id = __distanceCallbackCounter__++;
|
|
260
257
|
this._distanceCallbacks.push({
|
|
261
|
-
id: id,
|
|
262
|
-
callback: callback,
|
|
263
|
-
sender: sender
|
|
258
|
+
id: id, callback: callback, sender: sender
|
|
264
259
|
});
|
|
265
260
|
return id;
|
|
266
261
|
}
|
|
@@ -284,9 +279,7 @@ class Renderer {
|
|
|
284
279
|
addPickingCallback(sender, callback) {
|
|
285
280
|
var id = __pickingCallbackCounter__++;
|
|
286
281
|
this._pickingCallbacks.push({
|
|
287
|
-
id: id,
|
|
288
|
-
callback: callback,
|
|
289
|
-
sender: sender
|
|
282
|
+
id: id, callback: callback, sender: sender
|
|
290
283
|
});
|
|
291
284
|
return id;
|
|
292
285
|
}
|
|
@@ -304,8 +297,16 @@ class Renderer {
|
|
|
304
297
|
}
|
|
305
298
|
}
|
|
306
299
|
|
|
307
|
-
|
|
308
|
-
return this.colorObjects
|
|
300
|
+
getPickingObject(r, g, b) {
|
|
301
|
+
return this.colorObjects.get(`${r}_${g}_${b}`);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
getPickingObjectArr(arr) {
|
|
305
|
+
return this.colorObjects.get(`${arr[0]}_${arr[1]}_${arr[2]}`);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
getPickingObject3v(vec) {
|
|
309
|
+
return this.colorObjects.get(`${vec.x}_${vec.y}_${vec.z}`);
|
|
309
310
|
}
|
|
310
311
|
|
|
311
312
|
/**
|
|
@@ -317,11 +318,11 @@ class Renderer {
|
|
|
317
318
|
if (!obj._pickingColor || obj._pickingColor.isZero()) {
|
|
318
319
|
let r = 0, g = 0, b = 0;
|
|
319
320
|
let str = "0_0_0";
|
|
320
|
-
while (!(r || g || b) || this.colorObjects
|
|
321
|
+
while (!(r || g || b) || this.colorObjects.has(str)) {
|
|
321
322
|
r = randomi(1, 255);
|
|
322
323
|
g = randomi(1, 255);
|
|
323
324
|
b = randomi(1, 255);
|
|
324
|
-
str = r
|
|
325
|
+
str = `${r}_${g}_${b}`;
|
|
325
326
|
}
|
|
326
327
|
|
|
327
328
|
if (!obj._pickingColor) {
|
|
@@ -332,7 +333,7 @@ class Renderer {
|
|
|
332
333
|
|
|
333
334
|
obj._pickingColorU = new Float32Array([r / 255, g / 255, b / 255]);
|
|
334
335
|
|
|
335
|
-
this.colorObjects
|
|
336
|
+
this.colorObjects.set(str, obj);
|
|
336
337
|
}
|
|
337
338
|
}
|
|
338
339
|
|
|
@@ -345,8 +346,7 @@ class Renderer {
|
|
|
345
346
|
if (!obj._pickingColor.isZero()) {
|
|
346
347
|
var c = obj._pickingColor;
|
|
347
348
|
if (!c.isZero()) {
|
|
348
|
-
this.colorObjects
|
|
349
|
-
delete this.colorObjects[c.x + "_" + c.y + "_" + c.z];
|
|
349
|
+
this.colorObjects.delete(`${c.x}_${c.y}_${c.z}`);
|
|
350
350
|
c.x = c.y = c.z = 0;
|
|
351
351
|
}
|
|
352
352
|
}
|
|
@@ -417,21 +417,17 @@ class Renderer {
|
|
|
417
417
|
this._initialized = true;
|
|
418
418
|
}
|
|
419
419
|
|
|
420
|
-
var that = this;
|
|
421
|
-
|
|
422
420
|
this.billboardsTextureAtlas.assignHandler(this.handler);
|
|
423
421
|
this.geoObjectsTextureAtlas.assignHandler(this.handler);
|
|
424
422
|
|
|
425
423
|
this.fontAtlas.assignHandler(this.handler);
|
|
426
424
|
|
|
427
|
-
this.handler.setFrameCallback(
|
|
428
|
-
|
|
425
|
+
this.handler.setFrameCallback(() => {
|
|
426
|
+
this.draw();
|
|
429
427
|
});
|
|
430
428
|
|
|
431
429
|
this.activeCamera = new Camera(this, {
|
|
432
|
-
eye: new Vec3(0, 0, 0),
|
|
433
|
-
look: new Vec3(0, 0, -1),
|
|
434
|
-
up: new Vec3(0, 1, 0)
|
|
430
|
+
eye: new Vec3(0, 0, 0), look: new Vec3(0, 0, -1), up: new Vec3(0, 1, 0)
|
|
435
431
|
});
|
|
436
432
|
|
|
437
433
|
this.events.initialize();
|
|
@@ -444,10 +440,7 @@ class Renderer {
|
|
|
444
440
|
this.handler.addProgram(screenFrame());
|
|
445
441
|
|
|
446
442
|
this.pickingFramebuffer = new Framebuffer(this.handler, {
|
|
447
|
-
width: 640,
|
|
448
|
-
height: 480,
|
|
449
|
-
depthComponent: "DEPTH_STENCIL",
|
|
450
|
-
renderbufferTarget: "DEPTH_STENCIL_ATTACHMENT"
|
|
443
|
+
width: 640, height: 480, depthComponent: "DEPTH_STENCIL", renderbufferTarget: "DEPTH_STENCIL_ATTACHMENT"
|
|
451
444
|
}).init();
|
|
452
445
|
|
|
453
446
|
this._tempPickingPix_ = new Uint8Array(this.pickingFramebuffer.width * this.pickingFramebuffer.height * 4);
|
|
@@ -495,10 +488,7 @@ class Renderer {
|
|
|
495
488
|
this.handler.addPrograms([depth()]);
|
|
496
489
|
|
|
497
490
|
this.sceneFramebuffer = new Multisample(this.handler, {
|
|
498
|
-
size: 1,
|
|
499
|
-
msaa: this._msaa,
|
|
500
|
-
internalFormat: this._internalFormat,
|
|
501
|
-
filter: "LINEAR"
|
|
491
|
+
size: 1, msaa: this._msaa, internalFormat: this._internalFormat, filter: "LINEAR"
|
|
502
492
|
}).init();
|
|
503
493
|
|
|
504
494
|
this.blitFramebuffer = new Framebuffer(this.handler, {
|
|
@@ -537,11 +527,7 @@ class Renderer {
|
|
|
537
527
|
}, 320);
|
|
538
528
|
};
|
|
539
529
|
|
|
540
|
-
this.screenFramePositionBuffer = this.handler.createArrayBuffer(
|
|
541
|
-
new Float32Array([1, 1, -1, 1, 1, -1, -1, -1]),
|
|
542
|
-
2,
|
|
543
|
-
4
|
|
544
|
-
);
|
|
530
|
+
this.screenFramePositionBuffer = this.handler.createArrayBuffer(new Float32Array([1, 1, -1, 1, 1, -1, -1, -1]), 2, 4);
|
|
545
531
|
|
|
546
532
|
let temp = this.controls;
|
|
547
533
|
this.controls = {};
|
|
@@ -656,11 +642,7 @@ class Renderer {
|
|
|
656
642
|
|
|
657
643
|
getMaxMSAA(internalFormat) {
|
|
658
644
|
var gl = this.handler.gl;
|
|
659
|
-
let samples = gl.getInternalformatParameter(
|
|
660
|
-
gl.RENDERBUFFER,
|
|
661
|
-
gl[internalFormat],
|
|
662
|
-
gl.SAMPLES
|
|
663
|
-
);
|
|
645
|
+
let samples = gl.getInternalformatParameter(gl.RENDERBUFFER, gl[internalFormat], gl.SAMPLES);
|
|
664
646
|
return samples[0];
|
|
665
647
|
}
|
|
666
648
|
|
|
@@ -680,7 +662,40 @@ class Renderer {
|
|
|
680
662
|
* @public
|
|
681
663
|
* @param {Array<og.EntityCollection>} ec - Entity collection array.
|
|
682
664
|
*/
|
|
683
|
-
|
|
665
|
+
_drawOpaqueEntityCollections() {
|
|
666
|
+
let ec = this._entityCollections;
|
|
667
|
+
|
|
668
|
+
if (ec.length) {
|
|
669
|
+
let gl = this.handler.gl;
|
|
670
|
+
gl.enable(gl.BLEND);
|
|
671
|
+
gl.blendEquation(gl.FUNC_ADD);
|
|
672
|
+
gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE);
|
|
673
|
+
|
|
674
|
+
//geoObject
|
|
675
|
+
let i = ec.length;
|
|
676
|
+
while (i--) {
|
|
677
|
+
let eci = ec[i];
|
|
678
|
+
if (ec[i]._fadingOpacity) {
|
|
679
|
+
eci.events.dispatch(eci.events.draw, eci);
|
|
680
|
+
ec[i].geoObjectHandler.draw();
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
// pointClouds pass
|
|
685
|
+
i = ec.length;
|
|
686
|
+
while (i--) {
|
|
687
|
+
ec[i]._fadingOpacity && ec[i].pointCloudHandler.draw();
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
|
|
693
|
+
/**
|
|
694
|
+
* Draws entity collections.
|
|
695
|
+
* @public
|
|
696
|
+
* @param {Array<og.EntityCollection>} ec - Entity collection array.
|
|
697
|
+
*/
|
|
698
|
+
_drawTransparentEntityCollections() {
|
|
684
699
|
let ec = this._entityCollections;
|
|
685
700
|
|
|
686
701
|
if (ec.length) {
|
|
@@ -694,18 +709,14 @@ class Renderer {
|
|
|
694
709
|
gl.activeTexture(gl.TEXTURE0);
|
|
695
710
|
gl.bindTexture(gl.TEXTURE_2D, this.billboardsTextureAtlas.texture);
|
|
696
711
|
|
|
697
|
-
|
|
712
|
+
let i = ec.length;
|
|
698
713
|
while (i--) {
|
|
699
714
|
var eci = ec[i];
|
|
700
|
-
|
|
701
|
-
// first begin draw event
|
|
702
|
-
eci.events.dispatch(eci.events.draw, eci);
|
|
703
|
-
eci.billboardHandler.draw();
|
|
704
|
-
}
|
|
715
|
+
eci._fadingOpacity && eci.billboardHandler.draw();
|
|
705
716
|
}
|
|
706
717
|
|
|
707
718
|
// labels pass
|
|
708
|
-
|
|
719
|
+
let fa = this.fontAtlas.atlasesArr;
|
|
709
720
|
for (i = 0; i < fa.length; i++) {
|
|
710
721
|
gl.activeTexture(gl.TEXTURE0 + i);
|
|
711
722
|
gl.bindTexture(gl.TEXTURE_2D, fa[i].texture);
|
|
@@ -716,12 +727,6 @@ class Renderer {
|
|
|
716
727
|
ec[i]._fadingOpacity && ec[i].labelHandler.draw();
|
|
717
728
|
}
|
|
718
729
|
|
|
719
|
-
//geoObject
|
|
720
|
-
i = ec.length;
|
|
721
|
-
while (i--) {
|
|
722
|
-
ec[i]._fadingOpacity && ec[i].geoObjectHandler.draw();
|
|
723
|
-
}
|
|
724
|
-
|
|
725
730
|
// rays
|
|
726
731
|
i = ec.length;
|
|
727
732
|
while (i--) {
|
|
@@ -734,29 +739,19 @@ class Renderer {
|
|
|
734
739
|
ec[i]._fadingOpacity && ec[i].polylineHandler.draw();
|
|
735
740
|
}
|
|
736
741
|
|
|
737
|
-
// pointClouds pass
|
|
738
|
-
i = ec.length;
|
|
739
|
-
while (i--) {
|
|
740
|
-
if (ec[i]._fadingOpacity) {
|
|
741
|
-
ec[i].pointCloudHandler.draw();
|
|
742
|
-
}
|
|
743
|
-
}
|
|
744
|
-
|
|
745
742
|
// Strip pass
|
|
746
743
|
i = ec.length;
|
|
747
744
|
while (i--) {
|
|
748
|
-
|
|
749
|
-
ec[i].stripHandler.draw();
|
|
750
|
-
// post draw event
|
|
751
|
-
eci.events.dispatch(eci.events.drawend, eci);
|
|
752
|
-
}
|
|
745
|
+
ec[i]._fadingOpacity && ec[i].stripHandler.draw();
|
|
753
746
|
}
|
|
754
|
-
|
|
755
|
-
this._entityCollections.length = 0;
|
|
756
|
-
this._entityCollections = [];
|
|
757
747
|
}
|
|
758
748
|
}
|
|
759
749
|
|
|
750
|
+
_clearEntityCollectionQueue() {
|
|
751
|
+
this._entityCollections.length = 0;
|
|
752
|
+
this._entityCollections = [];
|
|
753
|
+
}
|
|
754
|
+
|
|
760
755
|
/**
|
|
761
756
|
* Draw nodes.
|
|
762
757
|
* @public
|
|
@@ -770,8 +765,7 @@ class Renderer {
|
|
|
770
765
|
let sceneFramebuffer = this.sceneFramebuffer;
|
|
771
766
|
sceneFramebuffer.activate();
|
|
772
767
|
|
|
773
|
-
let h = this.handler,
|
|
774
|
-
gl = h.gl;
|
|
768
|
+
let h = this.handler, gl = h.gl;
|
|
775
769
|
|
|
776
770
|
gl.enable(gl.BLEND);
|
|
777
771
|
gl.blendEquation(gl.FUNC_ADD);
|
|
@@ -789,15 +783,25 @@ class Renderer {
|
|
|
789
783
|
// Rendering scene nodes and entityCollections
|
|
790
784
|
let rn = this._renderNodesArr;
|
|
791
785
|
let k = frustums.length;
|
|
786
|
+
|
|
792
787
|
while (k--) {
|
|
793
788
|
this.activeCamera.setCurrentFrustum(k);
|
|
794
789
|
gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
790
|
+
|
|
795
791
|
let i = rn.length;
|
|
792
|
+
while (i--) {
|
|
793
|
+
rn[i].preDrawNode();
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
this._drawOpaqueEntityCollections();
|
|
797
|
+
|
|
798
|
+
i = rn.length;
|
|
796
799
|
while (i--) {
|
|
797
800
|
rn[i].drawNode();
|
|
798
801
|
}
|
|
799
802
|
|
|
800
|
-
this.
|
|
803
|
+
this._drawTransparentEntityCollections();
|
|
804
|
+
this._clearEntityCollectionQueue();
|
|
801
805
|
|
|
802
806
|
if (pointerEvent) {
|
|
803
807
|
this._drawPickingBuffer();
|
|
@@ -832,9 +836,7 @@ class Renderer {
|
|
|
832
836
|
_screenFrameMSAA() {
|
|
833
837
|
var h = this.handler;
|
|
834
838
|
|
|
835
|
-
var sh = h.programs.toneMapping,
|
|
836
|
-
p = sh._program,
|
|
837
|
-
gl = h.gl;
|
|
839
|
+
var sh = h.programs.toneMapping, p = sh._program, gl = h.gl;
|
|
838
840
|
|
|
839
841
|
gl.disable(gl.DEPTH_TEST);
|
|
840
842
|
|
|
@@ -873,9 +875,7 @@ class Renderer {
|
|
|
873
875
|
_screenFrameNoMSAA() {
|
|
874
876
|
|
|
875
877
|
let h = this.handler;
|
|
876
|
-
let sh = h.programs.screenFrame,
|
|
877
|
-
p = sh._program,
|
|
878
|
-
gl = h.gl;
|
|
878
|
+
let sh = h.programs.screenFrame, p = sh._program, gl = h.gl;
|
|
879
879
|
|
|
880
880
|
gl.disable(gl.DEPTH_TEST);
|
|
881
881
|
sh.activate();
|
|
@@ -910,8 +910,7 @@ class Renderer {
|
|
|
910
910
|
//
|
|
911
911
|
h.programs.pickingMask.activate();
|
|
912
912
|
let sh = h.programs.pickingMask._program;
|
|
913
|
-
let shu = sh.uniforms,
|
|
914
|
-
sha = sh.attributes;
|
|
913
|
+
let shu = sh.uniforms, sha = sh.attributes;
|
|
915
914
|
|
|
916
915
|
let /*ts = this.events.touchState,*/
|
|
917
916
|
ms = this.events.mouseState;
|
|
@@ -941,8 +940,7 @@ class Renderer {
|
|
|
941
940
|
gl.disable(gl.BLEND);
|
|
942
941
|
|
|
943
942
|
let dp = this._pickingCallbacks;
|
|
944
|
-
let i = dp.length;
|
|
945
|
-
while (i--) {
|
|
943
|
+
for (let i = 0, len = dp.length; i < len; i++) {
|
|
946
944
|
/**
|
|
947
945
|
* This callback renders picking frame.
|
|
948
946
|
* @callback og.Renderer~pickingCallback
|
|
@@ -1017,8 +1015,7 @@ class Renderer {
|
|
|
1017
1015
|
//
|
|
1018
1016
|
// PASS to depth visualization
|
|
1019
1017
|
this.screenDepthFramebuffer.activate();
|
|
1020
|
-
var sh = h.programs.depth,
|
|
1021
|
-
p = sh._program;
|
|
1018
|
+
var sh = h.programs.depth, p = sh._program;
|
|
1022
1019
|
|
|
1023
1020
|
gl = h.gl;
|
|
1024
1021
|
|
|
@@ -16,12 +16,19 @@ const LB_M = 0b0001;
|
|
|
16
16
|
const RB_M = 0b0010;
|
|
17
17
|
const MB_M = 0b0100;
|
|
18
18
|
|
|
19
|
+
let __skipFrames__ = 0;
|
|
20
|
+
const MAX_SKIP_FRAMES_ON_BLACK = 15;
|
|
21
|
+
|
|
22
|
+
const ISBLACK = (c) => !(c[0] || c[1] || c[2]);
|
|
23
|
+
const NOTBLACK = (c) => c[0] || c[1] || c[2];
|
|
24
|
+
|
|
19
25
|
/**
|
|
20
26
|
* Stores current picking rgb color.
|
|
21
27
|
* @private
|
|
22
28
|
* @type {Array.<number>} - (exactly 3 entries)
|
|
23
29
|
*/
|
|
24
30
|
let _currPickingColor = new Uint8Array(4);
|
|
31
|
+
let _tempCurrPickingColor = new Uint8Array(4);
|
|
25
32
|
|
|
26
33
|
/**
|
|
27
34
|
* Stores previous picked rgb color.
|
|
@@ -612,34 +619,44 @@ class RendererEvents extends Events {
|
|
|
612
619
|
if (!(ms.leftButtonHold || ms.rightButtonHold || ms.middleButtonHold)) {
|
|
613
620
|
|
|
614
621
|
let r = this.renderer;
|
|
615
|
-
let o = r.colorObjects;
|
|
616
622
|
let c = _currPickingColor,
|
|
617
|
-
p = _prevPickingColor
|
|
623
|
+
p = _prevPickingColor,
|
|
624
|
+
t = _tempCurrPickingColor;
|
|
625
|
+
|
|
626
|
+
if (ts.x || ts.y) {
|
|
627
|
+
r.readPickingColor(ts.nx, 1 - ts.ny, t);
|
|
628
|
+
} else {
|
|
629
|
+
r.readPickingColor(ms.nx, 1 - ms.ny, t);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
// current is black
|
|
633
|
+
if (ISBLACK(t) && __skipFrames__++ < MAX_SKIP_FRAMES_ON_BLACK) {
|
|
634
|
+
return;
|
|
635
|
+
}
|
|
636
|
+
__skipFrames__ = 0;
|
|
618
637
|
|
|
619
638
|
p[0] = c[0];
|
|
620
639
|
p[1] = c[1];
|
|
621
640
|
p[2] = c[2];
|
|
622
641
|
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
r.readPickingColor(ms.nx, 1 - ms.ny, c);
|
|
627
|
-
}
|
|
642
|
+
c[0] = t[0];
|
|
643
|
+
c[1] = t[1];
|
|
644
|
+
c[2] = t[2];
|
|
628
645
|
|
|
629
646
|
ms.pickingObject = null;
|
|
630
647
|
ts.pickingObject = null;
|
|
631
648
|
|
|
632
|
-
let co =
|
|
649
|
+
let co = r.getPickingObjectArr(c);
|
|
633
650
|
|
|
634
651
|
ms.pickingObject = co;
|
|
635
652
|
ts.pickingObject = co;
|
|
636
653
|
|
|
637
|
-
//object changed
|
|
638
|
-
if (c[0]
|
|
654
|
+
//object is changed
|
|
655
|
+
if (c[0] !== p[0] || c[1] !== p[1] || c[2] !== p[2]) {
|
|
639
656
|
|
|
640
|
-
//current black
|
|
641
|
-
if (
|
|
642
|
-
let po =
|
|
657
|
+
//current is black
|
|
658
|
+
if (ISBLACK(c)) {
|
|
659
|
+
let po = r.getPickingObjectArr(p);
|
|
643
660
|
if (po) {
|
|
644
661
|
let pe = po.rendererEvents;
|
|
645
662
|
ms.pickingObject = po;
|
|
@@ -648,11 +665,11 @@ class RendererEvents extends Events {
|
|
|
648
665
|
pe && pe.dispatch(pe.touchleave, ts);
|
|
649
666
|
}
|
|
650
667
|
} else {
|
|
651
|
-
//current not black
|
|
668
|
+
//current ia not black
|
|
652
669
|
|
|
653
|
-
//previous not black
|
|
654
|
-
if (p
|
|
655
|
-
let po =
|
|
670
|
+
//previous is not black
|
|
671
|
+
if (NOTBLACK(p)) {
|
|
672
|
+
let po = r.getPickingObjectArr(p);
|
|
656
673
|
if (po) {
|
|
657
674
|
let pe = po.rendererEvents;
|
|
658
675
|
ms.pickingObject = po;
|
|
@@ -844,9 +861,9 @@ class RendererEvents extends Events {
|
|
|
844
861
|
* @private
|
|
845
862
|
*/
|
|
846
863
|
handleTouchEvents() {
|
|
847
|
-
|
|
864
|
+
let ts = this.touchState;
|
|
848
865
|
|
|
849
|
-
|
|
866
|
+
let tpo = ts.pickingObject,
|
|
850
867
|
tpe = null;
|
|
851
868
|
|
|
852
869
|
if (ts.touchCancel) {
|
|
@@ -855,15 +872,14 @@ class RendererEvents extends Events {
|
|
|
855
872
|
}
|
|
856
873
|
|
|
857
874
|
if (ts.touchStart) {
|
|
858
|
-
|
|
875
|
+
let r = this.renderer;
|
|
859
876
|
|
|
860
877
|
r.pickingFramebuffer.activate();
|
|
861
878
|
r.pickingFramebuffer.readPixels(_currPickingColor, ts.nx, 1.0 - ts.ny, 1);
|
|
862
879
|
r.pickingFramebuffer.deactivate();
|
|
863
880
|
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
var co = o[c[0] + "_" + c[1] + "_" + c[2]];
|
|
881
|
+
let c = _currPickingColor;
|
|
882
|
+
let co = r.getPickingObjectArr(c);
|
|
867
883
|
tpo = ts.pickingObject = co;
|
|
868
884
|
if (tpo) {
|
|
869
885
|
tpe = tpo.rendererEvents;
|