@openglobus/og 0.22.2 → 0.23.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.
Files changed (167) hide show
  1. package/css/og.css +137 -1
  2. package/lib/@openglobus/js/Object3d.d.ts +20 -10
  3. package/lib/@openglobus/js/camera/Camera.d.ts +9 -0
  4. package/lib/@openglobus/js/camera/Frustum.d.ts +3 -0
  5. package/lib/@openglobus/js/control/CameraLock.d.ts +38 -0
  6. package/lib/@openglobus/js/control/SimpleNavigation.d.ts +27 -10
  7. package/lib/@openglobus/js/control/geoObjectEditor/ArrowEntity.d.ts +15 -0
  8. package/lib/@openglobus/js/control/geoObjectEditor/AxisTrackEntity.d.ts +9 -0
  9. package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditor.d.ts +13 -0
  10. package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditorDialog.d.ts +69 -0
  11. package/lib/@openglobus/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +78 -9
  12. package/lib/@openglobus/js/control/geoObjectEditor/MoveAxisEntity.d.ts +17 -0
  13. package/lib/@openglobus/js/control/geoObjectEditor/MovePlaneEntity.d.ts +7 -0
  14. package/lib/@openglobus/js/control/geoObjectEditor/RotateEntity.d.ts +9 -0
  15. package/lib/@openglobus/js/control/geoObjectEditor/colors.d.ts +8 -0
  16. package/lib/@openglobus/js/control/index.d.ts +2 -0
  17. package/lib/@openglobus/js/entity/Entity.d.ts +278 -19
  18. package/lib/@openglobus/js/entity/EntityCollection.d.ts +8 -9
  19. package/lib/@openglobus/js/entity/GeoObject.d.ts +141 -36
  20. package/lib/@openglobus/js/entity/GeoObjectHandler.d.ts +39 -63
  21. package/lib/@openglobus/js/entity/InstanceData.d.ts +76 -0
  22. package/lib/@openglobus/js/entity/Polyline.d.ts +19 -6
  23. package/lib/@openglobus/js/entity/PolylineHandler.d.ts +7 -0
  24. package/lib/@openglobus/js/index.d.ts +2 -1
  25. package/lib/@openglobus/js/layer/Vector.d.ts +4 -0
  26. package/lib/@openglobus/js/light/LightSource.d.ts +1 -139
  27. package/lib/@openglobus/js/math/Quat.d.ts +46 -33
  28. package/lib/@openglobus/js/math/Ray.d.ts +10 -4
  29. package/lib/@openglobus/js/math/Vec3.d.ts +15 -0
  30. package/lib/@openglobus/js/math.d.ts +2 -2
  31. package/lib/@openglobus/js/quadTree/EntityCollectionNode.d.ts +2 -2
  32. package/lib/@openglobus/js/quadTree/Node.d.ts +1 -1
  33. package/lib/@openglobus/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +1 -1
  34. package/lib/@openglobus/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +1 -1
  35. package/lib/@openglobus/js/renderer/Renderer.d.ts +63 -44
  36. package/lib/@openglobus/js/renderer/RendererEvents.d.ts +1 -0
  37. package/lib/@openglobus/js/scene/Planet.d.ts +11 -7
  38. package/lib/@openglobus/js/scene/RenderNode.d.ts +10 -25
  39. package/lib/@openglobus/js/shaders/drawnode.d.ts +1 -0
  40. package/lib/@openglobus/js/shaders/geoObject.d.ts +1 -0
  41. package/lib/@openglobus/js/shaders/utils.d.ts +1 -1
  42. package/lib/@openglobus/js/ui/Checkbox.d.ts +31 -0
  43. package/lib/@openglobus/js/ui/Dialog.d.ts +3 -0
  44. package/lib/@openglobus/js/ui/Input.d.ts +32 -0
  45. package/lib/@openglobus/js/ui/View.d.ts +3 -1
  46. package/lib/@openglobus/js/utils/objParser.d.ts +44 -12
  47. package/lib/@openglobus/js/utils/shared.d.ts +22 -0
  48. package/lib/@openglobus/js/webgl/BaseFramebuffer.d.ts +0 -1
  49. package/lib/@openglobus/js/webgl/Framebuffer.d.ts +35 -8
  50. package/lib/@openglobus/js/webgl/Handler.d.ts +1 -0
  51. package/lib/@openglobus/og.css +1 -1
  52. package/lib/@openglobus/og.esm.js +1 -1
  53. package/lib/@openglobus/og.esm.js.map +1 -1
  54. package/lib/@openglobus/og.umd.js +1 -1
  55. package/lib/@openglobus/og.umd.js.map +1 -1
  56. package/lib/js/Object3d.d.ts +20 -10
  57. package/lib/js/Object3d.js +124 -48
  58. package/lib/js/camera/Camera.d.ts +9 -0
  59. package/lib/js/camera/Camera.js +27 -1
  60. package/lib/js/camera/Frustum.d.ts +3 -0
  61. package/lib/js/camera/Frustum.js +7 -0
  62. package/lib/js/control/Atmosphere.js +10 -6
  63. package/lib/js/control/CameraLock.d.ts +38 -0
  64. package/lib/js/control/CameraLock.js +216 -0
  65. package/lib/js/control/Control.js +1 -1
  66. package/lib/js/control/DebugInfo.js +13 -3
  67. package/lib/js/control/KeyboardNavigation.js +1 -1
  68. package/lib/js/control/ScaleControl.js +9 -3
  69. package/lib/js/control/SimpleNavigation.d.ts +27 -10
  70. package/lib/js/control/SimpleNavigation.js +148 -49
  71. package/lib/js/control/Sun.js +1 -1
  72. package/lib/js/control/elevationProfile/ElevationProfileScene.js +4 -4
  73. package/lib/js/control/geoObjectEditor/ArrowEntity.d.ts +15 -0
  74. package/lib/js/control/geoObjectEditor/ArrowEntity.js +59 -0
  75. package/lib/js/control/geoObjectEditor/AxisTrackEntity.d.ts +9 -0
  76. package/lib/js/control/geoObjectEditor/AxisTrackEntity.js +93 -0
  77. package/lib/js/control/geoObjectEditor/GeoObjectEditor.d.ts +13 -0
  78. package/lib/js/control/geoObjectEditor/GeoObjectEditor.js +30 -0
  79. package/lib/js/control/geoObjectEditor/GeoObjectEditorDialog.d.ts +69 -0
  80. package/lib/js/control/geoObjectEditor/GeoObjectEditorDialog.js +502 -0
  81. package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.d.ts +78 -9
  82. package/lib/js/control/geoObjectEditor/GeoObjectEditorScene.js +487 -43
  83. package/lib/js/control/geoObjectEditor/MoveAxisEntity.d.ts +17 -0
  84. package/lib/js/control/geoObjectEditor/MoveAxisEntity.js +106 -0
  85. package/lib/js/control/geoObjectEditor/MovePlaneEntity.d.ts +7 -0
  86. package/lib/js/control/geoObjectEditor/MovePlaneEntity.js +34 -0
  87. package/lib/js/control/geoObjectEditor/RotateEntity.d.ts +9 -0
  88. package/lib/js/control/geoObjectEditor/RotateEntity.js +105 -0
  89. package/lib/js/control/geoObjectEditor/colors.d.ts +8 -0
  90. package/lib/js/control/geoObjectEditor/colors.js +8 -0
  91. package/lib/js/control/index.d.ts +2 -0
  92. package/lib/js/control/index.js +2 -0
  93. package/lib/js/control/timeline/TimelineControl.js +2 -0
  94. package/lib/js/entity/Entity.d.ts +278 -19
  95. package/lib/js/entity/Entity.js +483 -63
  96. package/lib/js/entity/EntityCollection.d.ts +8 -9
  97. package/lib/js/entity/EntityCollection.js +48 -45
  98. package/lib/js/entity/GeoObject.d.ts +141 -36
  99. package/lib/js/entity/GeoObject.js +153 -90
  100. package/lib/js/entity/GeoObjectHandler.d.ts +39 -63
  101. package/lib/js/entity/GeoObjectHandler.js +198 -295
  102. package/lib/js/entity/InstanceData.d.ts +76 -0
  103. package/lib/js/entity/InstanceData.js +344 -0
  104. package/lib/js/entity/Polyline.d.ts +19 -6
  105. package/lib/js/entity/Polyline.js +76 -36
  106. package/lib/js/entity/PolylineHandler.d.ts +7 -0
  107. package/lib/js/entity/PolylineHandler.js +26 -1
  108. package/lib/js/index.d.ts +2 -1
  109. package/lib/js/index.js +2 -1
  110. package/lib/js/layer/Bing.js +2 -2
  111. package/lib/js/layer/Vector.d.ts +4 -0
  112. package/lib/js/layer/Vector.js +16 -0
  113. package/lib/js/light/LightSource.d.ts +1 -139
  114. package/lib/js/light/LightSource.js +21 -227
  115. package/lib/js/math/Quat.d.ts +46 -33
  116. package/lib/js/math/Quat.js +91 -90
  117. package/lib/js/math/Ray.d.ts +10 -4
  118. package/lib/js/math/Ray.js +20 -4
  119. package/lib/js/math/Vec3.d.ts +15 -0
  120. package/lib/js/math/Vec3.js +30 -1
  121. package/lib/js/math.d.ts +2 -2
  122. package/lib/js/math.js +3 -3
  123. package/lib/js/quadTree/EntityCollectionNode.d.ts +2 -2
  124. package/lib/js/quadTree/EntityCollectionNode.js +8 -8
  125. package/lib/js/quadTree/Node.d.ts +1 -1
  126. package/lib/js/quadTree/Node.js +2 -2
  127. package/lib/js/quadTree/QuadTreeStrategy.js +1 -1
  128. package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.d.ts +1 -1
  129. package/lib/js/quadTree/earth/EarthEntityCollectionNodeLonLat.js +2 -2
  130. package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.d.ts +1 -1
  131. package/lib/js/quadTree/equi/EquiEntityCollectionNodeLonLat.js +2 -2
  132. package/lib/js/renderer/Renderer.d.ts +63 -44
  133. package/lib/js/renderer/Renderer.js +260 -263
  134. package/lib/js/renderer/RendererEvents.d.ts +1 -0
  135. package/lib/js/renderer/RendererEvents.js +2 -1
  136. package/lib/js/scene/Planet.d.ts +11 -7
  137. package/lib/js/scene/Planet.js +109 -87
  138. package/lib/js/scene/RenderNode.d.ts +10 -25
  139. package/lib/js/scene/RenderNode.js +70 -58
  140. package/lib/js/shaders/depth.js +2 -5
  141. package/lib/js/shaders/drawnode.d.ts +1 -0
  142. package/lib/js/shaders/drawnode.js +51 -52
  143. package/lib/js/shaders/geoObject.d.ts +1 -0
  144. package/lib/js/shaders/geoObject.js +154 -91
  145. package/lib/js/shaders/polyline.js +68 -51
  146. package/lib/js/shaders/utils.d.ts +1 -1
  147. package/lib/js/shaders/utils.js +11 -0
  148. package/lib/js/ui/Checkbox.d.ts +31 -0
  149. package/lib/js/ui/Checkbox.js +110 -0
  150. package/lib/js/ui/Color.js +2 -1
  151. package/lib/js/ui/Dialog.d.ts +3 -0
  152. package/lib/js/ui/Dialog.js +20 -0
  153. package/lib/js/ui/Input.d.ts +32 -0
  154. package/lib/js/ui/Input.js +107 -0
  155. package/lib/js/ui/View.d.ts +3 -1
  156. package/lib/js/ui/View.js +6 -0
  157. package/lib/js/utils/objParser.d.ts +44 -12
  158. package/lib/js/utils/objParser.js +241 -149
  159. package/lib/js/utils/shared.d.ts +22 -0
  160. package/lib/js/utils/shared.js +34 -0
  161. package/lib/js/webgl/BaseFramebuffer.d.ts +0 -1
  162. package/lib/js/webgl/Framebuffer.d.ts +35 -8
  163. package/lib/js/webgl/Framebuffer.js +136 -29
  164. package/lib/js/webgl/Handler.d.ts +1 -0
  165. package/lib/js/webgl/Handler.js +11 -1
  166. package/lib/js/webgl/Program.js +0 -8
  167. package/package.json +4 -2
