@openglobus/og 0.11.7 → 0.11.8

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.
@@ -4,6 +4,7 @@
4
4
 
5
5
  "use strict";
6
6
 
7
+ import * as utils from "../utils/shared.js";
7
8
  import * as shaders from "../shaders/drawnode.js";
8
9
  import * as math from "../math.js";
9
10
  import * as mercator from "../mercator.js";
@@ -335,6 +336,16 @@ export class Planet extends RenderNode {
335
336
  */
336
337
  this._specularTexture = null;
337
338
 
339
+ //TODO: replace to a function
340
+ let a = utils.createColorRGB(options.ambient, new Vec3(0.2, 0.2, 0.2));
341
+ let d = utils.createColorRGB(options.diffuse, new Vec3(0.8, 0.8, 0.8));
342
+ let s = utils.createColorRGB(options.specular, new Vec3(0.0003, 0.0003, 0.0003));
343
+ let shininess = options.shininess || 20.0;
344
+
345
+ this._ambient = new Float32Array([a.x, a.y, a.z]);
346
+ this._diffuse = new Float32Array([d.x, d.y, d.z]);
347
+ this._specular = new Float32Array([s.x, s.y, s.z, shininess]);
348
+
338
349
  /**
339
350
  * True for rendering night glowing texture.
340
351
  * @protected
@@ -371,14 +382,7 @@ export class Planet extends RenderNode {
371
382
  this._maxLodRatio = MAX_LOD;
372
383
  this._minLodRatio = MIN_LOD;
373
384
 
374
- this._diffuseMaterialArr = new Float32Array(this.SLICE_SIZE_3 + 3);
375
- this._ambientMaterialArr = new Float32Array(this.SLICE_SIZE_3 + 3);
376
- this._specularMaterialArr = new Float32Array(this.SLICE_SIZE_4 + 4);
377
-
378
- this._tileOffsetArr = new Float32Array(this.SLICE_SIZE_4);
379
- this._visibleExtentOffsetArr = new Float32Array(this.SLICE_SIZE_4);
380
- this._transparentColorArr = new Float32Array(this.SLICE_SIZE_4);
381
- this._pickingColorArr = new Float32Array(this.SLICE_SIZE_3);
385
+ this._pickingColorArr = new Float32Array(this.SLICE_SIZE_4);
382
386
  this._samplerArr = new Int32Array(this.SLICE_SIZE);
383
387
  this._pickingMaskArr = new Int32Array(this.SLICE_SIZE);
384
388
 
@@ -619,11 +623,8 @@ export class Planet extends RenderNode {
619
623
  var h = this.renderer.handler;
620
624
 
621
625
  h.addProgram(shaders.drawnode_screen_nl(), true);
622
-
623
626
  //h.addProgram(shaders.drawnode_screen_wl(), true);
624
-
625
627
  h.addProgram(shaders.drawnode_screen_wl_webgl2(), true);
626
-
627
628
  h.addProgram(shaders.drawnode_colorPicking(), true);
628
629
  h.addProgram(shaders.drawnode_depth(), true);
629
630
  h.addProgram(shaders.drawnode_heightPicking(), true);
@@ -1075,7 +1076,9 @@ export class Planet extends RenderNode {
1075
1076
  frame() {
1076
1077
  this._renderScreenNodesPASS();
1077
1078
 
1078
- this._renderHeightPickingFramebufferPASS();
1079
+ if (this.renderer.isActiveBackbuffers) {
1080
+ this._renderHeightPickingFramebufferPASS();
1081
+ }
1079
1082
 
1080
1083
  this.drawEntityCollections(this._frustumEntityCollections);
1081
1084
  }
@@ -1135,7 +1138,6 @@ export class Planet extends RenderNode {
1135
1138
  gl.enable(gl.BLEND);
1136
1139
  gl.blendEquation(gl.FUNC_ADD);
1137
1140
  gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
1138
- //gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ZERO);
1139
1141
 
1140
1142
  if (this.lightEnabled) {
1141
1143
  h.programs.drawnode_screen_wl.activate();
@@ -1148,6 +1150,10 @@ export class Planet extends RenderNode {
1148
1150
  gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
1149
1151
  gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
1150
1152
 
1153
+ gl.uniform3fv(shu.diffuse, this._diffuse);
1154
+ gl.uniform3fv(shu.ambient, this._ambient);
1155
+ gl.uniform4fv(shu.specular, this._specular);
1156
+
1151
1157
  // bind night glowing material
1152
1158
  gl.activeTexture(gl.TEXTURE0 + this.SLICE_SIZE);
1153
1159
  gl.bindTexture(
@@ -1163,34 +1169,6 @@ export class Planet extends RenderNode {
1163
1169
  gl.bindTexture(gl.TEXTURE_2D, this._specularTexture || this.transparentTexture);
1164
1170
  gl.uniform1i(shu.specularTexture, this.SLICE_SIZE + 1);
1165
1171
 
1166
- var b = this.baseLayer;
1167
- if (b) {
1168
- this._diffuseMaterialArr[0] = b.diffuse.x;
1169
- this._diffuseMaterialArr[1] = b.diffuse.y;
1170
- this._diffuseMaterialArr[2] = b.diffuse.z;
1171
-
1172
- this._ambientMaterialArr[0] = b.ambient.x;
1173
- this._ambientMaterialArr[1] = b.ambient.y;
1174
- this._ambientMaterialArr[2] = b.ambient.z;
1175
-
1176
- this._specularMaterialArr[0] = b.specular.x;
1177
- this._specularMaterialArr[1] = b.specular.y;
1178
- this._specularMaterialArr[2] = b.specular.z;
1179
- this._specularMaterialArr[3] = b.shininess;
1180
- } else {
1181
- this._diffuseMaterialArr[0] = 0.89;
1182
- this._diffuseMaterialArr[1] = 0.9;
1183
- this._diffuseMaterialArr[2] = 0.83;
1184
-
1185
- this._ambientMaterialArr[0] = 0.0;
1186
- this._ambientMaterialArr[1] = 0.0;
1187
- this._ambientMaterialArr[2] = 0.0;
1188
-
1189
- this._specularMaterialArr[0] = 0.0003;
1190
- this._specularMaterialArr[1] = 0.00012;
1191
- this._specularMaterialArr[2] = 0.00001;
1192
- this._specularMaterialArr[3] = 20.0;
1193
- }
1194
1172
  } else {
1195
1173
  h.programs.drawnode_screen_nl.activate();
1196
1174
  sh = h.programs.drawnode_screen_nl._program;
@@ -1368,6 +1346,7 @@ export class Planet extends RenderNode {
1368
1346
  let cam = renderer.activeCamera;
1369
1347
 
1370
1348
  gl.disable(gl.BLEND);
1349
+ gl.disable(gl.POLYGON_OFFSET_FILL);
1371
1350
 
1372
1351
  gl.uniformMatrix4fv(shu.viewMatrix, false, cam.getViewMatrix());
1373
1352
  gl.uniformMatrix4fv(shu.projectionMatrix, false, cam.getProjectionMatrix());
@@ -1386,7 +1365,6 @@ export class Planet extends RenderNode {
1386
1365
  rn[i].segment.depthRendering(sh, sl[0], 0);
1387
1366
  }
1388
1367
 
1389
- gl.enable(gl.POLYGON_OFFSET_FILL);
1390
1368
  for (let j = 1, len = sl.length; j < len; j++) {
1391
1369
  i = rn.length;
1392
1370
  gl.polygonOffset(0, -j);
@@ -1492,12 +1470,11 @@ export class Planet extends RenderNode {
1492
1470
  * Returns 3d cartesian coordinates on the relief planet by mouse cursor
1493
1471
  * position or null if mouse cursor is outside the planet.
1494
1472
  * @public
1495
- * @param {Boolean} [force=false] - Force framebuffer rendering.
1496
1473
  * @returns {Vec3} -
1497
1474
  */
1498
- getCartesianFromMouseTerrain(force) {
1475
+ getCartesianFromMouseTerrain() {
1499
1476
  var ms = this.renderer.events.mouseState;
1500
- var distance = this.getDistanceFromPixel(ms, force);
1477
+ var distance = this.getDistanceFromPixel(ms);
1501
1478
  if (distance) {
1502
1479
  return ms.direction.scaleTo(distance).addA(this.renderer.activeCamera.eye);
1503
1480
  }
@@ -1512,8 +1489,8 @@ export class Planet extends RenderNode {
1512
1489
  * @param {Boolean} [force=false] - Force framebuffer rendering.
1513
1490
  * @returns {Vec3} -
1514
1491
  */
1515
- getCartesianFromPixelTerrain(px, force) {
1516
- var distance = this.getDistanceFromPixel(px, force);
1492
+ getCartesianFromPixelTerrain(px) {
1493
+ var distance = this.getDistanceFromPixel(px);
1517
1494
  if (distance) {
1518
1495
  var direction = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
1519
1496
  return direction.scaleTo(distance).addA(this.renderer.activeCamera.eye);
@@ -1592,7 +1569,9 @@ export class Planet extends RenderNode {
1592
1569
 
1593
1570
  // HEIGHT
1594
1571
  this._heightPickingFramebuffer.activate();
1595
- this._heightPickingFramebuffer.readPixels(_tempPickingPix_, spx, spy);
1572
+ if (this._heightPickingFramebuffer.isComplete()) {
1573
+ this._heightPickingFramebuffer.readPixels(_tempPickingPix_, spx, spy);
1574
+ }
1596
1575
  this._heightPickingFramebuffer.deactivate();
1597
1576
 
1598
1577
  let dist = decodeFloatFromRGBAArr(_tempPickingPix_);
@@ -1601,20 +1580,19 @@ export class Planet extends RenderNode {
1601
1580
  dist = this.getDistanceFromPixelEllipsoid(px) || 0;
1602
1581
  } else if (dist < DEPTH_DISTANCE) {
1603
1582
  r.screenDepthFramebuffer.activate();
1604
- r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy, 0);
1583
+ if (r.screenDepthFramebuffer.isComplete()) {
1584
+ r.screenDepthFramebuffer.readPixels(_tempDepthColor_, spx, spy);
1585
+ let screenPos = new Vec4(
1586
+ spx * 2.0 - 1.0,
1587
+ spy * 2.0 - 1.0,
1588
+ (_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
1589
+ 1.0 * 2.0 - 1.0
1590
+ );
1591
+ let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
1592
+ let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
1593
+ dist = -(viewPosition.z / viewPosition.w) / dir.dot(this.renderer.activeCamera.getForward());
1594
+ }
1605
1595
  r.screenDepthFramebuffer.deactivate();
1606
-
1607
- let screenPos = new Vec4(
1608
- spx * 2.0 - 1.0,
1609
- spy * 2.0 - 1.0,
1610
- (_tempDepthColor_[0] / 255.0) * 2.0 - 1.0,
1611
- 1.0 * 2.0 - 1.0
1612
- );
1613
- let viewPosition = this.camera.frustums[0]._inverseProjectionMatrix.mulVec4(screenPos);
1614
- let dir = px.direction || this.renderer.activeCamera.unproject(px.x, px.y);
1615
- dist =
1616
- -(viewPosition.z / viewPosition.w) /
1617
- dir.dot(this.renderer.activeCamera.getForward());
1618
1596
  }
1619
1597
 
1620
1598
  return dist;
@@ -12,26 +12,13 @@ import { Box } from "../bv/Box.js";
12
12
  import { Vec3 } from "../math/Vec3.js";
13
13
  import * as segmentHelper from "../segment/segmentHelper.js";
14
14
  import { getMatrixSubArray } from "../utils/shared.js";
15
+ import { Slice } from "./Slice.js";
15
16
 
16
17
  export const MAX_NORMAL_ZOOM = 7;
17
18
 
18
19
  var _tempHigh = new Vec3();
19
20
  var _tempLow = new Vec3();
20
21
 
21
- var _RenderingSlice = function (p) {
22
- this.layers = [];
23
- this.tileOffsetArr = new Float32Array(p.SLICE_SIZE_4);
24
- this.visibleExtentOffsetArr = new Float32Array(p.SLICE_SIZE_4);
25
- this.transparentColorArr = new Float32Array(p.SLICE_SIZE_4);
26
-
27
- this.clear = function () {
28
- this.layers = null;
29
- this.tileOffsetArr = null;
30
- this.visibleExtentOffsetArr = null;
31
- this.transparentColorArr = null;
32
- };
33
- };
34
-
35
22
  let _v0 = new Vec3(),
36
23
  _v1 = new Vec3(),
37
24
  _v2 = new Vec3(),
@@ -241,7 +228,7 @@ class Segment {
241
228
  this._inTheQueue = false;
242
229
  this._appliedNeighborsZoom = [0, 0, 0, 0];
243
230
 
244
- this._renderingSlices = [];
231
+ this._slices = [];
245
232
 
246
233
  this._indexBuffer = null;
247
234
 
@@ -946,12 +933,12 @@ class Segment {
946
933
 
947
934
  this.clearSegment();
948
935
 
949
- var i = this._renderingSlices.length;
936
+ var i = this._slices.length;
950
937
  while (i--) {
951
- this._renderingSlices[i].clear();
938
+ this._slices[i].clear();
952
939
  }
953
940
 
954
- this._renderingSlices = null;
941
+ this._slices = null;
955
942
 
956
943
  this.node = null;
957
944
 
@@ -990,9 +977,6 @@ class Segment {
990
977
  this.vertexPositionBufferLow = null;
991
978
  this.vertexTextureCoordBuffer = null;
992
979
 
993
- this._tileOffsetArr = null;
994
- this._visibleExtentOffsetArr = null;
995
-
996
980
  this._projection = null;
997
981
  this._appliedNeighborsZoom = null;
998
982
 
@@ -1104,10 +1088,10 @@ class Segment {
1104
1088
  v_rb = new Vec3(bigOne[9], bigOne[10], bigOne[11]);
1105
1089
 
1106
1090
  let vn = new Vec3(
1107
- bigOne[3] - bigOne[0],
1108
- bigOne[4] - bigOne[1],
1109
- bigOne[5] - bigOne[2]
1110
- ),
1091
+ bigOne[3] - bigOne[0],
1092
+ bigOne[4] - bigOne[1],
1093
+ bigOne[5] - bigOne[2]
1094
+ ),
1111
1095
  vw = new Vec3(
1112
1096
  bigOne[6] - bigOne[0],
1113
1097
  bigOne[7] - bigOne[1],
@@ -1291,13 +1275,13 @@ class Segment {
1291
1275
  n.sideSize[2] =
1292
1276
  n.sideSize[3] =
1293
1277
  this.gridSize =
1294
- p.terrain.gridSizeByZoom[this.tileZoom] || p.terrain.plainGridSize;
1278
+ p.terrain.gridSizeByZoom[this.tileZoom] || p.terrain.plainGridSize;
1295
1279
 
1296
1280
  n.sideSizeLog2[0] =
1297
1281
  n.sideSizeLog2[1] =
1298
1282
  n.sideSizeLog2[2] =
1299
1283
  n.sideSizeLog2[3] =
1300
- Math.log2(p.terrain.gridSizeByZoom[this.tileZoom] || p.terrain.plainGridSize);
1284
+ Math.log2(p.terrain.gridSizeByZoom[this.tileZoom] || p.terrain.plainGridSize);
1301
1285
 
1302
1286
  if (this.tileZoom <= p.terrain.maxZoom) {
1303
1287
  var nmc = this.planet._normalMapCreator;
@@ -1484,11 +1468,12 @@ class Segment {
1484
1468
 
1485
1469
  var notEmpty = false;
1486
1470
 
1487
- var slice = this._renderingSlices[sliceIndex];
1471
+ var slice = this._slices[sliceIndex];
1488
1472
 
1489
1473
  if (!slice) {
1490
- slice = this._renderingSlices[sliceIndex] = new _RenderingSlice(p);
1474
+ slice = this._slices[sliceIndex] = new Slice(this);
1491
1475
  } else {
1476
+ //TODO: optimization!!!
1492
1477
  slice.layers = [];
1493
1478
  }
1494
1479
 
@@ -1511,40 +1496,7 @@ class Segment {
1511
1496
  this.planet._renderCompleted = false;
1512
1497
  }
1513
1498
 
1514
- slice.layers.push(li);
1515
-
1516
- var n4 = n * 4,
1517
- n3 = n * 3;
1518
-
1519
- var arr = li.applyMaterial(m);
1520
- slice.tileOffsetArr[n4] = arr[0];
1521
- slice.tileOffsetArr[n4 + 1] = arr[1];
1522
- slice.tileOffsetArr[n4 + 2] = arr[2];
1523
- slice.tileOffsetArr[n4 + 3] = arr[3];
1524
-
1525
- arr = this._getLayerExtentOffset(li);
1526
- slice.visibleExtentOffsetArr[n4] = arr[0];
1527
- slice.visibleExtentOffsetArr[n4 + 1] = arr[1];
1528
- slice.visibleExtentOffsetArr[n4 + 2] = arr[2];
1529
- slice.visibleExtentOffsetArr[n4 + 3] = arr[3];
1530
-
1531
- slice.transparentColorArr[n4] = li.transparentColor[0];
1532
- slice.transparentColorArr[n4 + 1] = li.transparentColor[1];
1533
- slice.transparentColorArr[n4 + 2] = li.transparentColor[2];
1534
- slice.transparentColorArr[n4 + 3] = li.opacity;
1535
-
1536
- p._diffuseMaterialArr[n3 + 3] = li.diffuse.x;
1537
- p._diffuseMaterialArr[n3 + 1 + 3] = li.diffuse.y;
1538
- p._diffuseMaterialArr[n3 + 2 + 3] = li.diffuse.z;
1539
-
1540
- p._ambientMaterialArr[n3 + 3] = li.ambient.x;
1541
- p._ambientMaterialArr[n3 + 1 + 3] = li.ambient.y;
1542
- p._ambientMaterialArr[n3 + 2 + 3] = li.ambient.z;
1543
-
1544
- p._specularMaterialArr[n4 + 4] = li.specular.x;
1545
- p._specularMaterialArr[n4 + 1 + 4] = li.specular.y;
1546
- p._specularMaterialArr[n4 + 2 + 4] = li.specular.z;
1547
- p._specularMaterialArr[n4 + 3 + 4] = li.shininess;
1499
+ slice.append(li, m);
1548
1500
 
1549
1501
  p._samplerArr[n] = n;
1550
1502
 
@@ -1561,9 +1513,12 @@ class Segment {
1561
1513
  gl.uniform1i(shu.samplerCount, n);
1562
1514
  gl.uniform1f(shu.height, currHeight);
1563
1515
  gl.uniform1iv(shu.samplerArr, p._samplerArr);
1516
+
1517
+ //slice.uniform(gl, shu);
1518
+
1564
1519
  gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
1565
- gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1566
- gl.uniform4fv(shu.transparentColorArr, slice.transparentColorArr);
1520
+ gl.uniform1fv(shu.layerOpacityArr, slice.layerOpacityArr);
1521
+ //gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1567
1522
 
1568
1523
  // bind normalmap texture
1569
1524
  if (p.lightEnabled) {
@@ -1575,30 +1530,12 @@ class Segment {
1575
1530
 
1576
1531
  // bind segment specular and night material texture coordinates
1577
1532
  gl.uniform4fv(shu.uGlobalTextureCoord, this._globalTextureCoordinates);
1578
-
1579
- gl.uniform3fv(shu.diffuseMaterial, p._diffuseMaterialArr);
1580
- gl.uniform3fv(shu.ambientMaterial, p._ambientMaterialArr);
1581
- gl.uniform4fv(shu.specularMaterial, p._specularMaterialArr);
1582
1533
  }
1583
1534
 
1584
1535
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
1585
- gl.vertexAttribPointer(
1586
- sha.aVertexPositionHigh,
1587
- this.vertexPositionBufferHigh.itemSize,
1588
- gl.FLOAT,
1589
- false,
1590
- 0,
1591
- 0
1592
- );
1536
+ gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
1593
1537
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
1594
- gl.vertexAttribPointer(
1595
- sha.aVertexPositionLow,
1596
- this.vertexPositionBufferLow.itemSize,
1597
- gl.FLOAT,
1598
- false,
1599
- 0,
1600
- 0
1601
- );
1538
+ gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
1602
1539
 
1603
1540
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer);
1604
1541
  gl.vertexAttribPointer(sha.aTextureCoord, 2, gl.UNSIGNED_SHORT, true, 0, 0);
@@ -1628,13 +1565,13 @@ class Segment {
1628
1565
  currHeight = 0;
1629
1566
  }
1630
1567
 
1631
- var n = 0;
1632
-
1633
- var slice = this._renderingSlices[sliceIndex];
1568
+ var slice = this._slices[sliceIndex];
1634
1569
 
1635
1570
  var notEmpty = false;
1636
1571
 
1637
- for (n = 0; n < slice.layers.length; n++) {
1572
+ let len = slice.layers.length;
1573
+
1574
+ for (let n = 0; n < len; n++) {
1638
1575
  notEmpty = true;
1639
1576
  p._samplerArr[n] = n;
1640
1577
  gl.activeTexture(gl.TEXTURE0 + n);
@@ -1642,32 +1579,21 @@ class Segment {
1642
1579
  }
1643
1580
 
1644
1581
  if (notEmpty || !isOverlay) {
1645
- gl.uniform1i(shu.samplerCount, n);
1582
+ gl.uniform1i(shu.samplerCount, len);
1646
1583
  gl.uniform1f(shu.height, currHeight);
1647
1584
  gl.uniform1iv(shu.samplerArr, p._samplerArr);
1585
+
1586
+ //slice.uniform(gl, shu);
1587
+
1648
1588
  gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
1649
- gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1650
- gl.uniform4fv(shu.transparentColorArr, slice.transparentColorArr);
1589
+ gl.uniform1fv(shu.layerOpacityArr, slice.layerOpacityArr);
1590
+ //gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1651
1591
 
1652
1592
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
1653
- gl.vertexAttribPointer(
1654
- sha.aVertexPositionHigh,
1655
- this.vertexPositionBufferHigh.itemSize,
1656
- gl.FLOAT,
1657
- false,
1658
- 0,
1659
- 0
1660
- );
1593
+ gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
1661
1594
 
1662
1595
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
1663
- gl.vertexAttribPointer(
1664
- sha.aVertexPositionLow,
1665
- this.vertexPositionBufferLow.itemSize,
1666
- gl.FLOAT,
1667
- false,
1668
- 0,
1669
- 0
1670
- );
1596
+ gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
1671
1597
 
1672
1598
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer);
1673
1599
  gl.vertexAttribPointer(sha.aTextureCoord, 2, gl.UNSIGNED_SHORT, true, 0, 0);
@@ -1694,9 +1620,11 @@ class Segment {
1694
1620
 
1695
1621
  var notEmpty = false;
1696
1622
 
1697
- var slice = this._renderingSlices[sliceIndex];
1623
+ var slice = this._slices[sliceIndex];
1624
+
1625
+ let len = slice.layers.length;
1698
1626
 
1699
- for (var n = 0; n < slice.layers.length; n++) {
1627
+ for (let n = 0; n < len; n++) {
1700
1628
  notEmpty = true;
1701
1629
 
1702
1630
  var li = slice.layers[n];
@@ -1717,33 +1645,22 @@ class Segment {
1717
1645
  }
1718
1646
 
1719
1647
  if (notEmpty || !isOverlay) {
1720
- gl.uniform1i(shu.samplerCount, n);
1648
+ gl.uniform1i(shu.samplerCount, len);
1721
1649
  gl.uniform1f(shu.height, currHeight);
1722
1650
  gl.uniform1iv(shu.samplerArr, p._samplerArr);
1723
1651
  gl.uniform1iv(shu.pickingMaskArr, p._pickingMaskArr);
1724
- gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
1725
- gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1726
- gl.uniform4fv(shu.transparentColorArr, slice.transparentColorArr);
1727
1652
  gl.uniform4fv(shu.pickingColorArr, p._pickingColorArr);
1728
1653
 
1654
+ //slice.uniform(gl, shu);
1655
+
1656
+ gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
1657
+ gl.uniform1fv(shu.layerOpacityArr, slice.layerOpacityArr);
1658
+ //gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1659
+
1729
1660
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
1730
- gl.vertexAttribPointer(
1731
- sha.aVertexPositionHigh,
1732
- this.vertexPositionBufferHigh.itemSize,
1733
- gl.FLOAT,
1734
- false,
1735
- 0,
1736
- 0
1737
- );
1661
+ gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
1738
1662
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
1739
- gl.vertexAttribPointer(
1740
- sha.aVertexPositionLow,
1741
- this.vertexPositionBufferLow.itemSize,
1742
- gl.FLOAT,
1743
- false,
1744
- 0,
1745
- 0
1746
- );
1663
+ gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
1747
1664
 
1748
1665
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer);
1749
1666
  gl.vertexAttribPointer(sha.aTextureCoord, 2, gl.UNSIGNED_SHORT, true, 0, 0);
@@ -1773,13 +1690,13 @@ class Segment {
1773
1690
  currHeight = 0;
1774
1691
  }
1775
1692
 
1776
- var n = 0;
1777
-
1778
- var slice = this._renderingSlices[sliceIndex];
1693
+ var slice = this._slices[sliceIndex];
1779
1694
 
1780
1695
  var notEmpty = false;
1781
1696
 
1782
- for (n = 0; n < slice.layers.length; n++) {
1697
+ let len = slice.layers.length;
1698
+
1699
+ for (let n = 0; n < len; n++) {
1783
1700
  notEmpty = true;
1784
1701
  p._samplerArr[n] = n;
1785
1702
  gl.activeTexture(gl.TEXTURE0 + n);
@@ -1787,32 +1704,21 @@ class Segment {
1787
1704
  }
1788
1705
 
1789
1706
  if (notEmpty || !isOverlay) {
1790
- gl.uniform1i(shu.samplerCount, n);
1707
+ gl.uniform1i(shu.samplerCount, len);
1791
1708
  gl.uniform1f(shu.height, currHeight);
1792
1709
  gl.uniform1iv(shu.samplerArr, p._samplerArr);
1710
+
1711
+ //slice.uniform(gl, shu);
1712
+
1793
1713
  gl.uniform4fv(shu.tileOffsetArr, slice.tileOffsetArr);
1794
- gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1795
- gl.uniform4fv(shu.transparentColorArr, slice.transparentColorArr);
1714
+ gl.uniform1fv(shu.layerOpacityArr, slice.layerOpacityArr);
1715
+ //gl.uniform4fv(shu.visibleExtentOffsetArr, slice.visibleExtentOffsetArr);
1796
1716
 
1797
1717
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferHigh);
1798
- gl.vertexAttribPointer(
1799
- sha.aVertexPositionHigh,
1800
- this.vertexPositionBufferHigh.itemSize,
1801
- gl.FLOAT,
1802
- false,
1803
- 0,
1804
- 0
1805
- );
1718
+ gl.vertexAttribPointer(sha.aVertexPositionHigh, this.vertexPositionBufferHigh.itemSize, gl.FLOAT, false, 0, 0);
1806
1719
 
1807
1720
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexPositionBufferLow);
1808
- gl.vertexAttribPointer(
1809
- sha.aVertexPositionLow,
1810
- this.vertexPositionBufferLow.itemSize,
1811
- gl.FLOAT,
1812
- false,
1813
- 0,
1814
- 0
1815
- );
1721
+ gl.vertexAttribPointer(sha.aVertexPositionLow, this.vertexPositionBufferLow.itemSize, gl.FLOAT, false, 0, 0);
1816
1722
 
1817
1723
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexTextureCoordBuffer);
1818
1724
  gl.vertexAttribPointer(sha.aTextureCoord, 2, gl.UNSIGNED_SHORT, true, 0, 0);
@@ -1826,9 +1732,7 @@ class Segment {
1826
1732
  var s = this.node.sideSizeLog2;
1827
1733
  var cache = this.planet._indexesCache[Math.log2(this.gridSize)][s[0]][s[1]][s[2]][s[3]];
1828
1734
  if (!cache.buffer) {
1829
- let indexes = segmentHelper
1830
- .getInstance()
1831
- .createSegmentIndexes(Math.log2(this.gridSize), [s[0], s[1], s[2], s[3]]);
1735
+ let indexes = segmentHelper.getInstance().createSegmentIndexes(Math.log2(this.gridSize), [s[0], s[1], s[2], s[3]]);
1832
1736
  cache.buffer = this.planet.renderer.handler.createElementArrayBuffer(indexes, 1);
1833
1737
  this.planet._indexesCacheToRemoveCounter++;
1834
1738
  indexes = null;
@@ -0,0 +1,45 @@
1
+ 'use strict';
2
+
3
+ class Slice {
4
+ constructor(segment) {
5
+ this.segment = segment;
6
+ this.layers = [];
7
+ this.tileOffsetArr = new Float32Array(segment.planet.SLICE_SIZE_4);
8
+ this.layerOpacityArr = new Float32Array(segment.planet.SLICE_SIZE);
9
+ this.init();
10
+ }
11
+
12
+ init() {}
13
+
14
+ clear() {
15
+ this.layers = null;
16
+ this.tileOffsetArr = null;
17
+ this.layerOpacityArr = null;
18
+ //this.visibleExtentOffsetArr = null;
19
+ }
20
+
21
+ append(layer, material) {
22
+ let n = this.layers.length;
23
+
24
+ this.layers.push(layer);
25
+
26
+ this.layerOpacityArr[n] = layer.opacity;
27
+
28
+ let n4 = n * 4;
29
+
30
+ let arr = layer.applyMaterial(material);
31
+ this.tileOffsetArr[n4] = arr[0];
32
+ this.tileOffsetArr[n4 + 1] = arr[1];
33
+ this.tileOffsetArr[n4 + 2] = arr[2];
34
+ this.tileOffsetArr[n4 + 3] = arr[3];
35
+
36
+ //arr = this.segment._getLayerExtentOffset(layer);
37
+ //slice.visibleExtentOffsetArr[n4] = arr[0];
38
+ //slice.visibleExtentOffsetArr[n4 + 1] = arr[1];
39
+ //slice.visibleExtentOffsetArr[n4 + 2] = arr[2];
40
+ //slice.visibleExtentOffsetArr[n4 + 3] = arr[3];
41
+
42
+ }
43
+ }
44
+
45
+ export { Slice }