@openglobus/og 0.11.2 → 0.11.7

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 (273) hide show
  1. package/package.json +13 -13
  2. package/src/og/Clock.js +10 -10
  3. package/src/og/Events.js +8 -6
  4. package/src/og/Extent.js +82 -41
  5. package/src/og/Globe.js +25 -13
  6. package/src/og/ImageCanvas.js +22 -16
  7. package/src/og/LonLat.js +16 -13
  8. package/src/og/Popup.js +21 -14
  9. package/src/og/QueueArray.js +6 -2
  10. package/src/og/Rectangle.js +11 -6
  11. package/src/og/Stack.js +5 -2
  12. package/src/og/ajax.js +21 -33
  13. package/src/og/astro/astro.js +5 -5
  14. package/src/og/astro/earth.js +22 -16
  15. package/src/og/astro/jd.js +23 -18
  16. package/src/og/astro/orbit.js +13 -11
  17. package/src/og/astro/rotation.js +17 -8
  18. package/src/og/bv/Box.js +7 -3
  19. package/src/og/bv/Sphere.js +14 -11
  20. package/src/og/camera/Camera.js +51 -54
  21. package/src/og/camera/Frustum.js +29 -18
  22. package/src/og/camera/PlanetCamera.js +32 -23
  23. package/src/og/control/CompassButton.js +5 -1
  24. package/src/og/control/Control.js +12 -10
  25. package/src/og/control/DebugInfo.js +4 -1
  26. package/src/og/control/EarthCoordinates.js +54 -33
  27. package/src/og/control/KeyboardNavigation.js +10 -10
  28. package/src/og/control/LayerSwitcher.js +22 -21
  29. package/src/og/control/Lighting.js +34 -3
  30. package/src/og/control/MouseNavigation.js +1 -1
  31. package/src/og/control/ScaleControl.js +1 -1
  32. package/src/og/control/SegmentBoundVisualization.js +6 -7
  33. package/src/og/control/ShowFps.js +13 -8
  34. package/src/og/control/SimpleNavigation.js +6 -8
  35. package/src/og/control/Sun.js +25 -15
  36. package/src/og/control/ToggleWireframe.js +4 -4
  37. package/src/og/control/TouchNavigation.js +44 -33
  38. package/src/og/control/ZoomControl.js +41 -25
  39. package/src/og/ellipsoid/Ellipsoid.js +162 -66
  40. package/src/og/ellipsoid/wgs84.js +4 -4
  41. package/src/og/entity/BaseBillboard.js +100 -56
  42. package/src/og/entity/Billboard.js +14 -10
  43. package/src/og/entity/BillboardHandler.js +317 -60
  44. package/src/og/entity/Entity.js +100 -68
  45. package/src/og/entity/EntityCollection.js +70 -47
  46. package/src/og/entity/GeoObject.js +228 -0
  47. package/src/og/entity/GeoObjectHandler.js +910 -0
  48. package/src/og/entity/Geometry.js +27 -24
  49. package/src/og/entity/GeometryHandler.js +596 -124
  50. package/src/og/entity/Label.js +80 -49
  51. package/src/og/entity/LabelHandler.js +45 -244
  52. package/src/og/entity/LabelWorker.js +218 -0
  53. package/src/og/entity/Object3d.js +504 -0
  54. package/src/og/entity/PointCloud.js +80 -32
  55. package/src/og/entity/PointCloudHandler.js +8 -8
  56. package/src/og/entity/Polyline.js +16 -16
  57. package/src/og/entity/Ray.js +60 -27
  58. package/src/og/entity/Strip.js +77 -48
  59. package/src/og/entity/StripHandler.js +26 -26
  60. package/src/og/entity/index.js +8 -16
  61. package/src/og/layer/BaseGeoImage.js +54 -23
  62. package/src/og/layer/CanvasTiles.js +24 -24
  63. package/src/og/layer/GeoImage.js +9 -9
  64. package/src/og/layer/GeoVideo.js +3 -3
  65. package/src/og/layer/KML.js +63 -37
  66. package/src/og/layer/Layer.js +44 -21
  67. package/src/og/layer/Material.js +23 -20
  68. package/src/og/layer/Vector.js +114 -68
  69. package/src/og/layer/WMS.js +34 -17
  70. package/src/og/layer/XYZ.js +48 -46
  71. package/src/og/light/LightSource.js +46 -39
  72. package/src/og/math/Mat3.js +34 -22
  73. package/src/og/math/Mat4.js +603 -459
  74. package/src/og/math/Plane.js +21 -20
  75. package/src/og/math/Quat.js +182 -139
  76. package/src/og/math/Ray.js +38 -33
  77. package/src/og/math/Vec2.js +85 -75
  78. package/src/og/math/Vec3.js +142 -112
  79. package/src/og/math/Vec4.js +27 -31
  80. package/src/og/math/coder.js +10 -10
  81. package/src/og/math.js +12 -12
  82. package/src/og/proj/EPSG3857.js +4 -4
  83. package/src/og/proj/EPSG4326.js +4 -4
  84. package/src/og/proj/Proj.js +4 -6
  85. package/src/og/quadTree/Node.js +8 -8
  86. package/src/og/renderer/Renderer.js +59 -52
  87. package/src/og/renderer/RendererEvents.js +50 -27
  88. package/src/og/scene/BaseNode.js +7 -8
  89. package/src/og/scene/Planet.js +102 -103
  90. package/src/og/scene/RenderNode.js +28 -21
  91. package/src/og/segment/Segment.js +26 -21
  92. package/src/og/segment/SegmentLonLat.js +5 -5
  93. package/src/og/shaders/drawnode.js +135 -142
  94. package/src/og/shaders/geoObject.js +211 -0
  95. package/src/og/shaders/pointCloud.js +41 -41
  96. package/src/og/shaders/shape.js +12 -18
  97. package/src/og/shaders/skybox.js +36 -36
  98. package/src/og/shaders/toneMapping.js +1 -0
  99. package/src/og/shapes/BaseShape.js +126 -54
  100. package/src/og/shapes/Icosphere.js +29 -14
  101. package/src/og/shapes/Sphere.js +12 -15
  102. package/src/og/terrain/BilTerrain.js +1 -0
  103. package/src/og/terrain/EmptyTerrain.js +2 -2
  104. package/src/og/terrain/GlobusTerrain.js +9 -9
  105. package/src/og/utils/FontAtlas.js +6 -2
  106. package/src/og/utils/TextureAtlas.js +22 -24
  107. package/src/og/utils/VectorTileCreator.js +1 -3
  108. package/src/og/utils/shared.js +16 -16
  109. package/src/og/webgl/Framebuffer.js +88 -40
  110. package/src/og/webgl/Handler.js +243 -169
  111. package/src/og/webgl/Multisample.js +47 -19
  112. package/src/og/webgl/Program.js +79 -34
  113. package/src/og/webgl/ProgramController.js +17 -13
  114. package/src/og/webgl/callbacks.js +8 -8
  115. package/src/og/inherits.js +0 -8
  116. package/src/og/utils/polylabel.js +0 -176
  117. package/types/Clock.d.ts +0 -90
  118. package/types/Deferred.d.ts +0 -6
  119. package/types/Events.d.ts +0 -73
  120. package/types/Extent.d.ts +0 -166
  121. package/types/Globe.d.ts +0 -75
  122. package/types/ImageCanvas.d.ts +0 -121
  123. package/types/Lock.d.ts +0 -12
  124. package/types/LonLat.d.ts +0 -108
  125. package/types/Popup.d.ts +0 -38
  126. package/types/QueueArray.d.ts +0 -15
  127. package/types/Rectangle.d.ts +0 -74
  128. package/types/Stack.d.ts +0 -15
  129. package/types/ajax.d.ts +0 -24
  130. package/types/arial.d.ts +0 -48
  131. package/types/astro/astro.d.ts +0 -38
  132. package/types/astro/earth.d.ts +0 -6
  133. package/types/astro/jd.d.ts +0 -254
  134. package/types/bv/Box.d.ts +0 -25
  135. package/types/bv/Sphere.d.ts +0 -38
  136. package/types/bv/index.d.ts +0 -3
  137. package/types/camera/Camera.d.ts +0 -303
  138. package/types/camera/Frustum.d.ts +0 -129
  139. package/types/camera/PlanetCamera.d.ts +0 -223
  140. package/types/camera/index.d.ts +0 -3
  141. package/types/cons.d.ts +0 -40
  142. package/types/control/CompassButton.d.ts +0 -18
  143. package/types/control/Control.d.ts +0 -101
  144. package/types/control/DebugInfo.d.ts +0 -16
  145. package/types/control/EarthCoordinates.d.ts +0 -47
  146. package/types/control/EarthNavigation.d.ts +0 -42
  147. package/types/control/GeoImageDragControl.d.ts +0 -6
  148. package/types/control/KeyboardNavigation.d.ts +0 -22
  149. package/types/control/LayerSwitcher.d.ts +0 -23
  150. package/types/control/Lighting.d.ts +0 -16
  151. package/types/control/MouseNavigation.d.ts +0 -51
  152. package/types/control/ScaleControl.d.ts +0 -22
  153. package/types/control/ShowFps.d.ts +0 -12
  154. package/types/control/SimpleNavigation.d.ts +0 -28
  155. package/types/control/Sun.d.ts +0 -52
  156. package/types/control/ToggleWireframe.d.ts +0 -12
  157. package/types/control/TouchNavigation.d.ts +0 -50
  158. package/types/control/ZoomControl.d.ts +0 -28
  159. package/types/control/index.d.ts +0 -17
  160. package/types/ellipsoid/Ellipsoid.d.ts +0 -142
  161. package/types/ellipsoid/index.d.ts +0 -3
  162. package/types/ellipsoid/wgs84.d.ts +0 -5
  163. package/types/entity/BaseBillboard.d.ts +0 -208
  164. package/types/entity/Billboard.d.ts +0 -94
  165. package/types/entity/BillboardHandler.d.ts +0 -74
  166. package/types/entity/Entity.d.ts +0 -331
  167. package/types/entity/EntityCollection.d.ts +0 -303
  168. package/types/entity/Geometry.d.ts +0 -73
  169. package/types/entity/GeometryHandler.d.ts +0 -76
  170. package/types/entity/Label.d.ts +0 -194
  171. package/types/entity/LabelHandler.d.ts +0 -24
  172. package/types/entity/PointCloud.d.ts +0 -174
  173. package/types/entity/PointCloudHandler.d.ts +0 -38
  174. package/types/entity/Polyline.d.ts +0 -304
  175. package/types/entity/PolylineHandler.d.ts +0 -18
  176. package/types/entity/Ray.d.ts +0 -123
  177. package/types/entity/RayHandler.d.ts +0 -67
  178. package/types/entity/ShapeHandler.d.ts +0 -22
  179. package/types/entity/Strip.d.ts +0 -118
  180. package/types/entity/StripHandler.d.ts +0 -38
  181. package/types/entity/index.d.ts +0 -8
  182. package/types/index.core.d.ts +0 -65
  183. package/types/index.d.ts +0 -45
  184. package/types/index.webgl.d.ts +0 -7
  185. package/types/inherits.d.ts +0 -4
  186. package/types/input/KeyboardHandler.d.ts +0 -10
  187. package/types/input/MouseHandler.d.ts +0 -5
  188. package/types/input/TouchHandler.d.ts +0 -5
  189. package/types/input/input.d.ts +0 -34
  190. package/types/layer/BaseGeoImage.d.ts +0 -107
  191. package/types/layer/CanvasTiles.d.ts +0 -75
  192. package/types/layer/GeoImage.d.ts +0 -65
  193. package/types/layer/GeoTexture2d.d.ts +0 -8
  194. package/types/layer/GeoVideo.d.ts +0 -80
  195. package/types/layer/KML.d.ts +0 -58
  196. package/types/layer/Layer.d.ts +0 -321
  197. package/types/layer/Material.d.ts +0 -48
  198. package/types/layer/Vector.d.ts +0 -228
  199. package/types/layer/WMS.d.ts +0 -66
  200. package/types/layer/XYZ.d.ts +0 -130
  201. package/types/layer/index.d.ts +0 -10
  202. package/types/light/LightSource.d.ts +0 -177
  203. package/types/math/Line2.d.ts +0 -11
  204. package/types/math/Line3.d.ts +0 -10
  205. package/types/math/Mat3.d.ts +0 -63
  206. package/types/math/Mat4.d.ts +0 -173
  207. package/types/math/Plane.d.ts +0 -17
  208. package/types/math/Quat.d.ts +0 -376
  209. package/types/math/Ray.d.ts +0 -81
  210. package/types/math/Vec2.d.ts +0 -308
  211. package/types/math/Vec3.d.ts +0 -459
  212. package/types/math/Vec4.d.ts +0 -161
  213. package/types/math/coder.d.ts +0 -42
  214. package/types/math/index.d.ts +0 -11
  215. package/types/math.d.ts +0 -261
  216. package/types/mercator.d.ts +0 -92
  217. package/types/proj/EPSG3857.d.ts +0 -5
  218. package/types/proj/EPSG4326.d.ts +0 -5
  219. package/types/proj/Proj.d.ts +0 -42
  220. package/types/quadTree/EntityCollectionNode.d.ts +0 -34
  221. package/types/quadTree/Node.d.ts +0 -61
  222. package/types/quadTree/quadTree.d.ts +0 -40
  223. package/types/renderer/Renderer.d.ts +0 -296
  224. package/types/renderer/RendererEvents.d.ts +0 -230
  225. package/types/res/images.d.ts +0 -3
  226. package/types/scene/Axes.d.ts +0 -11
  227. package/types/scene/BaseNode.d.ts +0 -60
  228. package/types/scene/Planet.d.ts +0 -574
  229. package/types/scene/RenderNode.d.ts +0 -143
  230. package/types/scene/SkyBox.d.ts +0 -10
  231. package/types/scene/index.d.ts +0 -4
  232. package/types/segment/Segment.d.ts +0 -271
  233. package/types/segment/SegmentLonLat.d.ts +0 -62
  234. package/types/segment/segmentHelper.d.ts +0 -13
  235. package/types/shaders/billboard.d.ts +0 -3
  236. package/types/shaders/depth.d.ts +0 -2
  237. package/types/shaders/drawnode.d.ts +0 -7
  238. package/types/shaders/label.d.ts +0 -4
  239. package/types/shaders/pointCloud.d.ts +0 -2
  240. package/types/shaders/polyline.d.ts +0 -3
  241. package/types/shaders/ray.d.ts +0 -2
  242. package/types/shaders/screenFrame.d.ts +0 -2
  243. package/types/shaders/shape.d.ts +0 -4
  244. package/types/shaders/skybox.d.ts +0 -2
  245. package/types/shaders/toneMapping.d.ts +0 -2
  246. package/types/shapes/BaseShape.d.ts +0 -247
  247. package/types/shapes/Sphere.d.ts +0 -41
  248. package/types/terrain/BilTerrain.d.ts +0 -8
  249. package/types/terrain/EmptyTerrain.d.ts +0 -72
  250. package/types/terrain/Geoid.d.ts +0 -26
  251. package/types/terrain/GlobusTerrain.d.ts +0 -153
  252. package/types/terrain/MapboxTerrain.d.ts +0 -8
  253. package/types/terrain/index.d.ts +0 -5
  254. package/types/utils/FontAtlas.d.ts +0 -14
  255. package/types/utils/GeoImageCreator.d.ts +0 -30
  256. package/types/utils/ImagesCacheManager.d.ts +0 -10
  257. package/types/utils/Loader.d.ts +0 -25
  258. package/types/utils/NormalMapCreator.d.ts +0 -39
  259. package/types/utils/PlainSegmentWorker.d.ts +0 -10
  260. package/types/utils/TerrainWorker.d.ts +0 -9
  261. package/types/utils/TextureAtlas.d.ts +0 -111
  262. package/types/utils/VectorTileCreator.d.ts +0 -16
  263. package/types/utils/colorTable.d.ts +0 -143
  264. package/types/utils/earcut.d.ts +0 -6
  265. package/types/utils/shared.d.ts +0 -230
  266. package/types/webgl/Framebuffer.d.ts +0 -135
  267. package/types/webgl/Handler.d.ts +0 -372
  268. package/types/webgl/Multisample.d.ts +0 -89
  269. package/types/webgl/Program.d.ts +0 -155
  270. package/types/webgl/ProgramController.d.ts +0 -84
  271. package/types/webgl/callbacks.d.ts +0 -1
  272. package/types/webgl/index.d.ts +0 -6
  273. package/types/webgl/types.d.ts +0 -2