@@ -0,0 +1,76 @@
1
+ import { GeoObject } from "./GeoObject";
2
+ import { WebGLBufferExt, WebGLTextureExt } from "../webgl/Handler";
3
+ import { TypedArray } from "../utils/shared";
4
+ import { Program } from "../webgl/Program";
5
+ import { GeoObjectHandler } from "./GeoObjectHandler";
6
+ export declare class InstanceData {
7
+ isFree: boolean;
8
+ _geoObjectHandler: GeoObjectHandler;
9
+ geoObjects: GeoObject[];
10
+ numInstances: number;
11
+ _colorTexture: WebGLTextureExt | null;
12
+ _normalTexture: WebGLTextureExt | null;
13
+ _metallicRoughnessTexture: WebGLTextureExt | null;
14
+ _colorTextureSrc: string | null;
15
+ _normalTextureSrc: string | null;
16
+ _metallicRoughnessTextureSrc: string | null;
17
+ _objectSrc?: string;
18
+ _sizeArr: number[] | TypedArray;
19
+ _translateArr: number[] | TypedArray;
20
+ _vertexArr: number[] | TypedArray;
21
+ _rtcPositionHighArr: number[] | TypedArray;
22
+ _rtcPositionLowArr: number[] | TypedArray;
23
+ _qRotArr: number[] | TypedArray;
24
+ _rgbaArr: number[] | TypedArray;
25
+ _normalsArr: number[] | TypedArray;
26
+ _indicesArr: number[] | TypedArray;
27
+ _pickingColorArr: number[] | TypedArray;
28
+ _visibleArr: number[] | TypedArray;
29
+ _texCoordArr: number[] | TypedArray;
30
+ _localPositionArr: number[] | TypedArray;
31
+ _sizeBuffer: WebGLBufferExt | null;
32
+ _translateBuffer: WebGLBufferExt | null;
33
+ _vertexBuffer: WebGLBufferExt | null;
34
+ _rtcPositionHighBuffer: WebGLBufferExt | null;
35
+ _rtcPositionLowBuffer: WebGLBufferExt | null;
36
+ _qRotBuffer: WebGLBufferExt | null;
37
+ _rgbaBuffer: WebGLBufferExt | null;
38
+ _normalsBuffer: WebGLBufferExt | null;
39
+ _indicesBuffer: WebGLBufferExt | null;
40
+ _pickingColorBuffer: WebGLBufferExt | null;
41
+ _visibleBuffer: WebGLBufferExt | null;
42
+ _texCoordBuffer: WebGLBufferExt | null;
43
+ _localPositionBuffer: WebGLBufferExt | null;
44
+ _buffersUpdateCallbacks: Function[];
45
+ _changedBuffers: boolean[];
46
+ _materialParams: Float32Array;
47
+ _materialShininess: number;
48
+ constructor(geoObjectHandler: GeoObjectHandler);
49
+ setMaterialAmbient(r: number, g: number, b: number): void;
50
+ setMaterialDiffuse(r: number, g: number, b: number): void;
51
+ setMaterialSpecular(r: number, g: number, b: number): void;
52
+ setMaterialShininess(shininess: number): void;
53
+ setMaterialParams(ambient: Float32Array, diffuse: Float32Array, specular: Float32Array, shininess: number): void;
54
+ drawOpaque(p: Program): void;
55
+ drawTransparent(p: Program): void;
56
+ protected _drawElementsInstanced(p: Program): void;
57
+ createColorTexture(image: HTMLCanvasElement | ImageBitmap | ImageData | HTMLImageElement): void;
58
+ createNormalTexture(image: HTMLCanvasElement | ImageBitmap | ImageData | HTMLImageElement): void;
59
+ createMetallicRoughnessTexture(image: HTMLCanvasElement | ImageBitmap | ImageData | HTMLImageElement): void;
60
+ clear(): void;
61
+ _deleteBuffers(): void;
62
+ createVertexBuffer(): void;
63
+ createVisibleBuffer(): void;
64
+ createSizeBuffer(): void;
65
+ createTranslateBuffer(): void;
66
+ createLocalPositionBuffer(): void;
67
+ createTexCoordBuffer(): void;
68
+ createRTCPositionBuffer(): void;
69
+ createRgbaBuffer(): void;
70
+ createQRotBuffer(): void;
71
+ createNormalsBuffer(): void;
72
+ createIndicesBuffer(): void;
73
+ createPickingColorBuffer(): void;
74
+ refresh(): void;
75
+ update(): void;
76
+ }
@@ -0,0 +1,344 @@
1
+ import { makeArrayTyped } from "../utils/shared";
2
+ import { VERTEX_BUFFER, RTC_POSITION_BUFFER, RGBA_BUFFER, NORMALS_BUFFER, INDEX_BUFFER, QROT_BUFFER, SIZE_BUFFER, PICKINGCOLOR_BUFFER, VISIBLE_BUFFER, TEXCOORD_BUFFER, TRANSLATE_BUFFER, LOCALPOSITION_BUFFER } from "./GeoObjectHandler";
3
+ const AMBIENT_R = 0;
4
+ const AMBIENT_G = 1;
5
+ const AMBIENT_B = 2;
6
+ const DIFFUSE_R = 3;
7
+ const DIFFUSE_G = 4;
8
+ const DIFFUSE_B = 5;
9
+ const SPECULAR_R = 6;
10
+ const SPECULAR_G = 7;
11
+ const SPECULAR_B = 8;
12
+ export class InstanceData {
13
+ constructor(geoObjectHandler) {
14
+ this.isFree = true;
15
+ this._geoObjectHandler = geoObjectHandler;
16
+ this.geoObjects = [];
17
+ this.numInstances = 0;
18
+ this._colorTexture = null;
19
+ this._colorTextureSrc = null;
20
+ this._normalTexture = null;
21
+ this._normalTextureSrc = null;
22
+ this._metallicRoughnessTexture = null;
23
+ this._metallicRoughnessTextureSrc = null;
24
+ this._sizeArr = [];
25
+ this._translateArr = [];
26
+ this._vertexArr = [];
27
+ this._rtcPositionHighArr = [];
28
+ this._rtcPositionLowArr = [];
29
+ this._qRotArr = [];
30
+ this._rgbaArr = [];
31
+ this._normalsArr = [];
32
+ this._indicesArr = [];
33
+ this._pickingColorArr = [];
34
+ this._visibleArr = [];
35
+ this._texCoordArr = [];
36
+ this._localPositionArr = [];
37
+ this._sizeBuffer = null;
38
+ this._translateBuffer = null;
39
+ this._vertexBuffer = null;
40
+ this._rtcPositionHighBuffer = null;
41
+ this._rtcPositionLowBuffer = null;
42
+ this._qRotBuffer = null;
43
+ this._rgbaBuffer = null;
44
+ this._normalsBuffer = null;
45
+ this._indicesBuffer = null;
46
+ this._pickingColorBuffer = null;
47
+ this._visibleBuffer = null;
48
+ this._texCoordBuffer = null;
49
+ this._localPositionBuffer = null;
50
+ this._materialParams = new Float32Array(9);
51
+ this._materialShininess = 0;
52
+ this._buffersUpdateCallbacks = [];
53
+ this._buffersUpdateCallbacks[PICKINGCOLOR_BUFFER] = this.createPickingColorBuffer;
54
+ this._buffersUpdateCallbacks[NORMALS_BUFFER] = this.createNormalsBuffer;
55
+ this._buffersUpdateCallbacks[RGBA_BUFFER] = this.createRgbaBuffer;
56
+ this._buffersUpdateCallbacks[INDEX_BUFFER] = this.createIndicesBuffer;
57
+ this._buffersUpdateCallbacks[VERTEX_BUFFER] = this.createVertexBuffer;
58
+ this._buffersUpdateCallbacks[SIZE_BUFFER] = this.createSizeBuffer;
59
+ this._buffersUpdateCallbacks[VISIBLE_BUFFER] = this.createVisibleBuffer;
60
+ this._buffersUpdateCallbacks[TEXCOORD_BUFFER] = this.createTexCoordBuffer;
61
+ this._buffersUpdateCallbacks[QROT_BUFFER] = this.createQRotBuffer;
62
+ this._buffersUpdateCallbacks[TRANSLATE_BUFFER] = this.createTranslateBuffer;
63
+ this._buffersUpdateCallbacks[RTC_POSITION_BUFFER] = this.createRTCPositionBuffer;
64
+ this._buffersUpdateCallbacks[LOCALPOSITION_BUFFER] = this.createLocalPositionBuffer;
65
+ this._changedBuffers = new Array(this._buffersUpdateCallbacks.length);
66
+ }
67
+ setMaterialAmbient(r, g, b) {
68
+ this._materialParams[AMBIENT_R] = r;
69
+ this._materialParams[AMBIENT_G] = g;
70
+ this._materialParams[AMBIENT_B] = b;
71
+ }
72
+ setMaterialDiffuse(r, g, b) {
73
+ this._materialParams[DIFFUSE_R] = r;
74
+ this._materialParams[DIFFUSE_G] = g;
75
+ this._materialParams[DIFFUSE_B] = b;
76
+ }
77
+ setMaterialSpecular(r, g, b) {
78
+ this._materialParams[SPECULAR_R] = r;
79
+ this._materialParams[SPECULAR_G] = g;
80
+ this._materialParams[SPECULAR_B] = b;
81
+ }
82
+ setMaterialShininess(shininess) {
83
+ this._materialShininess = shininess;
84
+ }
85
+ setMaterialParams(ambient, diffuse, specular, shininess) {
86
+ this.setMaterialAmbient(ambient[0], ambient[1], ambient[2]);
87
+ this.setMaterialDiffuse(diffuse[0], diffuse[1], diffuse[2]);
88
+ this.setMaterialSpecular(specular[0], specular[1], specular[2]);
89
+ this.setMaterialShininess(shininess);
90
+ }
91
+ //
92
+ // Instance individual data
93
+ //
94
+ drawOpaque(p) {
95
+ let gl = p.gl, u = p.uniforms, a = p.attributes;
96
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._qRotBuffer);
97
+ gl.vertexAttribPointer(a.qRot, this._qRotBuffer.itemSize, gl.FLOAT, false, 0, 0);
98
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._sizeBuffer);
99
+ gl.vertexAttribPointer(a.aScale, this._sizeBuffer.itemSize, gl.FLOAT, false, 0, 0);
100
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._translateBuffer);
101
+ gl.vertexAttribPointer(a.aTranslate, this._translateBuffer.itemSize, gl.FLOAT, false, 0, 0);
102
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._localPositionBuffer);
103
+ gl.vertexAttribPointer(a.aLocalPosition, this._localPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
104
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._visibleBuffer);
105
+ gl.vertexAttribPointer(a.aDispose, this._visibleBuffer.itemSize, gl.FLOAT, false, 0, 0);
106
+ gl.uniform1f(u.uUseTexture, this._colorTexture ? 1 : 0);
107
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._rgbaBuffer);
108
+ gl.vertexAttribPointer(a.aColor, this._rgbaBuffer.itemSize, gl.FLOAT, false, 0, 0);
109
+ gl.uniform3fv(u.materialParams, this._materialParams);
110
+ gl.uniform1f(u.materialShininess, this._materialShininess);
111
+ this._drawElementsInstanced(p);
112
+ }
113
+ //
114
+ // Instance individual data
115
+ //
116
+ drawTransparent(p) {
117
+ let gl = p.gl, u = p.uniforms, a = p.attributes;
118
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._qRotBuffer);
119
+ gl.vertexAttribPointer(a.qRot, this._qRotBuffer.itemSize, gl.FLOAT, false, 0, 0);
120
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._sizeBuffer);
121
+ gl.vertexAttribPointer(a.aScale, this._sizeBuffer.itemSize, gl.FLOAT, false, 0, 0);
122
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._translateBuffer);
123
+ gl.vertexAttribPointer(a.aTranslate, this._translateBuffer.itemSize, gl.FLOAT, false, 0, 0);
124
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._localPositionBuffer);
125
+ gl.vertexAttribPointer(a.aLocalPosition, this._localPositionBuffer.itemSize, gl.FLOAT, false, 0, 0);
126
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._visibleBuffer);
127
+ gl.vertexAttribPointer(a.aDispose, this._visibleBuffer.itemSize, gl.FLOAT, false, 0, 0);
128
+ gl.uniform1f(u.uUseTexture, this._colorTexture ? 1 : 0);
129
+ gl.uniform3fv(u.materialParams, this._materialParams);
130
+ gl.uniform1f(u.materialShininess, this._materialShininess);
131
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._rgbaBuffer);
132
+ gl.vertexAttribPointer(a.aColor, this._rgbaBuffer.itemSize, gl.FLOAT, false, 0, 0);
133
+ this._drawElementsInstanced(p);
134
+ }
135
+ //
136
+ // Instance common data(could be in VAO)
137
+ //
138
+ _drawElementsInstanced(p) {
139
+ let gl = p.gl, u = p.uniforms, a = p.attributes;
140
+ let r = this._geoObjectHandler._renderer;
141
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._rtcPositionHighBuffer);
142
+ gl.vertexAttribPointer(a.aRTCPositionHigh, this._rtcPositionHighBuffer.itemSize, gl.FLOAT, false, 0, 0);
143
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._rtcPositionLowBuffer);
144
+ gl.vertexAttribPointer(a.aRTCPositionLow, this._rtcPositionLowBuffer.itemSize, gl.FLOAT, false, 0, 0);
145
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._normalsBuffer);
146
+ gl.vertexAttribPointer(a.aVertexNormal, this._normalsBuffer.itemSize, gl.FLOAT, false, 0, 0);
147
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._vertexBuffer);
148
+ gl.vertexAttribPointer(a.aVertexPosition, this._vertexBuffer.itemSize, gl.FLOAT, false, 0, 0);
149
+ gl.activeTexture(gl.TEXTURE0);
150
+ gl.bindTexture(gl.TEXTURE_2D, this._colorTexture || r.handler.defaultTexture);
151
+ gl.uniform1i(u.uTexture, 0);
152
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._texCoordBuffer);
153
+ gl.vertexAttribPointer(a.aTexCoord, this._texCoordBuffer.itemSize, gl.FLOAT, false, 0, 0);
154
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this._indicesBuffer);
155
+ p.drawElementsInstanced(gl.TRIANGLES, this._indicesBuffer.numItems, gl.UNSIGNED_INT, 0, this.numInstances);
156
+ }
157
+ createColorTexture(image) {
158
+ if (this._geoObjectHandler && this._geoObjectHandler._renderer) {
159
+ this._colorTexture = this._geoObjectHandler._renderer.handler.createTextureDefault(image);
160
+ }
161
+ }
162
+ createNormalTexture(image) {
163
+ if (this._geoObjectHandler && this._geoObjectHandler._renderer) {
164
+ this._normalTexture = this._geoObjectHandler._renderer.handler.createTextureDefault(image);
165
+ }
166
+ }
167
+ createMetallicRoughnessTexture(image) {
168
+ if (this._geoObjectHandler && this._geoObjectHandler._renderer) {
169
+ this._metallicRoughnessTexture = this._geoObjectHandler._renderer.handler.createTextureDefault(image);
170
+ }
171
+ }
172
+ clear() {
173
+ this.numInstances = 0;
174
+ this.geoObjects = [];
175
+ this._sizeArr = [];
176
+ this._translateArr = [];
177
+ this._vertexArr = [];
178
+ this._rtcPositionHighArr = [];
179
+ this._rtcPositionLowArr = [];
180
+ this._qRotArr = [];
181
+ this._rgbaArr = [];
182
+ this._normalsArr = [];
183
+ this._indicesArr = [];
184
+ this._pickingColorArr = [];
185
+ this._visibleArr = [];
186
+ this._texCoordArr = [];
187
+ this._localPositionArr = [];
188
+ this._deleteBuffers();
189
+ this.isFree = false;
190
+ //this._geoObjectHandler = null;
191
+ }
192
+ _deleteBuffers() {
193
+ if (this._geoObjectHandler && this._geoObjectHandler._renderer) {
194
+ let h = this._geoObjectHandler._renderer.handler, gl = h.gl;
195
+ h.deleteTexture(this._colorTexture);
196
+ h.deleteTexture(this._normalTexture);
197
+ h.deleteTexture(this._metallicRoughnessTexture);
198
+ this._colorTexture = null;
199
+ this._normalTexture = null;
200
+ this._metallicRoughnessTexture = null;
201
+ gl.deleteBuffer(this._sizeBuffer);
202
+ gl.deleteBuffer(this._translateBuffer);
203
+ gl.deleteBuffer(this._vertexBuffer);
204
+ gl.deleteBuffer(this._rtcPositionHighBuffer);
205
+ gl.deleteBuffer(this._rtcPositionLowBuffer);
206
+ gl.deleteBuffer(this._qRotBuffer);
207
+ gl.deleteBuffer(this._rgbaBuffer);
208
+ gl.deleteBuffer(this._normalsBuffer);
209
+ gl.deleteBuffer(this._indicesBuffer);
210
+ gl.deleteBuffer(this._pickingColorBuffer);
211
+ gl.deleteBuffer(this._visibleBuffer);
212
+ gl.deleteBuffer(this._texCoordBuffer);
213
+ gl.deleteBuffer(this._localPositionBuffer);
214
+ }
215
+ this._sizeBuffer = null;
216
+ this._translateBuffer = null;
217
+ this._vertexBuffer = null;
218
+ this._rtcPositionHighBuffer = null;
219
+ this._rtcPositionLowBuffer = null;
220
+ this._qRotBuffer = null;
221
+ this._rgbaBuffer = null;
222
+ this._normalsBuffer = null;
223
+ this._indicesBuffer = null;
224
+ this._pickingColorBuffer = null;
225
+ this._visibleBuffer = null;
226
+ this._texCoordBuffer = null;
227
+ this._localPositionBuffer = null;
228
+ }
229
+ createVertexBuffer() {
230
+ const h = this._geoObjectHandler._renderer.handler;
231
+ h.gl.deleteBuffer(this._vertexBuffer);
232
+ this._vertexArr = makeArrayTyped(this._vertexArr);
233
+ this._vertexBuffer = h.createArrayBuffer(this._vertexArr, 3, this._vertexArr.length / 3);
234
+ }
235
+ createVisibleBuffer() {
236
+ const h = this._geoObjectHandler._renderer.handler, numItems = this._visibleArr.length;
237
+ if (!this._visibleBuffer || this._visibleBuffer.numItems !== numItems) {
238
+ h.gl.deleteBuffer(this._visibleBuffer);
239
+ this._visibleBuffer = h.createStreamArrayBuffer(1, numItems);
240
+ }
241
+ this._visibleArr = makeArrayTyped(this._visibleArr);
242
+ h.setStreamArrayBuffer(this._visibleBuffer, this._visibleArr);
243
+ }
244
+ createSizeBuffer() {
245
+ let h = this._geoObjectHandler._renderer.handler, numItems = this._sizeArr.length / 3;
246
+ if (!this._sizeBuffer || this._sizeBuffer.numItems !== numItems) {
247
+ h.gl.deleteBuffer(this._sizeBuffer);
248
+ this._sizeBuffer = h.createStreamArrayBuffer(3, numItems);
249
+ }
250
+ this._sizeArr = makeArrayTyped(this._sizeArr);
251
+ h.setStreamArrayBuffer(this._sizeBuffer, this._sizeArr);
252
+ }
253
+ createTranslateBuffer() {
254
+ let h = this._geoObjectHandler._renderer.handler, numItems = this._translateArr.length / 3;
255
+ if (!this._translateBuffer || this._translateBuffer.numItems !== numItems) {
256
+ h.gl.deleteBuffer(this._translateBuffer);
257
+ this._translateBuffer = h.createStreamArrayBuffer(3, numItems);
258
+ }
259
+ this._translateArr = makeArrayTyped(this._translateArr);
260
+ h.setStreamArrayBuffer(this._translateBuffer, this._translateArr);
261
+ }
262
+ createLocalPositionBuffer() {
263
+ let h = this._geoObjectHandler._renderer.handler, numItems = this._localPositionArr.length / 3;
264
+ if (!this._localPositionBuffer || this._localPositionBuffer.numItems !== numItems) {
265
+ h.gl.deleteBuffer(this._localPositionBuffer);
266
+ this._localPositionBuffer = h.createStreamArrayBuffer(3, numItems);
267
+ }
268
+ this._localPositionArr = makeArrayTyped(this._localPositionArr);
269
+ h.setStreamArrayBuffer(this._localPositionBuffer, this._localPositionArr);
270
+ }
271
+ createTexCoordBuffer() {
272
+ const h = this._geoObjectHandler._renderer.handler;
273
+ h.gl.deleteBuffer(this._texCoordBuffer);
274
+ this._texCoordArr = makeArrayTyped(this._texCoordArr);
275
+ this._texCoordBuffer = h.createArrayBuffer(this._texCoordArr, 2, this._texCoordArr.length / 2);
276
+ }
277
+ createRTCPositionBuffer() {
278
+ let h = this._geoObjectHandler._renderer.handler, numItems = this._rtcPositionHighArr.length / 3;
279
+ if (!this._rtcPositionHighBuffer || this._rtcPositionHighBuffer.numItems !== numItems) {
280
+ h.gl.deleteBuffer(this._rtcPositionHighBuffer);
281
+ h.gl.deleteBuffer(this._rtcPositionLowBuffer);
282
+ this._rtcPositionHighBuffer = h.createStreamArrayBuffer(3, numItems);
283
+ this._rtcPositionLowBuffer = h.createStreamArrayBuffer(3, numItems);
284
+ }
285
+ this._rtcPositionHighArr = makeArrayTyped(this._rtcPositionHighArr);
286
+ this._rtcPositionLowArr = makeArrayTyped(this._rtcPositionLowArr);
287
+ h.setStreamArrayBuffer(this._rtcPositionHighBuffer, this._rtcPositionHighArr);
288
+ h.setStreamArrayBuffer(this._rtcPositionLowBuffer, this._rtcPositionLowArr);
289
+ }
290
+ createRgbaBuffer() {
291
+ let h = this._geoObjectHandler._renderer.handler, numItems = this._rgbaArr.length / 4;
292
+ if (!this._rgbaBuffer || this._rgbaBuffer.numItems !== numItems) {
293
+ h.gl.deleteBuffer(this._rgbaBuffer);
294
+ this._rgbaBuffer = h.createStreamArrayBuffer(4, numItems);
295
+ }
296
+ this._rgbaArr = makeArrayTyped(this._rgbaArr);
297
+ h.setStreamArrayBuffer(this._rgbaBuffer, this._rgbaArr);
298
+ }
299
+ createQRotBuffer() {
300
+ let h = this._geoObjectHandler._renderer.handler, numItems = this._qRotArr.length / 4;
301
+ if (!this._qRotBuffer || this._qRotBuffer.numItems !== numItems) {
302
+ h.gl.deleteBuffer(this._qRotBuffer);
303
+ this._qRotBuffer = h.createStreamArrayBuffer(4, numItems);
304
+ }
305
+ this._qRotArr = makeArrayTyped(this._qRotArr);
306
+ h.setStreamArrayBuffer(this._qRotBuffer, this._qRotArr);
307
+ }
308
+ createNormalsBuffer() {
309
+ const h = this._geoObjectHandler._renderer.handler;
310
+ h.gl.deleteBuffer(this._normalsBuffer);
311
+ this._normalsArr = makeArrayTyped(this._normalsArr);
312
+ this._normalsBuffer = h.createArrayBuffer(this._normalsArr, 3, this._normalsArr.length / 3);
313
+ }
314
+ createIndicesBuffer() {
315
+ const h = this._geoObjectHandler._renderer.handler;
316
+ h.gl.deleteBuffer(this._indicesBuffer);
317
+ this._indicesArr = makeArrayTyped(this._indicesArr, Uint32Array);
318
+ this._indicesBuffer = h.createElementArrayBuffer(this._indicesArr, 1, this._indicesArr.length);
319
+ }
320
+ createPickingColorBuffer() {
321
+ const h = this._geoObjectHandler._renderer.handler;
322
+ h.gl.deleteBuffer(this._pickingColorBuffer);
323
+ this._pickingColorArr = makeArrayTyped(this._pickingColorArr);
324
+ this._pickingColorBuffer = h.createArrayBuffer(this._pickingColorArr, 3, this._pickingColorArr.length / 3);
325
+ }
326
+ refresh() {
327
+ let i = this._changedBuffers.length;
328
+ while (i--) {
329
+ this._changedBuffers[i] = true;
330
+ }
331
+ }
332
+ update() {
333
+ if (this._geoObjectHandler._renderer) {
334
+ let i = this._changedBuffers.length;
335
+ while (i--) {
336
+ if (this._changedBuffers[i]) {
337
+ this._buffersUpdateCallbacks[i].call(this);
338
+ this._changedBuffers[i] = false;
339
+ }
340
+ }
341
+ this.isFree = true;
342
+ }
343
+ }
344
+ }
@@ -26,6 +26,8 @@ export interface IPolylineParams {
26
26
  pathColors?: SegmentPathColor[];
27
27
  path3v?: SegmentPath3vExt[];
28
28
  pathLonLat?: SegmentPathLonLatExt[];
29
+ visibleSpherePosition?: Cartesian;
30
+ visibleSphereRadius?: number;
29
31
  }
