bg2e-js 2.0.1 → 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 (135) 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.d.ts +0 -37
  5. package/app/AppController.js +0 -32
  6. package/app/Canvas.d.ts +0 -42
  7. package/app/Canvas.js +0 -98
  8. package/app/EventBase.js +0 -8
  9. package/app/KeyboardEvent.js +0 -51
  10. package/app/MainLoop.d.ts +0 -245
  11. package/app/MainLoop.js +0 -251
  12. package/app/MouseEvent.js +0 -77
  13. package/app/TouchEvent.js +0 -15
  14. package/base/Color.js +0 -131
  15. package/base/Environment.js +0 -78
  16. package/base/Light.js +0 -176
  17. package/base/Material.js +0 -619
  18. package/base/PolyList.js +0 -336
  19. package/base/Texture.js +0 -545
  20. package/db/Bg2LoaderPlugin.js +0 -113
  21. package/db/DBPluginApi.js +0 -40
  22. package/db/Loader.js +0 -91
  23. package/db/LoaderPlugin.js +0 -26
  24. package/db/MtlParser.js +0 -7
  25. package/db/ObjLoaderPlugin.js +0 -51
  26. package/db/ObjParser.js +0 -233
  27. package/db/ObjWriterPlugin.js +0 -18
  28. package/db/VitscnjLoaderPlugin.js +0 -87
  29. package/db/Writer.js +0 -49
  30. package/db/WriterPlugin.js +0 -20
  31. package/debug/DebugRenderer.js +0 -138
  32. package/debug/WebGLTextureViewer.js +0 -67
  33. package/manipulation/SelectionBuffer.js +0 -65
  34. package/manipulation/SelectionHighlight.js +0 -69
  35. package/manipulation/SelectionIdAssignVisitor.js +0 -86
  36. package/manipulation/SelectionManager.js +0 -134
  37. package/manipulation/SelectionMode.js +0 -6
  38. package/math/Mat3.js +0 -248
  39. package/math/Mat4.js +0 -694
  40. package/math/MatrixStrategy.js +0 -23
  41. package/math/Quat.js +0 -60
  42. package/math/Vec.js +0 -728
  43. package/math/constants.js +0 -44
  44. package/math/functions.js +0 -104
  45. package/math/index.js +0 -74
  46. package/phsics/joint.js +0 -124
  47. package/primitives/arrow.js +0 -58
  48. package/primitives/cone.js +0 -137
  49. package/primitives/cube.js +0 -59
  50. package/primitives/cylinder.js +0 -215
  51. package/primitives/index.js +0 -13
  52. package/primitives/plane.js +0 -31
  53. package/primitives/sphere.js +0 -808
  54. package/render/BRDFIntegrationMap.js +0 -4
  55. package/render/Environment.js +0 -105
  56. package/render/EnvironmentRenderer.js +0 -12
  57. package/render/FrameBuffer.js +0 -26
  58. package/render/MaterialRenderer.js +0 -28
  59. package/render/Pipeline.js +0 -83
  60. package/render/PolyListRenderer.js +0 -42
  61. package/render/RenderBuffer.js +0 -189
  62. package/render/RenderQueue.js +0 -162
  63. package/render/RenderState.js +0 -82
  64. package/render/Renderer.js +0 -202
  65. package/render/SceneAppController.js +0 -208
  66. package/render/SceneRenderer.js +0 -310
  67. package/render/Shader.js +0 -21
  68. package/render/ShadowRenderer.js +0 -159
  69. package/render/SkyCube.js +0 -77
  70. package/render/SkySphere.js +0 -94
  71. package/render/TextureMergerRenderer.js +0 -58
  72. package/render/TextureRenderer.js +0 -29
  73. package/render/webgl/FrameBuffer.js +0 -9
  74. package/render/webgl/MaterialRenderer.js +0 -99
  75. package/render/webgl/Pipeline.js +0 -82
  76. package/render/webgl/PolyListRenderer.js +0 -224
  77. package/render/webgl/RenderBuffer.js +0 -244
  78. package/render/webgl/Renderer.js +0 -239
  79. package/render/webgl/SceneRenderer.js +0 -43
  80. package/render/webgl/ShaderProgram.js +0 -350
  81. package/render/webgl/ShadowRenderer.js +0 -6
  82. package/render/webgl/SkyCube.js +0 -15
  83. package/render/webgl/SkySphere.js +0 -14
  84. package/render/webgl/State.js +0 -149
  85. package/render/webgl/TextureRenderer.js +0 -167
  86. package/render/webgl/VertexBuffer.js +0 -128
  87. package/scene/Camera.js +0 -378
  88. package/scene/Chain.js +0 -43
  89. package/scene/ChainJoint.js +0 -55
  90. package/scene/Component.js +0 -146
  91. package/scene/ComponentMap.js +0 -99
  92. package/scene/Drawable.js +0 -130
  93. package/scene/EnvironmentComponent.js +0 -123
  94. package/scene/FindNodeVisitor.js +0 -55
  95. package/scene/LightComponent.js +0 -146
  96. package/scene/MatrixState.js +0 -39
  97. package/scene/Node.js +0 -300
  98. package/scene/NodeVisitor.js +0 -12
  99. package/scene/OrbitCameraController.js +0 -407
  100. package/scene/SmoothOrbitCameraController.js +0 -92
  101. package/scene/Transform.js +0 -74
  102. package/scene/index.js +0 -24
  103. package/shaders/BasicDiffuseColorShader.js +0 -91
  104. package/shaders/BasicPBRLightShader.js +0 -238
  105. package/shaders/DebugRenderShader.js +0 -79
  106. package/shaders/DepthRenderShader.js +0 -69
  107. package/shaders/IrradianceMapCubeShader.js +0 -99
  108. package/shaders/PBRLightIBLShader.js +0 -380
  109. package/shaders/PickSelectionShader.js +0 -75
  110. package/shaders/PresentDebugFramebufferShader.js +0 -90
  111. package/shaders/PresentTextureShader.js +0 -73
  112. package/shaders/SelectionHighlightShader.js +0 -98
  113. package/shaders/ShaderFunction.js +0 -72
  114. package/shaders/SkyCubeShader.js +0 -78
  115. package/shaders/SkySphereShader.js +0 -77
  116. package/shaders/SpecularMapCubeShader.js +0 -145
  117. package/shaders/TextureMergerShader.js +0 -127
  118. package/shaders/webgl_shader_lib.js +0 -187
  119. package/tools/BinaryResourceProvider.js +0 -15
  120. package/tools/ImageResourceProvider.js +0 -65
  121. package/tools/MaterialModifier.js +0 -228
  122. package/tools/Resource.js +0 -177
  123. package/tools/ResourceProvider.js +0 -56
  124. package/tools/TextResourceProvider.js +0 -24
  125. package/tools/TextureCache.js +0 -44
  126. package/tools/TextureResourceDatabase.js +0 -87
  127. package/tools/UserAgent.js +0 -294
  128. package/tools/VideoResourceProvider.js +0 -51
  129. package/tools/WriteStrategy.js +0 -22
  130. package/tools/base64.js +0 -15
  131. package/tools/crypto.js +0 -15
  132. package/tools/endiantess.js +0 -15
  133. package/tools/image.js +0 -15
  134. package/tools/index.js +0 -33
  135. package/tools/processType.js +0 -56
