minerender 2.1.0-alpha.3 → 2.1.0-alpha.5

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.
@@ -1,5 +1,5 @@
1
1
  import * as three from 'three';
2
- import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, BufferGeometry as BufferGeometry$1, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
2
+ import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, BufferGeometry, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Object3DEventMap, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
3
3
  import * as nodeCanvas from 'canvas';
4
4
  import { ImageData as ImageData$1, CanvasRenderingContext2D } from 'canvas';
5
5
  import { AxiosResponse, AxiosRequestConfig } from 'axios';
@@ -7,8 +7,6 @@ import { Buffer as Buffer$1 } from 'buffer';
7
7
  import { NBT } from 'prismarine-nbt';
8
8
  import { ZipReader } from '@zip.js/zip.js';
9
9
  import { AsyncLoadingCache, SimpleCache } from '@inventivetalent/loading-cache';
10
- import { BufferGeometry } from 'three/src/core/BufferGeometry';
11
- import { Material as Material$1 } from 'three/src/materials/Material';
12
10
  import Stats from 'stats.js';
13
11
  import { EffectComposer } from 'postprocessing';
14
12
  import { LocalStorage } from 'node-persist';
@@ -432,7 +430,7 @@ interface Transformable {
432
430
  declare function isTransformable(obj: any): obj is Transformable;
433
431
 
434
432
  declare const changeEvent: {
435
- type: string;
433
+ type: "change";
436
434
  };
437
435
  type Maybe<T> = T | undefined;
438
436
  declare function md5(str: string): string;
@@ -887,7 +885,9 @@ interface MineRenderSceneOptions {
887
885
  }
888
886
  declare function isMineRenderScene(obj: any): obj is MineRenderScene;
889
887
 
890
- declare class SceneObject extends Object3D implements Disposable, Instanceable, Transformable {
888
+ declare class SceneObject extends Object3D<Object3DEventMap & {
889
+ change: {};
890
+ }> implements Disposable, Instanceable, Transformable {
891
891
  readonly isSceneObject: true;
892
892
  static readonly DEFAULT_OPTIONS: SceneObjectOptions;
893
893
  readonly options: SceneObjectOptions;
@@ -913,9 +913,9 @@ declare class SceneObject extends Object3D implements Disposable, Instanceable,
913
913
  */
914
914
  toggleGroupVisibility(name: string, visible?: boolean): boolean;
915
915
  protected addOrReplaceMesh(mesh: Mesh, parent: Object3D, name?: string): void;
916
- protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
917
- protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
918
- protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material$1 | Material$1[], count: number): InstancedMesh;
916
+ protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
917
+ protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
918
+ protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material | Material[], count: number): InstancedMesh;
919
919
  /**
920
920
  * Get a mesh by its name
921
921
  */
@@ -1320,15 +1320,14 @@ declare class Renderer implements Disposable {
1320
1320
  protected _scene: MineRenderScene;
1321
1321
  protected _camera: Camera;
1322
1322
  protected _renderer: WebGLRenderer;
1323
- protected _composer: EffectComposer;
1323
+ protected _composer?: EffectComposer;
1324
1324
  protected _controls?: OrbitControls;
1325
1325
  protected _stats?: Stats;
1326
1326
  protected _dirty: boolean;
1327
1327
  protected _animationLoop: any;
1328
- protected _fpsTimer: any;
1329
- protected _animationTimer?: NodeJS.Timeout;
1330
- protected _animationFrame?: number;
1328
+ protected _frameInterval?: number;
1331
1329
  protected _resizeListener?: () => void;
1330
+ private _nextFrameTime?;
1332
1331
  private _disposed;
1333
1332
  private readonly _debugHelpers;
1334
1333
  private readonly _eventDispatchers;
@@ -1337,7 +1336,7 @@ declare class Renderer implements Disposable {
1337
1336
  protected createScene(): MineRenderScene;
1338
1337
  protected createCamera(): Camera;
1339
1338
  protected createRenderer(): WebGLRenderer;
1340
- protected createComposer(): EffectComposer;
1339
+ protected createComposer(): Maybe<EffectComposer>;
1341
1340
  protected createControls(): Maybe<OrbitControls>;
1342
1341
  init(): void;
1343
1342
  get element(): Maybe<HTMLElement>;
@@ -1346,7 +1345,7 @@ declare class Renderer implements Disposable {
1346
1345
  * Redraws when the dispatcher emits the selected event. Registering the same pair twice has no effect.
1347
1346
  * The renderer removes its listener on disposal; the caller retains ownership of the dispatcher.
1348
1347
  */
1349
- registerEventDispatcher(dispatcher: EventDispatcher, changeEvent?: string): void;
1348
+ registerEventDispatcher(dispatcher: EventDispatcher<any>, changeEvent?: string): void;
1350
1349
  resize(width: number, height: number): void;
1351
1350
  get dirty(): boolean;
1352
1351
  set dirty(dirty: boolean);
@@ -1366,7 +1365,7 @@ declare class Renderer implements Disposable {
1366
1365
  get scene(): MineRenderScene;
1367
1366
  get camera(): Camera;
1368
1367
  get renderer(): WebGLRenderer;
1369
- get composer(): EffectComposer;
1368
+ get composer(): Maybe<EffectComposer>;
1370
1369
  /** Renderer-owned controls, or undefined when disabled at construction or after disposal. */
1371
1370
  get controls(): Maybe<OrbitControls>;
1372
1371
  }
@@ -1395,6 +1394,7 @@ interface CameraOptions {
1395
1394
  lookingAt: Vector3 | TripleArray;
1396
1395
  }
1397
1396
  interface RenderOptions {
1397
+ /** Maximum draw rate (60 by default); zero or a negative value disables the limit. */
1398
1398
  fpsLimit: number;
1399
1399
  stats: boolean;
1400
1400
  antialias: boolean;
@@ -1422,7 +1422,7 @@ declare class SceneInspector {
1422
1422
  private selectedObject?;
1423
1423
  constructor(renderer: Renderer);
1424
1424
  protected init(): void;
1425
- findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry, three.Material | three.Material[]>[];
1425
+ findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry<three.NormalBufferAttributes>, three.Material | three.Material[], three.Object3DEventMap>[];
1426
1426
  onClick(event: any): void;
1427
1427
  appendTo(el: HTMLElement): void;
1428
1428
  protected handleRaycasterObjects(intersections: Intersection[]): void;
@@ -1524,12 +1524,12 @@ declare class Textures {
1524
1524
  static getImage(key: TextureKey): Texture;
1525
1525
  }
1526
1526
 
1527
- declare function mergeBufferGeometries(geometries: BufferGeometry$1[], useGroups?: boolean): BufferGeometry$1;
1527
+ declare function mergeBufferGeometries(geometries: BufferGeometry[], useGroups?: boolean): BufferGeometry;
1528
1528
  declare function mergeBufferAttributes(attributes: BufferAttribute[]): BufferAttribute;
1529
1529
  declare function interleaveAttributes(attributes: BufferAttribute[]): InterleavedBufferAttribute;
1530
- declare function estimateBytesUsed(geometry: BufferGeometry$1): number;
1531
- declare function mergeVertices(geometry: BufferGeometry$1, tolerance?: number): BufferGeometry$1;
1532
- declare function toTrianglesDrawMode(geometry: BufferGeometry$1, drawMode: TrianglesDrawModes): BufferGeometry$1;
1530
+ declare function estimateBytesUsed(geometry: BufferGeometry): number;
1531
+ declare function mergeVertices(geometry: BufferGeometry, tolerance?: number): BufferGeometry;
1532
+ declare function toTrianglesDrawMode(geometry: BufferGeometry, drawMode: TrianglesDrawModes): BufferGeometry;
1533
1533
  declare function computeMorphedAttributes(object: Mesh | Line | Points): object;
1534
1534
 
1535
1535
  interface BlockInfo {
@@ -1,5 +1,5 @@
1
1
  import * as three from 'three';
2
- import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, BufferGeometry as BufferGeometry$1, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
2
+ import { Vector3, PixelFormat, BoxGeometry, Material, Mesh, Euler, Vector2, BufferAttribute, Float32BufferAttribute, BufferGeometry, Object3D, Box3, InstancedMesh, PerspectiveCamera, OrthographicCamera, Matrix4, Scene, Object3DEventMap, Texture, Camera, MOUSE, TOUCH, WebGLRenderer, EventDispatcher, Raycaster, Intersection, CanvasTexture, InterleavedBufferAttribute, TrianglesDrawModes, Line, Points } from 'three';
3
3
  import * as nodeCanvas from 'canvas';
4
4
  import { ImageData as ImageData$1, CanvasRenderingContext2D } from 'canvas';
5
5
  import { AxiosResponse, AxiosRequestConfig } from 'axios';
@@ -7,8 +7,6 @@ import { Buffer as Buffer$1 } from 'buffer';
7
7
  import { NBT } from 'prismarine-nbt';
8
8
  import { ZipReader } from '@zip.js/zip.js';
9
9
  import { AsyncLoadingCache, SimpleCache } from '@inventivetalent/loading-cache';
10
- import { BufferGeometry } from 'three/src/core/BufferGeometry';
11
- import { Material as Material$1 } from 'three/src/materials/Material';
12
10
  import Stats from 'stats.js';
13
11
  import { EffectComposer } from 'postprocessing';
14
12
  import { LocalStorage } from 'node-persist';
@@ -432,7 +430,7 @@ interface Transformable {
432
430
  declare function isTransformable(obj: any): obj is Transformable;
433
431
 
434
432
  declare const changeEvent: {
435
- type: string;
433
+ type: "change";
436
434
  };
437
435
  type Maybe<T> = T | undefined;
438
436
  declare function md5(str: string): string;
@@ -887,7 +885,9 @@ interface MineRenderSceneOptions {
887
885
  }
888
886
  declare function isMineRenderScene(obj: any): obj is MineRenderScene;
889
887
 
890
- declare class SceneObject extends Object3D implements Disposable, Instanceable, Transformable {
888
+ declare class SceneObject extends Object3D<Object3DEventMap & {
889
+ change: {};
890
+ }> implements Disposable, Instanceable, Transformable {
891
891
  readonly isSceneObject: true;
892
892
  static readonly DEFAULT_OPTIONS: SceneObjectOptions;
893
893
  readonly options: SceneObjectOptions;
@@ -913,9 +913,9 @@ declare class SceneObject extends Object3D implements Disposable, Instanceable,
913
913
  */
914
914
  toggleGroupVisibility(name: string, visible?: boolean): boolean;
915
915
  protected addOrReplaceMesh(mesh: Mesh, parent: Object3D, name?: string): void;
916
- protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
917
- protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
918
- protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material$1 | Material$1[], count: number): InstancedMesh;
916
+ protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
917
+ protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
918
+ protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material | Material[], count: number): InstancedMesh;
919
919
  /**
920
920
  * Get a mesh by its name
921
921
  */
@@ -1320,15 +1320,14 @@ declare class Renderer implements Disposable {
1320
1320
  protected _scene: MineRenderScene;
1321
1321
  protected _camera: Camera;
1322
1322
  protected _renderer: WebGLRenderer;
1323
- protected _composer: EffectComposer;
1323
+ protected _composer?: EffectComposer;
1324
1324
  protected _controls?: OrbitControls;
1325
1325
  protected _stats?: Stats;
1326
1326
  protected _dirty: boolean;
1327
1327
  protected _animationLoop: any;
1328
- protected _fpsTimer: any;
1329
- protected _animationTimer?: NodeJS.Timeout;
1330
- protected _animationFrame?: number;
1328
+ protected _frameInterval?: number;
1331
1329
  protected _resizeListener?: () => void;
1330
+ private _nextFrameTime?;
1332
1331
  private _disposed;
1333
1332
  private readonly _debugHelpers;
1334
1333
  private readonly _eventDispatchers;
@@ -1337,7 +1336,7 @@ declare class Renderer implements Disposable {
1337
1336
  protected createScene(): MineRenderScene;
1338
1337
  protected createCamera(): Camera;
1339
1338
  protected createRenderer(): WebGLRenderer;
1340
- protected createComposer(): EffectComposer;
1339
+ protected createComposer(): Maybe<EffectComposer>;
1341
1340
  protected createControls(): Maybe<OrbitControls>;
1342
1341
  init(): void;
1343
1342
  get element(): Maybe<HTMLElement>;
@@ -1346,7 +1345,7 @@ declare class Renderer implements Disposable {
1346
1345
  * Redraws when the dispatcher emits the selected event. Registering the same pair twice has no effect.
1347
1346
  * The renderer removes its listener on disposal; the caller retains ownership of the dispatcher.
1348
1347
  */
1349
- registerEventDispatcher(dispatcher: EventDispatcher, changeEvent?: string): void;
1348
+ registerEventDispatcher(dispatcher: EventDispatcher<any>, changeEvent?: string): void;
1350
1349
  resize(width: number, height: number): void;
1351
1350
  get dirty(): boolean;
1352
1351
  set dirty(dirty: boolean);
@@ -1366,7 +1365,7 @@ declare class Renderer implements Disposable {
1366
1365
  get scene(): MineRenderScene;
1367
1366
  get camera(): Camera;
1368
1367
  get renderer(): WebGLRenderer;
1369
- get composer(): EffectComposer;
1368
+ get composer(): Maybe<EffectComposer>;
1370
1369
  /** Renderer-owned controls, or undefined when disabled at construction or after disposal. */
1371
1370
  get controls(): Maybe<OrbitControls>;
1372
1371
  }
@@ -1395,6 +1394,7 @@ interface CameraOptions {
1395
1394
  lookingAt: Vector3 | TripleArray;
1396
1395
  }
1397
1396
  interface RenderOptions {
1397
+ /** Maximum draw rate (60 by default); zero or a negative value disables the limit. */
1398
1398
  fpsLimit: number;
1399
1399
  stats: boolean;
1400
1400
  antialias: boolean;
@@ -1422,7 +1422,7 @@ declare class SceneInspector {
1422
1422
  private selectedObject?;
1423
1423
  constructor(renderer: Renderer);
1424
1424
  protected init(): void;
1425
- findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry, three.Material | three.Material[]>[];
1425
+ findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry<three.NormalBufferAttributes>, three.Material | three.Material[], three.Object3DEventMap>[];
1426
1426
  onClick(event: any): void;
1427
1427
  appendTo(el: HTMLElement): void;
1428
1428
  protected handleRaycasterObjects(intersections: Intersection[]): void;
@@ -1524,12 +1524,12 @@ declare class Textures {
1524
1524
  static getImage(key: TextureKey): Texture;
1525
1525
  }
1526
1526
 
1527
- declare function mergeBufferGeometries(geometries: BufferGeometry$1[], useGroups?: boolean): BufferGeometry$1;
1527
+ declare function mergeBufferGeometries(geometries: BufferGeometry[], useGroups?: boolean): BufferGeometry;
1528
1528
  declare function mergeBufferAttributes(attributes: BufferAttribute[]): BufferAttribute;
1529
1529
  declare function interleaveAttributes(attributes: BufferAttribute[]): InterleavedBufferAttribute;
1530
- declare function estimateBytesUsed(geometry: BufferGeometry$1): number;
1531
- declare function mergeVertices(geometry: BufferGeometry$1, tolerance?: number): BufferGeometry$1;
1532
- declare function toTrianglesDrawMode(geometry: BufferGeometry$1, drawMode: TrianglesDrawModes): BufferGeometry$1;
1530
+ declare function estimateBytesUsed(geometry: BufferGeometry): number;
1531
+ declare function mergeVertices(geometry: BufferGeometry, tolerance?: number): BufferGeometry;
1532
+ declare function toTrianglesDrawMode(geometry: BufferGeometry, drawMode: TrianglesDrawModes): BufferGeometry;
1533
1533
  declare function computeMorphedAttributes(object: Mesh | Line | Points): object;
1534
1534
 
1535
1535
  interface BlockInfo {
@@ -594,6 +594,7 @@ var import_three5 = require("three");
594
594
 
595
595
  // src/texture/TextureLoader.ts
596
596
  var import_three4 = require("three");
597
+ var THREE = __toESM(require("three"));
597
598
 
598
599
  // src/canvas/CanvasCompat.ts
599
600
  function createImage(width, height) {
@@ -982,6 +983,7 @@ var TextureLoader = class {
982
983
  }
983
984
  static loadInBackground(src, format = import_three4.RGBAFormat, rotation = 0) {
984
985
  const texture = this.createTexture();
986
+ texture.colorSpace = THREE.SRGBColorSpace;
985
987
  const image = ImageLoader.loadElement(src);
986
988
  image.onload = function() {
987
989
  texture.needsUpdate = true;
@@ -993,6 +995,7 @@ var TextureLoader = class {
993
995
  }
994
996
  static load(src, format = import_three4.RGBAFormat, rotation = 0) {
995
997
  const texture = new import_three4.Texture();
998
+ texture.colorSpace = THREE.SRGBColorSpace;
996
999
  ImageLoader.getData(src).then((image) => {
997
1000
  texture.needsUpdate = true;
998
1001
  texture.image = image;
@@ -1004,11 +1007,11 @@ var TextureLoader = class {
1004
1007
  };
1005
1008
 
1006
1009
  // src/texture/Textures.ts
1007
- var THREE = __toESM(require("three"));
1010
+ var THREE2 = __toESM(require("three"));
1008
1011
  var Textures = class _Textures {
1009
1012
  static initTextureProps(texture) {
1010
- texture.magFilter = THREE.NearestFilter;
1011
- texture.minFilter = THREE.NearestFilter;
1013
+ texture.magFilter = THREE2.NearestFilter;
1014
+ texture.minFilter = THREE2.NearestFilter;
1012
1015
  texture.anisotropy = 0;
1013
1016
  return texture;
1014
1017
  }
@@ -1019,7 +1022,9 @@ var Textures = class _Textures {
1019
1022
  return new import_three5.Texture();
1020
1023
  }
1021
1024
  static createCanvasTexture(canvas) {
1022
- return this.initTextureProps(new import_three5.CanvasTexture(canvas));
1025
+ const texture = new import_three5.CanvasTexture(canvas);
1026
+ texture.colorSpace = THREE2.SRGBColorSpace;
1027
+ return this.initTextureProps(texture);
1023
1028
  }
1024
1029
  static getImage(key) {
1025
1030
  const keyStr = serializeTextureKey(key);
@@ -1136,6 +1141,9 @@ var _Materials = class _Materials {
1136
1141
  gl_FragColor = vec4(lift + color.rgb * light2, 1.0);
1137
1142
 
1138
1143
  }
1144
+
1145
+ #include <tonemapping_fragment>
1146
+ #include <colorspace_fragment>
1139
1147
  }
1140
1148
  `;
1141
1149
  try {
@@ -3013,7 +3021,7 @@ function isSceneObject(obj) {
3013
3021
  // src/entity/scene/EntityObject.ts
3014
3022
  var import_ts_deepmerge5 = __toESM(require_dist());
3015
3023
  var import_three11 = require("three");
3016
- var THREE2 = __toESM(require("three"));
3024
+ var THREE3 = __toESM(require("three"));
3017
3025
  var EntityObject = class extends SceneObject {
3018
3026
  constructor(entity, options) {
3019
3027
  super();
@@ -3058,8 +3066,8 @@ var EntityObject = class extends SceneObject {
3058
3066
  const l = cube.maxZ - cube.minZ;
3059
3067
  const uv = texture.toUvArray(w, h, l);
3060
3068
  const cubeGeo = this._getBoxGeometryForDimensionsAndUv(w, h, l, uv).clone();
3061
- cubeGeo.applyMatrix4(new THREE2.Matrix4().makeTranslation(w / 2, h / 2, l / 2));
3062
- cubeGeo.applyMatrix4(new THREE2.Matrix4().makeTranslation(cube.minX, cube.minY, cube.minZ));
3069
+ cubeGeo.applyMatrix4(new THREE3.Matrix4().makeTranslation(w / 2, h / 2, l / 2));
3070
+ cubeGeo.applyMatrix4(new THREE3.Matrix4().makeTranslation(cube.minX, cube.minY, cube.minZ));
3063
3071
  applyModelPartRotation(part, cubeGeo);
3064
3072
  const mesh = this.createMesh(partName, cubeGeo, mat);
3065
3073
  partAnchor.add(mesh);
@@ -6164,8 +6172,6 @@ var MapControls = class extends OrbitControls {
6164
6172
  var _Renderer = class _Renderer {
6165
6173
  constructor(options) {
6166
6174
  this._dirty = true;
6167
- this._animationTimer = void 0;
6168
- this._animationFrame = void 0;
6169
6175
  this._resizeListener = void 0;
6170
6176
  this._disposed = false;
6171
6177
  this._debugHelpers = [];
@@ -6175,7 +6181,7 @@ var _Renderer = class _Renderer {
6175
6181
  };
6176
6182
  this.options = (0, import_ts_deepmerge10.default)({}, _Renderer.DEFAULT_OPTIONS, options ?? {});
6177
6183
  this._animationLoop = this.animate.bind(this);
6178
- this._fpsTimer = this.options.render.fpsLimit > 0 ? 1e3 / this.options.render.fpsLimit : void 0;
6184
+ this._frameInterval = this.options.render.fpsLimit > 0 ? 1e3 / this.options.render.fpsLimit : void 0;
6179
6185
  this._scene = this.createScene();
6180
6186
  this._camera = this.createCamera();
6181
6187
  this._renderer = this.createRenderer();
@@ -6222,13 +6228,13 @@ var _Renderer = class _Renderer {
6222
6228
  renderer.setClearColor(0, 0);
6223
6229
  renderer.shadowMap.enabled = true;
6224
6230
  renderer.shadowMap.type = import_three19.PCFSoftShadowMap;
6225
- renderer.outputEncoding = import_three19.LinearEncoding;
6231
+ renderer.outputColorSpace = import_three19.SRGBColorSpace;
6226
6232
  renderer.setSize(this.viewWidth, this.viewHeight);
6227
6233
  return renderer;
6228
6234
  }
6229
6235
  createComposer() {
6236
+ if (!this.options.composer.enabled) return void 0;
6230
6237
  const composer = new import_postprocessing.EffectComposer(this.renderer);
6231
- if (!this.options.composer.enabled) return composer;
6232
6238
  composer.setSize(this.viewWidth, this.viewHeight);
6233
6239
  composer.addPass(new import_postprocessing.RenderPass(this.scene, this.camera));
6234
6240
  return composer;
@@ -6326,6 +6332,7 @@ var _Renderer = class _Renderer {
6326
6332
  dispatcher.addEventListener(changeEvent2, this._changeListener);
6327
6333
  }
6328
6334
  resize(width, height) {
6335
+ var _a;
6329
6336
  if (this._disposed) return;
6330
6337
  if (isPerspectiveCamera(this.camera)) {
6331
6338
  this.camera.aspect = width / height;
@@ -6338,7 +6345,7 @@ var _Renderer = class _Renderer {
6338
6345
  this.camera.updateProjectionMatrix();
6339
6346
  }
6340
6347
  this.renderer.setSize(width, height);
6341
- this.composer.setSize(width, height);
6348
+ (_a = this.composer) == null ? void 0 : _a.setSize(width, height);
6342
6349
  this._dirty = true;
6343
6350
  }
6344
6351
  //<editor-fold desc="RENDER">
@@ -6357,12 +6364,7 @@ var _Renderer = class _Renderer {
6357
6364
  stop() {
6358
6365
  if (this._disposed) return;
6359
6366
  this.renderer.setAnimationLoop(null);
6360
- if (this._animationTimer)
6361
- clearTimeout(this._animationTimer);
6362
- this._animationTimer = void 0;
6363
- if (this._animationFrame)
6364
- cancelAnimationFrame(this._animationFrame);
6365
- this._animationFrame = void 0;
6367
+ this._nextFrameTime = void 0;
6366
6368
  }
6367
6369
  /**
6368
6370
  * Stops rendering and releases owned resources. Repeated calls have no effect, and a disposed
@@ -6370,7 +6372,7 @@ var _Renderer = class _Renderer {
6370
6372
  * controls must be managed by their owners.
6371
6373
  */
6372
6374
  dispose() {
6373
- var _a;
6375
+ var _a, _b;
6374
6376
  if (this._disposed) return;
6375
6377
  this.stop();
6376
6378
  this._disposed = true;
@@ -6403,26 +6405,31 @@ var _Renderer = class _Renderer {
6403
6405
  }
6404
6406
  }
6405
6407
  this._debugHelpers.length = 0;
6406
- this.composer.dispose();
6408
+ (_b = this.composer) == null ? void 0 : _b.dispose();
6407
6409
  this.renderer.dispose();
6408
6410
  this.renderer.forceContextLoss();
6409
6411
  }
6410
- animate(t) {
6412
+ animate(t = performance.now()) {
6411
6413
  var _a;
6412
6414
  if (this._disposed) return;
6413
- if (this._stats) {
6414
- this._stats.begin();
6415
- }
6416
6415
  if ((_a = this._controls) == null ? void 0 : _a.enabled) {
6417
6416
  this._controls.update();
6418
6417
  }
6419
6418
  if (this._disposed) return;
6420
- if (this.dirty || this.options.render.renderAlways) {
6421
- if (this.options.composer.enabled) {
6422
- this.composer.render();
6423
- } else {
6424
- this.renderer.render(this.scene, this.camera);
6425
- }
6419
+ if (!this.dirty && !this.options.render.renderAlways) return;
6420
+ const interval = this._frameInterval;
6421
+ if (interval) {
6422
+ const next = this._nextFrameTime;
6423
+ if (next !== void 0 && t + 0.1 < next) return;
6424
+ this._nextFrameTime = next !== void 0 && t - next < interval ? next + interval : t + interval;
6425
+ }
6426
+ if (this._stats) {
6427
+ this._stats.begin();
6428
+ }
6429
+ if (this.options.composer.enabled && this.composer) {
6430
+ this.composer.render();
6431
+ } else {
6432
+ this.renderer.render(this.scene, this.camera);
6426
6433
  }
6427
6434
  this.dirty = false;
6428
6435
  if (this._stats) {