@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.
- package/package.json +13 -13
- package/src/og/Clock.js +10 -10
- package/src/og/Events.js +8 -6
- package/src/og/Extent.js +82 -41
- package/src/og/Globe.js +25 -13
- package/src/og/ImageCanvas.js +22 -16
- package/src/og/LonLat.js +16 -13
- package/src/og/Popup.js +21 -14
- package/src/og/QueueArray.js +6 -2
- package/src/og/Rectangle.js +11 -6
- package/src/og/Stack.js +5 -2
- package/src/og/ajax.js +21 -33
- package/src/og/astro/astro.js +5 -5
- package/src/og/astro/earth.js +22 -16
- package/src/og/astro/jd.js +23 -18
- package/src/og/astro/orbit.js +13 -11
- package/src/og/astro/rotation.js +17 -8
- package/src/og/bv/Box.js +7 -3
- package/src/og/bv/Sphere.js +14 -11
- package/src/og/camera/Camera.js +51 -54
- package/src/og/camera/Frustum.js +29 -18
- package/src/og/camera/PlanetCamera.js +32 -23
- package/src/og/control/CompassButton.js +5 -1
- package/src/og/control/Control.js +12 -10
- package/src/og/control/DebugInfo.js +4 -1
- package/src/og/control/EarthCoordinates.js +54 -33
- package/src/og/control/KeyboardNavigation.js +10 -10
- package/src/og/control/LayerSwitcher.js +22 -21
- package/src/og/control/Lighting.js +34 -3
- package/src/og/control/MouseNavigation.js +1 -1
- package/src/og/control/ScaleControl.js +1 -1
- package/src/og/control/SegmentBoundVisualization.js +6 -7
- package/src/og/control/ShowFps.js +13 -8
- package/src/og/control/SimpleNavigation.js +6 -8
- package/src/og/control/Sun.js +25 -15
- package/src/og/control/ToggleWireframe.js +4 -4
- package/src/og/control/TouchNavigation.js +44 -33
- package/src/og/control/ZoomControl.js +41 -25
- package/src/og/ellipsoid/Ellipsoid.js +162 -66
- package/src/og/ellipsoid/wgs84.js +4 -4
- package/src/og/entity/BaseBillboard.js +100 -56
- package/src/og/entity/Billboard.js +14 -10
- package/src/og/entity/BillboardHandler.js +317 -60
- package/src/og/entity/Entity.js +100 -68
- package/src/og/entity/EntityCollection.js +70 -47
- package/src/og/entity/GeoObject.js +228 -0
- package/src/og/entity/GeoObjectHandler.js +910 -0
- package/src/og/entity/Geometry.js +27 -24
- package/src/og/entity/GeometryHandler.js +596 -124
- package/src/og/entity/Label.js +80 -49
- package/src/og/entity/LabelHandler.js +45 -244
- package/src/og/entity/LabelWorker.js +218 -0
- package/src/og/entity/Object3d.js +504 -0
- package/src/og/entity/PointCloud.js +80 -32
- package/src/og/entity/PointCloudHandler.js +8 -8
- package/src/og/entity/Polyline.js +16 -16
- package/src/og/entity/Ray.js +60 -27
- package/src/og/entity/Strip.js +77 -48
- package/src/og/entity/StripHandler.js +26 -26
- package/src/og/entity/index.js +8 -16
- package/src/og/layer/BaseGeoImage.js +54 -23
- package/src/og/layer/CanvasTiles.js +24 -24
- package/src/og/layer/GeoImage.js +9 -9
- package/src/og/layer/GeoVideo.js +3 -3
- package/src/og/layer/KML.js +63 -37
- package/src/og/layer/Layer.js +44 -21
- package/src/og/layer/Material.js +23 -20
- package/src/og/layer/Vector.js +114 -68
- package/src/og/layer/WMS.js +34 -17
- package/src/og/layer/XYZ.js +48 -46
- package/src/og/light/LightSource.js +46 -39
- package/src/og/math/Mat3.js +34 -22
- package/src/og/math/Mat4.js +603 -459
- package/src/og/math/Plane.js +21 -20
- package/src/og/math/Quat.js +182 -139
- package/src/og/math/Ray.js +38 -33
- package/src/og/math/Vec2.js +85 -75
- package/src/og/math/Vec3.js +142 -112
- package/src/og/math/Vec4.js +27 -31
- package/src/og/math/coder.js +10 -10
- package/src/og/math.js +12 -12
- package/src/og/proj/EPSG3857.js +4 -4
- package/src/og/proj/EPSG4326.js +4 -4
- package/src/og/proj/Proj.js +4 -6
- package/src/og/quadTree/Node.js +8 -8
- package/src/og/renderer/Renderer.js +59 -52
- package/src/og/renderer/RendererEvents.js +50 -27
- package/src/og/scene/BaseNode.js +7 -8
- package/src/og/scene/Planet.js +102 -103
- package/src/og/scene/RenderNode.js +28 -21
- package/src/og/segment/Segment.js +26 -21
- package/src/og/segment/SegmentLonLat.js +5 -5
- package/src/og/shaders/drawnode.js +135 -142
- package/src/og/shaders/geoObject.js +211 -0
- package/src/og/shaders/pointCloud.js +41 -41
- package/src/og/shaders/shape.js +12 -18
- package/src/og/shaders/skybox.js +36 -36
- package/src/og/shaders/toneMapping.js +1 -0
- package/src/og/shapes/BaseShape.js +126 -54
- package/src/og/shapes/Icosphere.js +29 -14
- package/src/og/shapes/Sphere.js +12 -15
- package/src/og/terrain/BilTerrain.js +1 -0
- package/src/og/terrain/EmptyTerrain.js +2 -2
- package/src/og/terrain/GlobusTerrain.js +9 -9
- package/src/og/utils/FontAtlas.js +6 -2
- package/src/og/utils/TextureAtlas.js +22 -24
- package/src/og/utils/VectorTileCreator.js +1 -3
- package/src/og/utils/shared.js +16 -16
- package/src/og/webgl/Framebuffer.js +88 -40
- package/src/og/webgl/Handler.js +243 -169
- package/src/og/webgl/Multisample.js +47 -19
- package/src/og/webgl/Program.js +79 -34
- package/src/og/webgl/ProgramController.js +17 -13
- package/src/og/webgl/callbacks.js +8 -8
- package/src/og/inherits.js +0 -8
- package/src/og/utils/polylabel.js +0 -176
- package/types/Clock.d.ts +0 -90
- package/types/Deferred.d.ts +0 -6
- package/types/Events.d.ts +0 -73
- package/types/Extent.d.ts +0 -166
- package/types/Globe.d.ts +0 -75
- package/types/ImageCanvas.d.ts +0 -121
- package/types/Lock.d.ts +0 -12
- package/types/LonLat.d.ts +0 -108
- package/types/Popup.d.ts +0 -38
- package/types/QueueArray.d.ts +0 -15
- package/types/Rectangle.d.ts +0 -74
- package/types/Stack.d.ts +0 -15
- package/types/ajax.d.ts +0 -24
- package/types/arial.d.ts +0 -48
- package/types/astro/astro.d.ts +0 -38
- package/types/astro/earth.d.ts +0 -6
- package/types/astro/jd.d.ts +0 -254
- package/types/bv/Box.d.ts +0 -25
- package/types/bv/Sphere.d.ts +0 -38
- package/types/bv/index.d.ts +0 -3
- package/types/camera/Camera.d.ts +0 -303
- package/types/camera/Frustum.d.ts +0 -129
- package/types/camera/PlanetCamera.d.ts +0 -223
- package/types/camera/index.d.ts +0 -3
- package/types/cons.d.ts +0 -40
- package/types/control/CompassButton.d.ts +0 -18
- package/types/control/Control.d.ts +0 -101
- package/types/control/DebugInfo.d.ts +0 -16
- package/types/control/EarthCoordinates.d.ts +0 -47
- package/types/control/EarthNavigation.d.ts +0 -42
- package/types/control/GeoImageDragControl.d.ts +0 -6
- package/types/control/KeyboardNavigation.d.ts +0 -22
- package/types/control/LayerSwitcher.d.ts +0 -23
- package/types/control/Lighting.d.ts +0 -16
- package/types/control/MouseNavigation.d.ts +0 -51
- package/types/control/ScaleControl.d.ts +0 -22
- package/types/control/ShowFps.d.ts +0 -12
- package/types/control/SimpleNavigation.d.ts +0 -28
- package/types/control/Sun.d.ts +0 -52
- package/types/control/ToggleWireframe.d.ts +0 -12
- package/types/control/TouchNavigation.d.ts +0 -50
- package/types/control/ZoomControl.d.ts +0 -28
- package/types/control/index.d.ts +0 -17
- package/types/ellipsoid/Ellipsoid.d.ts +0 -142
- package/types/ellipsoid/index.d.ts +0 -3
- package/types/ellipsoid/wgs84.d.ts +0 -5
- package/types/entity/BaseBillboard.d.ts +0 -208
- package/types/entity/Billboard.d.ts +0 -94
- package/types/entity/BillboardHandler.d.ts +0 -74
- package/types/entity/Entity.d.ts +0 -331
- package/types/entity/EntityCollection.d.ts +0 -303
- package/types/entity/Geometry.d.ts +0 -73
- package/types/entity/GeometryHandler.d.ts +0 -76
- package/types/entity/Label.d.ts +0 -194
- package/types/entity/LabelHandler.d.ts +0 -24
- package/types/entity/PointCloud.d.ts +0 -174
- package/types/entity/PointCloudHandler.d.ts +0 -38
- package/types/entity/Polyline.d.ts +0 -304
- package/types/entity/PolylineHandler.d.ts +0 -18
- package/types/entity/Ray.d.ts +0 -123
- package/types/entity/RayHandler.d.ts +0 -67
- package/types/entity/ShapeHandler.d.ts +0 -22
- package/types/entity/Strip.d.ts +0 -118
- package/types/entity/StripHandler.d.ts +0 -38
- package/types/entity/index.d.ts +0 -8
- package/types/index.core.d.ts +0 -65
- package/types/index.d.ts +0 -45
- package/types/index.webgl.d.ts +0 -7
- package/types/inherits.d.ts +0 -4
- package/types/input/KeyboardHandler.d.ts +0 -10
- package/types/input/MouseHandler.d.ts +0 -5
- package/types/input/TouchHandler.d.ts +0 -5
- package/types/input/input.d.ts +0 -34
- package/types/layer/BaseGeoImage.d.ts +0 -107
- package/types/layer/CanvasTiles.d.ts +0 -75
- package/types/layer/GeoImage.d.ts +0 -65
- package/types/layer/GeoTexture2d.d.ts +0 -8
- package/types/layer/GeoVideo.d.ts +0 -80
- package/types/layer/KML.d.ts +0 -58
- package/types/layer/Layer.d.ts +0 -321
- package/types/layer/Material.d.ts +0 -48
- package/types/layer/Vector.d.ts +0 -228
- package/types/layer/WMS.d.ts +0 -66
- package/types/layer/XYZ.d.ts +0 -130
- package/types/layer/index.d.ts +0 -10
- package/types/light/LightSource.d.ts +0 -177
- package/types/math/Line2.d.ts +0 -11
- package/types/math/Line3.d.ts +0 -10
- package/types/math/Mat3.d.ts +0 -63
- package/types/math/Mat4.d.ts +0 -173
- package/types/math/Plane.d.ts +0 -17
- package/types/math/Quat.d.ts +0 -376
- package/types/math/Ray.d.ts +0 -81
- package/types/math/Vec2.d.ts +0 -308
- package/types/math/Vec3.d.ts +0 -459
- package/types/math/Vec4.d.ts +0 -161
- package/types/math/coder.d.ts +0 -42
- package/types/math/index.d.ts +0 -11
- package/types/math.d.ts +0 -261
- package/types/mercator.d.ts +0 -92
- package/types/proj/EPSG3857.d.ts +0 -5
- package/types/proj/EPSG4326.d.ts +0 -5
- package/types/proj/Proj.d.ts +0 -42
- package/types/quadTree/EntityCollectionNode.d.ts +0 -34
- package/types/quadTree/Node.d.ts +0 -61
- package/types/quadTree/quadTree.d.ts +0 -40
- package/types/renderer/Renderer.d.ts +0 -296
- package/types/renderer/RendererEvents.d.ts +0 -230
- package/types/res/images.d.ts +0 -3
- package/types/scene/Axes.d.ts +0 -11
- package/types/scene/BaseNode.d.ts +0 -60
- package/types/scene/Planet.d.ts +0 -574
- package/types/scene/RenderNode.d.ts +0 -143
- package/types/scene/SkyBox.d.ts +0 -10
- package/types/scene/index.d.ts +0 -4
- package/types/segment/Segment.d.ts +0 -271
- package/types/segment/SegmentLonLat.d.ts +0 -62
- package/types/segment/segmentHelper.d.ts +0 -13
- package/types/shaders/billboard.d.ts +0 -3
- package/types/shaders/depth.d.ts +0 -2
- package/types/shaders/drawnode.d.ts +0 -7
- package/types/shaders/label.d.ts +0 -4
- package/types/shaders/pointCloud.d.ts +0 -2
- package/types/shaders/polyline.d.ts +0 -3
- package/types/shaders/ray.d.ts +0 -2
- package/types/shaders/screenFrame.d.ts +0 -2
- package/types/shaders/shape.d.ts +0 -4
- package/types/shaders/skybox.d.ts +0 -2
- package/types/shaders/toneMapping.d.ts +0 -2
- package/types/shapes/BaseShape.d.ts +0 -247
- package/types/shapes/Sphere.d.ts +0 -41
- package/types/terrain/BilTerrain.d.ts +0 -8
- package/types/terrain/EmptyTerrain.d.ts +0 -72
- package/types/terrain/Geoid.d.ts +0 -26
- package/types/terrain/GlobusTerrain.d.ts +0 -153
- package/types/terrain/MapboxTerrain.d.ts +0 -8
- package/types/terrain/index.d.ts +0 -5
- package/types/utils/FontAtlas.d.ts +0 -14
- package/types/utils/GeoImageCreator.d.ts +0 -30
- package/types/utils/ImagesCacheManager.d.ts +0 -10
- package/types/utils/Loader.d.ts +0 -25
- package/types/utils/NormalMapCreator.d.ts +0 -39
- package/types/utils/PlainSegmentWorker.d.ts +0 -10
- package/types/utils/TerrainWorker.d.ts +0 -9
- package/types/utils/TextureAtlas.d.ts +0 -111
- package/types/utils/VectorTileCreator.d.ts +0 -16
- package/types/utils/colorTable.d.ts +0 -143
- package/types/utils/earcut.d.ts +0 -6
- package/types/utils/shared.d.ts +0 -230
- package/types/webgl/Framebuffer.d.ts +0 -135
- package/types/webgl/Handler.d.ts +0 -372
- package/types/webgl/Multisample.d.ts +0 -89
- package/types/webgl/Program.d.ts +0 -155
- package/types/webgl/ProgramController.d.ts +0 -84
- package/types/webgl/callbacks.d.ts +0 -1
- package/types/webgl/index.d.ts +0 -6
- package/types/webgl/types.d.ts +0 -2
package/src/og/webgl/Handler.js
CHANGED
|
@@ -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] -
|
|
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 {
|
|
38
|
+
* @type {Clock}
|
|
44
39
|
*/
|
|
45
40
|
this.defaultClock = new Clock();
|
|
46
41
|
|
|
47
42
|
/**
|
|
48
43
|
* Custom timers.
|
|
49
44
|
* @protected
|
|
50
|
-
* @type{
|
|
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 {
|
|
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 ||
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
243
|
-
|
|
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
|
-
|
|
319
|
-
|
|
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
|
-
|
|
340
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
378
|
-
|
|
379
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
423
|
-
|
|
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
|
-
|
|
440
|
-
|
|
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
|
-
|
|
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
|
-
|
|
495
|
+
let imageCanvas = new ImageCanvas();
|
|
457
496
|
imageCanvas.fillEmpty();
|
|
458
|
-
|
|
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 {
|
|
525
|
+
* @param {Program} program - Shader program.
|
|
487
526
|
* @param {boolean} [notActivate] - If it's true program will not compile.
|
|
488
|
-
* @return {
|
|
527
|
+
* @return {Program} -
|
|
489
528
|
*/
|
|
490
529
|
addProgram(program, notActivate) {
|
|
491
530
|
if (!this.programs[program.name]) {
|
|
492
|
-
|
|
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.<
|
|
557
|
+
* @param {Array.<Program>} programsArr - Shader program array.
|
|
519
558
|
*/
|
|
520
559
|
addPrograms(programsArr) {
|
|
521
|
-
for (
|
|
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 {
|
|
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 (
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
848
|
-
|
|
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
|
-
|
|
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
|
-
|
|
904
|
-
|
|
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.
|
|
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
|
-
|
|
913
|
-
|
|
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.
|
|
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
|
-
|
|
1007
|
+
let gl = this.gl;
|
|
934
1008
|
|
|
935
1009
|
this.stop();
|
|
936
1010
|
|
|
937
|
-
for (
|
|
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
|
-
|
|
955
|
-
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
1010
|
-
|
|
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;
|