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.
- package/dist/bg2e-js.js +11001 -0
- package/dist/bg2e-js.js.map +1 -0
- package/package.json +17 -6
- package/app/AppController.d.ts +0 -37
- package/app/AppController.js +0 -32
- package/app/Canvas.d.ts +0 -42
- package/app/Canvas.js +0 -98
- package/app/EventBase.js +0 -8
- package/app/KeyboardEvent.js +0 -51
- package/app/MainLoop.d.ts +0 -245
- package/app/MainLoop.js +0 -251
- package/app/MouseEvent.js +0 -77
- package/app/TouchEvent.js +0 -15
- package/base/Color.js +0 -131
- package/base/Environment.js +0 -78
- package/base/Light.js +0 -176
- package/base/Material.js +0 -619
- package/base/PolyList.js +0 -336
- package/base/Texture.js +0 -545
- package/db/Bg2LoaderPlugin.js +0 -113
- package/db/DBPluginApi.js +0 -40
- package/db/Loader.js +0 -91
- package/db/LoaderPlugin.js +0 -26
- package/db/MtlParser.js +0 -7
- package/db/ObjLoaderPlugin.js +0 -51
- package/db/ObjParser.js +0 -233
- package/db/ObjWriterPlugin.js +0 -18
- package/db/VitscnjLoaderPlugin.js +0 -87
- package/db/Writer.js +0 -49
- package/db/WriterPlugin.js +0 -20
- package/debug/DebugRenderer.js +0 -138
- package/debug/WebGLTextureViewer.js +0 -67
- package/manipulation/SelectionBuffer.js +0 -65
- package/manipulation/SelectionHighlight.js +0 -69
- package/manipulation/SelectionIdAssignVisitor.js +0 -86
- package/manipulation/SelectionManager.js +0 -134
- package/manipulation/SelectionMode.js +0 -6
- package/math/Mat3.js +0 -248
- package/math/Mat4.js +0 -694
- package/math/MatrixStrategy.js +0 -23
- package/math/Quat.js +0 -60
- package/math/Vec.js +0 -728
- package/math/constants.js +0 -44
- package/math/functions.js +0 -104
- package/math/index.js +0 -74
- package/phsics/joint.js +0 -124
- package/primitives/arrow.js +0 -58
- package/primitives/cone.js +0 -137
- package/primitives/cube.js +0 -59
- package/primitives/cylinder.js +0 -215
- package/primitives/index.js +0 -13
- package/primitives/plane.js +0 -31
- package/primitives/sphere.js +0 -808
- package/render/BRDFIntegrationMap.js +0 -4
- package/render/Environment.js +0 -105
- package/render/EnvironmentRenderer.js +0 -12
- package/render/FrameBuffer.js +0 -26
- package/render/MaterialRenderer.js +0 -28
- package/render/Pipeline.js +0 -83
- package/render/PolyListRenderer.js +0 -42
- package/render/RenderBuffer.js +0 -189
- package/render/RenderQueue.js +0 -162
- package/render/RenderState.js +0 -82
- package/render/Renderer.js +0 -202
- package/render/SceneAppController.js +0 -208
- package/render/SceneRenderer.js +0 -310
- package/render/Shader.js +0 -21
- package/render/ShadowRenderer.js +0 -159
- package/render/SkyCube.js +0 -77
- package/render/SkySphere.js +0 -94
- package/render/TextureMergerRenderer.js +0 -58
- package/render/TextureRenderer.js +0 -29
- package/render/webgl/FrameBuffer.js +0 -9
- package/render/webgl/MaterialRenderer.js +0 -99
- package/render/webgl/Pipeline.js +0 -82
- package/render/webgl/PolyListRenderer.js +0 -224
- package/render/webgl/RenderBuffer.js +0 -244
- package/render/webgl/Renderer.js +0 -239
- package/render/webgl/SceneRenderer.js +0 -43
- package/render/webgl/ShaderProgram.js +0 -350
- package/render/webgl/ShadowRenderer.js +0 -6
- package/render/webgl/SkyCube.js +0 -15
- package/render/webgl/SkySphere.js +0 -14
- package/render/webgl/State.js +0 -149
- package/render/webgl/TextureRenderer.js +0 -167
- package/render/webgl/VertexBuffer.js +0 -128
- package/scene/Camera.js +0 -378
- package/scene/Chain.js +0 -43
- package/scene/ChainJoint.js +0 -55
- package/scene/Component.js +0 -146
- package/scene/ComponentMap.js +0 -99
- package/scene/Drawable.js +0 -130
- package/scene/EnvironmentComponent.js +0 -123
- package/scene/FindNodeVisitor.js +0 -55
- package/scene/LightComponent.js +0 -146
- package/scene/MatrixState.js +0 -39
- package/scene/Node.js +0 -300
- package/scene/NodeVisitor.js +0 -12
- package/scene/OrbitCameraController.js +0 -407
- package/scene/SmoothOrbitCameraController.js +0 -92
- package/scene/Transform.js +0 -74
- package/scene/index.js +0 -24
- package/shaders/BasicDiffuseColorShader.js +0 -91
- package/shaders/BasicPBRLightShader.js +0 -238
- package/shaders/DebugRenderShader.js +0 -79
- package/shaders/DepthRenderShader.js +0 -69
- package/shaders/IrradianceMapCubeShader.js +0 -99
- package/shaders/PBRLightIBLShader.js +0 -380
- package/shaders/PickSelectionShader.js +0 -75
- package/shaders/PresentDebugFramebufferShader.js +0 -90
- package/shaders/PresentTextureShader.js +0 -73
- package/shaders/SelectionHighlightShader.js +0 -98
- package/shaders/ShaderFunction.js +0 -72
- package/shaders/SkyCubeShader.js +0 -78
- package/shaders/SkySphereShader.js +0 -77
- package/shaders/SpecularMapCubeShader.js +0 -145
- package/shaders/TextureMergerShader.js +0 -127
- package/shaders/webgl_shader_lib.js +0 -187
- package/tools/BinaryResourceProvider.js +0 -15
- package/tools/ImageResourceProvider.js +0 -65
- package/tools/MaterialModifier.js +0 -228
- package/tools/Resource.js +0 -177
- package/tools/ResourceProvider.js +0 -56
- package/tools/TextResourceProvider.js +0 -24
- package/tools/TextureCache.js +0 -44
- package/tools/TextureResourceDatabase.js +0 -87
- package/tools/UserAgent.js +0 -294
- package/tools/VideoResourceProvider.js +0 -51
- package/tools/WriteStrategy.js +0 -22
- package/tools/base64.js +0 -15
- package/tools/crypto.js +0 -15
- package/tools/endiantess.js +0 -15
- package/tools/image.js +0 -15
- package/tools/index.js +0 -33
- 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
|
-
}
|
package/render/webgl/SkyCube.js
DELETED
|
@@ -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
|
-
}
|
package/render/webgl/State.js
DELETED
|
@@ -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
|
-
}
|