@@ -12,25 +12,20 @@ import { ProgramController } from "./ProgramController.js";
12
12
  import { Stack } from "../Stack.js";
13
13
  import { Vec2 } from "../math/Vec2.js";
14
14
 
15
- /**
16
- * Maximum texture image size.
17
- * @const
18
- * @type {number}
19
- */
20
- const MAX_SIZE = 4096;
21
-
22
15
  const vendorPrefixes = ["", "WEBKIT_", "MOZ_"];
23
16
 
17
+ // Maximal mipmap levels
18
+ const MAX_LEVELS = 2;
19
+
24
20
  /**
25
21
  * A WebGL handler for accessing low-level WebGL capabilities.
26
22
  * @class
27
23
  * @param {string} id - Canvas element id that WebGL handler assing with. If it's null
28
24
  * or undefined creates hidden canvas and handler bacomes hidden.
29
25
  * @param {Object} [params] - Handler options:
30
- * @param {number} [params.anisotropy] - Anisitropy filter degree. 8 is default.
26
+ * @param {number} [params.anisotropy] - Anisotropy filter degree. 8 is default.
31
27
  * @param {number} [params.width] - Hidden handler width. 256 is default.
32
28
  * @param {number} [params.height] - Hidden handler height. 256 is default.
33
- * @param {Object} [param.scontext] - Native WebGL context attributes. See https://www.khronos.org/registry/webgl/specs/latest/1.0/#WEBGLCONTEXTATTRIBUTES
34
29
  * @param {Array.<string>} [params.extensions] - Additional WebGL extension list. Available by default: EXT_texture_filter_anisotropic.
35
30
  */
