bg2e-js 2.1.2 → 2.2.1

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 (147) hide show
  1. package/dist/bg2e-js.js +7031 -6989
  2. package/dist/bg2e-js.js.map +1 -1
  3. package/package.json +20 -2
  4. package/src/app/AppController.ts +39 -0
  5. package/src/app/Bg2KeyboardEvent.ts +54 -0
  6. package/src/app/Bg2MouseEvent.ts +82 -0
  7. package/src/app/Bg2TouchEvent.ts +18 -0
  8. package/src/app/Canvas.ts +108 -0
  9. package/src/app/EventBase.ts +10 -0
  10. package/src/app/MainLoop.ts +273 -0
  11. package/src/app/index.ts +25 -0
  12. package/src/base/Color.ts +134 -0
  13. package/src/base/Environment.ts +183 -0
  14. package/src/base/Light.ts +192 -0
  15. package/src/base/Material.ts +619 -0
  16. package/src/base/PolyList.ts +365 -0
  17. package/src/base/Texture.ts +620 -0
  18. package/src/base/index.ts +81 -0
  19. package/src/db/Bg2LoaderPlugin.ts +129 -0
  20. package/src/db/DBPluginApi.ts +48 -0
  21. package/src/db/Loader.ts +116 -0
  22. package/src/db/LoaderPlugin.ts +34 -0
  23. package/src/db/MtlParser.ts +7 -0
  24. package/src/db/ObjLoaderPlugin.ts +55 -0
  25. package/src/db/ObjParser.ts +252 -0
  26. package/src/db/ObjWriterPlugin.ts +19 -0
  27. package/src/db/VitscnjLoaderPlugin.ts +100 -0
  28. package/src/db/Writer.ts +52 -0
  29. package/src/db/WriterPlugin.ts +22 -0
  30. package/src/db/index.ts +44 -0
  31. package/src/debug/DebugRenderer.ts +173 -0
  32. package/src/debug/WebGLTextureViewer.ts +75 -0
  33. package/src/debug/index.ts +7 -0
  34. package/src/index.html +11 -0
  35. package/src/index.ts +33 -0
  36. package/src/manipulation/SelectionBuffer.ts +82 -0
  37. package/src/manipulation/SelectionHighlight.ts +85 -0
  38. package/src/manipulation/SelectionIdAssignVisitor.ts +97 -0
  39. package/src/manipulation/SelectionManager.ts +166 -0
  40. package/src/manipulation/SelectionMode.ts +6 -0
  41. package/src/math/Mat3.ts +259 -0
  42. package/src/math/Mat4.ts +706 -0
  43. package/src/math/MatrixStrategy.ts +25 -0
  44. package/src/math/Quat.ts +65 -0
  45. package/src/math/Vec.ts +753 -0
  46. package/src/math/constants.ts +47 -0
  47. package/src/math/functions.ts +103 -0
  48. package/src/math/index.ts +74 -0
  49. package/src/phsics/joint.ts +137 -0
  50. package/src/primitives/arrow.ts +58 -0
  51. package/src/primitives/cone.ts +138 -0
  52. package/src/primitives/cube.ts +60 -0
  53. package/src/primitives/cylinder.ts +216 -0
  54. package/src/primitives/index.ts +13 -0
  55. package/src/primitives/plane.ts +31 -0
  56. package/src/primitives/sphere.ts +809 -0
  57. package/src/render/BRDFIntegrationMap.ts +4 -0
  58. package/src/render/Environment.ts +136 -0
  59. package/src/render/FrameBuffer.ts +35 -0
  60. package/src/render/MaterialRenderer.ts +34 -0
  61. package/src/render/Pipeline.ts +109 -0
  62. package/src/render/PolyListRenderer.ts +47 -0
  63. package/src/render/RenderBuffer.ts +197 -0
  64. package/src/render/RenderQueue.ts +199 -0
  65. package/src/render/RenderState.ts +116 -0
  66. package/src/render/Renderer.ts +248 -0
  67. package/src/render/SceneAppController.ts +238 -0
  68. package/src/render/SceneRenderer.ts +373 -0
  69. package/src/render/Shader.ts +32 -0
  70. package/src/render/ShadowRenderer.ts +176 -0
  71. package/src/render/SkyCube.ts +106 -0
  72. package/src/render/SkySphere.ts +118 -0
  73. package/src/render/TextureMergerRenderer.ts +70 -0
  74. package/src/render/TextureRenderer.ts +34 -0
  75. package/src/render/index.ts +67 -0
  76. package/src/render/webgl/FrameBuffer.ts +10 -0
  77. package/src/render/webgl/MaterialRenderer.ts +113 -0
  78. package/src/render/webgl/Pipeline.ts +89 -0
  79. package/src/render/webgl/PolyListRenderer.ts +260 -0
  80. package/src/render/webgl/RenderBuffer.ts +227 -0
  81. package/src/render/webgl/Renderer.ts +262 -0
  82. package/src/render/webgl/SceneRenderer.ts +68 -0
  83. package/src/render/webgl/ShaderProgram.ts +424 -0
  84. package/src/render/webgl/ShadowRenderer.ts +6 -0
  85. package/src/render/webgl/SkyCube.ts +16 -0
  86. package/src/render/webgl/SkySphere.ts +16 -0
  87. package/src/render/webgl/State.ts +152 -0
  88. package/src/render/webgl/TextureRenderer.ts +167 -0
  89. package/src/render/webgl/VertexBuffer.ts +137 -0
  90. package/src/render/webgl/index.ts +35 -0
  91. package/src/scene/Camera.ts +458 -0
  92. package/src/scene/Chain.ts +44 -0
  93. package/src/scene/ChainJoint.ts +58 -0
  94. package/src/scene/Component.ts +173 -0
  95. package/src/scene/ComponentMap.ts +107 -0
  96. package/src/scene/Drawable.ts +154 -0
  97. package/src/scene/EnvironmentComponent.ts +142 -0
  98. package/src/scene/FindNodeVisitor.ts +60 -0
  99. package/src/scene/LightComponent.ts +155 -0
  100. package/src/scene/MatrixState.ts +46 -0
  101. package/src/scene/Node.ts +314 -0
  102. package/src/scene/NodeVisitor.ts +15 -0
  103. package/src/scene/OrbitCameraController.ts +450 -0
  104. package/src/scene/SmoothOrbitCameraController.ts +99 -0
  105. package/src/scene/Transform.ts +73 -0
  106. package/src/scene/index.ts +57 -0
  107. package/src/shaders/BasicDiffuseColorShader.ts +111 -0
  108. package/src/shaders/BasicPBRLightShader.ts +277 -0
  109. package/src/shaders/DebugRenderShader.ts +98 -0
  110. package/src/shaders/DepthRenderShader.ts +91 -0
  111. package/src/shaders/IrradianceMapCubeShader.ts +116 -0
  112. package/src/shaders/PBRLightIBLShader.ts +487 -0
  113. package/src/shaders/PickSelectionShader.ts +101 -0
  114. package/src/shaders/PresentDebugFramebufferShader.ts +118 -0
  115. package/src/shaders/PresentTextureShader.ts +99 -0
  116. package/src/shaders/SelectionHighlightShader.ts +127 -0
  117. package/src/shaders/ShaderFunction.ts +318 -0
  118. package/src/shaders/SkyCubeShader.ts +94 -0
  119. package/src/shaders/SkySphereShader.ts +102 -0
  120. package/src/shaders/SpecularMapCubeShader.ts +165 -0
  121. package/src/shaders/TextureMergerShader.ts +171 -0
  122. package/src/shaders/index.ts +37 -0
  123. package/src/shaders/webgl/color_correction.glsl +47 -0
  124. package/src/shaders/webgl/constants.glsl +6 -0
  125. package/src/shaders/webgl/index.ts +70 -0
  126. package/src/shaders/webgl/normal_map.glsl +9 -0
  127. package/src/shaders/webgl/pbr.glsl +173 -0
  128. package/src/shaders/webgl/uniforms.glsl +91 -0
  129. package/src/shaders/webgl_shader_lib.ts +213 -0
  130. package/src/tools/BinaryResourceProvider.ts +14 -0
  131. package/src/tools/ImageResourceProvider.ts +66 -0
  132. package/src/tools/MaterialModifier.ts +276 -0
  133. package/src/tools/Resource.ts +203 -0
  134. package/src/tools/ResourceProvider.ts +69 -0
  135. package/src/tools/TextResourceProvider.ts +24 -0
  136. package/src/tools/TextureCache.ts +52 -0
  137. package/src/tools/TextureResourceDatabase.ts +100 -0
  138. package/src/tools/UserAgent.ts +362 -0
  139. package/src/tools/VideoResourceProvider.ts +50 -0
  140. package/src/tools/WriteStrategy.ts +22 -0
  141. package/src/tools/base64.ts +11 -0
  142. package/src/tools/crypto.ts +19 -0
  143. package/src/tools/endiantess.ts +13 -0
  144. package/src/tools/image.ts +18 -0
  145. package/src/tools/index.ts +41 -0
  146. package/src/tools/processType.ts +38 -0
  147. package/src/vite-env.d.ts +12 -0
