@openglobus/og 0.11.6 → 0.12.1

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 (213) hide show
  1. package/css/og.css +5 -2
  2. package/package.json +12 -12
  3. package/src/og/Globe.js +25 -10
  4. package/src/og/Popup.js +3 -2
  5. package/src/og/camera/Camera.js +70 -79
  6. package/src/og/camera/PlanetCamera.js +33 -33
  7. package/src/og/control/DebugInfo.js +2 -2
  8. package/src/og/control/EarthNavigation.js +26 -17
  9. package/src/og/control/Lighting.js +74 -64
  10. package/src/og/control/MouseNavigation.js +30 -29
  11. package/src/og/control/MouseWheelZoomControl.js +257 -0
  12. package/src/og/control/Sun.js +3 -3
  13. package/src/og/control/index.js +2 -0
  14. package/src/og/control/visibleExtent/Segment.js +1862 -0
  15. package/src/og/control/visibleExtent/VisibleExtent.js +80 -0
  16. package/src/og/control/visibleExtent/drawnode.js +751 -0
  17. package/src/og/ellipsoid/Ellipsoid.js +1 -1
  18. package/src/og/entity/BaseBillboard.js +67 -76
  19. package/src/og/entity/BillboardHandler.js +15 -8
  20. package/src/og/entity/Entity.js +742 -742
  21. package/src/og/entity/GeoObjectHandler.js +102 -117
  22. package/src/og/entity/Label.js +45 -48
  23. package/src/og/entity/LabelHandler.js +24 -23
  24. package/src/og/entity/LabelWorker.js +21 -16
  25. package/src/og/layer/CanvasTiles.js +8 -12
  26. package/src/og/layer/GeoImage.js +2 -10
  27. package/src/og/layer/GeoTexture2d.js +2 -10
  28. package/src/og/layer/GeoVideo.js +2 -10
  29. package/src/og/layer/Layer.js +23 -32
  30. package/src/og/layer/Material.js +1 -1
  31. package/src/og/layer/WMS.js +0 -2
  32. package/src/og/layer/XYZ.js +31 -33
  33. package/src/og/math/Vec3.js +18 -2
  34. package/src/og/quadTree/Node.js +52 -111
  35. package/src/og/quadTree/quadTree.js +1 -1
  36. package/src/og/renderer/Renderer.js +85 -122
  37. package/src/og/renderer/RendererEvents.js +44 -22
  38. package/src/og/scene/Planet.js +179 -198
  39. package/src/og/segment/Segment.js +99 -268
  40. package/src/og/segment/Slice.js +45 -0
  41. package/src/og/shaders/drawnode.js +174 -360
  42. package/src/og/shaders/toneMapping.js +1 -0
  43. package/src/og/shapes/BaseShape.js +1 -1
  44. package/src/og/terrain/EmptyTerrain.js +3 -2
  45. package/src/og/terrain/GlobusTerrain.js +2 -0
  46. package/src/og/utils/FontAtlas.js +6 -2
  47. package/src/og/utils/GeoImageCreator.js +5 -1
  48. package/src/og/utils/Loader.js +1 -1
  49. package/src/og/utils/PlainSegmentWorker.js +0 -13
  50. package/src/og/utils/TextureAtlas.js +2 -2
  51. package/src/og/utils/VectorTileCreator.js +1 -3
  52. package/src/og/utils/shared.js +1 -1
  53. package/src/og/webgl/Handler.js +156 -118
  54. package/types/Clock.d.ts +0 -94
  55. package/types/Deferred.d.ts +0 -6
  56. package/types/Events.d.ts +0 -77
  57. package/types/Extent.d.ts +0 -166
  58. package/types/Globe.d.ts +0 -82
  59. package/types/ImageCanvas.d.ts +0 -123
  60. package/types/Lock.d.ts +0 -12
  61. package/types/LonLat.d.ts +0 -108
  62. package/types/Popup.d.ts +0 -42
  63. package/types/QueueArray.d.ts +0 -19
  64. package/types/Rectangle.d.ts +0 -80
  65. package/types/Stack.d.ts +0 -19
  66. package/types/ajax.d.ts +0 -24
  67. package/types/arial.d.ts +0 -48
  68. package/types/astro/astro.d.ts +0 -38
  69. package/types/astro/earth.d.ts +0 -7
  70. package/types/astro/jd.d.ts +0 -254
  71. package/types/bv/Box.d.ts +0 -30
  72. package/types/bv/Sphere.d.ts +0 -38
  73. package/types/bv/index.d.ts +0 -3
  74. package/types/camera/Camera.d.ts +0 -312
  75. package/types/camera/Frustum.d.ts +0 -133
  76. package/types/camera/PlanetCamera.d.ts +0 -218
  77. package/types/camera/index.d.ts +0 -3
  78. package/types/cons.d.ts +0 -40
  79. package/types/control/CompassButton.d.ts +0 -17
  80. package/types/control/Control.d.ts +0 -104
  81. package/types/control/DebugInfo.d.ts +0 -15
  82. package/types/control/EarthCoordinates.d.ts +0 -47
  83. package/types/control/EarthNavigation.d.ts +0 -42
  84. package/types/control/GeoImageDragControl.d.ts +0 -6
  85. package/types/control/KeyboardNavigation.d.ts +0 -21
  86. package/types/control/LayerSwitcher.d.ts +0 -21
  87. package/types/control/Lighting.d.ts +0 -16
  88. package/types/control/MouseNavigation.d.ts +0 -47
  89. package/types/control/ScaleControl.d.ts +0 -22
  90. package/types/control/ShowFps.d.ts +0 -11
  91. package/types/control/SimpleNavigation.d.ts +0 -25
  92. package/types/control/Sun.d.ts +0 -50
  93. package/types/control/ToggleWireframe.d.ts +0 -12
  94. package/types/control/TouchNavigation.d.ts +0 -48
  95. package/types/control/ZoomControl.d.ts +0 -27
  96. package/types/control/index.d.ts +0 -17
  97. package/types/ellipsoid/Ellipsoid.d.ts +0 -146
  98. package/types/ellipsoid/index.d.ts +0 -3
  99. package/types/ellipsoid/wgs84.d.ts +0 -6
  100. package/types/entity/BaseBillboard.d.ts +0 -215
  101. package/types/entity/Billboard.d.ts +0 -94
  102. package/types/entity/BillboardHandler.d.ts +0 -78
  103. package/types/entity/Entity.d.ts +0 -348
  104. package/types/entity/EntityCollection.d.ts +0 -317
  105. package/types/entity/GeoObject.d.ts +0 -111
  106. package/types/entity/GeoObjectHandler.d.ts +0 -77
  107. package/types/entity/Geometry.d.ts +0 -74
  108. package/types/entity/GeometryHandler.d.ts +0 -76
  109. package/types/entity/Label.d.ts +0 -189
  110. package/types/entity/LabelHandler.d.ts +0 -31
  111. package/types/entity/LabelWorker.d.ts +0 -9
  112. package/types/entity/PointCloud.d.ts +0 -174
  113. package/types/entity/PointCloudHandler.d.ts +0 -38
  114. package/types/entity/Polyline.d.ts +0 -306
  115. package/types/entity/PolylineHandler.d.ts +0 -18
  116. package/types/entity/Ray.d.ts +0 -124
  117. package/types/entity/RayHandler.d.ts +0 -67
  118. package/types/entity/ShapeHandler.d.ts +0 -22
  119. package/types/entity/Strip.d.ts +0 -119
  120. package/types/entity/StripHandler.d.ts +0 -38
  121. package/types/entity/index.d.ts +0 -8
  122. package/types/index.core.d.ts +0 -65
  123. package/types/index.d.ts +0 -45
  124. package/types/index.webgl.d.ts +0 -7
  125. package/types/input/KeyboardHandler.d.ts +0 -10
  126. package/types/input/MouseHandler.d.ts +0 -5
  127. package/types/input/TouchHandler.d.ts +0 -5
  128. package/types/input/input.d.ts +0 -34
  129. package/types/layer/BaseGeoImage.d.ts +0 -94
  130. package/types/layer/CanvasTiles.d.ts +0 -68
  131. package/types/layer/GeoImage.d.ts +0 -52
  132. package/types/layer/GeoTexture2d.d.ts +0 -8
  133. package/types/layer/GeoVideo.d.ts +0 -55
  134. package/types/layer/KML.d.ts +0 -63
  135. package/types/layer/Layer.d.ts +0 -326
  136. package/types/layer/Material.d.ts +0 -45
  137. package/types/layer/Vector.d.ts +0 -208
  138. package/types/layer/WMS.d.ts +0 -63
  139. package/types/layer/XYZ.d.ts +0 -120
  140. package/types/layer/index.d.ts +0 -10
  141. package/types/light/LightSource.d.ts +0 -178
  142. package/types/math/Line2.d.ts +0 -11
  143. package/types/math/Line3.d.ts +0 -10
  144. package/types/math/Mat3.d.ts +0 -65
  145. package/types/math/Mat4.d.ts +0 -176
  146. package/types/math/Plane.d.ts +0 -18
  147. package/types/math/Quat.d.ts +0 -379
  148. package/types/math/Ray.d.ts +0 -82
  149. package/types/math/Vec2.d.ts +0 -309
  150. package/types/math/Vec3.d.ts +0 -460
  151. package/types/math/Vec4.d.ts +0 -162
  152. package/types/math/coder.d.ts +0 -43
  153. package/types/math/index.d.ts +0 -11
  154. package/types/math.d.ts +0 -261
  155. package/types/mercator.d.ts +0 -92
  156. package/types/proj/EPSG3857.d.ts +0 -6
  157. package/types/proj/EPSG4326.d.ts +0 -6
  158. package/types/proj/Proj.d.ts +0 -42
  159. package/types/quadTree/EntityCollectionNode.d.ts +0 -34
  160. package/types/quadTree/Node.d.ts +0 -61
  161. package/types/quadTree/quadTree.d.ts +0 -40
  162. package/types/renderer/Renderer.d.ts +0 -300
  163. package/types/renderer/RendererEvents.d.ts +0 -233
  164. package/types/res/images.d.ts +0 -3
  165. package/types/scene/Axes.d.ts +0 -11
  166. package/types/scene/BaseNode.d.ts +0 -60
  167. package/types/scene/Planet.d.ts +0 -577
  168. package/types/scene/RenderNode.d.ts +0 -142
  169. package/types/scene/SkyBox.d.ts +0 -10
  170. package/types/scene/index.d.ts +0 -4
  171. package/types/segment/Segment.d.ts +0 -279
  172. package/types/segment/SegmentLonLat.d.ts +0 -16
  173. package/types/segment/segmentHelper.d.ts +0 -13
  174. package/types/shaders/billboard.d.ts +0 -3
  175. package/types/shaders/depth.d.ts +0 -2
  176. package/types/shaders/drawnode.d.ts +0 -7
  177. package/types/shaders/geoObject.d.ts +0 -3
  178. package/types/shaders/label.d.ts +0 -4
  179. package/types/shaders/pointCloud.d.ts +0 -2
  180. package/types/shaders/polyline.d.ts +0 -3
  181. package/types/shaders/ray.d.ts +0 -2
  182. package/types/shaders/screenFrame.d.ts +0 -2
  183. package/types/shaders/shape.d.ts +0 -4
  184. package/types/shaders/skybox.d.ts +0 -2
  185. package/types/shaders/toneMapping.d.ts +0 -2
  186. package/types/shapes/BaseShape.d.ts +0 -250
  187. package/types/shapes/Sphere.d.ts +0 -41
  188. package/types/terrain/BilTerrain.d.ts +0 -7
  189. package/types/terrain/EmptyTerrain.d.ts +0 -72
  190. package/types/terrain/Geoid.d.ts +0 -26
  191. package/types/terrain/GlobusTerrain.d.ts +0 -116
  192. package/types/terrain/MapboxTerrain.d.ts +0 -7
  193. package/types/terrain/index.d.ts +0 -5
  194. package/types/utils/FontAtlas.d.ts +0 -14
  195. package/types/utils/GeoImageCreator.d.ts +0 -30
  196. package/types/utils/ImagesCacheManager.d.ts +0 -10
  197. package/types/utils/Loader.d.ts +0 -25
  198. package/types/utils/NormalMapCreator.d.ts +0 -39
  199. package/types/utils/PlainSegmentWorker.d.ts +0 -10
  200. package/types/utils/TerrainWorker.d.ts +0 -9
  201. package/types/utils/TextureAtlas.d.ts +0 -111
  202. package/types/utils/VectorTileCreator.d.ts +0 -16
  203. package/types/utils/colorTable.d.ts +0 -143
  204. package/types/utils/earcut.d.ts +0 -6
  205. package/types/utils/shared.d.ts +0 -231
  206. package/types/webgl/Framebuffer.d.ts +0 -135
  207. package/types/webgl/Handler.d.ts +0 -397
  208. package/types/webgl/Multisample.d.ts +0 -89
  209. package/types/webgl/Program.d.ts +0 -161
  210. package/types/webgl/ProgramController.d.ts +0 -89
  211. package/types/webgl/callbacks.d.ts +0 -1
  212. package/types/webgl/index.d.ts +0 -6
  213. package/types/webgl/types.d.ts +0 -2