30
32
  /**
31
33
  * Polyline object.
@@ -128,23 +130,23 @@ declare class Polyline {
128
130
  _handlerIndex: number;
129
131
  protected _buffersUpdateCallbacks: Function[];
130
132
  protected _changedBuffers: boolean[];
133
+ protected _visibleSphere: Float32Array;
134
+ __doubleToTwoFloats: (pos: Vec3, highPos: Vec3, lowPos: Vec3) => void;
131
135
  constructor(options?: IPolylineParams);
132
136
  /**
133
137
  * Appends to the line array new cartesian coordinates line data.
134
- * @static
135
138
  */
136
- static appendLineData3v(path3v: SegmentPath3vExt[], pathColors: SegmentPathColor[], defaultColor: NumberArray4, isClosed: boolean, outVerticesHigh: number[], outVerticesLow: number[], outOrders: number[], outIndexes: number[], ellipsoid: Ellipsoid, outTransformedPathLonLat: SegmentPathLonLatExt[], outPath3v: SegmentPath3vExt[], outTransformedPathMerc: LonLat[][], outExtent: Extent, outColors: number[]): void;
139
+ protected __appendLineData3v(path3v: SegmentPath3vExt[], pathColors: SegmentPathColor[], defaultColor: NumberArray4, isClosed: boolean, outVerticesHigh: number[], outVerticesLow: number[], outOrders: number[], outIndexes: number[], ellipsoid: Ellipsoid, outTransformedPathLonLat: SegmentPathLonLatExt[], outPath3v: SegmentPath3vExt[], outTransformedPathMerc: LonLat[][], outExtent: Extent, outColors: number[]): void;
137
140
  /**
138
141
  * Appends to the line new cartesian coordinates point data.
139
- * @static
140
142
  */
