@openglobus/og 0.13.8 → 0.13.12
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 +1 -1
- package/css/og.css +388 -129
- 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 +20 -19
- package/src/og/Globe.js +15 -16
- package/src/og/Object3d.js +33 -0
- package/src/og/control/GeoImageDragControl.js +102 -75
- package/src/og/control/LayerAnimation.js +306 -38
- package/src/og/control/LayerSwitcher.js +506 -159
- package/src/og/control/Lighting.js +27 -27
- package/src/og/control/RulerSwitcher.js +69 -0
- package/src/og/control/UIhelpers.js +146 -0
- package/src/og/control/index.js +3 -1
- package/src/og/control/ruler/RulerScene.js +6 -2
- package/src/og/control/visibleExtent/Segment.js +2 -1
- package/src/og/ellipsoid/wgs84.js +1 -1
- package/src/og/entity/LabelHandler.js +2 -2
- package/src/og/entity/LabelWorker.js +36 -54
- package/src/og/layer/BaseGeoImage.js +347 -312
- package/src/og/layer/CanvasTiles.js +312 -290
- package/src/og/layer/GeoImage.js +222 -214
- package/src/og/layer/GeoVideo.js +291 -291
- package/src/og/layer/Layer.js +71 -30
- package/src/og/layer/Material.js +109 -109
- package/src/og/layer/Vector.js +1 -0
- package/src/og/layer/XYZ.js +20 -12
- package/src/og/light/LightSource.js +364 -363
- package/src/og/math.js +2 -2
- package/src/og/quadTree/Node.js +7 -5
- package/src/og/renderer/Renderer.js +1 -1
- package/src/og/scene/Planet.js +103 -42
- package/src/og/segment/Segment.js +34 -56
- package/src/og/segment/Slice.js +1 -1
- package/src/og/shaders/drawnode.js +1 -1
- package/src/og/terrain/GlobusTerrain.js +31 -20
- package/src/og/terrain/MapboxTerrain.js +1 -1
- package/src/og/utils/BaseWorker.js +46 -0
- package/src/og/utils/GeoImageCreator.js +164 -161
- package/src/og/utils/Loader.js +60 -33
- package/src/og/utils/NormalMapCreator.js +403 -412
- package/src/og/utils/PlainSegmentWorker.js +29 -55
- package/src/og/utils/TerrainWorker.js +572 -589
- package/src/og/utils/functionComposition.js +13 -0
- package/src/og/webgl/Handler.js +42 -41
- package/types/Object3d.d.ts +1 -0
- package/types/camera/PlanetCamera.d.ts +4 -0
- package/types/control/GeoImageDragControl.d.ts +2 -0
- package/types/control/LayerAnimation.d.ts +73 -0
- package/types/control/LayerSwitcher.d.ts +55 -11
- package/types/control/MouseNavigation.d.ts +1 -0
- package/types/control/MouseWheelZoomControl.d.ts +1 -0
- package/types/control/Sun.d.ts +1 -0
- package/types/control/TouchNavigation.d.ts +1 -0
- package/types/control/UIhelpers.d.ts +13 -0
- package/types/control/index.d.ts +2 -1
- package/types/entity/LabelHandler.d.ts +2 -0
- package/types/entity/LabelWorker.d.ts +5 -7
- package/types/layer/BaseGeoImage.d.ts +9 -1
- package/types/layer/CanvasTiles.d.ts +5 -1
- package/types/layer/GeoImage.d.ts +1 -0
- package/types/layer/GeoTexture2d.d.ts +1 -0
- package/types/layer/Layer.d.ts +5 -1
- package/types/layer/Vector.d.ts +7 -0
- package/types/layer/WMS.d.ts +1 -0
- package/types/layer/XYZ.d.ts +8 -6
- package/types/math.d.ts +1 -1
- package/types/quadTree/EntityCollectionNode.d.ts +7 -0
- package/types/quadTree/Node.d.ts +1 -2
- package/types/renderer/Renderer.d.ts +1 -1
- package/types/renderer/RendererEvents.d.ts +16 -0
- package/types/scene/Planet.d.ts +19 -4
- package/types/segment/SegmentLonLat.d.ts +2 -0
- package/types/terrain/BilTerrain.d.ts +6 -0
- package/types/terrain/GlobusTerrain.d.ts +7 -0
- package/types/terrain/MapboxTerrain.d.ts +8 -0
- package/types/utils/BaseWorker.d.ts +14 -0
- package/types/utils/Loader.d.ts +3 -1
- package/types/utils/PlainSegmentWorker.d.ts +4 -6
- package/types/utils/TerrainWorker.d.ts +4 -6
- package/types/utils/functionComposition.d.ts +5 -0
- package/types/webgl/Handler.d.ts +4 -1
|
@@ -1,290 +1,312 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module og/layer/CanvasTiles
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
"use strict";
|
|
6
|
-
|
|
7
|
-
import * as quadTree from "../quadTree/quadTree.js";
|
|
8
|
-
import { Layer } from "./Layer.js";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Maximum tiles per frame.
|
|
12
|
-
* @const
|
|
13
|
-
* @type {number}
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
const EVENT_NAMES = [
|
|
17
|
-
/**
|
|
18
|
-
* Triggered when current tile image has loaded before rendereing.
|
|
19
|
-
* @event og.layer.CanvasTiles#load
|
|
20
|
-
*/
|
|
21
|
-
"load",
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Triggered when all tiles have loaded or loading has stopped.
|
|
25
|
-
* @event og.layer.CanvasTiles#loadend
|
|
26
|
-
*/
|
|
27
|
-
"loadend"
|
|
28
|
-
];
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Layer used to rendering each tile as a separate canvas object.
|
|
32
|
-
* @class
|
|
33
|
-
* @extends {Layer}
|
|
34
|
-
* //TODO: make asynchronous handler.
|
|
35
|
-
* @param {String} [name="noname"] - Layer name.
|
|
36
|
-
* @param {Object} options:
|
|
37
|
-
* @param {number} [options.opacity=1.0] - Layer opacity.
|
|
38
|
-
* @param {number} [options.minZoom=0] - Minimal visibility zoom level.
|
|
39
|
-
* @param {number} [options.maxZoom=0] - Maximal visibility zoom level.
|
|
40
|
-
* @param {string} [options.attribution] - Layer attribution that displayed in the attribution area on the screen.
|
|
41
|
-
* @param {boolean} [options.isBaseLayer=false] - Base layer flag.
|
|
42
|
-
* @param {boolean} [options.visibility=true] - Layer visibility.
|
|
43
|
-
* @param {layer.CanvasTiles~drawTileCallback} [options.drawTile] - Draw tile callback.
|
|
44
|
-
* @fires og.layer.CanvasTiles#load
|
|
45
|
-
* @fires og.layer.CanvasTiles#loadend
|
|
46
|
-
*/
|
|
47
|
-
class CanvasTiles extends Layer {
|
|
48
|
-
constructor(name, options) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
this.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
*
|
|
57
|
-
* @
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
*
|
|
64
|
-
* @
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
*
|
|
71
|
-
* @
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
pmat
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
var
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
material.
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @module og/layer/CanvasTiles
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
import * as quadTree from "../quadTree/quadTree.js";
|
|
8
|
+
import { Layer } from "./Layer.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Maximum tiles per frame.
|
|
12
|
+
* @const
|
|
13
|
+
* @type {number}
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const EVENT_NAMES = [
|
|
17
|
+
/**
|
|
18
|
+
* Triggered when current tile image has loaded before rendereing.
|
|
19
|
+
* @event og.layer.CanvasTiles#load
|
|
20
|
+
*/
|
|
21
|
+
"load",
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Triggered when all tiles have loaded or loading has stopped.
|
|
25
|
+
* @event og.layer.CanvasTiles#loadend
|
|
26
|
+
*/
|
|
27
|
+
"loadend"
|
|
28
|
+
];
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Layer used to rendering each tile as a separate canvas object.
|
|
32
|
+
* @class
|
|
33
|
+
* @extends {Layer}
|
|
34
|
+
* //TODO: make asynchronous handler.
|
|
35
|
+
* @param {String} [name="noname"] - Layer name.
|
|
36
|
+
* @param {Object} options:
|
|
37
|
+
* @param {number} [options.opacity=1.0] - Layer opacity.
|
|
38
|
+
* @param {number} [options.minZoom=0] - Minimal visibility zoom level.
|
|
39
|
+
* @param {number} [options.maxZoom=0] - Maximal visibility zoom level.
|
|
40
|
+
* @param {string} [options.attribution] - Layer attribution that displayed in the attribution area on the screen.
|
|
41
|
+
* @param {boolean} [options.isBaseLayer=false] - Base layer flag.
|
|
42
|
+
* @param {boolean} [options.visibility=true] - Layer visibility.
|
|
43
|
+
* @param {layer.CanvasTiles~drawTileCallback} [options.drawTile] - Draw tile callback.
|
|
44
|
+
* @fires og.layer.CanvasTiles#load
|
|
45
|
+
* @fires og.layer.CanvasTiles#loadend
|
|
46
|
+
*/
|
|
47
|
+
class CanvasTiles extends Layer {
|
|
48
|
+
constructor(name, options = {}) {
|
|
49
|
+
super(name, options);
|
|
50
|
+
|
|
51
|
+
this.events.registerNames(EVENT_NAMES);
|
|
52
|
+
|
|
53
|
+
this.minNativeZoom = options.minNativeZoom || 0;
|
|
54
|
+
/**
|
|
55
|
+
* Current creating tiles couter.
|
|
56
|
+
* @protected
|
|
57
|
+
* @type {number}
|
|
58
|
+
*/
|
|
59
|
+
this._counter = 0;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Tile pending queue that waiting for create.
|
|
63
|
+
* @protected
|
|
64
|
+
* @type {Array.<planetSegment.Material>}
|
|
65
|
+
*/
|
|
66
|
+
this._pendingsQueue = []; // new og.QueueArray();
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Draw tile callback.
|
|
70
|
+
* @type {layer.CanvasTiles~drawTileCallback}
|
|
71
|
+
* @public
|
|
72
|
+
*/
|
|
73
|
+
this.drawTile = options.drawTile || null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
addTo(planet) {
|
|
77
|
+
this._onLoadend_ = this._onLoadend.bind(this);
|
|
78
|
+
this.events.on("loadend", this._onLoadend_, this);
|
|
79
|
+
return super.addTo(planet);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
remove() {
|
|
83
|
+
this.events.off("loadend", this._onLoadend_);
|
|
84
|
+
this._onLoadend_ = null;
|
|
85
|
+
return super.remove();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
_onLoadend() {
|
|
89
|
+
if (this._planet && this._planet._terrainCompletedActivated) {
|
|
90
|
+
this._planet.events.dispatch(this._planet.events.layerloadend, this);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
get instanceName() {
|
|
95
|
+
return "CanvasTiles";
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
get isIdle() {
|
|
99
|
+
return super.isIdle && this._counter === 0;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Abort loading tiles.
|
|
104
|
+
* @public
|
|
105
|
+
*/
|
|
106
|
+
abortLoading() {
|
|
107
|
+
var q = this._pendingsQueue;
|
|
108
|
+
for (var i = q._shiftIndex + 1; i < q._popIndex + 1; i++) {
|
|
109
|
+
if (q._array[i]) {
|
|
110
|
+
this.abortMaterialLoading(q._array[i]);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
this._pendingsQueue = [];
|
|
114
|
+
// this._pendingsQueue.clear();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Sets layer visibility.
|
|
119
|
+
* @public
|
|
120
|
+
* @param {boolean} visibility - Layer visibility.
|
|
121
|
+
*/
|
|
122
|
+
setVisibility(visibility) {
|
|
123
|
+
if (visibility !== this._visibility) {
|
|
124
|
+
super.setVisibility(visibility);
|
|
125
|
+
|
|
126
|
+
if (!visibility) {
|
|
127
|
+
this.abortLoading();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Start to load tile material.
|
|
134
|
+
* @public
|
|
135
|
+
* @virtual
|
|
136
|
+
* @param {Material} material -
|
|
137
|
+
*/
|
|
138
|
+
loadMaterial(material) {
|
|
139
|
+
let seg = material.segment;
|
|
140
|
+
|
|
141
|
+
if (this._isBaseLayer) {
|
|
142
|
+
material.texture = seg._isNorth ? seg.planet.solidTextureOne : seg.planet.solidTextureTwo;
|
|
143
|
+
} else {
|
|
144
|
+
material.texture = seg.planet.transparentTexture;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (this._planet.layerLock.isFree() || material.segment.tileZoom < 2) {
|
|
148
|
+
material.isReady = false;
|
|
149
|
+
material.isLoading = true;
|
|
150
|
+
if (CanvasTiles.__requestsCounter >= CanvasTiles.MAX_REQUESTS && this._counter) {
|
|
151
|
+
this._pendingsQueue.push(material);
|
|
152
|
+
} else {
|
|
153
|
+
this._exec(material);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Loads material image and apply it to the planet segment.
|
|
160
|
+
* @protected
|
|
161
|
+
* @param {Material} material - Loads material image.
|
|
162
|
+
*/
|
|
163
|
+
_exec(material) {
|
|
164
|
+
CanvasTiles.__requestsCounter++;
|
|
165
|
+
this._counter++;
|
|
166
|
+
var that = this;
|
|
167
|
+
if (this.drawTile) {
|
|
168
|
+
/**
|
|
169
|
+
* Tile custom draw function.
|
|
170
|
+
* @callback og.layer.CanvasTiles~drawTileCallback
|
|
171
|
+
* @param {Material} material
|
|
172
|
+
* @param {applyCanvasCallback} applyCanvasCallback
|
|
173
|
+
*/
|
|
174
|
+
var e = that.events.load;
|
|
175
|
+
if (e.handlers.length) {
|
|
176
|
+
that.events.dispatch(e, material);
|
|
177
|
+
}
|
|
178
|
+
requestAnimationFrame(() => {
|
|
179
|
+
that.drawTile(
|
|
180
|
+
material,
|
|
181
|
+
/**
|
|
182
|
+
* Apply canvas.
|
|
183
|
+
* @callback applyCanvasCallback
|
|
184
|
+
* @param {Object} canvas -
|
|
185
|
+
*/
|
|
186
|
+
function (canvas) {
|
|
187
|
+
that._counter--;
|
|
188
|
+
CanvasTiles.__requestsCounter--;
|
|
189
|
+
if (material.isLoading) {
|
|
190
|
+
material.applyImage(canvas);
|
|
191
|
+
}
|
|
192
|
+
that._dequeueRequest();
|
|
193
|
+
}
|
|
194
|
+
);
|
|
195
|
+
});
|
|
196
|
+
} else {
|
|
197
|
+
material.textureNotExists();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Abort exact material loading.
|
|
203
|
+
* @public
|
|
204
|
+
* @param {Material} material - Segment material.
|
|
205
|
+
*/
|
|
206
|
+
abortMaterialLoading(material) {
|
|
207
|
+
if (material.isLoading && material.image) {
|
|
208
|
+
material.image.src = "";
|
|
209
|
+
this._counter--;
|
|
210
|
+
CanvasTiles.__requestsCounter--;
|
|
211
|
+
this._dequeueRequest();
|
|
212
|
+
}
|
|
213
|
+
material.isLoading = false;
|
|
214
|
+
material.isReady = false;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
_dequeueRequest() {
|
|
218
|
+
if (this._pendingsQueue.length) {
|
|
219
|
+
if (CanvasTiles.__requestsCounter < CanvasTiles.MAX_REQUESTS) {
|
|
220
|
+
var pmat = this._whilePendings();
|
|
221
|
+
if (pmat) {
|
|
222
|
+
this._exec(pmat);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
} else if (this._counter === 0 && this._planet && this._planet._terrainCompletedActivated) {
|
|
226
|
+
this.events.dispatch(this.events.loadend);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
_whilePendings() {
|
|
231
|
+
while (this._pendingsQueue.length) {
|
|
232
|
+
var pmat = this._pendingsQueue.pop();
|
|
233
|
+
if (pmat.segment.node) {
|
|
234
|
+
if (
|
|
235
|
+
pmat.segment.initialized &&
|
|
236
|
+
pmat.segment.node.getState() === quadTree.RENDERING
|
|
237
|
+
) {
|
|
238
|
+
return pmat;
|
|
239
|
+
}
|
|
240
|
+
pmat.isLoading = false;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
applyMaterial(material) {
|
|
247
|
+
if (material.isReady) {
|
|
248
|
+
return [0, 0, 1, 1];
|
|
249
|
+
} else if (material.segment.tileZoom < this.minNativeZoom) {
|
|
250
|
+
material.textureNotExists();
|
|
251
|
+
} else {
|
|
252
|
+
|
|
253
|
+
let segment = material.segment;
|
|
254
|
+
let pn = segment.node,
|
|
255
|
+
notEmpty = false;
|
|
256
|
+
|
|
257
|
+
if (segment.passReady && !material.isLoading) {
|
|
258
|
+
this.loadMaterial(material);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
let mId = this._id;
|
|
262
|
+
let psegm = material;
|
|
263
|
+
while (pn.parentNode) {
|
|
264
|
+
pn = pn.parentNode;
|
|
265
|
+
psegm = pn.segment.materials[mId];
|
|
266
|
+
if (psegm && psegm.isReady) {
|
|
267
|
+
notEmpty = true;
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (notEmpty) {
|
|
273
|
+
material.appliedNodeId = pn.nodeId;
|
|
274
|
+
material.texture = psegm.texture;
|
|
275
|
+
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
|
+
];
|
|
282
|
+
} else {
|
|
283
|
+
material.texture = segment.planet.transparentTexture;
|
|
284
|
+
return [0, 0, 1, 1];
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
clearMaterial(material) {
|
|
290
|
+
if (material.isReady) {
|
|
291
|
+
material.isReady = false;
|
|
292
|
+
if (material.texture && !material.texture.default) {
|
|
293
|
+
material.segment.handler.gl.deleteTexture(material.texture);
|
|
294
|
+
material.texture = null;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
this.abortMaterialLoading(material);
|
|
299
|
+
material.isLoading = false;
|
|
300
|
+
material.textureExists = false;
|
|
301
|
+
|
|
302
|
+
material.layer = null;
|
|
303
|
+
material.segment = null;
|
|
304
|
+
|
|
305
|
+
if (material.image) {
|
|
306
|
+
material.image.src = "";
|
|
307
|
+
material.image = null;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
export { CanvasTiles };
|