@@ -80,6 +80,7 @@ export function toneMapping() {
80
80
  float oneByGamma = gamma / gamma;
81
81
  float oneByWhitePoint = whitepoint / whitepoint;
82
82
  vec3 mapped = ReinhardToneMapping2(hdrColor) * oneByGamma * oneByWhitePoint;
83
+ //vec3 mapped = ACESFilmicToneMapping(hdrColor) * oneByGamma * oneByWhitePoint;
83
84
 
84
85
  mapped = pow(mapped, vec3(1.0 / gamma));
85
86
 
@@ -304,7 +304,7 @@ class BaseShape {
304
304
  var img = new Image();
305
305
  var that = this;
306
306
  img.onload = function () {
307
- that.texture = renderNode.renderer.handler.createTexture(this);
307
+ that.texture = renderNode.renderer.handler.createTextureDefault(this);
308
308
  };
309
309
  img.src = this._src;
310
310
  }
@@ -14,7 +14,9 @@ class EmptyTerrain {
14
14
  constructor(options = {}) {
15
15
  this.equalizeVertices = false;
16
16
 
17
- this.equalizeNormals = false;
17
+ this.equalizeNormals = false;
18
+
19
+ this.isEmpty = true;
18
20
 
19
21
  /**
20
22
  * Provider name is "empty"
@@ -106,7 +108,6 @@ class EmptyTerrain {
106
108
 
107
109
  set geoid(geoid) {
108
110
  this._geoid = geoid;
109
- //...this._planet
110
111
  }
111
112
 
112
113
  get geoid() {
@@ -66,6 +66,8 @@ class GlobusTerrain extends EmptyTerrain {
66
66
  */
67
67
  this.events = new Events(EVENT_NAMES, this);
68
68
 
69
+ this.isEmpty = false;
70
+
69
71
  this.equalizeNormals = true;
70
72
 
71
73
  /**
@@ -138,10 +138,14 @@ class FontAtlas {
138
138
 
139
139
  let img = new Image();
140
140
  img.onload = () => {
141
- atlas.createTexture(img);
141
+ this._createTexture(atlas, img);
142
142
  def.resolve(index);
143
143
  };
144
144
  img.src = ARIAL_FONT_B64;
145
+ }
146
+
147
+ _createTexture(atlas, img) {
148
+ atlas.createTexture(img);
145
149
  }
146
150
 
147
151
  loadFont(faceName, srcDir, atlasUrl) {
@@ -183,7 +187,7 @@ class FontAtlas {
183
187
 
184
188
  let img = new Image();
185
189
  img.onload = () => {
186
- atlas.createTexture(img);
190
+ this._createTexture(atlas, img);
187
191
  def.resolve(index);
188
192
  };
189
193
 
@@ -151,7 +151,11 @@ export class GeoImageCreator {
151
151
  `precision highp float;
152
152
  uniform sampler2D sourceTexture;
153
153
  varying vec2 v_texCoords;
154
- void main () {
154
+ void main () {
155
+ if(v_texCoords.x <= 0.001 || v_texCoords.x >= 0.999 ||
156
+ v_texCoords.y <= 0.001 || v_texCoords.y >= 0.999) {
157
+ discard;
158
+ }
155
159
  gl_FragColor = texture2D(sourceTexture, v_texCoords);
156
160
  }`
157
161
  }));
@@ -16,7 +16,7 @@ if (window && !('createImageBitmap' in window)) {
16
16
 
17
17
  export class Loader {
18
18
 
19
- constructor(maxRequests = 12) {
19
+ constructor(maxRequests = 24) {
20
20
 
21
21
  this.MAX_REQUESTS = maxRequests;
22
22
 
@@ -222,19 +222,6 @@ const _programm = `
222
222
  res.x = nc * Math.sin(lonrad);
223
223
  res.y = (N * (1.0 - E2) + h) * slt;
224
224
  res.z = nc * Math.cos(lonrad);
225
-
226
- //let cosLat = Math.cos(lat * RADIANS)
227
- //let sinLat = Math.sin(lat * RADIANS)
228
-
229
- //let cosLong = Math.cos(lon * RADIANS)
230
- //let sinLong = Math.sin(lon * RADIANS)
231
-
232
- //let c = 1.0 / Math.sqrt(cosLat * cosLat + (1 - f) * (1 - f) * sinLat * sinLat)
233
- //s = (1 - f) * (1 - f) * c
234
-
235
- //x = (R*c + altitude) * cosLat * cosLong
236
- //y = (R*c + altitude) * cosLat * sinLong
237
- //z = (R*s + altitude) * sinLat
238
225
  };
239
226
 
240
227
  var lonLatToCartesianInverse = function (lon, lat, heightFactor, res){
@@ -180,14 +180,14 @@ class TextureAtlas {
180
180
  * Creates atlas gl texture.
181
181
  * @public
182
182
  */
183
- createTexture(img) {
183
+ createTexture(img, internalFormat) {
184
184
  if (this._handler) {
185
185
  this._handler.gl.deleteTexture(this.texture);
186
186
  if (img) {
187
187
  this.canvas.resize(img.width, img.height);
188
188
  this.canvas.drawImage(img, 0, 0, img.width, img.height);
189
189
  }
190
- this.texture = this._handler.createTexture_l(this.canvas._canvas);
190
+ this.texture = this._handler.createTexture_l(this.canvas._canvas, internalFormat);
191
191
  }
192
192
  }
193
193
 
@@ -217,8 +217,6 @@ export class VectorTileCreator {
217
217
 
218
218
  // var prevLayerId = -1;
219
219
 
220
- var extentParams = new Float32Array(4);
221
-
222
220
  var extentParamsHigh = new Float32Array(4);
223
221
  var extentParamsLow = new Float32Array(4);
224
222
 
@@ -245,7 +243,7 @@ export class VectorTileCreator {
245
243
 
246
244
  f.bindOutputTexture(texture);
247
245
 
248
- gl.clearColor(1.0, 1.0, 1.0, 0.0);
246
+ gl.clearColor(0.0, 0.0, 0.0, 0.0);
249
247
  gl.clear(gl.COLOR_BUFFER_BIT);
250
248
 
251
249
  var extent = material.segment.getExtentMerc();
@@ -940,4 +940,4 @@ export function cloneArray(items) {
940
940
  */
941
941
  export function isUndef(obj) {
942
942
  return obj === void 0;
943
- }
943
+ }
@@ -12,15 +12,11 @@ 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
@@ -92,21 +88,13 @@ class Handler {
92
88
  * @type {Object}
93
89
  */
94
90
  this._params = params || {};
95
- this._params.anisotropy = this._params.anisotropy || 8;
96
- let w = this._params.width;
97
- if (w > MAX_SIZE) {
98
- w = MAX_SIZE;
99
- }
100
- this._params.width = w || 256;
101
-
102
- let h = this._params.height;
103
- if (h > MAX_SIZE) {
104
- h = MAX_SIZE;
105
- }
106
- 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;
107
95
  this._params.context = this._params.context || {};
108
96
  this._params.extensions = this._params.extensions || [];
109
- this._oneByHeight = 1 / this._params.height;
97
+ this._oneByHeight = 1.0 / (this._params.height * this._params.pixelRatio);
110
98
 
111
99
  /**
112
100
  * Current WebGL extensions. Becomes here after context initialization.
@@ -131,12 +119,21 @@ class Handler {
131
119
  * @private
132
120
  * @type {frameCallback}
133
121
  */
134
- this._frameCallback = function () {};
122
+ this._frameCallback = function () { };
135
123
 
136
124
  this.transparentTexture = null;
137
125
 
138
126
  this.framebufferStack = new Stack();
139
127
 
128
+ this.createTexture = {
129
+ "NEAREST": null,
130
+ "LINEAR": null,
131
+ "MIPMAP": null,
132
+ "ANISOTROPIC": null
133
+ };
134
+
135
+ this.createTextureDefault = null;
136
+
140
137
  if (params.autoActivate || isEmpty(params.autoActivate)) {
141
138
  this.initialize();
142
139
  }
@@ -245,48 +242,6 @@ class Handler {
245
242
  return texture;
246
243
  }
247
244
 
248
- ///**
249
- // * Creates Empty half float texture.
250
- // * @public
251
- // * @param {number} width - Empty texture width.
252
- // * @param {number} height - Empty texture height.
253
- // * @returns {Object} - WebGL half float texture object.
254
- // */
255
- //createEmptyTexture_hf(width, height) {
256
- // var gl = this.gl;
257
- // var texture = gl.createTexture();
258
- // gl.bindTexture(gl.TEXTURE_2D, texture);
259
- // gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
260
- // gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.HALF_FLOAT_OES, null);
261
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
262
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
263
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
264
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
265
- // gl.bindTexture(gl.TEXTURE_2D, null);
266
- // return texture;
267
- //}
268
-
269
- ///**
270
- // * Creates Empty float texture.
271
- // * @public
272
- // * @param {number} width - Empty texture width.
273
- // * @param {number} height - Empty texture height.
274
- // * @returns {Object} - WebGL float texture object.
275
- // */
276
- //createEmptyTexture_f(width, height) {
277
- // var gl = this.gl;
278
- // var texture = gl.createTexture();
279
- // gl.bindTexture(gl.TEXTURE_2D, texture);
280
- // gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
281
- // gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.FLOAT, null);
282
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
283
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
284
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
285
- // //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
286
- // gl.bindTexture(gl.TEXTURE_2D, null);
287
- // return texture;
288
- //}
289
-
290
245
  /**
291
246
  * Creates Empty NEAREST filtered texture.
292
247
  * @public
@@ -294,12 +249,12 @@ class Handler {
294
249
  * @param {number} height - Empty texture height.
295
250
  * @returns {Object} - WebGL texture object.
296
251
  */
297
- createEmptyTexture_n(width, height) {
252
+ createEmptyTexture_n(width, height, internalFormat) {
298
253
  let gl = this.gl;
299
254
  let texture = gl.createTexture();
300
255
  gl.bindTexture(gl.TEXTURE_2D, texture);
301
256
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
302
- 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);
303
258
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
304
259
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
305
260
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
@@ -315,12 +270,12 @@ class Handler {
315
270
  * @param {number} height - Empty texture height.
316
271
  * @returns {Object} - WebGL texture object.
317
272
  */
318
- createEmptyTexture_l(width, height) {
273
+ createEmptyTexture_l(width, height, internalFormat) {
319
274
  let gl = this.gl;
320
275
  let texture = gl.createTexture();
321
276
  gl.bindTexture(gl.TEXTURE_2D, texture);
322
277
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
323
- 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);
324
279
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
325
280
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
326
281
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
@@ -335,12 +290,12 @@ class Handler {
335
290
  * @param {Object} image - Image or Canvas object.
336
291
  * @returns {Object} - WebGL texture object.
337
292
  */
338
- static createTexture_n(handler, image) {
339
- var gl = handler.gl;
293
+ createTexture_n_webgl1(image, internalFormat) {
294
+ var gl = this.gl;
340
295
  var texture = gl.createTexture();
341
296
  gl.bindTexture(gl.TEXTURE_2D, texture);
342
297
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
343
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
298
+ gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat || gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
344
299
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
345
300
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
346
301
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
@@ -355,11 +310,13 @@ class Handler {
355
310
  * @param {Object} image - Image or Canvas object.
356
311
  * @returns {Object} - WebGL texture object.
357
312
  */
358
- static createTexture_l(handler, image) {
359
- let gl = handler.gl;
313
+ createTexture_l_webgl1(image, internalFormat) {
314
+ let gl = this.gl;
360
315
  let texture = gl.createTexture();
361
316
  gl.bindTexture(gl.TEXTURE_2D, texture);
362
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
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
- static createTexture_mm(handler, image) {
378
- let gl = handler.gl;
334
+ createTexture_mm_webgl1(image, internalFormat) {
335
+ let gl = this.gl;
379
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,17 @@ class Handler {
394
353
  * @param {Object} image - Image or Canvas object.
395
354
  * @returns {Object} - WebGL texture object.
396
355
  */
397
- static createTexture_a(handler, image) {
398
- let gl = handler.gl;
356
+ createTexture_a_webgl1(image, internalFormat) {
357
+ let gl = this.gl;
399
358
  let texture = gl.createTexture();
400
359
  gl.bindTexture(gl.TEXTURE_2D, texture);
401
360
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
402
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
361
+
362
+ gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat || gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
363
+
403
364
  gl.generateMipmap(gl.TEXTURE_2D);
404
365
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
405
- gl.texParameterf(
406
- gl.TEXTURE_2D,
407
- handler.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT,
408
- handler._params.anisotropy
409
- );
366
+ gl.texParameterf(gl.TEXTURE_2D, this.extensions.EXT_texture_filter_anisotropic.TEXTURE_MAX_ANISOTROPY_EXT, this._params.anisotropy);
410
367
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
411
368
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
412
369
  gl.bindTexture(gl.TEXTURE_2D, null);
@@ -414,29 +371,95 @@ class Handler {
414
371
  }
415
372
 
416
373
  /**
417
- * Creates DEFAULT filter texture, ANISOTROPY is default.
374
+ * Creates NEAREST filter texture.
418
375
  * @public
419
376
  * @param {Object} image - Image or Canvas object.
420
377
  * @returns {Object} - WebGL texture object.
421
378
  */
422
- createTexture(image) {
423
- return Handler.createTexture_a(this, image);
424
- }
379
+ createTexture_n_webgl2(image, internalFormat) {
380
+ var gl = this.gl;
381
+ var texture = gl.createTexture();
382
+ gl.bindTexture(gl.TEXTURE_2D, texture);
383
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
425
384
 
426
- createTexture_n(image) {
427
- return Handler.createTexture_n(this, image);
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;
428
394
  }
429
395
 
430
- createTexture_l(image) {
431
- return Handler.createTexture_l(this, image);
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;
432
416
  }
433
417
 
434
- createTexture_mm(image) {
435
- return Handler.createTexture_mm(this, image);
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
+
433
+ gl.generateMipmap(gl.TEXTURE_2D);
434
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
435
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
436
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
437
+ gl.bindTexture(gl.TEXTURE_2D, null);
438
+ return texture;
436
439
  }
437
440
 
438
- createTexture_a(image) {
439
- return Handler.createTexture_a(this, image);
441
+ /**
442
+ * Creates ANISOTROPY filter texture.
443
+ * @public
444
+ * @param {Object} image - Image or Canvas object.
445
+ * @returns {Object} - WebGL texture object.
446
+ */
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;
440
463
  }
441
464
 
442
465
  /**
@@ -623,8 +646,27 @@ class Handler {
623
646
  this.initializeExtension(this._params.extensions[i], true);
624
647
  }
625
648
 
649
+ if (this.gl.type === "webgl") {
650
+ this.createTexture_n = this.createTexture_n_webgl1.bind(this);
651
+ this.createTexture_l = this.createTexture_l_webgl1.bind(this);
652
+ this.createTexture_mm = this.createTexture_mm_webgl1.bind(this);
653
+ this.createTexture_a = this.createTexture_a_webgl1.bind(this);
654
+ } else {
655
+ this.createTexture_n = this.createTexture_n_webgl2.bind(this);
656
+ this.createTexture_l = this.createTexture_l_webgl2.bind(this);
657
+ this.createTexture_mm = this.createTexture_mm_webgl2.bind(this);
658
+ this.createTexture_a = this.createTexture_a_webgl2.bind(this);
659
+ }
660
+
661
+ this.createTexture["NEAREST"] = this.createTexture_n;
662
+ this.createTexture["LINEAR"] = this.createTexture_l;
663
+ this.createTexture["MIPMAP"] = this.createTexture_mm;
664
+ this.createTexture["ANISOTROPIC"] = this.createTexture_a;
665
+
626
666
  if (!this.extensions.EXT_texture_filter_anisotropic) {
627
- this.createTexture = this.createTexture_mm;
667
+ this.createTextureDefault = this.createTexture_mm;
668
+ } else {
669
+ this.createTextureDefault = this.createTexture_a;
628
670
  }
629
671
 
630
672
  /** Initilalize shaders and rendering parameters*/
@@ -804,24 +846,26 @@ class Handler {
804
846
  * @param {number} h - Canvas height.
805
847
  */
806
848
  setSize(w, h) {
807
- if (w > MAX_SIZE) {
808
- w = MAX_SIZE;
809
- }
810
-
811
- if (h > MAX_SIZE) {
812
- h = MAX_SIZE;
813
- }
814
-
815
849
  this._params.width = w;
816
850
  this._params.height = h;
817
- this.canvas.width = w;
818
- this.canvas.height = h;
819
- this._oneByHeight = 1 / h;
851
+ this.canvas.width = w * this._params.pixelRatio;
852
+ this.canvas.height = h * this._params.pixelRatio;
853
+
854
+ this._oneByHeight = 1.0 / this.canvas.height;
820
855
 
821
856
  this.gl && this.gl.viewport(0, 0, w, h);
822
857
  this.onCanvasResize && this.onCanvasResize(this.canvas);
823
858
  }
824
859
 
860
+ get pixelRatio() {
861
+ return this._params.pixelRatio;
862
+ }
863
+
864
+ set pixelRatio(pr) {
865
+ this._params.pixelRatio = pr;
866
+ this.setSize(this._params.width, this._params.height);
867
+ }
868
+
825
869
  /**
826
870
  * Returns context screen width.
827
871
  * @public
@@ -878,7 +922,8 @@ class Handler {
878
922
 
879
923
  /** Canvas resize checking */
880
924
  let canvas = this.canvas;
881
- if (canvas.clientWidth !== canvas.width || canvas.clientHeight !== canvas.height) {
925
+
926
+ if (Math.floor(canvas.clientWidth * this._params.pixelRatio) !== canvas.width || Math.floor(canvas.clientHeight * this._params.pixelRatio) !== canvas.height) {
882
927
  this.setSize(canvas.clientWidth, canvas.clientHeight);
883
928
  }
884
929
 
@@ -938,7 +983,7 @@ class Handler {
938
983
  if (params && params.color) {
939
984
  imgCnv = new ImageCanvas(2, 2);
940
985
  imgCnv.fillColor(params.color);
941
- texture = Handler.createTexture_n(this, imgCnv._canvas);
986
+ texture = this.createTexture_n_webgl2(imgCnv._canvas);
942
987
  texture.default = true;
943
988
  success(texture);
944
989
  } else if (params && params.url) {
@@ -953,7 +998,7 @@ class Handler {
953
998
  } else {
954
999
  imgCnv = new ImageCanvas(2, 2);
955
1000
  imgCnv.fillColor("#C5C5C5");
956
- texture = Handler.createTexture_n(this, imgCnv._canvas);
1001
+ texture = this.createTexture_n_webgl2(imgCnv._canvas);
957
1002
  texture.default = true;
958
1003
  success(texture);
959
1004
  }
@@ -1052,11 +1097,4 @@ class Handler {
1052
1097
  }
1053
1098
  }
1054
1099
 
1055
- export const createTexture = {
1056
- NEAREST: Handler.createTexture_n,
1057
- LINEAR: Handler.createTexture_l,
1058
- MIPMAP: Handler.createTexture_mm,
1059
- ANISOTROPIC: Handler.createTexture_a
1060
- };
1061
-
1062
1100
  export { Handler };