bg2e-js 2.3.12 → 2.3.13
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 +350 -326
- package/dist/bg2e-js.js.map +1 -1
- package/package.json +56 -56
- package/src/app/AppController.ts +39 -39
- package/src/app/Bg2KeyboardEvent.ts +54 -54
- package/src/app/Bg2MouseEvent.ts +82 -82
- package/src/app/Bg2TouchEvent.ts +18 -18
- package/src/app/Canvas.ts +108 -108
- package/src/app/EventBase.ts +10 -10
- package/src/app/MainLoop.ts +273 -273
- package/src/app/index.ts +24 -24
- package/src/base/Color.ts +134 -134
- package/src/base/Environment.ts +183 -183
- package/src/base/Light.ts +192 -192
- package/src/base/Material.ts +620 -620
- package/src/base/PolyList.ts +365 -365
- package/src/base/Texture.ts +620 -620
- package/src/base/index.ts +81 -81
- package/src/db/Bg2LoaderPlugin.ts +143 -143
- package/src/db/DBPluginApi.ts +48 -48
- package/src/db/Loader.ts +116 -116
- package/src/db/LoaderPlugin.ts +34 -34
- package/src/db/MtlParser.ts +7 -7
- package/src/db/ObjLoaderPlugin.ts +54 -54
- package/src/db/ObjParser.ts +252 -252
- package/src/db/ObjWriterPlugin.ts +18 -18
- package/src/db/VitscnjLoaderPlugin.ts +112 -112
- package/src/db/Writer.ts +52 -52
- package/src/db/WriterPlugin.ts +22 -22
- package/src/db/index.ts +44 -44
- package/src/debug/DebugRenderer.ts +173 -173
- package/src/debug/WebGLTextureViewer.ts +75 -75
- package/src/debug/index.ts +6 -6
- package/src/index.html +11 -11
- package/src/index.ts +33 -33
- package/src/manipulation/SelectionBuffer.ts +81 -81
- package/src/manipulation/SelectionHighlight.ts +105 -84
- package/src/manipulation/SelectionIdAssignVisitor.ts +96 -96
- package/src/manipulation/SelectionManager.ts +196 -196
- package/src/manipulation/SelectionMode.ts +6 -6
- package/src/math/Mat3.ts +259 -259
- package/src/math/Mat4.ts +710 -710
- package/src/math/MatrixStrategy.ts +25 -25
- package/src/math/Quat.ts +65 -65
- package/src/math/Vec.ts +753 -753
- package/src/math/constants.ts +46 -46
- package/src/math/functions.ts +103 -103
- package/src/math/index.ts +74 -74
- package/src/phsics/joint.ts +137 -137
- package/src/primitives/arrow.ts +57 -57
- package/src/primitives/cone.ts +138 -138
- package/src/primitives/cube.ts +60 -60
- package/src/primitives/cylinder.ts +216 -216
- package/src/primitives/index.ts +13 -13
- package/src/primitives/plane.ts +31 -31
- package/src/primitives/sphere.ts +809 -809
- package/src/react/useBg2e.ts +69 -69
- package/src/render/BRDFIntegrationMap.ts +4 -4
- package/src/render/Environment.ts +135 -135
- package/src/render/FrameBuffer.ts +35 -35
- package/src/render/MaterialRenderer.ts +34 -34
- package/src/render/Pipeline.ts +108 -108
- package/src/render/PolyListRenderer.ts +47 -47
- package/src/render/RenderBuffer.ts +197 -197
- package/src/render/RenderQueue.ts +198 -198
- package/src/render/RenderState.ts +116 -116
- package/src/render/Renderer.ts +248 -248
- package/src/render/SceneAppController.ts +250 -250
- package/src/render/SceneRenderer.ts +387 -387
- package/src/render/Shader.ts +32 -32
- package/src/render/ShadowRenderer.ts +176 -176
- package/src/render/SkyCube.ts +105 -105
- package/src/render/SkySphere.ts +117 -117
- package/src/render/TextureMergerRenderer.ts +70 -70
- package/src/render/TextureRenderer.ts +34 -34
- package/src/render/index.ts +67 -67
- package/src/render/webgl/FrameBuffer.ts +9 -9
- package/src/render/webgl/MaterialRenderer.ts +112 -112
- package/src/render/webgl/Pipeline.ts +88 -88
- package/src/render/webgl/PolyListRenderer.ts +260 -260
- package/src/render/webgl/RenderBuffer.ts +226 -226
- package/src/render/webgl/Renderer.ts +262 -262
- package/src/render/webgl/SceneRenderer.ts +67 -67
- package/src/render/webgl/ShaderProgram.ts +424 -424
- package/src/render/webgl/ShadowRenderer.ts +6 -6
- package/src/render/webgl/SkyCube.ts +15 -15
- package/src/render/webgl/SkySphere.ts +15 -15
- package/src/render/webgl/State.ts +152 -152
- package/src/render/webgl/TextureRenderer.ts +167 -167
- package/src/render/webgl/VertexBuffer.ts +137 -137
- package/src/render/webgl/index.ts +35 -35
- package/src/scene/Camera.ts +458 -458
- package/src/scene/Chain.ts +44 -44
- package/src/scene/ChainJoint.ts +58 -58
- package/src/scene/Component.ts +177 -177
- package/src/scene/ComponentMap.ts +106 -106
- package/src/scene/Drawable.ts +154 -154
- package/src/scene/EnvironmentComponent.ts +141 -141
- package/src/scene/FindNodeVisitor.ts +59 -59
- package/src/scene/LightComponent.ts +154 -154
- package/src/scene/MatrixState.ts +46 -46
- package/src/scene/Node.ts +328 -328
- package/src/scene/NodeVisitor.ts +15 -15
- package/src/scene/OrbitCameraController.ts +450 -450
- package/src/scene/SmoothOrbitCameraController.ts +99 -99
- package/src/scene/Transform.ts +73 -73
- package/src/scene/index.ts +60 -60
- package/src/shaders/BasicDiffuseColorShader.ts +111 -111
- package/src/shaders/BasicPBRLightShader.ts +276 -276
- package/src/shaders/DebugRenderShader.ts +97 -97
- package/src/shaders/DepthRenderShader.ts +127 -127
- package/src/shaders/IrradianceMapCubeShader.ts +115 -115
- package/src/shaders/PBRLightIBLShader.ts +486 -486
- package/src/shaders/PickSelectionShader.ts +101 -101
- package/src/shaders/PresentDebugFramebufferShader.ts +118 -118
- package/src/shaders/PresentTextureShader.ts +99 -99
- package/src/shaders/SelectionHighlightShader.ts +143 -127
- package/src/shaders/ShaderFunction.ts +318 -318
- package/src/shaders/SkyCubeShader.ts +93 -93
- package/src/shaders/SkySphereShader.ts +102 -102
- package/src/shaders/SpecularMapCubeShader.ts +164 -164
- package/src/shaders/TextureMergerShader.ts +171 -171
- package/src/shaders/index.ts +36 -36
- package/src/shaders/webgl/color_correction.glsl +47 -47
- package/src/shaders/webgl/constants.glsl +6 -6
- package/src/shaders/webgl/index.ts +70 -70
- package/src/shaders/webgl/normal_map.glsl +9 -9
- package/src/shaders/webgl/pbr.glsl +173 -173
- package/src/shaders/webgl/uniforms.glsl +91 -91
- package/src/shaders/webgl_shader_lib.ts +213 -213
- package/src/tools/BinaryResourceProvider.ts +14 -14
- package/src/tools/ImageResourceProvider.ts +66 -66
- package/src/tools/MaterialModifier.ts +446 -446
- package/src/tools/Resource.ts +203 -203
- package/src/tools/ResourceProvider.ts +69 -69
- package/src/tools/TextResourceProvider.ts +24 -24
- package/src/tools/TextureCache.ts +51 -51
- package/src/tools/TextureResourceDatabase.ts +100 -100
- package/src/tools/UserAgent.ts +362 -362
- package/src/tools/VideoResourceProvider.ts +50 -50
- package/src/tools/WriteStrategy.ts +22 -22
- package/src/tools/base64.ts +11 -11
- package/src/tools/crypto.ts +19 -19
- package/src/tools/endiantess.ts +13 -13
- package/src/tools/image.ts +18 -18
- package/src/tools/index.ts +41 -41
- package/src/tools/processType.ts +39 -39
- package/src/vite-env.d.ts +12 -12
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
import Shader from "../render/Shader";
|
|
2
|
-
import ShaderProgram from "../render/webgl/ShaderProgram";
|
|
3
|
-
import PolyListRenderer from '../render/PolyListRenderer';
|
|
4
|
-
import MaterialRenderer from '../render/MaterialRenderer';
|
|
5
|
-
import Mat4 from "../math/Mat4";
|
|
6
|
-
import Renderer from "../render/Renderer";
|
|
7
|
-
import WebGLRenderer from "../render/webgl/Renderer";
|
|
8
|
-
import WebGLPolyListRenderer from "../render/webgl/PolyListRenderer";
|
|
9
|
-
|
|
10
|
-
const g_code = {
|
|
11
|
-
webgl: {
|
|
12
|
-
vertex: `precision mediump float;
|
|
13
|
-
|
|
14
|
-
attribute vec3 vertPosition;
|
|
15
|
-
|
|
16
|
-
uniform mat4 mWorld;
|
|
17
|
-
uniform mat4 mView;
|
|
18
|
-
uniform mat4 mProj;
|
|
19
|
-
|
|
20
|
-
void main() {
|
|
21
|
-
gl_Position = mProj * mView * mWorld * vec4(vertPosition, 1.0);
|
|
22
|
-
}`,
|
|
23
|
-
|
|
24
|
-
fragment: `precision mediump float;
|
|
25
|
-
|
|
26
|
-
uniform vec4 uPickColor;
|
|
27
|
-
uniform bool uSelected;
|
|
28
|
-
|
|
29
|
-
void main() {
|
|
30
|
-
if (uSelected) {
|
|
31
|
-
gl_FragColor = vec4(uPickColor);
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
discard;
|
|
35
|
-
}
|
|
36
|
-
}`
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export default class PickSelectionShader extends Shader {
|
|
41
|
-
protected _program: ShaderProgram | null = null;
|
|
42
|
-
protected _forceDraw: boolean = false;
|
|
43
|
-
|
|
44
|
-
constructor(renderer: Renderer) {
|
|
45
|
-
super(renderer);
|
|
46
|
-
|
|
47
|
-
if (renderer.typeId !== "WebGL") {
|
|
48
|
-
throw Error("PickSelectionShader is only compatible with WebGL renderer");
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
async load() {
|
|
53
|
-
const { gl } = (this.renderer as WebGLRenderer);
|
|
54
|
-
|
|
55
|
-
this._program = new ShaderProgram(gl, "PickSelectionShader");
|
|
56
|
-
this._program.attachVertexSource(g_code.webgl.vertex);
|
|
57
|
-
this._program.attachFragmentSource(g_code.webgl.fragment);
|
|
58
|
-
this._program.link();
|
|
59
|
-
|
|
60
|
-
this._forceDraw = true;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
set forceDraw(d: boolean) {
|
|
64
|
-
this._forceDraw = d;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
get forceDraw() {
|
|
68
|
-
return this._forceDraw;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
setup(
|
|
72
|
-
plistRenderer: PolyListRenderer,
|
|
73
|
-
materialRenderer: MaterialRenderer,
|
|
74
|
-
modelMatrix: Mat4,
|
|
75
|
-
viewMatrix: Mat4,
|
|
76
|
-
projectionMatrix: Mat4
|
|
77
|
-
) {
|
|
78
|
-
if (!this._program) {
|
|
79
|
-
throw new Error("PickSelectionShader: shader program is not loaded");
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const rend = this.renderer as WebGLRenderer;
|
|
83
|
-
rend.state.shaderProgram = this._program;
|
|
84
|
-
this._program.uniformMatrix4fv('mWorld', false, modelMatrix);
|
|
85
|
-
this._program.uniformMatrix4fv('mView', false, viewMatrix);
|
|
86
|
-
this._program.uniformMatrix4fv('mProj', false, projectionMatrix);
|
|
87
|
-
this._program.uniform1i('uSelected', (this._forceDraw || plistRenderer.polyList.isSelected) ? 1 : 0);
|
|
88
|
-
|
|
89
|
-
const { polyList } = plistRenderer;
|
|
90
|
-
this._program.uniform4fv('uPickColor', polyList.colorCode);
|
|
91
|
-
|
|
92
|
-
this._program.positionAttribPointer((plistRenderer as WebGLPolyListRenderer).positionAttribParams("vertPosition"));
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
destroy() {
|
|
96
|
-
if (this._program) {
|
|
97
|
-
ShaderProgram.Delete(this._program);
|
|
98
|
-
this._program = null;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
1
|
+
import Shader from "../render/Shader";
|
|
2
|
+
import ShaderProgram from "../render/webgl/ShaderProgram";
|
|
3
|
+
import PolyListRenderer from '../render/PolyListRenderer';
|
|
4
|
+
import MaterialRenderer from '../render/MaterialRenderer';
|
|
5
|
+
import Mat4 from "../math/Mat4";
|
|
6
|
+
import Renderer from "../render/Renderer";
|
|
7
|
+
import WebGLRenderer from "../render/webgl/Renderer";
|
|
8
|
+
import WebGLPolyListRenderer from "../render/webgl/PolyListRenderer";
|
|
9
|
+
|
|
10
|
+
const g_code = {
|
|
11
|
+
webgl: {
|
|
12
|
+
vertex: `precision mediump float;
|
|
13
|
+
|
|
14
|
+
attribute vec3 vertPosition;
|
|
15
|
+
|
|
16
|
+
uniform mat4 mWorld;
|
|
17
|
+
uniform mat4 mView;
|
|
18
|
+
uniform mat4 mProj;
|
|
19
|
+
|
|
20
|
+
void main() {
|
|
21
|
+
gl_Position = mProj * mView * mWorld * vec4(vertPosition, 1.0);
|
|
22
|
+
}`,
|
|
23
|
+
|
|
24
|
+
fragment: `precision mediump float;
|
|
25
|
+
|
|
26
|
+
uniform vec4 uPickColor;
|
|
27
|
+
uniform bool uSelected;
|
|
28
|
+
|
|
29
|
+
void main() {
|
|
30
|
+
if (uSelected) {
|
|
31
|
+
gl_FragColor = vec4(uPickColor);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
discard;
|
|
35
|
+
}
|
|
36
|
+
}`
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default class PickSelectionShader extends Shader {
|
|
41
|
+
protected _program: ShaderProgram | null = null;
|
|
42
|
+
protected _forceDraw: boolean = false;
|
|
43
|
+
|
|
44
|
+
constructor(renderer: Renderer) {
|
|
45
|
+
super(renderer);
|
|
46
|
+
|
|
47
|
+
if (renderer.typeId !== "WebGL") {
|
|
48
|
+
throw Error("PickSelectionShader is only compatible with WebGL renderer");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async load() {
|
|
53
|
+
const { gl } = (this.renderer as WebGLRenderer);
|
|
54
|
+
|
|
55
|
+
this._program = new ShaderProgram(gl, "PickSelectionShader");
|
|
56
|
+
this._program.attachVertexSource(g_code.webgl.vertex);
|
|
57
|
+
this._program.attachFragmentSource(g_code.webgl.fragment);
|
|
58
|
+
this._program.link();
|
|
59
|
+
|
|
60
|
+
this._forceDraw = true;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
set forceDraw(d: boolean) {
|
|
64
|
+
this._forceDraw = d;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
get forceDraw() {
|
|
68
|
+
return this._forceDraw;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
setup(
|
|
72
|
+
plistRenderer: PolyListRenderer,
|
|
73
|
+
materialRenderer: MaterialRenderer,
|
|
74
|
+
modelMatrix: Mat4,
|
|
75
|
+
viewMatrix: Mat4,
|
|
76
|
+
projectionMatrix: Mat4
|
|
77
|
+
) {
|
|
78
|
+
if (!this._program) {
|
|
79
|
+
throw new Error("PickSelectionShader: shader program is not loaded");
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const rend = this.renderer as WebGLRenderer;
|
|
83
|
+
rend.state.shaderProgram = this._program;
|
|
84
|
+
this._program.uniformMatrix4fv('mWorld', false, modelMatrix);
|
|
85
|
+
this._program.uniformMatrix4fv('mView', false, viewMatrix);
|
|
86
|
+
this._program.uniformMatrix4fv('mProj', false, projectionMatrix);
|
|
87
|
+
this._program.uniform1i('uSelected', (this._forceDraw || plistRenderer.polyList.isSelected) ? 1 : 0);
|
|
88
|
+
|
|
89
|
+
const { polyList } = plistRenderer;
|
|
90
|
+
this._program.uniform4fv('uPickColor', polyList.colorCode);
|
|
91
|
+
|
|
92
|
+
this._program.positionAttribPointer((plistRenderer as WebGLPolyListRenderer).positionAttribParams("vertPosition"));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
destroy() {
|
|
96
|
+
if (this._program) {
|
|
97
|
+
ShaderProgram.Delete(this._program);
|
|
98
|
+
this._program = null;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -1,118 +1,118 @@
|
|
|
1
|
-
|
|
2
|
-
import { TextureTargetName } from '../base/Texture';
|
|
3
|
-
import Shader from '../render/Shader';
|
|
4
|
-
import ShaderProgram from '../render/webgl/ShaderProgram';
|
|
5
|
-
import ShaderFunction from './ShaderFunction';
|
|
6
|
-
import Vec from '../math/Vec';
|
|
7
|
-
import PolyListRenderer from '../render/PolyListRenderer';
|
|
8
|
-
import MaterialRenderer from '../render/MaterialRenderer';
|
|
9
|
-
import Mat4 from "../math/Mat4";
|
|
10
|
-
import Renderer from "../render/Renderer";
|
|
11
|
-
import WebGLRenderer from "../render/webgl/Renderer";
|
|
12
|
-
import WebGLTextureRenderer from "../render/webgl/TextureRenderer";
|
|
13
|
-
import WebGLPolyListRenderer from "../render/webgl/PolyListRenderer";
|
|
14
|
-
|
|
15
|
-
const g_code = {
|
|
16
|
-
webgl: {
|
|
17
|
-
vertex: `precision mediump float;
|
|
18
|
-
|
|
19
|
-
attribute vec3 position;
|
|
20
|
-
attribute vec2 texCoord;
|
|
21
|
-
|
|
22
|
-
varying vec2 fragTexCoord;
|
|
23
|
-
|
|
24
|
-
void main() {
|
|
25
|
-
fragTexCoord = texCoord;
|
|
26
|
-
gl_Position = vec4(position, 1.0);
|
|
27
|
-
}`,
|
|
28
|
-
|
|
29
|
-
fragment: ShaderFunction.GetShaderCode(`precision mediump float;
|
|
30
|
-
varying vec2 fragTexCoord;
|
|
31
|
-
|
|
32
|
-
uniform sampler2D uTexture;
|
|
33
|
-
`,
|
|
34
|
-
[
|
|
35
|
-
new ShaderFunction('void','main','',`{
|
|
36
|
-
vec3 color = texture2D(uTexture, fragTexCoord).rgb;
|
|
37
|
-
if (color.r!=0.0 || color.g!=0.0 || color.b!=0.0) {
|
|
38
|
-
gl_FragColor = vec4(color, 1.0);
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
discard;
|
|
42
|
-
}
|
|
43
|
-
}`)
|
|
44
|
-
])
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export default class PresentDebugFramebufferShader extends Shader {
|
|
49
|
-
protected _program: ShaderProgram | null = null;
|
|
50
|
-
protected _borderWidth!: number;
|
|
51
|
-
protected _borderColor!: Vec;
|
|
52
|
-
protected _convMatrix!: number[];
|
|
53
|
-
|
|
54
|
-
constructor(renderer: Renderer) {
|
|
55
|
-
super(renderer);
|
|
56
|
-
|
|
57
|
-
if (renderer.typeId !== "WebGL") {
|
|
58
|
-
throw Error("PresentDebugFramebufferShader is only compatible with WebGL renderer");
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
async load() {
|
|
63
|
-
const { gl } = (this.renderer as WebGLRenderer);
|
|
64
|
-
|
|
65
|
-
this._program = new ShaderProgram(gl, "PresentDebugFramebufferShader");
|
|
66
|
-
this._program.attachVertexSource(g_code.webgl.vertex);
|
|
67
|
-
this._program.attachFragmentSource(g_code.webgl.fragment);
|
|
68
|
-
this._program.link();
|
|
69
|
-
|
|
70
|
-
this._borderWidth = 3;
|
|
71
|
-
this._borderColor = new Vec([0.0, 0.7, 1, 1.0]);
|
|
72
|
-
this._convMatrix = [
|
|
73
|
-
0, 1, 0,
|
|
74
|
-
1,-4, 1,
|
|
75
|
-
0, 1, 0
|
|
76
|
-
];
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
setup(
|
|
80
|
-
plistRenderer: PolyListRenderer,
|
|
81
|
-
materialRenderer: MaterialRenderer,
|
|
82
|
-
modelMatrix: Mat4,
|
|
83
|
-
viewMatrix: Mat4,
|
|
84
|
-
projectionMatrix: Mat4
|
|
85
|
-
) {
|
|
86
|
-
if (!this._program) {
|
|
87
|
-
throw new Error("PresentDebugFramebufferShader: shader program is not loaded");
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const rend = this.renderer as WebGLRenderer;
|
|
91
|
-
const { gl } = rend;
|
|
92
|
-
|
|
93
|
-
rend.state.shaderProgram = this._program;
|
|
94
|
-
|
|
95
|
-
gl.activeTexture(gl.TEXTURE0);
|
|
96
|
-
this._program.uniform1i('uTexture', 0);
|
|
97
|
-
|
|
98
|
-
const material = materialRenderer.material;
|
|
99
|
-
const webglTexture = (materialRenderer.getTextureRenderer('albedoTexture') as WebGLTextureRenderer)?.getApiObject();
|
|
100
|
-
if (webglTexture && material.albedoTexture) {
|
|
101
|
-
const target = TextureTargetName[material.albedoTexture.target];
|
|
102
|
-
gl.bindTexture((gl as any)[target], webglTexture);
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
throw new Error("PresentDebugFramebufferShader: invalid material setup. The albedoTexture material attribute must to be a texture");
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
this._program.positionAttribPointer((plistRenderer as WebGLPolyListRenderer).positionAttribParams("position"));
|
|
109
|
-
this._program.texCoordAttribPointer((plistRenderer as WebGLPolyListRenderer).texCoord0AttribParams("texCoord"));
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
destroy() {
|
|
113
|
-
if (this._program) {
|
|
114
|
-
ShaderProgram.Delete(this._program);
|
|
115
|
-
this._program = null;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
1
|
+
|
|
2
|
+
import { TextureTargetName } from '../base/Texture';
|
|
3
|
+
import Shader from '../render/Shader';
|
|
4
|
+
import ShaderProgram from '../render/webgl/ShaderProgram';
|
|
5
|
+
import ShaderFunction from './ShaderFunction';
|
|
6
|
+
import Vec from '../math/Vec';
|
|
7
|
+
import PolyListRenderer from '../render/PolyListRenderer';
|
|
8
|
+
import MaterialRenderer from '../render/MaterialRenderer';
|
|
9
|
+
import Mat4 from "../math/Mat4";
|
|
10
|
+
import Renderer from "../render/Renderer";
|
|
11
|
+
import WebGLRenderer from "../render/webgl/Renderer";
|
|
12
|
+
import WebGLTextureRenderer from "../render/webgl/TextureRenderer";
|
|
13
|
+
import WebGLPolyListRenderer from "../render/webgl/PolyListRenderer";
|
|
14
|
+
|
|
15
|
+
const g_code = {
|
|
16
|
+
webgl: {
|
|
17
|
+
vertex: `precision mediump float;
|
|
18
|
+
|
|
19
|
+
attribute vec3 position;
|
|
20
|
+
attribute vec2 texCoord;
|
|
21
|
+
|
|
22
|
+
varying vec2 fragTexCoord;
|
|
23
|
+
|
|
24
|
+
void main() {
|
|
25
|
+
fragTexCoord = texCoord;
|
|
26
|
+
gl_Position = vec4(position, 1.0);
|
|
27
|
+
}`,
|
|
28
|
+
|
|
29
|
+
fragment: ShaderFunction.GetShaderCode(`precision mediump float;
|
|
30
|
+
varying vec2 fragTexCoord;
|
|
31
|
+
|
|
32
|
+
uniform sampler2D uTexture;
|
|
33
|
+
`,
|
|
34
|
+
[
|
|
35
|
+
new ShaderFunction('void','main','',`{
|
|
36
|
+
vec3 color = texture2D(uTexture, fragTexCoord).rgb;
|
|
37
|
+
if (color.r!=0.0 || color.g!=0.0 || color.b!=0.0) {
|
|
38
|
+
gl_FragColor = vec4(color, 1.0);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
discard;
|
|
42
|
+
}
|
|
43
|
+
}`)
|
|
44
|
+
])
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export default class PresentDebugFramebufferShader extends Shader {
|
|
49
|
+
protected _program: ShaderProgram | null = null;
|
|
50
|
+
protected _borderWidth!: number;
|
|
51
|
+
protected _borderColor!: Vec;
|
|
52
|
+
protected _convMatrix!: number[];
|
|
53
|
+
|
|
54
|
+
constructor(renderer: Renderer) {
|
|
55
|
+
super(renderer);
|
|
56
|
+
|
|
57
|
+
if (renderer.typeId !== "WebGL") {
|
|
58
|
+
throw Error("PresentDebugFramebufferShader is only compatible with WebGL renderer");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async load() {
|
|
63
|
+
const { gl } = (this.renderer as WebGLRenderer);
|
|
64
|
+
|
|
65
|
+
this._program = new ShaderProgram(gl, "PresentDebugFramebufferShader");
|
|
66
|
+
this._program.attachVertexSource(g_code.webgl.vertex);
|
|
67
|
+
this._program.attachFragmentSource(g_code.webgl.fragment);
|
|
68
|
+
this._program.link();
|
|
69
|
+
|
|
70
|
+
this._borderWidth = 3;
|
|
71
|
+
this._borderColor = new Vec([0.0, 0.7, 1, 1.0]);
|
|
72
|
+
this._convMatrix = [
|
|
73
|
+
0, 1, 0,
|
|
74
|
+
1,-4, 1,
|
|
75
|
+
0, 1, 0
|
|
76
|
+
];
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
setup(
|
|
80
|
+
plistRenderer: PolyListRenderer,
|
|
81
|
+
materialRenderer: MaterialRenderer,
|
|
82
|
+
modelMatrix: Mat4,
|
|
83
|
+
viewMatrix: Mat4,
|
|
84
|
+
projectionMatrix: Mat4
|
|
85
|
+
) {
|
|
86
|
+
if (!this._program) {
|
|
87
|
+
throw new Error("PresentDebugFramebufferShader: shader program is not loaded");
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const rend = this.renderer as WebGLRenderer;
|
|
91
|
+
const { gl } = rend;
|
|
92
|
+
|
|
93
|
+
rend.state.shaderProgram = this._program;
|
|
94
|
+
|
|
95
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
96
|
+
this._program.uniform1i('uTexture', 0);
|
|
97
|
+
|
|
98
|
+
const material = materialRenderer.material;
|
|
99
|
+
const webglTexture = (materialRenderer.getTextureRenderer('albedoTexture') as WebGLTextureRenderer)?.getApiObject();
|
|
100
|
+
if (webglTexture && material.albedoTexture) {
|
|
101
|
+
const target = TextureTargetName[material.albedoTexture.target];
|
|
102
|
+
gl.bindTexture((gl as any)[target], webglTexture);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
throw new Error("PresentDebugFramebufferShader: invalid material setup. The albedoTexture material attribute must to be a texture");
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
this._program.positionAttribPointer((plistRenderer as WebGLPolyListRenderer).positionAttribParams("position"));
|
|
109
|
+
this._program.texCoordAttribPointer((plistRenderer as WebGLPolyListRenderer).texCoord0AttribParams("texCoord"));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
destroy() {
|
|
113
|
+
if (this._program) {
|
|
114
|
+
ShaderProgram.Delete(this._program);
|
|
115
|
+
this._program = null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -1,99 +1,99 @@
|
|
|
1
|
-
|
|
2
|
-
import { TextureTargetName } from '../base/Texture';
|
|
3
|
-
import PolyListRenderer from '../render/PolyListRenderer';
|
|
4
|
-
import MaterialRenderer from '../render/MaterialRenderer';
|
|
5
|
-
import Shader from '../render/Shader';
|
|
6
|
-
import ShaderProgram from '../render/webgl/ShaderProgram';
|
|
7
|
-
import Mat4 from "../math/Mat4";
|
|
8
|
-
import Renderer from "../render/Renderer";
|
|
9
|
-
import WebGLRenderer from "../render/webgl/Renderer";
|
|
10
|
-
import WebGLTextureRenderer from "../render/webgl/TextureRenderer";
|
|
11
|
-
import WebGLPolyListRenderer from "../render/webgl/PolyListRenderer";
|
|
12
|
-
|
|
13
|
-
const g_code = {
|
|
14
|
-
webgl: {
|
|
15
|
-
vertex: `precision mediump float;
|
|
16
|
-
|
|
17
|
-
attribute vec3 position;
|
|
18
|
-
attribute vec2 texCoord;
|
|
19
|
-
|
|
20
|
-
varying vec2 fragTexCoord;
|
|
21
|
-
|
|
22
|
-
void main() {
|
|
23
|
-
fragTexCoord = texCoord;
|
|
24
|
-
gl_Position = vec4(position, 1.0);
|
|
25
|
-
}`,
|
|
26
|
-
|
|
27
|
-
fragment: `precision mediump float;
|
|
28
|
-
|
|
29
|
-
varying vec2 fragTexCoord;
|
|
30
|
-
|
|
31
|
-
uniform sampler2D uTexture;
|
|
32
|
-
|
|
33
|
-
void main() {
|
|
34
|
-
vec4 texColor = texture2D(uTexture, fragTexCoord);
|
|
35
|
-
gl_FragColor = vec4(texColor.rgb, 1.0);
|
|
36
|
-
}`
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export default class PresentTextureShader extends Shader {
|
|
41
|
-
protected _program: ShaderProgram | null = null;
|
|
42
|
-
|
|
43
|
-
constructor(renderer: Renderer) {
|
|
44
|
-
super(renderer);
|
|
45
|
-
|
|
46
|
-
if (renderer.typeId !== "WebGL") {
|
|
47
|
-
throw Error("PresentTextureShader is only compatible with WebGL renderer");
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
async load() {
|
|
52
|
-
const { gl } = (this.renderer as WebGLRenderer);
|
|
53
|
-
|
|
54
|
-
this._program = new ShaderProgram(gl, "DefaultPresentTextureShader");
|
|
55
|
-
this._program.attachVertexSource(g_code.webgl.vertex);
|
|
56
|
-
this._program.attachFragmentSource(g_code.webgl.fragment);
|
|
57
|
-
this._program.link();
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
setup(
|
|
61
|
-
plistRenderer: PolyListRenderer,
|
|
62
|
-
materialRenderer: MaterialRenderer,
|
|
63
|
-
modelMatrix: Mat4,
|
|
64
|
-
viewMatrix: Mat4,
|
|
65
|
-
projectionMatrix: Mat4
|
|
66
|
-
) {
|
|
67
|
-
if (!this._program) {
|
|
68
|
-
throw new Error("PresentTextureShader: shader program is not loaded");
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const rend = this.renderer as WebGLRenderer;
|
|
72
|
-
const { gl } = rend;
|
|
73
|
-
|
|
74
|
-
rend.state.shaderProgram = this._program;
|
|
75
|
-
|
|
76
|
-
gl.activeTexture(gl.TEXTURE0);
|
|
77
|
-
this._program.uniform1i('uTexture', 0);
|
|
78
|
-
|
|
79
|
-
const material = materialRenderer.material;
|
|
80
|
-
const webglTexture = (materialRenderer.getTextureRenderer('albedoTexture') as WebGLTextureRenderer)?.getApiObject();
|
|
81
|
-
if (webglTexture && material.albedoTexture) {
|
|
82
|
-
const target = TextureTargetName[material.albedoTexture.target];
|
|
83
|
-
gl.bindTexture((gl as any)[target], webglTexture);
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
throw new Error("PresentTextureShader: invalid material setup. The albedoTexture material attribute must to be a texture");
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
this._program.positionAttribPointer((plistRenderer as WebGLPolyListRenderer).positionAttribParams("position"));
|
|
90
|
-
this._program.texCoordAttribPointer((plistRenderer as WebGLPolyListRenderer).texCoord0AttribParams("texCoord"));
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
destroy() {
|
|
94
|
-
if (this._program) {
|
|
95
|
-
ShaderProgram.Delete(this._program);
|
|
96
|
-
this._program = null;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
1
|
+
|
|
2
|
+
import { TextureTargetName } from '../base/Texture';
|
|
3
|
+
import PolyListRenderer from '../render/PolyListRenderer';
|
|
4
|
+
import MaterialRenderer from '../render/MaterialRenderer';
|
|
5
|
+
import Shader from '../render/Shader';
|
|
6
|
+
import ShaderProgram from '../render/webgl/ShaderProgram';
|
|
7
|
+
import Mat4 from "../math/Mat4";
|
|
8
|
+
import Renderer from "../render/Renderer";
|
|
9
|
+
import WebGLRenderer from "../render/webgl/Renderer";
|
|
10
|
+
import WebGLTextureRenderer from "../render/webgl/TextureRenderer";
|
|
11
|
+
import WebGLPolyListRenderer from "../render/webgl/PolyListRenderer";
|
|
12
|
+
|
|
13
|
+
const g_code = {
|
|
14
|
+
webgl: {
|
|
15
|
+
vertex: `precision mediump float;
|
|
16
|
+
|
|
17
|
+
attribute vec3 position;
|
|
18
|
+
attribute vec2 texCoord;
|
|
19
|
+
|
|
20
|
+
varying vec2 fragTexCoord;
|
|
21
|
+
|
|
22
|
+
void main() {
|
|
23
|
+
fragTexCoord = texCoord;
|
|
24
|
+
gl_Position = vec4(position, 1.0);
|
|
25
|
+
}`,
|
|
26
|
+
|
|
27
|
+
fragment: `precision mediump float;
|
|
28
|
+
|
|
29
|
+
varying vec2 fragTexCoord;
|
|
30
|
+
|
|
31
|
+
uniform sampler2D uTexture;
|
|
32
|
+
|
|
33
|
+
void main() {
|
|
34
|
+
vec4 texColor = texture2D(uTexture, fragTexCoord);
|
|
35
|
+
gl_FragColor = vec4(texColor.rgb, 1.0);
|
|
36
|
+
}`
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export default class PresentTextureShader extends Shader {
|
|
41
|
+
protected _program: ShaderProgram | null = null;
|
|
42
|
+
|
|
43
|
+
constructor(renderer: Renderer) {
|
|
44
|
+
super(renderer);
|
|
45
|
+
|
|
46
|
+
if (renderer.typeId !== "WebGL") {
|
|
47
|
+
throw Error("PresentTextureShader is only compatible with WebGL renderer");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async load() {
|
|
52
|
+
const { gl } = (this.renderer as WebGLRenderer);
|
|
53
|
+
|
|
54
|
+
this._program = new ShaderProgram(gl, "DefaultPresentTextureShader");
|
|
55
|
+
this._program.attachVertexSource(g_code.webgl.vertex);
|
|
56
|
+
this._program.attachFragmentSource(g_code.webgl.fragment);
|
|
57
|
+
this._program.link();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
setup(
|
|
61
|
+
plistRenderer: PolyListRenderer,
|
|
62
|
+
materialRenderer: MaterialRenderer,
|
|
63
|
+
modelMatrix: Mat4,
|
|
64
|
+
viewMatrix: Mat4,
|
|
65
|
+
projectionMatrix: Mat4
|
|
66
|
+
) {
|
|
67
|
+
if (!this._program) {
|
|
68
|
+
throw new Error("PresentTextureShader: shader program is not loaded");
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const rend = this.renderer as WebGLRenderer;
|
|
72
|
+
const { gl } = rend;
|
|
73
|
+
|
|
74
|
+
rend.state.shaderProgram = this._program;
|
|
75
|
+
|
|
76
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
77
|
+
this._program.uniform1i('uTexture', 0);
|
|
78
|
+
|
|
79
|
+
const material = materialRenderer.material;
|
|
80
|
+
const webglTexture = (materialRenderer.getTextureRenderer('albedoTexture') as WebGLTextureRenderer)?.getApiObject();
|
|
81
|
+
if (webglTexture && material.albedoTexture) {
|
|
82
|
+
const target = TextureTargetName[material.albedoTexture.target];
|
|
83
|
+
gl.bindTexture((gl as any)[target], webglTexture);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
throw new Error("PresentTextureShader: invalid material setup. The albedoTexture material attribute must to be a texture");
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
this._program.positionAttribPointer((plistRenderer as WebGLPolyListRenderer).positionAttribParams("position"));
|
|
90
|
+
this._program.texCoordAttribPointer((plistRenderer as WebGLPolyListRenderer).texCoord0AttribParams("texCoord"));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
destroy() {
|
|
94
|
+
if (this._program) {
|
|
95
|
+
ShaderProgram.Delete(this._program);
|
|
96
|
+
this._program = null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|