bg2e-js 2.0.0 → 2.0.2

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 (132) hide show
  1. package/dist/bg2e-js.js +11001 -0
  2. package/dist/bg2e-js.js.map +1 -0
  3. package/package.json +17 -6
  4. package/app/AppController.js +0 -32
  5. package/app/Canvas.js +0 -98
  6. package/app/EventBase.js +0 -8
  7. package/app/KeyboardEvent.js +0 -51
  8. package/app/MainLoop.js +0 -251
  9. package/app/MouseEvent.js +0 -77
  10. package/app/TouchEvent.js +0 -15
  11. package/base/Color.js +0 -131
  12. package/base/Environment.js +0 -78
  13. package/base/Light.js +0 -176
  14. package/base/Material.js +0 -619
  15. package/base/PolyList.js +0 -336
  16. package/base/Texture.js +0 -545
  17. package/db/Bg2LoaderPlugin.js +0 -113
  18. package/db/DBPluginApi.js +0 -40
  19. package/db/Loader.js +0 -91
  20. package/db/LoaderPlugin.js +0 -26
  21. package/db/MtlParser.js +0 -7
  22. package/db/ObjLoaderPlugin.js +0 -51
  23. package/db/ObjParser.js +0 -233
  24. package/db/ObjWriterPlugin.js +0 -18
  25. package/db/VitscnjLoaderPlugin.js +0 -87
  26. package/db/Writer.js +0 -49
  27. package/db/WriterPlugin.js +0 -20
  28. package/debug/DebugRenderer.js +0 -138
  29. package/debug/WebGLTextureViewer.js +0 -67
  30. package/manipulation/SelectionBuffer.js +0 -65
  31. package/manipulation/SelectionHighlight.js +0 -69
  32. package/manipulation/SelectionIdAssignVisitor.js +0 -86
  33. package/manipulation/SelectionManager.js +0 -134
  34. package/manipulation/SelectionMode.js +0 -6
  35. package/math/Mat3.js +0 -248
  36. package/math/Mat4.js +0 -694
  37. package/math/MatrixStrategy.js +0 -23
  38. package/math/Quat.js +0 -60
  39. package/math/Vec.js +0 -728
  40. package/math/constants.js +0 -44
  41. package/math/functions.js +0 -104
  42. package/math/index.js +0 -74
  43. package/phsics/joint.js +0 -124
  44. package/primitives/arrow.js +0 -58
  45. package/primitives/cone.js +0 -137
  46. package/primitives/cube.js +0 -59
  47. package/primitives/cylinder.js +0 -215
  48. package/primitives/index.js +0 -13
  49. package/primitives/plane.js +0 -31
  50. package/primitives/sphere.js +0 -808
  51. package/render/BRDFIntegrationMap.js +0 -4
  52. package/render/Environment.js +0 -105
  53. package/render/EnvironmentRenderer.js +0 -12
  54. package/render/FrameBuffer.js +0 -26
  55. package/render/MaterialRenderer.js +0 -28
  56. package/render/Pipeline.js +0 -83
  57. package/render/PolyListRenderer.js +0 -42
  58. package/render/RenderBuffer.js +0 -189
  59. package/render/RenderQueue.js +0 -162
  60. package/render/RenderState.js +0 -82
  61. package/render/Renderer.js +0 -202
  62. package/render/SceneAppController.js +0 -208
  63. package/render/SceneRenderer.js +0 -310
  64. package/render/Shader.js +0 -21
  65. package/render/ShadowRenderer.js +0 -159
  66. package/render/SkyCube.js +0 -77
  67. package/render/SkySphere.js +0 -94
  68. package/render/TextureMergerRenderer.js +0 -58
  69. package/render/TextureRenderer.js +0 -29
  70. package/render/webgl/FrameBuffer.js +0 -9
  71. package/render/webgl/MaterialRenderer.js +0 -99
  72. package/render/webgl/Pipeline.js +0 -82
  73. package/render/webgl/PolyListRenderer.js +0 -224
  74. package/render/webgl/RenderBuffer.js +0 -244
  75. package/render/webgl/Renderer.js +0 -239
  76. package/render/webgl/SceneRenderer.js +0 -43
  77. package/render/webgl/ShaderProgram.js +0 -348
  78. package/render/webgl/ShadowRenderer.js +0 -6
  79. package/render/webgl/SkyCube.js +0 -15
  80. package/render/webgl/SkySphere.js +0 -14
  81. package/render/webgl/State.js +0 -149
  82. package/render/webgl/TextureRenderer.js +0 -167
  83. package/render/webgl/VertexBuffer.js +0 -128
  84. package/scene/Camera.js +0 -378
  85. package/scene/Chain.js +0 -43
  86. package/scene/ChainJoint.js +0 -55
  87. package/scene/Component.js +0 -146
  88. package/scene/ComponentMap.js +0 -99
  89. package/scene/Drawable.js +0 -130
  90. package/scene/EnvironmentComponent.js +0 -123
  91. package/scene/FindNodeVisitor.js +0 -55
  92. package/scene/LightComponent.js +0 -146
  93. package/scene/MatrixState.js +0 -39
  94. package/scene/Node.js +0 -300
  95. package/scene/NodeVisitor.js +0 -12
  96. package/scene/OrbitCameraController.js +0 -407
  97. package/scene/SmoothOrbitCameraController.js +0 -92
  98. package/scene/Transform.js +0 -74
  99. package/scene/index.js +0 -24
  100. package/shaders/BasicDiffuseColorShader.js +0 -91
  101. package/shaders/BasicPBRLightShader.js +0 -238
  102. package/shaders/DebugRenderShader.js +0 -79
  103. package/shaders/DepthRenderShader.js +0 -69
  104. package/shaders/IrradianceMapCubeShader.js +0 -99
  105. package/shaders/PBRLightIBLShader.js +0 -380
  106. package/shaders/PickSelectionShader.js +0 -75
  107. package/shaders/PresentDebugFramebufferShader.js +0 -90
  108. package/shaders/PresentTextureShader.js +0 -73
  109. package/shaders/SelectionHighlightShader.js +0 -98
  110. package/shaders/ShaderFunction.js +0 -72
  111. package/shaders/SkyCubeShader.js +0 -78
  112. package/shaders/SkySphereShader.js +0 -77
  113. package/shaders/SpecularMapCubeShader.js +0 -145
  114. package/shaders/TextureMergerShader.js +0 -127
  115. package/shaders/webgl_shader_lib.js +0 -187
  116. package/tools/BinaryResourceProvider.js +0 -15
  117. package/tools/ImageResourceProvider.js +0 -65
  118. package/tools/MaterialModifier.js +0 -228
  119. package/tools/Resource.js +0 -177
  120. package/tools/ResourceProvider.js +0 -56
  121. package/tools/TextResourceProvider.js +0 -24
  122. package/tools/TextureCache.js +0 -44
  123. package/tools/TextureResourceDatabase.js +0 -87
  124. package/tools/UserAgent.js +0 -294
  125. package/tools/VideoResourceProvider.js +0 -51
  126. package/tools/WriteStrategy.js +0 -22
  127. package/tools/base64.js +0 -15
  128. package/tools/crypto.js +0 -15
  129. package/tools/endiantess.js +0 -15
  130. package/tools/image.js +0 -15
  131. package/tools/index.js +0 -33
  132. package/tools/processType.js +0 -56