141
- static appendPoint3v(path3v: SegmentPath3vExt[], point3v: Vec3, pathColors: SegmentPathColor[], color: NumberArray4, isClosed: boolean, outVerticesHigh: number[], outVerticesLow: number[], outColors: number[], outOrders: number[], outIndexes: number[], ellipsoid: Ellipsoid | null, outTransformedPathLonLat: SegmentPathLonLatExt[], outTransformedPathMerc: LonLat[][], outExtent: Extent): void;
143
+ protected __appendPoint3v(path3v: SegmentPath3vExt[], point3v: Vec3, pathColors: SegmentPathColor[], color: NumberArray4, isClosed: boolean, outVerticesHigh: number[], outVerticesLow: number[], outColors: number[], outOrders: number[], outIndexes: number[], ellipsoid: Ellipsoid | null, outTransformedPathLonLat: SegmentPathLonLatExt[], outTransformedPathMerc: LonLat[][], outExtent: Extent): void;
142
144
  static setPathColors(pathLonLat: SegmentPathLonLatExt[], pathColors: SegmentPathColor[], defaultColor: NumberArray4, outColors: number[]): void;
143
145
  /**
144
146
  * Appends to the line array new geodetic coordinates line data.
145
147
  * @static
146
148
  */
147
- static appendLineDataLonLat(pathLonLat: SegmentPathLonLatExt[], pathColors: SegmentPathColor[], defaultColor: NumberArray4, isClosed: boolean, outVerticesHigh: number[], outVerticesLow: number[], outOrders: number[], outIndexes: number[], ellipsoid: Ellipsoid, outTransformedPathCartesian: SegmentPath3vExt[], outPathLonLat: SegmentPathLonLatExt[], outTransformedPathMerc: LonLat[][], outExtent: Extent, outColors: number[]): void;
149
+ protected __appendLineDataLonLat(pathLonLat: SegmentPathLonLatExt[], pathColors: SegmentPathColor[], defaultColor: NumberArray4, isClosed: boolean, outVerticesHigh: number[], outVerticesLow: number[], outOrders: number[], outIndexes: number[], ellipsoid: Ellipsoid, outTransformedPathCartesian: SegmentPath3vExt[], outPathLonLat: SegmentPathLonLatExt[], outTransformedPathMerc: LonLat[][], outExtent: Extent, outColors: number[]): void;
148
150
  /**
149
151
  * Sets polyline path with cartesian coordinates.
150
152
  * @protected
@@ -226,6 +228,12 @@ declare class Polyline {
226
228
  * @param {number} opacity - Opacity.
227
229
  */