36
31
  class Handler {
@@ -40,14 +35,14 @@ class Handler {
40
35
  /**
41
36
  * Application default timer.
42
37
  * @public
43
- * @type {og.Clock}
38
+ * @type {Clock}
44
39
  */
45
40
  this.defaultClock = new Clock();
46
41
 
47
42
  /**
48
43
  * Custom timers.
49
44
  * @protected
50
- * @type{og.Clock[]}
45
+ * @type{Clock[]}
51
46
  */
52
47
  this._clocks = [];
53
48
 
@@ -83,7 +78,7 @@ class Handler {
83
78
  /**
84
79
  * Current active shader program controller.
85
80
  * @public
86
- * @type {og.webgl.ProgramController}
81
+ * @type {ProgramController}
87
82
  */
88
83
  this.activeProgram = null;
89
84
 
@@ -93,21 +88,13 @@ class Handler {
93
88
  * @type {Object}
94
89
  */
95
90
  this._params = params || {};
96
- this._params.anisotropy = this._params.anisotropy || 8;
97
- let w = this._params.width;
98
- if (w > MAX_SIZE) {
99
- w = MAX_SIZE;
100
- }
101
- this._params.width = w || 256;
102
-
103
- var h = this._params.height;
104
- if (h > MAX_SIZE) {
105
- h = MAX_SIZE;
106
- }
107
- this._params.height = h || 256;
91
+ this._params.anisotropy = this._params.anisotropy || 4;
92
+ this._params.width = this._params.width || 256;
93
+ this._params.height = this._params.height || 256;
94
+ this._params.pixelRatio = this._params.pixelRatio || 1.0;
108
95
  this._params.context = this._params.context || {};
109
96
  this._params.extensions = this._params.extensions || [];
110
- this._oneByHeight = 1 / this._params.height;
97
+ this._oneByHeight = 1.0 / (this._params.height * this._params.pixelRatio);
111
98
 
112
99
  /**
113
100
  * Current WebGL extensions. Becomes here after context initialization.
@@ -132,12 +119,21 @@ class Handler {
132
119
  * @private
133
120
  * @type {frameCallback}
134
121
  */
135
- this._frameCallback = function () {};
122
+ this._frameCallback = function () { };
136
123
 
137
124
  this.transparentTexture = null;
138
125
 
139
126
  this.framebufferStack = new Stack();
140
127
 
128
+ this.createTexture = {
129
+ "NEAREST": null,
130
+ "LINEAR": null,
131
+ "MIPMAP": null,
132
+ "ANISOTROPIC": null
133
+ };
134
+
135
+ this.createTextureDefault = null;
136
+
141
137
  if (params.autoActivate || isEmpty(params.autoActivate)) {
142
138
  this.initialize();
143
139
  }
@@ -150,7 +146,7 @@ class Handler {
150
146
  * @returns {Object} -
151
147
  */
152
148
  static getExtension(gl, name) {
153
- var i, ext;
149
+ let i, ext;
154
150
  for (i in vendorPrefixes) {
155
151
  ext = gl.getExtension(vendorPrefixes[i] + name);
156
152
  if (ext) {
@@ -168,12 +164,13 @@ class Handler {
168
164
  */
169
165
  static getContext(canvas, contextAttributes) {
170
166
  const CONTEXT_TYPE = ["webgl2", "webgl"];
171
- var ctx = null;
167
+ let ctx = null;
172
168
 
173
169
  try {
174
170
  for (let i = 0; i < CONTEXT_TYPE.length; i++) {
175
171
  ctx = canvas.getContext(CONTEXT_TYPE[i], contextAttributes);
176
172
  if (ctx) {
173
+ console.log(CONTEXT_TYPE[i]);
177
174
  ctx.type = CONTEXT_TYPE[i];
178
175
  break;
179
176
  }
@@ -198,26 +195,6 @@ class Handler {
198
195
  callback && (this._frameCallback = callback);
199
196
  }
200
197
 
201
- /**
202
- * Creates NEAREST filter texture.
203
- * @public
204
- * @param {Object} image - Image or Canvas object.
205
- * @returns {Object} - WebGL texture object.
206
- */
207
- createTexture_n(image) {
208
- var gl = this.gl;
209
- var texture = gl.createTexture();
210
- gl.bindTexture(gl.TEXTURE_2D, texture);
211
- gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
212
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
213
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
214
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
215
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
216
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
217
- gl.bindTexture(gl.TEXTURE_2D, null);
218
- return texture;
219
- }
220
-
221
198
  /**
222
199
  * Creates empty texture.
223
200
  * @public
@@ -239,8 +216,8 @@ class Handler {
239
216
  type = "UNSIGNED_BYTE",
240
217
  level = 0
241
218
  ) {
242
- var gl = this.gl;
243
- var texture = gl.createTexture();
219
+ let gl = this.gl;
220
+ let texture = gl.createTexture();
244
221
  gl.bindTexture(gl.TEXTURE_2D, texture);
245
222
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
246
223
 
@@ -265,48 +242,6 @@ class Handler {
265
242
  return texture;
266
243
  }
267
244
 
268
- ///**
269
- // * Creates Empty half float texture.
270
- // * @public
271
- // * @param {number} width - Empty texture width.
272
- // * @param {number} height - Empty texture height.
273
- // * @returns {Object} - WebGL half float texture object.
274
- // */
275
- //createEmptyTexture_hf(width, height) {
276
- // var gl = this.gl;
277
- // var texture = gl.createTexture();
278
- // gl.bindTexture(gl.TEXTURE_2D, texture);
279
- // gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
280
- // gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.HALF_FLOAT_OES, null);
281
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
282
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
283
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
284
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
285
- // gl.bindTexture(gl.TEXTURE_2D, null);
286
- // return texture;
287
- //}
288
-
289
- ///**
290
- // * Creates Empty float texture.
291
- // * @public
292
- // * @param {number} width - Empty texture width.
293
- // * @param {number} height - Empty texture height.
294
- // * @returns {Object} - WebGL float texture object.
295
- // */
296
- //createEmptyTexture_f(width, height) {
297
- // var gl = this.gl;
298
- // var texture = gl.createTexture();
299
- // gl.bindTexture(gl.TEXTURE_2D, texture);
300
- // gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
301
- // gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.FLOAT, null);
302
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
303
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
304
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
305
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
306
- // gl.bindTexture(gl.TEXTURE_2D, null);
307
- // return texture;
308
- //}
309
-
310
245
  /**
311
246
  * Creates Empty NEAREST filtered texture.
312
247
  * @public
@@ -314,12 +249,12 @@ class Handler {
314
249
  * @param {number} height - Empty texture height.
315
250
  * @returns {Object} - WebGL texture object.
316
251
  */
317
- createEmptyTexture_n(width, height) {
318
- var gl = this.gl;
319
- var texture = gl.createTexture();
252
+ createEmptyTexture_n(width, height, internalFormat) {
253
+ let gl = this.gl;
254
+ let texture = gl.createTexture();
320
255
  gl.bindTexture(gl.TEXTURE_2D, texture);
321
256
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
322
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
257
+ gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat || gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
323
258
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
324
259
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
325
260
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
@@ -335,12 +270,12 @@ class Handler {
335
270
  * @param {number} height - Empty texture height.
336
271
  * @returns {Object} - WebGL texture object.
337
272
  */
338
- createEmptyTexture_l(width, height) {
339
- var gl = this.gl;
340
- var texture = gl.createTexture();
273
+ createEmptyTexture_l(width, height, internalFormat) {
274
+ let gl = this.gl;
275
+ let texture = gl.createTexture();
341
276
  gl.bindTexture(gl.TEXTURE_2D, texture);
342
277
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
343
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
278
+ gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat || gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
344
279
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
345
280
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
346
281
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
@@ -350,16 +285,38 @@ class Handler {
350
285
  }
351
286
 
352
287
  /**
353
- * Creates LINEAR filter texture.
288
+ * Creates NEAREST filter texture.
354
289
  * @public
355
290
  * @param {Object} image - Image or Canvas object.
356
291
  * @returns {Object} - WebGL texture object.
357
292
  */
358
- createTexture_l(image) {
293
+ createTexture_n_webgl1(image, internalFormat) {
359
294
  var gl = this.gl;
360
295
  var texture = gl.createTexture();
361
296
  gl.bindTexture(gl.TEXTURE_2D, texture);
362
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
297
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
298
+ gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat || gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
299
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
300
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
301
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
302
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
303
+ gl.bindTexture(gl.TEXTURE_2D, null);
304
+ return texture;
305
+ }
306
+
307
+ /**
308
+ * Creates LINEAR filter texture.
309
+ * @public
310
+ * @param {Object} image - Image or Canvas object.
311
+ * @returns {Object} - WebGL texture object.
312
+ */
313
+ createTexture_l_webgl1(image, internalFormat) {
314
+ let gl = this.gl;
315
+ let texture = gl.createTexture();
316
+ gl.bindTexture(gl.TEXTURE_2D, texture);
317
+
318
+ gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat || gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
319
+
363
320
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
364
321
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
365
322
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
@@ -374,12 +331,14 @@ class Handler {
374
331
  * @param {Object} image - Image or Canvas object.
375
332
  * @returns {Object} - WebGL texture object.
376
333
  */
377
- createTexture_mm(image) {
378
- var gl = this.gl;
379
- var texture = gl.createTexture();
334
+ createTexture_mm_webgl1(image, internalFormat) {
335
+ let gl = this.gl;
336
+ let texture = gl.createTexture();
380
337
  gl.bindTexture(gl.TEXTURE_2D, texture);
381
338
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
382
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
339
+
340
+ gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat || gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
341
+
383
342
  gl.generateMipmap(gl.TEXTURE_2D);
384
343
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
385
344
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
@@ -394,19 +353,85 @@ class Handler {
394
353
  * @param {Object} image - Image or Canvas object.
395
354
  * @returns {Object} - WebGL texture object.
396
355
  */
397
- createTexture_a(image) {
356
+ createTexture_a_webgl1(image, internalFormat) {
357
+ let gl = this.gl;
358
+ let texture = gl.createTexture();
359
+ gl.bindTexture(gl.TEXTURE_2D, texture);
360
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
361
+
362
+ gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat || gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
363
+
364
+ gl.generateMipmap(gl.TEXTURE_2D);
365
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
366
+ gl.texParameterf(gl.TEXTURE_2D, this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT, this._params.anisotropy);
367
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
368
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
369
+ gl.bindTexture(gl.TEXTURE_2D, null);
370
+ return texture;
371
+ }
372
+
373
+ /**
374
+ * Creates NEAREST filter texture.
375
+ * @public
376
+ * @param {Object} image - Image or Canvas object.
377
+ * @returns {Object} - WebGL texture object.
378
+ */
379
+ createTexture_n_webgl2(image, internalFormat) {
398
380
  var gl = this.gl;
399
381
  var texture = gl.createTexture();
400
382
  gl.bindTexture(gl.TEXTURE_2D, texture);
401
383
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
402
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
384
+
385
+ gl.texStorage2D(gl.TEXTURE_2D, 1, internalFormat || gl.RGBA8, image.width, image.height);
386
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, gl.RGBA, gl.UNSIGNED_BYTE, image);
387
+
388
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
389
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
390
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
391
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
392
+ gl.bindTexture(gl.TEXTURE_2D, null);
393
+ return texture;
394
+ }
395
+
396
+ /**
397
+ * Creates LINEAR filter texture.
398
+ * @public
399
+ * @param {Object} image - Image or Canvas object.
400
+ * @returns {Object} - WebGL texture object.
401
+ */
402
+ createTexture_l_webgl2(image, internalFormat) {
403
+ let gl = this.gl;
404
+ let texture = gl.createTexture();
405
+ gl.bindTexture(gl.TEXTURE_2D, texture);
406
+
407
+ gl.texStorage2D(gl.TEXTURE_2D, 1, internalFormat || gl.RGBA8, image.width, image.height);
408
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, gl.RGBA, gl.UNSIGNED_BYTE, image);
409
+
410
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
411
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
412
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
413
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
414
+ gl.bindTexture(gl.TEXTURE_2D, null);
415
+ return texture;
416
+ }
417
+
418
+ /**
419
+ * Creates MIPMAP filter texture.
420
+ * @public
421
+ * @param {Object} image - Image or Canvas object.
422
+ * @returns {Object} - WebGL texture object.
423
+ */
424
+ createTexture_mm_webgl2(image, internalFormat) {
425
+ let gl = this.gl;
426
+ let texture = gl.createTexture();
427
+ gl.bindTexture(gl.TEXTURE_2D, texture);
428
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
429
+
430
+ gl.texStorage2D(gl.TEXTURE_2D, MAX_LEVELS, internalFormat || gl.RGBA8, image.width, image.height);
431
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, gl.RGBA, gl.UNSIGNED_BYTE, image);
432
+
403
433
  gl.generateMipmap(gl.TEXTURE_2D);
404
434
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
405
- gl.texParameterf(
406
- gl.TEXTURE_2D,
407
- this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,
408
- this._params.anisotropy
409
- );
410
435
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
411
436
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
412
437
  gl.bindTexture(gl.TEXTURE_2D, null);
@@ -414,13 +439,27 @@ class Handler {
414
439
  }
415
440
 
416
441
  /**
417
- * Creates DEFAULT filter texture, ANISOTROPY is default.
442
+ * Creates ANISOTROPY filter texture.
418
443
  * @public
419
444
  * @param {Object} image - Image or Canvas object.
420
445
  * @returns {Object} - WebGL texture object.
421
446
  */
422
- createTexture(image) {
423
- return this.createTexture_a(image);
447
+ createTexture_a_webgl2(image, internalFormat) {
448
+ let gl = this.gl;
449
+ let texture = gl.createTexture();
450
+ gl.bindTexture(gl.TEXTURE_2D, texture);
451
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
452
+
453
+ gl.texStorage2D(gl.TEXTURE_2D, MAX_LEVELS, internalFormat || gl.RGBA8, image.width, image.height);
454
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, gl.RGBA, gl.UNSIGNED_BYTE, image);
455
+
456
+ gl.generateMipmap(gl.TEXTURE_2D);
457
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
458
+ gl.texParameterf(gl.TEXTURE_2D, this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT, this._params.anisotropy);
459
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
460
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
461
+ gl.bindTexture(gl.TEXTURE_2D, null);
462
+ return texture;
424
463
  }
425
464
 
426
465
  /**
@@ -436,15 +475,15 @@ class Handler {
436
475
  * @returns {Object} - WebGL texture object.
437
476
  */
438
477
  loadCubeMapTexture(params) {
439
- var gl = this.gl;
440
- var texture = gl.createTexture();
478
+ let gl = this.gl;
479
+ let texture = gl.createTexture();
441
480
  gl.bindTexture(gl.TEXTURE_CUBE_MAP, texture);
442
481
  gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
443
482
  gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
444
483
  gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
445
484
  gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
446
485
 
447
- var faces = [
486
+ let faces = [
448
487
  [params.px, gl.TEXTURE_CUBE_MAP_POSITIVE_X],
449
488
  [params.nx, gl.TEXTURE_CUBE_MAP_NEGATIVE_X],
450
489
  [params.py, gl.TEXTURE_CUBE_MAP_POSITIVE_Y],
@@ -453,9 +492,9 @@ class Handler {
453
492
  [params.nz, gl.TEXTURE_CUBE_MAP_NEGATIVE_Z]
454
493
  ];
455
494
 
456
- var imageCanvas = new ImageCanvas();
495
+ let imageCanvas = new ImageCanvas();
457
496
  imageCanvas.fillEmpty();
458
- var emptyImage = imageCanvas.getImage();
497
+ let emptyImage = imageCanvas.getImage();
459
498
 
460
499
  for (let i = 0; i < faces.length; i++) {
461
500
  let face = faces[i][1];
@@ -483,13 +522,13 @@ class Handler {
483
522
  /**
484
523
  * Adds shader program to the handler.
485
524
  * @public
486
- * @param {og.webgl.Program} program - Shader program.
525
+ * @param {Program} program - Shader program.
487
526
  * @param {boolean} [notActivate] - If it's true program will not compile.
488
- * @return {og.webgl.Program} -
527
+ * @return {Program} -
489
528
  */
490
529
  addProgram(program, notActivate) {
491
530
  if (!this.programs[program.name]) {
492
- var sc = new ProgramController(this, program);
531
+ let sc = new ProgramController(this, program);
493
532
  this.programs[program.name] = sc;
494
533
  this._initProgramController(sc);
495
534
  if (notActivate) {
@@ -515,10 +554,10 @@ class Handler {
515
554
  /**
516
555
  * Adds shader programs to the handler.
517
556
  * @public
518
- * @param {Array.<og.webgl.Program>} programsArr - Shader program array.
557
+ * @param {Array.<Program>} programsArr - Shader program array.
519
558
  */
520
559
  addPrograms(programsArr) {
521
- for (var i = 0; i < programsArr.length; i++) {
560
+ for (let i = 0; i < programsArr.length; i++) {
522
561
  this.addProgram(programsArr[i]);
523
562
  }
524
563
  }
@@ -526,7 +565,7 @@ class Handler {
526
565
  /**
527
566
  * Used in addProgram
528
567
  * @private
529
- * @param {og.webgl.ProgramController} sc - Program controller
568
+ * @param {ProgramController} sc - Program controller
530
569
  */
531
570
  _initProgramController(sc) {
532
571
  if (this._initialized) {
@@ -547,7 +586,7 @@ class Handler {
547
586
  * @private
548
587
  */
549
588
  _initPrograms() {
550
- for (var p in this.programs) {
589
+ for (let p in this.programs) {
551
590
  this._initProgramController(this.programs[p]);
552
591
  }
553
592
  }
@@ -561,7 +600,7 @@ class Handler {
561
600
  */
562
601
  initializeExtension(extensionStr, showLog) {
563
602
  if (!(this.extensions && this.extensions[extensionStr])) {
564
- var ext = Handler.getExtension(this.gl, extensionStr);
603
+ let ext = Handler.getExtension(this.gl, extensionStr);
565
604
  if (ext) {
566
605
  this.extensions[extensionStr] = ext;
567
606
  } else if (showLog) {
@@ -578,7 +617,6 @@ class Handler {
578
617
  * @public
579
618
  */
580
619
  initialize() {
581
-
582
620
  if (this._id) {
583
621
  this.canvas = document.getElementById(this._id);
584
622
  } else {
@@ -603,13 +641,28 @@ class Handler {
603
641
  this._params.extensions.push("OES_texture_float_linear");
604
642
  }
605
643
 
606
- var i = this._params.extensions.length;
644
+ let i = this._params.extensions.length;
607
645
  while (i--) {
608
646
  this.initializeExtension(this._params.extensions[i], true);
609
647
  }
610
648
 
649
+ //
650
+ //TODO: webgl1 case
651
+ //
652
+ this.createTexture_n = this.createTexture_n_webgl2.bind(this);
653
+ this.createTexture_l = this.createTexture_l_webgl2.bind(this);
654
+ this.createTexture_mm = this.createTexture_mm_webgl2.bind(this);
655
+ this.createTexture_a = this.createTexture_a_webgl2.bind(this);
656
+
657
+ this.createTexture["NEAREST"] = this.createTexture_n;
658
+ this.createTexture["LINEAR"] = this.createTexture_l;
659
+ this.createTexture["MIPMAP"] = this.createTexture_mm;
660
+ this.createTexture["ANISOTROPIC"] = this.createTexture_a;
661
+
611
662
  if (!this.extensions.EXT_texture_filter_anisotropic) {
612
- this.createTexture = this.createTexture_mm;
663
+ this.createTextureDefault = this.createTexture_mm;
664
+ } else {
665
+ this.createTextureDefault = this.createTexture_a;
613
666
  }
614
667
 
615
668
  /** Initilalize shaders and rendering parameters*/
@@ -631,7 +684,7 @@ class Handler {
631
684
  this.gl.cullFace(this.gl.BACK);
632
685
  this.activateFaceCulling();
633
686
  this.deactivateBlending();
634
- var that = this;
687
+ let that = this;
635
688
  this.createDefaultTexture({ color: "rgba(0,0,0,0.0)" }, function (t) {
636
689
  that.transparentTexture = t;
637
690
  });
@@ -695,7 +748,7 @@ class Handler {
695
748
  * @return {Object} -
696
749
  */
697
750
  createStreamArrayBuffer(itemSize, numItems, usage, bites = 4) {
698
- var buffer = this.gl.createBuffer();
751
+ let buffer = this.gl.createBuffer();
699
752
  this.gl.bindBuffer(this.gl.ARRAY_BUFFER, buffer);
700
753
  this.gl.bufferData(
701
754
  this.gl.ARRAY_BUFFER,
@@ -735,7 +788,7 @@ class Handler {
735
788
  * @return {Object} -
736
789
  */
737
790
  createArrayBuffer(array, itemSize, numItems, usage) {
738
- var buffer = this.gl.createBuffer();
791
+ let buffer = this.gl.createBuffer();
739
792
  this.gl.bindBuffer(this.gl.ARRAY_BUFFER, buffer);
740
793
  this.gl.bufferData(this.gl.ARRAY_BUFFER, array, usage || this.gl.STATIC_DRAW);
741
794
  this.gl.bindBuffer(this.gl.ARRAY_BUFFER, null);
@@ -744,6 +797,25 @@ class Handler {
744
797
  return buffer;
745
798
  }
746
799
 
800
+ /**
801
+ * Creates ARRAY buffer specific length.
802
+ * @public
803
+ * @param {Array.<number>} array - Input array.
804
+ * @param {number} itemSize - Array item size.
805
+ * @param {number} numItems - Items quantity.
806
+ * @param {number} [usage=STATIC_DRAW] - Parameter of the bufferData call can be one of STATIC_DRAW, DYNAMIC_DRAW, or STREAM_DRAW.
807
+ * @return {Object} -
808
+ */
809
+ createArrayBufferLength(size, usage) {
810
+ let buffer = this.gl.createBuffer();
811
+ this.gl.bindBuffer(this.gl.ARRAY_BUFFER, buffer);
812
+ this.gl.bufferData(this.gl.ARRAY_BUFFER, size, usage || this.gl.STATIC_DRAW);
813
+ this.gl.bindBuffer(this.gl.ARRAY_BUFFER, null);
814
+ buffer.itemSize = 1;
815
+ buffer.numItems = size;
816
+ return buffer;
817
+ }
818
+
747
819
  /**
748
820
  * Creates ELEMENT ARRAY buffer.
749
821
  * @public
@@ -754,7 +826,7 @@ class Handler {
754
826
  * @return {Object} -
755
827
  */
756
828
  createElementArrayBuffer(array, itemSize, numItems, usage) {
757
- var buffer = this.gl.createBuffer();
829
+ let buffer = this.gl.createBuffer();
758
830
  this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER, buffer);
759
831
  this.gl.bufferData(this.gl.ELEMENT_ARRAY_BUFFER, array, usage || this.gl.STATIC_DRAW);
760
832
  this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER, null);
@@ -770,25 +842,26 @@ class Handler {
770
842
  * @param {number} h - Canvas height.
771
843
  */
772
844
  setSize(w, h) {
773
-
774
- if (w > MAX_SIZE) {
775
- w = MAX_SIZE;
776
- }
777
-
778
- if (h > MAX_SIZE) {
779
- h = MAX_SIZE;
780
- }
781
-
782
845
  this._params.width = w;
783
846
  this._params.height = h;
784
- this.canvas.width = w;
785
- this.canvas.height = h;
786
- this._oneByHeight = 1 / h;
847
+ this.canvas.width = w * this._params.pixelRatio;
848
+ this.canvas.height = h * this._params.pixelRatio;
849
+
850
+ this._oneByHeight = 1.0 / this.canvas.height;
787
851
 
788
852
  this.gl && this.gl.viewport(0, 0, w, h);
789
853
  this.onCanvasResize && this.onCanvasResize(this.canvas);
790
854
  }
791
855
 
856
+ get pixelRatio() {
857
+ return this._params.pixelRatio;
858
+ }
859
+
860
+ set pixelRatio(pr) {
861
+ this._params.pixelRatio = pr;
862
+ this.setSize(this._params.width, this._params.height);
863
+ }
864
+
792
865
  /**
793
866
  * Returns context screen width.
794
867
  * @public
@@ -822,7 +895,7 @@ class Handler {
822
895
  * @returns {number} -
823
896
  */
824
897
  getCenter() {
825
- var c = this.canvas;
898
+ let c = this.canvas;
826
899
  return new Vec2(Math.round(c.width * 0.5), Math.round(c.height * 0.5));
827
900
  }
828
901
 
@@ -833,19 +906,20 @@ class Handler {
833
906
  */
834
907
  drawFrame() {
835
908
  /** Calculating frame time */
836
- var now = window.performance.now();
909
+ let now = window.performance.now();
837
910
  this.deltaTime = now - this._lastAnimationFrameTime;
838
911
  this._lastAnimationFrameTime = now;
839
912
 
840
913
  this.defaultClock._tick(this.deltaTime);
841
914
 
842
- for (var i = 0; i < this._clocks.length; i++) {
915
+ for (let i = 0; i < this._clocks.length; i++) {
843
916
  this._clocks[i]._tick(this.deltaTime);
844
917
  }
845
918
 
846
919
  /** Canvas resize checking */
847
- var canvas = this.canvas;
848
- if (canvas.clientWidth !== canvas.width || canvas.clientHeight !== canvas.height) {
920
+ let canvas = this.canvas;
921
+
922
+ if (canvas.clientWidth * this._params.pixelRatio !== canvas.width || canvas.clientHeight * this._params.pixelRatio !== canvas.height) {
849
923
  this.setSize(canvas.clientWidth, canvas.clientHeight);
850
924
  }
851
925
 
@@ -858,7 +932,7 @@ class Handler {
858
932
  * @public
859
933
  */
860
934
  clearFrame() {
861
- var gl = this.gl;
935
+ let gl = this.gl;
862
936
  this.gl.clearColor(0.0, 0.0, 0.0, 1.0);
863
937
  gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
864
938
  }
@@ -900,17 +974,17 @@ class Handler {
900
974
  * @param {callback} [success] - Creation callback
901
975
  */
902
976
  createDefaultTexture(params, success) {
903
- var imgCnv;
904
- var texture;
977
+ let imgCnv;
978
+ let texture;
905
979
  if (params && params.color) {
906
980
  imgCnv = new ImageCanvas(2, 2);
907
981
  imgCnv.fillColor(params.color);
908
- texture = this.createTexture_n(imgCnv._canvas);
982
+ texture = this.createTexture_n_webgl2(imgCnv._canvas, this.gl.RGBA8);
909
983
  texture.default = true;
910
984
  success(texture);
911
985
  } else if (params && params.url) {
912
- var img = new Image();
913
- var that = this;
986
+ let img = new Image();
987
+ let that = this;
914
988
  img.onload = function () {
915
989
  texture = that.createTexture(this);
916
990
  texture.default = true;
@@ -920,7 +994,7 @@ class Handler {
920
994
  } else {
921
995
  imgCnv = new ImageCanvas(2, 2);
922
996
  imgCnv.fillColor("#C5C5C5");
923
- texture = this.createTexture_n(imgCnv._canvas);
997
+ texture = this.createTexture_n_webgl2(imgCnv._canvas, this.gl.RGBA8);
924
998
  texture.default = true;
925
999
  success(texture);
926
1000
  }
@@ -930,11 +1004,11 @@ class Handler {
930
1004
  * @public
931
1005
  */
932
1006
  destroy() {
933
- var gl = this.gl;
1007
+ let gl = this.gl;
934
1008
 
935
1009
  this.stop();
936
1010
 
937
- for (var p in this.programs) {
1011
+ for (let p in this.programs) {
938
1012
  this.removeProgram(p);
939
1013
  }
940
1014
 
@@ -951,8 +1025,8 @@ class Handler {
951
1025
  this.canvas.height = 1;
952
1026
  this.canvas = null;
953
1027
 
954
- var numAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);
955
- var tmp = gl.createBuffer();
1028
+ let numAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);
1029
+ let tmp = gl.createBuffer();
956
1030
  gl.bindBuffer(gl.ARRAY_BUFFER, tmp);
957
1031
  for (let ii = 0; ii < numAttribs; ++ii) {
958
1032
  gl.disableVertexAttribArray(ii);
@@ -961,7 +1035,7 @@ class Handler {
961
1035
  }
962
1036
  gl.deleteBuffer(tmp);
963
1037
 
964
- var numTextureUnits = gl.getParameter(gl.MAX_TEXTlURE_IMAGE_UNITS);
1038
+ let numTextureUnits = gl.getParameter(gl.MAX_TEXTlURE_IMAGE_UNITS);
965
1039
  for (let ii = 0; ii < numTextureUnits; ++ii) {
966
1040
  gl.activeTexture(gl.TEXTURE0 + ii);
967
1041
  gl.bindTexture(gl.TEXTURE_CUBE_MAP, null);
@@ -999,15 +1073,15 @@ class Handler {
999
1073
  }
1000
1074
 
1001
1075
  addClocks(clockArr) {
1002
- for (var i = 0; i < clockArr.length; i++) {
1076
+ for (let i = 0; i < clockArr.length; i++) {
1003
1077
  this.addClock(clockArr[i]);
1004
1078
  }
1005
1079
  }
1006
1080
 
1007
1081
  removeClock(clock) {
1008
1082
  if (clock.__handler) {
1009
- var c = this._clocks;
1010
- var i = c.length;
1083
+ let c = this._clocks;
1084
+ let i = c.length;
1011
1085
  while (i--) {
1012
1086
  if (c[i].equal(clock)) {
1013
1087
  clock.__handler = null;