@@ -1,348 +0,0 @@
1
- import Mat4 from "../../math/Mat4";
2
- import Mat3 from "../../math/Mat3";
3
- import { TextureTarget, TextureTargetName } from "../../base/Texture";
4
-
5
- export const ShaderType = {
6
- VERTEX: 0,
7
- FRAGMENT: 1
8
- };
9
-
10
- function destroy() {
11
- delete this._program.__shaderProgram__;
12
- this._gl.deleteProgram(this._program);
13
- this._program = null;
14
- }
15
-
16
- export default class ShaderProgram {
17
- static Create(gl,name,vertexCode,fragmentCode) {
18
- if (!vertexCode || !fragmentCode) {
19
- throw new Error("ShaderProgram.Create(): Invalid vertex or fragment code");
20
- }
21
- const result = new ShaderProgram(gl,name);
22
- if (!Array.isArray(vertexCode)) {
23
- vertexCode = [vertexCode];
24
- }
25
- if (!Array.isArray(fragmentCode)) {
26
- fragmentCode = [fragmentCode];
27
- }
28
- vertexCode.forEach(shaderCode => result.attachVertexSource(shaderCode));
29
- fragmentCode.forEach(shaderCode => result.attachFragmentSource(shaderCode));
30
- result.link();
31
- return result;
32
- }
33
-
34
- static GetShaderProgram(glProgram) {
35
- return glProgram.__shaderProgram__;
36
- }
37
-
38
- static Delete(shaderProgram) {
39
- destroy.apply(shaderProgram);
40
- }
41
-
42
- constructor(gl, name = "") {
43
- this._gl = gl;
44
- this._name = name;
45
- this._program = gl.createProgram();
46
- this._program.__id__ = Symbol(this._program);
47
- this._program.__shaderProgram__ = this;
48
- this._attribLocations = {};
49
- this._uniformLocations = {};
50
- this._failed = false;
51
- }
52
-
53
- get program() {
54
- return this._program;
55
- }
56
-
57
- get name() {
58
- return this._name;
59
- }
60
-
61
- attachSource(src,type) {
62
- if (this._failed) {
63
- return;
64
- }
65
-
66
- const gl = this._gl;
67
- if (type === ShaderType.VERTEX) {
68
- type = gl.VERTEX_SHADER;
69
- }
70
- else if (type === ShaderType.FRAGMENT) {
71
- type = gl.FRAGMENT_SHADER;
72
- }
73
- const shader = gl.createShader(type);
74
- gl.shaderSource(shader, src);
75
- gl.compileShader(shader);
76
- if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
77
- this._failed = true;
78
- const debugCode = src.split(/\r?\n/)
79
- .map((line,i) => `${i + 1} | ${line}`)
80
- .join('\n');
81
- throw new Error(`Error compiling shader: \n${gl.getShaderInfoLog(shader)}
82
- ${debugCode}
83
- `);
84
- }
85
- gl.attachShader(this._program, shader);
86
- }
87
-
88
- attachVertexSource(src) {
89
- this.attachSource(src, ShaderType.VERTEX);
90
- }
91
-
92
- attachFragmentSource(src) {
93
- this.attachSource(src, ShaderType.FRAGMENT);
94
- }
95
-
96
- link() {
97
- if (this._failed) {
98
- return false;
99
- }
100
- const gl = this._gl;
101
- gl.linkProgram(this._program);
102
- if (!gl.getProgramParameter(this._program, gl.LINK_STATUS)) {
103
- throw new Error(`Error linking program: \n${gl.getProgramInfoLog(this._program)}`);
104
- }
105
-
106
- gl.validateProgram(this._program);
107
- if (!gl.getProgramParameter(this._program, gl.VALIDATE_STATUS)) {
108
- throw new Error(`Error validating program:\n${gl.getProgramInfoLog(this._program)}`);
109
- }
110
- }
111
-
112
- useProgram() {
113
- this._gl.useProgram(this._program);
114
- }
115
-
116
- getAttribLocation(name) {
117
- this._attribLocations[name] = this._attribLocations[name] || this._gl.getAttribLocation(this._program, name);
118
- return this._attribLocations[name];
119
- }
120
-
121
- checkInvalidLocations() {
122
- let status = true;
123
- for (const name in this._attribLocations) {
124
- if (this._attribLocations[name] == -1) {
125
- console.warn(`Invalid attrib location for name '${name}'`);
126
- status = false;
127
- }
128
- }
129
- return status;
130
- }
131
-
132
- getUniformLocation(name) {
133
- this._uniformLocations[name] = this._gl.getUniformLocation(this._program, name);
134
- return this._uniformLocations[name];
135
- }
136
-
137
- vertexAttribPointer(name,size,format,normalize,stride,offset) {
138
- const location = this.getAttribLocation(name);
139
- this._gl.vertexAttribPointer(location, size, format, normalize, stride, offset);
140
- }
141
-
142
- enableVertexAttribArray(name) {
143
- const location = this.getAttribLocation(name);
144
- this._gl.enableVertexAttribArray(location);
145
- }
146
-
147
- positionAttribPointer({ name, stride, size = 3, offset = 0, enable = false, bytesPerElement = Float32Array.BYTES_PER_ELEMENT }) {
148
- this.vertexAttribPointer(name, size, this._gl.FLOAT, false, stride * bytesPerElement, offset * bytesPerElement);
149
- if (enable) {
150
- this.enableVertexAttribArray(name);
151
- }
152
- }
153
-
154
- normalAttribPointer({ name, size = 3, stride, offset = 0, enable = false, bytesPerElement = Float32Array.BYTES_PER_ELEMENT }) {
155
- this.vertexAttribPointer(name, size, this._gl.FLOAT, true, stride * bytesPerElement, offset * bytesPerElement);
156
- if (enable) {
157
- this.enableVertexAttribArray(name);
158
- }
159
- }
160
-
161
- tangentAttribPointer({ name, size = 3, stride, offset = 0, enable = false, bytesPerElement = Float32Array.BYTES_PER_ELEMENT }) {
162
- this.vertexAttribPointer(name, size, this._gl.FLOAT, true, stride * bytesPerElement, offset * bytesPerElement);
163
- if (enable) {
164
- this.enableVertexAttribArray(name);
165
- }
166
- }
167
-
168
- texCoordAttribPointer({ name, stride, offset, enable = false, bytesPerElement = Float32Array.BYTES_PER_ELEMENT }) {
169
- this.vertexAttribPointer(name, 2, this._gl.FLOAT, false, stride * bytesPerElement, offset * bytesPerElement);
170
- if (enable) {
171
- this.enableVertexAttribArray(name);
172
- }
173
- }
174
-
175
- colorAttribPointer({ name, size = 4, stride, offset = 0, enable = false, bytesPerElement = Float32Array.BYTES_PER_ELEMENT }) {
176
- this.vertexAttribPointer(name, size, this._gl.FLOAT, false, stride * bytesPerElement, offset * bytesPerElement);
177
- if (enable) {
178
- this.enableVertexAttribArray(name);
179
- }
180
- }
181
-
182
- uniformMatrix2fv(name, transpose, value) {
183
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
184
- this._gl.uniformMatrix2fv(location, transpose, value);
185
- }
186
-
187
- uniformMatrix3fv(name, transpose, value) {
188
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
189
- this._gl.uniformMatrix3fv(location, transpose, value);
190
- }
191
-
192
- uniformMatrix4fv(name, transpose, value) {
193
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
194
- this._gl.uniformMatrix4fv(location, transpose, value);
195
- }
196
-
197
- uniform1f(name, v0) {
198
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
199
- this._gl.uniform1f(location, v0);
200
- }
201
-
202
- uniform1fv(name, value) {
203
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
204
- this._gl.uniform1fv(location, value);
205
- }
206
-
207
- uniform1i(name, v0) {
208
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
209
- this._gl.uniform1i(location, v0);
210
- }
211
-
212
- uniform1iv(name, value) {
213
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
214
- this._gl.uniform1iv(location, value);
215
- }
216
-
217
- uniform2f(name, v0, v1) {
218
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
219
- this._gl.uniform2f(location, v0, v1);
220
- }
221
-
222
- uniform2fv(name, value) {
223
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
224
- this._gl.uniform2fv(location, value);
225
- }
226
-
227
- uniform2i(name, v0, v1) {
228
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
229
- this._gl.uniform2i(location, v0, v1);
230
- }
231
-
232
- uniform2iv(name, value) {
233
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
234
- this._gl.uniform2iv(location, value);
235
- }
236
-
237
- uniform3f(name, v0, v1, v2) {
238
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
239
- this._gl.uniform3f(location, v0, v1, v2);
240
- }
241
-
242
- uniform3fv(name, value) {
243
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
244
- this._gl.uniform3fv(location, value);
245
- }
246
-
247
- uniform3i(name, v0, v1, v2) {
248
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
249
- this._gl.uniform3i(location, v0, v1, v2);
250
- }
251
-
252
- uniform3iv(name, value) {
253
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
254
- this._gl.uniform3iv(location, value);
255
- }
256
-
257
- uniform4f(name, v0, v1, v2, v3) {
258
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
259
- this._gl.uniform4f(location, v0, v1, v2, v3);
260
- }
261
-
262
- uniform4fv(name, value) {
263
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
264
- this._gl.uniform4fv(location, value);
265
- }
266
-
267
- uniform4i(name, v0, v1, v2, v3) {
268
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
269
- this._gl.uniform4i(location, v0, v1, v2, v3);
270
- }
271
-
272
- uniform4iv(name, value) {
273
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
274
- this._gl.uniform4iv(location, value);
275
- }
276
-
277
- // Utility functions
278
- bindAttribs(polyListRenderer, {
279
- position,
280
- normal = null,
281
- tex0 = null,
282
- tex1 = null,
283
- tex2 = null,
284
- color = null,
285
- tangent = null
286
- }) {
287
- this.positionAttribPointer(polyListRenderer.positionAttribParams(position));
288
- if (normal) {
289
- this.normalAttribPointer(polyListRenderer.normalAttribParams(normal));
290
- }
291
- if (tex0) {
292
- this.texCoordAttribPointer(polyListRenderer.texCoord0AttribParams(tex0));
293
- }
294
- if (tex1) {
295
- this.texCoordAttribPointer(polyListRenderer.texCoord1AttribParams(tex1));
296
- }
297
- if (tex2) {
298
- this.texCoordAttribPointer(polyListRenderer.texCoord2AttribParams(tex1));
299
- }
300
- if (tangent) {
301
- this.tangentAttribPointer(polyListRenderer.tangentAttribParams(tangent));
302
- }
303
- if (color) {
304
- this.colorAttribPointer(polyListRenderer.colorAttribParams(color));
305
- }
306
- }
307
-
308
- bindMatrix(uniformName, matrix) {
309
- if (matrix instanceof Mat4) {
310
- this.uniformMatrix4fv(uniformName, false, matrix);
311
- }
312
- else if (matrix instanceof Mat3) {
313
- this.uniformMatrix3fv(uniformName, false, matrix);
314
- }
315
- }
316
-
317
- bindVector(uniformName, vec) {
318
- switch (vec.length) {
319
- case 2:
320
- this.uniform2fv(uniformName, vec);
321
- break;
322
- case 3:
323
- this.uniform3fv(uniformName, vec);
324
- break;
325
- case 4:
326
- this.uniform4fv(uniformName, vec);
327
- break;
328
- default:
329
- throw new Error("ShaderProgram.bindVector(): invalid vector size");
330
- }
331
- }
332
-
333
- bindTexture(uniformName, textureRenderer, textureUnit) {
334
- const gl = this._gl;
335
- const webglTexture = textureRenderer.getApiObject();
336
-
337
- gl.activeTexture(gl.TEXTURE0 + textureUnit);
338
- switch (textureRenderer.texture.target) {
339
- case TextureTarget.TEXTURE_2D:
340
- gl.bindTexture(gl.TEXTURE_2D, webglTexture);
341
- break;
342
- case TextureTarget.CUBE_MAP:
343
- gl.bindTexture(gl.TEXTURE_CUBE_MAP, webglTexture);
344
- break;
345
- }
346
- this.uniform1i(uniformName, textureUnit);
347
- }
348
- }
@@ -1,6 +0,0 @@
1
- import ShadowRenderer from "../ShadowRenderer";
2
-
3
-
4
- export default class WebGLShadowRenderer extends ShadowRenderer {
5
-
6
- }
@@ -1,15 +0,0 @@
1
- import SkyCube from "../SkyCube";
2
-
3
- export default class WebGLSkyCube extends SkyCube {
4
- draw() {
5
- const { state } = this.renderer;
6
- if (!this._renderState) {
7
- throw new Error("SkyCube.draw(): the render state is not updated");
8
- }
9
-
10
- const dm = state.depthMask;
11
- state.depthMask = false;
12
- this._renderState.draw();
13
- state.depthMask = dm;
14
- }
15
- }
@@ -1,14 +0,0 @@
1
- import SkySphere from "../SkySphere";
2
-
3
- export default class WebGLSkySphere extends SkySphere {
4
- draw() {
5
- if (!this._renderState) {
6
- throw new Error("SkySphere.draw(): the render state is not updated");
7
- }
8
-
9
- const dm = this.renderer.state.depthMask;
10
- this.renderer.state.depthMask = false;
11
- this._renderState.draw();
12
- this.renderer.state.depthMask = dm;
13
- }
14
- }
@@ -1,149 +0,0 @@
1
-
2
- import Vec from "../../math/Vec";
3
- import ShaderProgram from "./ShaderProgram";
4
-
5
- export default class State {
6
-
7
- get CW() { return this.gl.CW; }
8
- get CCW() { return this.gl.CCW; }
9
- get FRONT() { return this.gl.FRONT; }
10
- get BACK() { return this.gl.BACK; }
11
- get FRONT_AND_BACK() { return this.gl.FRONT_AND_BACK; }
12
-
13
- constructor(renderer) {
14
- this._renderer = renderer;
15
-
16
- this.cullFaceEnabled = true;
17
- }
18
-
19
- get renderer() {
20
- return this._renderer;
21
- }
22
-
23
- get gl() {
24
- return this._renderer.gl;
25
- }
26
-
27
- get viewport() {
28
- return new Vec(this.gl.getParameter(this.gl.VIEWPORT));
29
- }
30
-
31
- get maxViewportDims() {
32
- return new Vec(this.gl.getParameter(this.gl.MAX_VIEWPORT_DIMS));
33
- }
34
-
35
- set viewport(vp) {
36
- if (vp.length === 2) {
37
- this.gl.viewport(0, 0, vp[0], vp[1]);
38
- }
39
- else if (vp.length >=4) {
40
- this.gl.viewport(vp[0], vp[1], vp[2], vp[3]);
41
- }
42
- else {
43
- throw new Error("Invalid parameter setting viewport");
44
- }
45
- }
46
-
47
- set clearColor(c) {
48
- if (c.length<4) {
49
- throw new Error("Invalid parameter setting clear color");
50
- }
51
-
52
- this.gl.clearColor(c[0],c[1],c[2],c[3]);
53
- }
54
-
55
- get clearColor() {
56
- return new Vec(this.gl.getParameter(this.gl.COLOR_CLEAR_VALUE));
57
- }
58
-
59
- set clearDepth(d) {
60
- this.gl.clearDepth(d);
61
- }
62
-
63
- get clearDepth() {
64
- return gl.getParameter(gl.DEPTH_CLEAR_VALUE);
65
- }
66
-
67
- set clearStencil(s) {
68
- this.gl.clearStencil(s);
69
- }
70
-
71
- get clearStencil() {
72
- return this.gl.getParameter(this.gl.STENCIL_CLEAR_VALUE);
73
- }
74
-
75
- get depthMask() {
76
- return this.gl.getParameter(this.gl.DEPTH_WRITEMASK);
77
- }
78
-
79
- set depthMask(m) {
80
- this.gl.depthMask(m);
81
- }
82
-
83
- set frontFace(ff) {
84
- this.gl.frontFace(ff);
85
- }
86
-
87
- get frontFace() {
88
- return this.gl.getParameter(this.gl.FRONT_FACE);
89
- }
90
-
91
- set cullFace(cf) {
92
- this.gl.cullFace(cf);
93
- }
94
-
95
- get cullFace() {
96
- return this.gl.getParameter(this.gl.CULL_FACE_MODE);
97
- }
98
-
99
- set depthTestEnabled(e) {
100
- e ? this.gl.enable(this.gl.DEPTH_TEST) :
101
- this.gl.disable(this.gl.DEPTH_TEST);
102
- }
103
-
104
- get depthTestEnabled() {
105
- return this.gl.getParameter(this.gl.DEPTH_TEST);
106
- }
107
-
108
- set cullFaceEnabled(e) {
109
- e ? this.gl.enable(this.gl.CULL_FACE) :
110
- this.gl.disable(this.gl.CULL_FACE);
111
- }
112
-
113
- get blendEnabled() {
114
- return this.gl.getParameter(this.gl.BLEND);
115
- }
116
-
117
- set blendEnabled(b) {
118
- b ? this.gl.enable(this.gl.BLEND) :
119
- this.gl.disable(this.gl.BLEND);
120
- }
121
-
122
- get cullFaceEnabled() {
123
- return this.gl.getParameter(this.gl.CULL_FACE);
124
- }
125
-
126
- set shaderProgram(program) {
127
- program.useProgram();
128
- }
129
-
130
- get shaderProgram() {
131
- const glProgram = this.gl.getParameter(this.gl.CURRENT_PROGRAM);
132
- if (glProgram) {
133
- return ShaderProgram.GetShaderProgram(glProgram);
134
- }
135
- else {
136
- return null;
137
- }
138
- }
139
-
140
- clear({ color = true, depth = true, stencil = false} = {}) {
141
- const clearValues = (color ? this.gl.COLOR_BUFFER_BIT : 0) |
142
- (depth ? this.gl.DEPTH_BUFFER_BIT : 0) |
143
- (stencil ? this.gl.STENCIL_BUFFER_BIT : 0);
144
- this.gl.clear(clearValues);
145
- }
146
-
147
-
148
-
149
- }
@@ -1,167 +0,0 @@
1
-
2
-
3
- import TextureRenderer from '../TextureRenderer';
4
- import Texture, {
5
- TextureWrapName,
6
- TextureFilterName,
7
- TextureTargetName,
8
- TextureDataType,
9
- TextureComponentFormat,
10
- TextureRenderTargetAttachment,
11
- TextureTarget
12
- } from '../../base/Texture';
13
- import Vec from '../../math/Vec';
14
- import { generateUUID } from '../../tools/crypto';
15
- import Renderer from '../Renderer';
16
-
17
- const getTarget = (gl, tex) => {
18
- switch (tex.target) {
19
- case TextureTarget.TEXTURE_2D:
20
- return gl.TEXTURE_2D;
21
- case TextureTarget.CUBE_MAP:
22
- return gl.TEXTURE_CUBE_MAP;
23
- default:
24
- throw new Error("Error creating WebGL Texture: invalid target");
25
- }
26
- }
27
-
28
- const getClampMode = (gl, mode) => {
29
- if (mode === 1) {
30
- return gl.CLAMP_TO_EDGE;
31
- }
32
- else {
33
- const name = TextureWrapName[mode];
34
- return gl[name];
35
- }
36
- }
37
-
38
- const getTextureFilter = (gl, filter) => {
39
- const name = TextureFilterName[filter];
40
- return gl[name];
41
- }
42
-
43
- const getDataFormat = (gl,texture) => {
44
- const componentFormat = texture.componentFormat;
45
- switch (componentFormat) {
46
- case TextureComponentFormat.UNSIGNED_BYTE:
47
- return gl.UNSIGNED_BYTE;
48
- case TextureComponentFormat.FLOAT32:
49
- return gl.FLOAT;
50
- default:
51
- throw new Error("Error creating webgl texture: invalid component data format");
52
- }
53
- }
54
-
55
- const bg2eCreateTexture = (gl, textureObject) => {
56
- textureObject._apiObject = gl.createTexture();
57
- textureObject._apiObject._bg2_uuid = generateUUID();
58
- gl._bg2_textures = gl._bg2_textures || {};
59
- let id = textureObject.name || textureObject._apiObject._bg2_uuid;
60
- if (gl._bg2_textures[id] && gl._bg2_textures[id] !== textureObject) {
61
- id = textureObject.name + "_" + textureObject._apiObject._bg2_uuid;
62
- }
63
- gl._bg2_textures[id] = textureObject;
64
- }
65
-
66
- const bg2eDeleteTexture = (gl, textureObject) => {
67
- if (textureObject._apiObject) {
68
- gl.deleteTexture(textureObject._apiObject);
69
- delete gl._bg2_textures[textureObject._apiObject._bg2_uuid];
70
- textureObject._apiObject = null;
71
- textureObject.setUpdated(false);
72
- }
73
- }
74
-
75
- const getWebGLTexture = (gl, textureObject) => {
76
- if (!textureObject.imageData) {
77
- throw new Error("Error loading WebGL texture: image data not loaded");
78
- }
79
-
80
- bg2eDeleteTexture(gl, textureObject);
81
- bg2eCreateTexture(gl, textureObject);
82
-
83
- const target = getTarget(gl, textureObject);
84
- const dataFormat = getDataFormat(gl, textureObject);
85
- gl.bindTexture(target, textureObject._apiObject);
86
-
87
- if (textureObject.dataType ===TextureDataType.RENDER_TARGET) {
88
- const { width, height } = textureObject.size;
89
-
90
- const isDepthTexture = textureObject.renderTargetAttachment === TextureRenderTargetAttachment.DEPTH_ATTACHMENT;
91
- const internalFormat = isDepthTexture ? gl.DEPTH_COMPONENT : gl.RGBA;
92
- let format = isDepthTexture ? gl.DEPTH_COMPONENT : gl.RGBA;
93
- const type = isDepthTexture ? gl.UNSIGNED_SHORT : dataFormat;
94
-
95
- gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
96
- gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
97
- gl.texParameteri(target, gl.TEXTURE_WRAP_S, getClampMode(gl,textureObject.wrapModeX));
98
- gl.texParameteri(target, gl.TEXTURE_WRAP_T, getClampMode(gl,textureObject.wrapModeY));
99
-
100
- if (target === gl.TEXTURE_CUBE_MAP) {
101
- for (let i = 0; i<6; ++i) {
102
- gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, internalFormat, width, height, 0, format, type, null);
103
- }
104
- }
105
- else {
106
- gl.texImage2D(target, 0, internalFormat, width, height, 0, format, type, null);
107
- }
108
-
109
- textureObject.imageData.currentSize = new Vec(textureObject.size);
110
- }
111
- else {
112
-
113
- gl.texImage2D(target, 0, gl.RGBA, gl.RGBA, dataFormat, textureObject._imageData);
114
-
115
- gl.texParameteri(target, gl.TEXTURE_WRAP_S, getClampMode(gl,textureObject.wrapModeX));
116
- gl.texParameteri(target, gl.TEXTURE_WRAP_T, getClampMode(gl,textureObject.wrapModeY));
117
-
118
- gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, getTextureFilter(gl, textureObject.magFilter));
119
- gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, getTextureFilter(gl, textureObject.minFilter));
120
-
121
- if (textureObject.mipmapRequired) {
122
- gl.generateMipmap(target);
123
- }
124
- }
125
- }
126
-
127
- export default class WebGLTextureRenderer extends TextureRenderer {
128
- static ListTextures(glOrRenderer) {
129
- if (glOrRenderer instanceof Renderer) {
130
- glOrRenderer = glOrRenderer.gl;
131
- }
132
- return glOrRenderer._bg2_textures || {};
133
- }
134
-
135
- getApiObject() {
136
- if (this.texture.dirty) {
137
- try {
138
- getWebGLTexture(this.renderer.gl, this.texture);
139
- this.texture.setUpdated();
140
- }
141
- catch (err) {
142
- console.warn(err.message);
143
- }
144
- }
145
- return this.texture._apiObject;
146
- }
147
-
148
- destroy() {
149
- const { gl } = this.renderer;
150
- bg2eDeleteTexture(gl, this.texture);
151
- }
152
-
153
- ///// webgl specific functions
154
- // Returns the webgl target (TEXTURE_2D, TEXTURE_3D...)
155
- get target() {
156
- return this.renderer.gl[TextureTargetName[this.texture.target]];
157
- }
158
-
159
- activeTexture(index = 0) {
160
- const { gl } = this.renderer;
161
- gl.activeTexture(gl.TEXTURE0 + index);
162
- }
163
-
164
- bindTexture() {
165
- this.renderer.gl.bindTexture(this.target, this.getApiObject());
166
- }
167
- }