228
230
  setOpacity(opacity: number): void;
231
+ /**
232
+ * Gets polyline opacity.
233
+ * @public
234
+ * @param {number} opacity - Opacity.
235
+ */
236
+ getOpacity(): number;
229
237
  /**
230
238
  * Sets Polyline thickness in screen pixels.
231
239
  * @public
@@ -298,13 +306,16 @@ declare class Polyline {
298
306
  * @param {string} htmlColor- HTML color
299
307
  */
300
308
  setColorHTML(htmlColor: string): void;
309
+ setPathLonLatFast(pathLonLat: SegmentPathLonLatExt[], pathColors?: SegmentPathColor[]): void;
310
+ setPath3vFast(path3v: SegmentPath3vExt[], pathColors?: SegmentPathColor[]): void;
301
311
  /**
302
312
  * Sets polyline geodetic coordinates.
303
313
  * @public
304
314
  * @param {SegmentPathLonLat[]} pathLonLat - Polyline path cartesian coordinates.
305
315
  * @param {Boolean} [forceEqual=false] - OPTIMIZATION FLAG: Makes assigning faster for size equal coordinates array.
306
316
  */
307
- setPathLonLat(pathLonLat: SegmentPathLonLatExt[], forceEqual?: boolean): void;
317
+ setPathLonLat(pathLonLat: SegmentPathLonLatExt[], pathColors?: SegmentPathColor[], forceEqual?: boolean): void;
318
+ getSize(index?: number): number;
308
319
  /**
309
320
  * Sets Polyline cartesian coordinates.
310
321
  * @public
@@ -341,5 +352,7 @@ declare class Polyline {
341
352
  */
342
353
  protected _createIndexBuffer(): void;
343
354
  protected _createColorsBuffer(): void;
355
+ setVisibleSphere(p: Vec3, r: number): void;
356
+ updateRTCPosition(): void;
344
357
  }
345
358
  export { Polyline };