@@ -1,350 +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
-
107
- useProgram() {
108
- this._gl.useProgram(this._program);
109
- }
110
-
111
- getAttribLocation(name) {
112
- this._attribLocations[name] = this._attribLocations[name] || this._gl.getAttribLocation(this._program, name);
113
- return this._attribLocations[name];
114
- }
115
-
116
- checkInvalidLocations() {
117
- let status = true;
118
- for (const name in this._attribLocations) {
119
- if (this._attribLocations[name] == -1) {
120
- console.warn(`Invalid attrib location for name '${name}'`);
121
- status = false;
122
- }
123
- }
124
- return status;
125
- }
126
-
127
- getUniformLocation(name) {
128
- this._uniformLocations[name] = this._gl.getUniformLocation(this._program, name);
129
- return this._uniformLocations[name];
130
- }
131
-
132
- vertexAttribPointer(name,size,format,normalize,stride,offset) {
133
- const location = this.getAttribLocation(name);
134
- this._gl.vertexAttribPointer(location, size, format, normalize, stride, offset);
135
- }
136
-
137
- enableVertexAttribArray(name) {
138
- const location = this.getAttribLocation(name);
139
- this._gl.enableVertexAttribArray(location);
140
- }
141
-
142
- positionAttribPointer({ name, stride, size = 3, offset = 0, enable = false, bytesPerElement = Float32Array.BYTES_PER_ELEMENT }) {
143
- this.vertexAttribPointer(name, size, this._gl.FLOAT, false, stride * bytesPerElement, offset * bytesPerElement);
144
- if (enable) {
145
- this.enableVertexAttribArray(name);
146
- }
147
- }
148
-
149
- normalAttribPointer({ name, size = 3, stride, offset = 0, enable = false, bytesPerElement = Float32Array.BYTES_PER_ELEMENT }) {
150
- this.vertexAttribPointer(name, size, this._gl.FLOAT, true, stride * bytesPerElement, offset * bytesPerElement);
151
- if (enable) {
152
- this.enableVertexAttribArray(name);
153
- }
154
- }
155
-
156
- tangentAttribPointer({ name, size = 3, stride, offset = 0, enable = false, bytesPerElement = Float32Array.BYTES_PER_ELEMENT }) {
157
- this.vertexAttribPointer(name, size, this._gl.FLOAT, true, stride * bytesPerElement, offset * bytesPerElement);
158
- if (enable) {
159
- this.enableVertexAttribArray(name);
160
- }
161
- }
162
-
163
- texCoordAttribPointer({ name, stride, offset, enable = false, bytesPerElement = Float32Array.BYTES_PER_ELEMENT }) {
164
- this.vertexAttribPointer(name, 2, this._gl.FLOAT, false, stride * bytesPerElement, offset * bytesPerElement);
165
- if (enable) {
166
- this.enableVertexAttribArray(name);
167
- }
168
- }
169
-
170
- colorAttribPointer({ name, size = 4, stride, offset = 0, enable = false, bytesPerElement = Float32Array.BYTES_PER_ELEMENT }) {
171
- this.vertexAttribPointer(name, size, this._gl.FLOAT, false, stride * bytesPerElement, offset * bytesPerElement);
172
- if (enable) {
173
- this.enableVertexAttribArray(name);
174
- }
175
- }
176
-
177
- uniformMatrix2fv(name, transpose, value) {
178
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
179
- this._gl.uniformMatrix2fv(location, transpose, value);
180
- }
181
-
182
- uniformMatrix3fv(name, transpose, value) {
183
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
184
- this._gl.uniformMatrix3fv(location, transpose, value);
185
- }
186
-
187
- uniformMatrix4fv(name, transpose, value) {
188
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
189
- this._gl.uniformMatrix4fv(location, transpose, value);
190
- }
191
-
192
- uniform1f(name, v0) {
193
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
194
- this._gl.uniform1f(location, v0);
195
- }
196
-
197
- uniform1fv(name, value) {
198
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
199
- this._gl.uniform1fv(location, value);
200
- }
201
-
202
- uniform1i(name, v0) {
203
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
204
- this._gl.uniform1i(location, v0);
205
- }
206
-
207
- uniform1iv(name, value) {
208
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
209
- this._gl.uniform1iv(location, value);
210
- }
211
-
212
- uniform2f(name, v0, v1) {
213
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
214
- this._gl.uniform2f(location, v0, v1);
215
- }
216
-
217
- uniform2fv(name, value) {
218
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
219
- this._gl.uniform2fv(location, value);
220
- }
221
-
222
- uniform2i(name, v0, v1) {
223
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
224
- this._gl.uniform2i(location, v0, v1);
225
- }
226
-
227
- uniform2iv(name, value) {
228
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
229
- this._gl.uniform2iv(location, value);
230
- }
231
-
232
- uniform3f(name, v0, v1, v2) {
233
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
234
- this._gl.uniform3f(location, v0, v1, v2);
235
- }
236
-
237
- uniform3fv(name, value) {
238
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
239
- this._gl.uniform3fv(location, value);
240
- }
241
-
242
- uniform3i(name, v0, v1, v2) {
243
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
244
- this._gl.uniform3i(location, v0, v1, v2);
245
- }
246
-
247
- uniform3iv(name, value) {
248
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
249
- this._gl.uniform3iv(location, value);
250
- }
251
-
252
- uniform4f(name, v0, v1, v2, v3) {
253
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
254
- this._gl.uniform4f(location, v0, v1, v2, v3);
255
- }
256
-
257
- uniform4fv(name, value) {
258
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
259
- this._gl.uniform4fv(location, value);
260
- }
261
-
262
- uniform4i(name, v0, v1, v2, v3) {
263
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
264
- this._gl.uniform4i(location, v0, v1, v2, v3);
265
- }
266
-
267
- uniform4iv(name, value) {
268
- const location = this._uniformLocations[name] || this.getUniformLocation(name);
269
- this._gl.uniform4iv(location, value);
270
- }
271
-
272
- // Utility functions
273
- bindAttribs(polyListRenderer, {
274
- position,
275
- normal = null,
276
- tex0 = null,
277
- tex1 = null,
278
- tex2 = null,
279
- color = null,
280
- tangent = null
281
- }) {
282
- this.positionAttribPointer(polyListRenderer.positionAttribParams(position));
283
- if (normal) {
284
- this.normalAttribPointer(polyListRenderer.normalAttribParams(normal));
285
- }
286
- if (tex0) {
287
- this.texCoordAttribPointer(polyListRenderer.texCoord0AttribParams(tex0));
288
- }
289
- if (tex1) {
290
- this.texCoordAttribPointer(polyListRenderer.texCoord1AttribParams(tex1));
291
- }
292
- if (tex2) {
293
- this.texCoordAttribPointer(polyListRenderer.texCoord2AttribParams(tex1));
294
- }
295
- if (tangent) {
296
- this.tangentAttribPointer(polyListRenderer.tangentAttribParams(tangent));
297
- }
298
- if (color) {
299
- this.colorAttribPointer(polyListRenderer.colorAttribParams(color));
300
- }
301
- }
302
-
303
- bindMatrix(uniformName, matrix) {
304
- if (matrix instanceof Mat4) {
305
- this.uniformMatrix4fv(uniformName, false, matrix);
306
- }
307
- else if (matrix instanceof Mat3) {
308
- this.uniformMatrix3fv(uniformName, false, matrix);
309
- }
310
- }
311
-
312
- bindVector(uniformName, vec) {
313
- switch (vec.length) {
314
- case 2:
315
- this.uniform2fv(uniformName, vec);
316
- break;
317
- case 3:
318
- this.uniform3fv(uniformName, vec);
319
- break;
320
- case 4:
321
- this.uniform4fv(uniformName, vec);
322
- break;
323
- default:
324
- throw new Error("ShaderProgram.bindVector(): invalid vector size");
325
- }
326
- }
327
-
328
- bindTexture(uniformName, textureRenderer, textureUnit) {
329
- const gl = this._gl;
330
- const webglTexture = textureRenderer.getApiObject();
331
-
332
- gl.activeTexture(gl.TEXTURE0 + textureUnit);
333
- switch (textureRenderer.texture.target) {
334
- case TextureTarget.TEXTURE_2D:
335
- gl.bindTexture(gl.TEXTURE_2D, webglTexture);
336
- break;
337
- case TextureTarget.CUBE_MAP:
338
- gl.bindTexture(gl.TEXTURE_CUBE_MAP, webglTexture);
339
- break;
340
- }
341
- this.uniform1i(uniformName, textureUnit);
342
- }
343
-
344
- validate() {
345
- gl.validateProgram(this._program);
346
- if (!gl.getProgramParameter(this._program, gl.VALIDATE_STATUS)) {
347
- throw new Error(`Error validating program:\n${gl.getProgramInfoLog(this._program)}`);
348
- }
349
- }
350
- }
@@ -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
- }