@@ -0,0 +1,199 @@
1
+
2
+ import { getLayers, RenderLayer } from "../base/PolyList";
3
+ import Mat4 from "../math/Mat4";
4
+ import { BlendFunction } from "./Pipeline";
5
+ import RenderState from "./RenderState";
6
+ import type Renderer from "./Renderer";
7
+ import type Shader from "./Shader";
8
+ import type PolyListRenderer from "./PolyListRenderer";
9
+ import type MaterialRenderer from "./MaterialRenderer";
10
+ import type Pipeline from "./Pipeline";
11
+ import type Light from "../base/Light";
12
+
13
+ export interface QueuePipelines {
14
+ cullBackFace: Pipeline;
15
+ cullFaceDisabled: Pipeline;
16
+ }
17
+
18
+ export interface QueueItem {
19
+ layer: RenderLayer;
20
+ shader: Shader;
21
+ beginOperation: ((layer: RenderLayer) => void) | null;
22
+ endOperation: ((layer: RenderLayer) => void) | null;
23
+ enabled: boolean;
24
+ pipelines: QueuePipelines;
25
+ queue: RenderState[];
26
+ }
27
+
28
+ export interface LightData {
29
+ light: Light;
30
+ transform: Mat4;
31
+ }
32
+
33
+ export interface EnableQueueOptions {
34
+ beginOperation?: ((layer: RenderLayer) => void) | null;
35
+ endOperation?: ((layer: RenderLayer) => void) | null;
36
+ enabled?: boolean;
37
+ }
38
+
39
+ export default class RenderQueue {
40
+ protected _renderer: Renderer;
41
+ protected _queues: QueueItem[];
42
+ protected _viewMatrix: Mat4;
43
+ protected _projectionMatrix: Mat4;
44
+ protected _lights: LightData[];
45
+
46
+ constructor(renderer: Renderer) {
47
+ this._renderer = renderer;
48
+
49
+ this._queues = [];
50
+
51
+ this._viewMatrix = Mat4.MakeIdentity();
52
+ this._projectionMatrix = Mat4.MakeIdentity();
53
+
54
+ this._lights = [];
55
+ }
56
+
57
+ get renderer(): Renderer {
58
+ return this._renderer;
59
+ }
60
+
61
+ get queues(): QueueItem[] {
62
+ return this._queues;
63
+ }
64
+
65
+ get viewMatrix(): Mat4 {
66
+ return this._viewMatrix;
67
+ }
68
+
69
+ set viewMatrix(m: Mat4) {
70
+ this._viewMatrix.assign(m);
71
+ }
72
+
73
+ get projectionMatrix(): Mat4 {
74
+ return this._projectionMatrix;
75
+ }
76
+
77
+ set projectionMatrix(m: Mat4) {
78
+ this._projectionMatrix.assign(m);
79
+ }
80
+
81
+ get lights(): LightData[] {
82
+ return this._lights;
83
+ }
84
+
85
+ getQueue(layer: RenderLayer): QueueItem | undefined {
86
+ return this._queues.find(l => l.layer === layer);
87
+ }
88
+
89
+ enableQueue(layer: RenderLayer, shader: Shader, { beginOperation = null, endOperation = null, enabled = true }: EnableQueueOptions = {}): void {
90
+ // TODO: Create pipelines for different render states (cull face, front face etc.)
91
+ const cullBackFace = this.renderer.factory.pipeline();
92
+ const cullFaceDisabled = this.renderer.factory.pipeline();
93
+ if (layer === RenderLayer.TRANSPARENT_DEFAULT) {
94
+ const blendState = {
95
+ enabled: true,
96
+ blendFuncSrc: BlendFunction.SRC_ALPHA,
97
+ blendFuncDst: BlendFunction.ONE_MINUS_SRC_ALPHA,
98
+ blendFuncSrcAlpha: BlendFunction.ONE,
99
+ blendFuncDstAlpha: BlendFunction.ONE_MINUS_SRC_ALPHA
100
+ };
101
+ cullBackFace.setBlendState(blendState);
102
+ cullFaceDisabled.setBlendState(blendState);
103
+ }
104
+ cullBackFace.create();
105
+ cullFaceDisabled.cullFace = false;
106
+ cullFaceDisabled.create();
107
+
108
+
109
+
110
+
111
+ const queue = this.getQueue(layer);
112
+ if (!queue) {
113
+ this._queues.push({
114
+ layer,
115
+ shader,
116
+ beginOperation,
117
+ endOperation,
118
+ enabled,
119
+ pipelines: {
120
+ cullBackFace,
121
+ cullFaceDisabled
122
+ },
123
+ queue: []
124
+ });
125
+ }
126
+ else {
127
+ queue.enabled = true;
128
+ }
129
+ }
130
+
131
+ disableQueue(layer: RenderLayer): void {
132
+ const queue = this.getQueue(layer);
133
+ if (queue) {
134
+ queue.enabled = true;
135
+ }
136
+ }
137
+
138
+ isQueueEnabled(layer: RenderLayer): boolean {
139
+ return this.getQueue(layer)?.enabled || false;
140
+ }
141
+
142
+ newFrame(): void {
143
+ this._queues.forEach(q => q.queue = []);
144
+ this._lights = [];
145
+ }
146
+
147
+ addPolyList(polyListRenderer: PolyListRenderer, materialRenderer: MaterialRenderer, modelMatrix: Mat4): void {
148
+ const plistLayers = getLayers(polyListRenderer.polyList, materialRenderer.material);
149
+ this._queues.forEach(({ layer, shader, queue, pipelines }) => {
150
+ if (plistLayers & layer) {
151
+ const { polyList } = polyListRenderer;
152
+ let pipeline = null;
153
+ // TODO: Select pipeline based on material and polyList properties
154
+ if (polyList.enableCullFace) {
155
+ pipeline = pipelines.cullBackFace;
156
+ }
157
+ else {
158
+ pipeline = pipelines.cullFaceDisabled;
159
+ }
160
+ queue.push(new RenderState({
161
+ shader,
162
+ polyListRenderer,
163
+ materialRenderer,
164
+ modelMatrix,
165
+ viewMatrix: this.viewMatrix,
166
+ projectionMatrix: this.projectionMatrix,
167
+ pipeline
168
+ }))
169
+ }
170
+ });
171
+ }
172
+
173
+ addLight(light: Light, transform: Mat4): void {
174
+ // Clear the depth texture, because this parameter
175
+ // is set each frame by the ShadowRenderer
176
+ light.depthTexture = null;
177
+ this._lights.push({ light, transform });
178
+ }
179
+
180
+ draw(layer: RenderLayer): void {
181
+ const queue = this.getQueue(layer);
182
+ if (queue) {
183
+ if (typeof(queue.beginOperation) === "function") {
184
+ queue.beginOperation(layer);
185
+ }
186
+
187
+ //queue.pipeline.activate();
188
+ queue.queue.forEach(rs => {
189
+ rs.draw();
190
+ });
191
+ if (typeof(queue.endOperation) === "function") {
192
+ queue.endOperation(layer);
193
+ }
194
+ }
195
+ else {
196
+ console.warn(`No render queue found for layer ${layer}`);
197
+ }
198
+ }
199
+ }
@@ -0,0 +1,116 @@
1
+
2
+ import { RenderLayer } from "../base/PolyList";
3
+ import Mat4 from "../math/Mat4";
4
+ import type Shader from "./Shader";
5
+ import type PolyListRenderer from "./PolyListRenderer";
6
+ import type MaterialRenderer from "./MaterialRenderer";
7
+ import type Renderer from "./Renderer";
8
+ import type Pipeline from "./Pipeline";
9
+
10
+ export interface RenderStateOptions {
11
+ shader?: Shader | null;
12
+ polyListRenderer?: PolyListRenderer | null;
13
+ materialRenderer?: MaterialRenderer | null;
14
+ modelMatrix?: Mat4;
15
+ viewMatrix?: Mat4;
16
+ projectionMatrix?: Mat4;
17
+ pipeline?: Pipeline | null;
18
+ }
19
+
20
+ export interface DrawOptions {
21
+ overrideShader?: Shader | null;
22
+ overrideViewMatrix?: Mat4 | null;
23
+ overrideProjectionMatrix?: Mat4 | null;
24
+ }
25
+
26
+ export default class RenderState {
27
+ protected _shader: Shader | null;
28
+ protected _polyListRenderer: PolyListRenderer | null;
29
+ protected _materialRenderer: MaterialRenderer | null;
30
+ protected _modelMatrix: Mat4;
31
+ protected _viewMatrix: Mat4;
32
+ protected _projectionMatrix: Mat4;
33
+ protected _pipeline: Pipeline | null;
34
+
35
+ constructor({
36
+ shader = null,
37
+ polyListRenderer = null,
38
+ materialRenderer = null,
39
+ modelMatrix = Mat4.MakeIdentity(),
40
+ viewMatrix = Mat4.MakeIdentity(),
41
+ projectionMatrix = Mat4.MakeIdentity(),
42
+ pipeline = null
43
+ }: RenderStateOptions = {}) {
44
+ this._shader = shader;
45
+ this._polyListRenderer = polyListRenderer;
46
+ this._materialRenderer = materialRenderer;
47
+ this._modelMatrix = modelMatrix;
48
+ this._viewMatrix = viewMatrix;
49
+ this._projectionMatrix = projectionMatrix;
50
+ this._pipeline = pipeline;
51
+ }
52
+
53
+ get valid(): boolean {
54
+ return this._shader && this._polyListRenderer !== null && this._materialRenderer !== null || false;
55
+ }
56
+
57
+ get renderer(): Renderer | undefined { return this._polyListRenderer?.renderer; }
58
+
59
+ set shader(shader: Shader | null) { this._shader = shader; }
60
+ get shader(): Shader | null { return this._shader; }
61
+ set polyListRenderer(polyListRenderer: PolyListRenderer | null) { this._polyListRenderer = polyListRenderer; }
62
+ get polyListRenderer(): PolyListRenderer | null { return this._polyListRenderer; }
63
+ set materialRenderer(materialRenderer: MaterialRenderer | null) { this._materialRenderer = materialRenderer; }
64
+ get materialRenderer(): MaterialRenderer | null { return this._materialRenderer; }
65
+ set modelMatrix(model: Mat4) { this._modelMatrix = model; }
66
+ get modelMatrix(): Mat4 { return this._modelMatrix; }
67
+ set viewMatrix(view: Mat4) { this._viewMatrix = view; }
68
+ get viewMatrix(): Mat4 { return this._viewMatrix; }
69
+ set projectionMatrix(projection: Mat4) { this._projectionMatrix = projection; }
70
+ get projectionMatrix(): Mat4 { return this._projectionMatrix; }
71
+ get pipeline(): Pipeline | null { return this._pipeline; }
72
+ set pipeline(pl: Pipeline | null) { this._pipeline = pl; }
73
+
74
+ isLayerEnabled(layer: RenderLayer): boolean {
75
+ const { polyList } = this._polyListRenderer || {};
76
+ const { material } = this._materialRenderer || {};
77
+ if (!polyList || !material) {
78
+ return false;
79
+ }
80
+
81
+ const renderLayers = polyList.renderLayers === RenderLayer.AUTO ?
82
+ (material.isTransparent ? RenderLayer.TRANSPARENT_DEFAULT : RenderLayer.OPAQUE_DEFAULT) :
83
+ (polyList.renderLayers);
84
+
85
+ return (renderLayers & layer) !== 0;
86
+ }
87
+
88
+ draw({ overrideShader = null, overrideViewMatrix = null, overrideProjectionMatrix = null}: DrawOptions = {}): void {
89
+ const shader = overrideShader || this.shader;
90
+ if (!this.polyListRenderer?.polyList.visible || !shader || !this.materialRenderer) {
91
+ return;
92
+ }
93
+ if ((this.renderer as any)?.debugMode) {
94
+ console.log(`======= Begin render polyList "${this.polyListRenderer.polyList.name}" ==============`);
95
+ }
96
+
97
+ if (this.pipeline) {
98
+ this.pipeline.activate();
99
+ }
100
+ this.polyListRenderer.bindBuffers();
101
+
102
+ const viewMatrix = overrideViewMatrix || this.viewMatrix;
103
+ const projectionMatrix = overrideProjectionMatrix || this.projectionMatrix;
104
+ shader.setup(
105
+ this.polyListRenderer,
106
+ this.materialRenderer,
107
+ this.modelMatrix,
108
+ viewMatrix,
109
+ projectionMatrix
110
+ );
111
+ this.polyListRenderer.draw();
112
+ if ((this.renderer as any)?.debugMode) {
113
+ console.log(`======= End render polyList "${this.polyListRenderer.polyList.name}" ==============`);
114
+ }
115
+ }
116
+ }
@@ -0,0 +1,248 @@
1
+ import Canvas from "../app/Canvas";
2
+ import Material from "../base/Material";
3
+ import PolyList from "../base/PolyList";
4
+ import Texture from "../base/Texture";
5
+ import Color from "../base/Color";
6
+ import Environment from "./Environment";
7
+ import TextureMergerRenderer from "./TextureMergerRenderer";
8
+ import PolyListRenderer from "./PolyListRenderer";
9
+ import MaterialRenderer from "./MaterialRenderer";
10
+ import TextureRenderer from "./TextureRenderer";
11
+ import RenderBuffer from "./RenderBuffer";
12
+ import Pipeline from "./Pipeline";
13
+ import PresentTextureShader from "../shaders/PresentTextureShader";
14
+ import Vec from "../math/Vec";
15
+ import SkySphere from "./SkySphere";
16
+ import SkyCube from "./SkyCube";
17
+ import ShadowRenderer from "./ShadowRenderer";
18
+ import SceneRenderer from "./SceneRenderer";
19
+
20
+ export enum EngineFeatures {
21
+ RENDER_TARGET_TEXTURES = 0x1 << 0,
22
+ RENDER_TARGET_FLOAT = 0x1 << 1,
23
+ RENDER_TARGET_DEPTH = 0x1 << 2
24
+ }
25
+
26
+
27
+ interface RendererFactory {
28
+ polyList(plist: PolyList): PolyListRenderer;
29
+ material(material: Material): MaterialRenderer;
30
+ texture(texture: Texture): TextureRenderer;
31
+ renderBuffer(): RenderBuffer;
32
+ skySphere(): SkySphere;
33
+ skyCube(): SkyCube;
34
+ environment(): Environment;
35
+ textureMerger(): TextureMergerRenderer;
36
+ pipeline(): Pipeline;
37
+ scene(): SceneRenderer;
38
+ shadowRenderer(): ShadowRenderer;
39
+ }
40
+
41
+ export default class Renderer {
42
+ protected _identifier: string;
43
+ protected _frameBuffer: any;
44
+ protected _canvas!: Canvas;
45
+ protected _presentTextureSurface?: PolyListRenderer;
46
+ protected _presentTextureShader?: PresentTextureShader;
47
+ protected _presentTextureMaterial?: MaterialRenderer;
48
+
49
+ constructor(identifier: string) {
50
+ this._identifier = identifier;
51
+ this._frameBuffer = null;
52
+ }
53
+
54
+ get uniqueId(): string {
55
+ throw new Error("Calling Renderer.uniqueId base implementation.");
56
+ }
57
+
58
+ get typeId(): string {
59
+ throw new Error("Calling Renderer.typeId base implementation");
60
+ }
61
+
62
+ async init(canvas: Canvas): Promise<void> {
63
+ this._canvas = canvas;
64
+ }
65
+
66
+ get canvas(): Canvas {
67
+ return this._canvas;
68
+ }
69
+
70
+ get frameBuffer(): any {
71
+ throw new Error("Calling Renderer.frameBuffer base implementation.");
72
+ }
73
+
74
+ set viewport(vp: Vec) {
75
+ throw new Error("Calling Renderer.viewport setter base implementation.");
76
+ }
77
+
78
+ get viewport(): Vec {
79
+ throw new Error("Calling Renderer.viewport getter base implementation.");
80
+ }
81
+
82
+ get presentTextureSurfaceRenderer(): PolyListRenderer {
83
+ if (!this._presentTextureSurface) {
84
+ const plist = new PolyList();
85
+ plist.vertex = [
86
+ -1, -1, 0,
87
+ 1, -1, 0,
88
+ 1, 1, 0,
89
+ -1, 1, 0
90
+ ];
91
+ plist.texCoord0 = [
92
+ 0, 0,
93
+ 1, 0,
94
+ 1, 1,
95
+ 0, 1
96
+ ];
97
+ plist.index = [
98
+ 0, 1, 2,
99
+ 2, 3, 0
100
+ ];
101
+ this._presentTextureSurface = this.factory.polyList(plist);
102
+ }
103
+ return this._presentTextureSurface;
104
+ }
105
+
106
+ async initPresentTextureShader(): Promise<PresentTextureShader> {
107
+ if (!this._presentTextureShader) {
108
+ this._presentTextureShader = new PresentTextureShader(this);
109
+ this._presentTextureShader.load();
110
+ }
111
+ return this._presentTextureShader;
112
+ }
113
+
114
+ get presentTextureShader(): PresentTextureShader {
115
+ return this._presentTextureShader!;
116
+ }
117
+
118
+ get presentTextureMaterialRenderer(): MaterialRenderer {
119
+ if (!this._presentTextureMaterial) {
120
+ this._presentTextureMaterial = this.factory.material(new Material());
121
+ }
122
+ return this._presentTextureMaterial;
123
+ }
124
+
125
+ postReshape(width: number, height: number): void {
126
+
127
+ }
128
+
129
+ postRedisplay(): void {
130
+
131
+ }
132
+
133
+ polyListFactory(plist: PolyList): PolyListRenderer {
134
+ throw new Error("Calling base implementation of Renderer.polyListFactory()");
135
+ }
136
+
137
+ materialFactory(material: Material): MaterialRenderer {
138
+ throw new Error("Calling base implementation of Renderer.materialFactory()");
139
+ }
140
+
141
+ textureFactory(texture: Texture): TextureRenderer {
142
+ throw new Error("Calling base implementation of Renderer.textureFactory()");
143
+ }
144
+
145
+ renderBufferFactory(): RenderBuffer {
146
+ throw new Error("Calling base implementation of Renderer.renderBufferFactory()");
147
+ }
148
+
149
+ skySphereFactory(): SkySphere {
150
+ throw new Error("Calling base implementation of Renderer.skySphereFactory()");
151
+ }
152
+
153
+ skyCubeFactory(): SkyCube {
154
+ throw new Error("Calling base implementation of Renderer.skyCubeFactory()");
155
+ }
156
+
157
+ environmentFactory(): Environment {
158
+ return new Environment(this);
159
+ }
160
+
161
+ textureMergerFactory(): TextureMergerRenderer {
162
+ return new TextureMergerRenderer(this);
163
+ }
164
+
165
+ pipelineFactory(): any {
166
+ throw new Error("Calling base implementation of Renderer.pipelineFactory()");
167
+ }
168
+
169
+ sceneRendererFactory(): any {
170
+ throw new Error("Calling base implementation of Renderer.sceneRendererFactory()");
171
+ }
172
+
173
+ shadowRendererFactory(): any {
174
+ throw new Error("Calling base implementation of Renderer.shadowRendererFactory()");
175
+ }
176
+
177
+ get clearColor(): Color {
178
+ throw new Error("Calling base implementation of Renderer.clearColor getter.");
179
+ }
180
+
181
+ set clearColor(c: Color) {
182
+ throw new Error("Calling base implementation of Renderer.clearColor setter.");
183
+ }
184
+
185
+ clearBuffer(): void {
186
+ throw new Error("Calling base implementation of Renderer.clearBuffer()");
187
+ }
188
+
189
+ get factory(): RendererFactory {
190
+ const renderer = this;
191
+ return {
192
+ polyList(plist: PolyList): PolyListRenderer {
193
+ return renderer.polyListFactory(plist);
194
+ },
195
+ material(material: Material): MaterialRenderer {
196
+ return renderer.materialFactory(material);
197
+ },
198
+ texture(texture: Texture): TextureRenderer {
199
+ return renderer.textureFactory(texture);
200
+ },
201
+ renderBuffer(): RenderBuffer {
202
+ return renderer.renderBufferFactory();
203
+ },
204
+ skySphere(): SkySphere {
205
+ return renderer.skySphereFactory();
206
+ },
207
+ skyCube(): SkyCube {
208
+ return renderer.skyCubeFactory();
209
+ },
210
+ environment(): Environment {
211
+ return renderer.environmentFactory();
212
+ },
213
+ textureMerger(): TextureMergerRenderer {
214
+ return renderer.textureMergerFactory();
215
+ },
216
+ pipeline(): Pipeline {
217
+ return renderer.pipelineFactory();
218
+ },
219
+ scene(): SceneRenderer {
220
+ return renderer.sceneRendererFactory();
221
+ },
222
+ shadowRenderer(): ShadowRenderer {
223
+ return renderer.shadowRendererFactory();
224
+ }
225
+ }
226
+ }
227
+
228
+ presentTexture(texture: Texture | null, {
229
+ clearBuffers = true,
230
+ shader = null,
231
+ viewport = null
232
+ }: {
233
+ clearBuffers?: boolean;
234
+ shader?: any;
235
+ viewport?: number[] | null;
236
+ } = {}): void {
237
+
238
+ }
239
+
240
+ // Compatibility function
241
+ supportsFeatures(feature: number): boolean {
242
+ return false;
243
+ }
244
+
245
+ getMaximumRenderTargets(): number {
246
+ return 1;
247
+ }
248
+ }