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
 
@@ -431,7 +429,7 @@ interface Transformable {
431
429
  declare function isTransformable(obj: any): obj is Transformable;
432
430
 
433
431
  declare const changeEvent: {
434
- type: string;
432
+ type: "change";
435
433
  };
436
434
  type Maybe<T> = T | undefined;
437
435
  declare function md5(str: string): string;
@@ -886,7 +884,9 @@ interface MineRenderSceneOptions {
886
884
  }
887
885
  declare function isMineRenderScene(obj: any): obj is MineRenderScene;
888
886
 
889
- declare class SceneObject extends Object3D implements Disposable, Instanceable, Transformable {
887
+ declare class SceneObject extends Object3D<Object3DEventMap & {
888
+ change: {};
889
+ }> implements Disposable, Instanceable, Transformable {
890
890
  readonly isSceneObject: true;
891
891
  static readonly DEFAULT_OPTIONS: SceneObjectOptions;
892
892
  readonly options: SceneObjectOptions;
@@ -912,9 +912,9 @@ declare class SceneObject extends Object3D implements Disposable, Instanceable,
912
912
  */
913
913
  toggleGroupVisibility(name: string, visible?: boolean): boolean;
914
914
  protected addOrReplaceMesh(mesh: Mesh, parent: Object3D, name?: string): void;
915
- protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
916
- protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
917
- protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material$1 | Material$1[], count: number): InstancedMesh;
915
+ protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
916
+ protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
917
+ protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material | Material[], count: number): InstancedMesh;
918
918
  /**
919
919
  * Get a mesh by its name
920
920
  */
@@ -1319,15 +1319,14 @@ declare class Renderer implements Disposable {
1319
1319
  protected _scene: MineRenderScene;
1320
1320
  protected _camera: Camera;
1321
1321
  protected _renderer: WebGLRenderer;
1322
- protected _composer: EffectComposer;
1322
+ protected _composer?: EffectComposer;
1323
1323
  protected _controls?: OrbitControls;
1324
1324
  protected _stats?: Stats;
1325
1325
  protected _dirty: boolean;
1326
1326
  protected _animationLoop: any;
1327
- protected _fpsTimer: any;
1328
- protected _animationTimer?: NodeJS.Timeout;
1329
- protected _animationFrame?: number;
1327
+ protected _frameInterval?: number;
1330
1328
  protected _resizeListener?: () => void;
1329
+ private _nextFrameTime?;
1331
1330
  private _disposed;
1332
1331
  private readonly _debugHelpers;
1333
1332
  private readonly _eventDispatchers;
@@ -1336,7 +1335,7 @@ declare class Renderer implements Disposable {
1336
1335
  protected createScene(): MineRenderScene;
1337
1336
  protected createCamera(): Camera;
1338
1337
  protected createRenderer(): WebGLRenderer;
1339
- protected createComposer(): EffectComposer;
1338
+ protected createComposer(): Maybe<EffectComposer>;
1340
1339
  protected createControls(): Maybe<OrbitControls>;
1341
1340
  init(): void;
1342
1341
  get element(): Maybe<HTMLElement>;
@@ -1345,7 +1344,7 @@ declare class Renderer implements Disposable {
1345
1344
  * Redraws when the dispatcher emits the selected event. Registering the same pair twice has no effect.
1346
1345
  * The renderer removes its listener on disposal; the caller retains ownership of the dispatcher.
1347
1346
  */
1348
- registerEventDispatcher(dispatcher: EventDispatcher, changeEvent?: string): void;
1347
+ registerEventDispatcher(dispatcher: EventDispatcher<any>, changeEvent?: string): void;
1349
1348
  resize(width: number, height: number): void;
1350
1349
  get dirty(): boolean;
1351
1350
  set dirty(dirty: boolean);
@@ -1365,7 +1364,7 @@ declare class Renderer implements Disposable {
1365
1364
  get scene(): MineRenderScene;
1366
1365
  get camera(): Camera;
1367
1366
  get renderer(): WebGLRenderer;
1368
- get composer(): EffectComposer;
1367
+ get composer(): Maybe<EffectComposer>;
1369
1368
  /** Renderer-owned controls, or undefined when disabled at construction or after disposal. */
1370
1369
  get controls(): Maybe<OrbitControls>;
1371
1370
  }
@@ -1394,6 +1393,7 @@ interface CameraOptions {
1394
1393
  lookingAt: Vector3 | TripleArray;
1395
1394
  }
1396
1395
  interface RenderOptions {
1396
+ /** Maximum draw rate (60 by default); zero or a negative value disables the limit. */
1397
1397
  fpsLimit: number;
1398
1398
  stats: boolean;
1399
1399
  antialias: boolean;
@@ -1421,7 +1421,7 @@ declare class SceneInspector {
1421
1421
  private selectedObject?;
1422
1422
  constructor(renderer: Renderer);
1423
1423
  protected init(): void;
1424
- findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry, three.Material | three.Material[]>[];
1424
+ findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry<three.NormalBufferAttributes>, three.Material | three.Material[], three.Object3DEventMap>[];
1425
1425
  onClick(event: any): void;
1426
1426
  appendTo(el: HTMLElement): void;
1427
1427
  protected handleRaycasterObjects(intersections: Intersection[]): void;
@@ -1523,12 +1523,12 @@ declare class Textures {
1523
1523
  static getImage(key: TextureKey): Texture;
1524
1524
  }
1525
1525
 
1526
- declare function mergeBufferGeometries(geometries: BufferGeometry$1[], useGroups?: boolean): BufferGeometry$1;
1526
+ declare function mergeBufferGeometries(geometries: BufferGeometry[], useGroups?: boolean): BufferGeometry;
1527
1527
  declare function mergeBufferAttributes(attributes: BufferAttribute[]): BufferAttribute;
1528
1528
  declare function interleaveAttributes(attributes: BufferAttribute[]): InterleavedBufferAttribute;
1529
- declare function estimateBytesUsed(geometry: BufferGeometry$1): number;
1530
- declare function mergeVertices(geometry: BufferGeometry$1, tolerance?: number): BufferGeometry$1;
1531
- declare function toTrianglesDrawMode(geometry: BufferGeometry$1, drawMode: TrianglesDrawModes): BufferGeometry$1;
1529
+ declare function estimateBytesUsed(geometry: BufferGeometry): number;
1530
+ declare function mergeVertices(geometry: BufferGeometry, tolerance?: number): BufferGeometry;
1531
+ declare function toTrianglesDrawMode(geometry: BufferGeometry, drawMode: TrianglesDrawModes): BufferGeometry;
1532
1532
  declare function computeMorphedAttributes(object: Mesh | Line | Points): object;
1533
1533
 
1534
1534
  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
 
@@ -431,7 +429,7 @@ interface Transformable {
431
429
  declare function isTransformable(obj: any): obj is Transformable;
432
430
 
433
431
  declare const changeEvent: {
434
- type: string;
432
+ type: "change";
435
433
  };
436
434
  type Maybe<T> = T | undefined;
437
435
  declare function md5(str: string): string;
@@ -886,7 +884,9 @@ interface MineRenderSceneOptions {
886
884
  }
887
885
  declare function isMineRenderScene(obj: any): obj is MineRenderScene;
888
886
 
889
- declare class SceneObject extends Object3D implements Disposable, Instanceable, Transformable {
887
+ declare class SceneObject extends Object3D<Object3DEventMap & {
888
+ change: {};
889
+ }> implements Disposable, Instanceable, Transformable {
890
890
  readonly isSceneObject: true;
891
891
  static readonly DEFAULT_OPTIONS: SceneObjectOptions;
892
892
  readonly options: SceneObjectOptions;
@@ -912,9 +912,9 @@ declare class SceneObject extends Object3D implements Disposable, Instanceable,
912
912
  */
913
913
  toggleGroupVisibility(name: string, visible?: boolean): boolean;
914
914
  protected addOrReplaceMesh(mesh: Mesh, parent: Object3D, name?: string): void;
915
- protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
916
- protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material$1 | Material$1[], offsetAxis?: Axis, offset?: number): Mesh;
917
- protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material$1 | Material$1[], count: number): InstancedMesh;
915
+ protected createAndAddMesh(name?: string, group?: Object3D, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
916
+ protected createMesh(name?: string, geometry?: BufferGeometry, material?: Material | Material[], offsetAxis?: Axis, offset?: number): Mesh;
917
+ protected createInstancedMesh(name: Maybe<string>, geometry: BufferGeometry, material: Material | Material[], count: number): InstancedMesh;
918
918
  /**
919
919
  * Get a mesh by its name
920
920
  */
@@ -1319,15 +1319,14 @@ declare class Renderer implements Disposable {
1319
1319
  protected _scene: MineRenderScene;
1320
1320
  protected _camera: Camera;
1321
1321
  protected _renderer: WebGLRenderer;
1322
- protected _composer: EffectComposer;
1322
+ protected _composer?: EffectComposer;
1323
1323
  protected _controls?: OrbitControls;
1324
1324
  protected _stats?: Stats;
1325
1325
  protected _dirty: boolean;
1326
1326
  protected _animationLoop: any;
1327
- protected _fpsTimer: any;
1328
- protected _animationTimer?: NodeJS.Timeout;
1329
- protected _animationFrame?: number;
1327
+ protected _frameInterval?: number;
1330
1328
  protected _resizeListener?: () => void;
1329
+ private _nextFrameTime?;
1331
1330
  private _disposed;
1332
1331
  private readonly _debugHelpers;
1333
1332
  private readonly _eventDispatchers;
@@ -1336,7 +1335,7 @@ declare class Renderer implements Disposable {
1336
1335
  protected createScene(): MineRenderScene;
1337
1336
  protected createCamera(): Camera;
1338
1337
  protected createRenderer(): WebGLRenderer;
1339
- protected createComposer(): EffectComposer;
1338
+ protected createComposer(): Maybe<EffectComposer>;
1340
1339
  protected createControls(): Maybe<OrbitControls>;
1341
1340
  init(): void;
1342
1341
  get element(): Maybe<HTMLElement>;
@@ -1345,7 +1344,7 @@ declare class Renderer implements Disposable {
1345
1344
  * Redraws when the dispatcher emits the selected event. Registering the same pair twice has no effect.
1346
1345
  * The renderer removes its listener on disposal; the caller retains ownership of the dispatcher.
1347
1346
  */
1348
- registerEventDispatcher(dispatcher: EventDispatcher, changeEvent?: string): void;
1347
+ registerEventDispatcher(dispatcher: EventDispatcher<any>, changeEvent?: string): void;
1349
1348
  resize(width: number, height: number): void;
1350
1349
  get dirty(): boolean;
1351
1350
  set dirty(dirty: boolean);
@@ -1365,7 +1364,7 @@ declare class Renderer implements Disposable {
1365
1364
  get scene(): MineRenderScene;
1366
1365
  get camera(): Camera;
1367
1366
  get renderer(): WebGLRenderer;
1368
- get composer(): EffectComposer;
1367
+ get composer(): Maybe<EffectComposer>;
1369
1368
  /** Renderer-owned controls, or undefined when disabled at construction or after disposal. */
1370
1369
  get controls(): Maybe<OrbitControls>;
1371
1370
  }
@@ -1394,6 +1393,7 @@ interface CameraOptions {
1394
1393
  lookingAt: Vector3 | TripleArray;
1395
1394
  }
1396
1395
  interface RenderOptions {
1396
+ /** Maximum draw rate (60 by default); zero or a negative value disables the limit. */
1397
1397
  fpsLimit: number;
1398
1398
  stats: boolean;
1399
1399
  antialias: boolean;
@@ -1421,7 +1421,7 @@ declare class SceneInspector {
1421
1421
  private selectedObject?;
1422
1422
  constructor(renderer: Renderer);
1423
1423
  protected init(): void;
1424
- findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry, three.Material | three.Material[]>[];
1424
+ findMeshChildren(from: Object3D, out?: Mesh[]): Mesh<three.BufferGeometry<three.NormalBufferAttributes>, three.Material | three.Material[], three.Object3DEventMap>[];
1425
1425
  onClick(event: any): void;
1426
1426
  appendTo(el: HTMLElement): void;
1427
1427
  protected handleRaycasterObjects(intersections: Intersection[]): void;
@@ -1523,12 +1523,12 @@ declare class Textures {
1523
1523
  static getImage(key: TextureKey): Texture;
1524
1524
  }
1525
1525
 
1526
- declare function mergeBufferGeometries(geometries: BufferGeometry$1[], useGroups?: boolean): BufferGeometry$1;
1526
+ declare function mergeBufferGeometries(geometries: BufferGeometry[], useGroups?: boolean): BufferGeometry;
1527
1527
  declare function mergeBufferAttributes(attributes: BufferAttribute[]): BufferAttribute;
1528
1528
  declare function interleaveAttributes(attributes: BufferAttribute[]): InterleavedBufferAttribute;
1529
- declare function estimateBytesUsed(geometry: BufferGeometry$1): number;
1530
- declare function mergeVertices(geometry: BufferGeometry$1, tolerance?: number): BufferGeometry$1;
1531
- declare function toTrianglesDrawMode(geometry: BufferGeometry$1, drawMode: TrianglesDrawModes): BufferGeometry$1;
1529
+ declare function estimateBytesUsed(geometry: BufferGeometry): number;
1530
+ declare function mergeVertices(geometry: BufferGeometry, tolerance?: number): BufferGeometry;
1531
+ declare function toTrianglesDrawMode(geometry: BufferGeometry, drawMode: TrianglesDrawModes): BufferGeometry;
1532
1532
  declare function computeMorphedAttributes(object: Mesh | Line | Points): object;
1533
1533
 
1534
1534
  interface BlockInfo {
@@ -631,6 +631,7 @@ var import_three5 = require("three");
631
631
 
632
632
  // src/texture/TextureLoader.ts
633
633
  var import_three4 = require("three");
634
+ var THREE = __toESM(require("three"));
634
635
 
635
636
  // src/canvas/CanvasCompat.ts
636
637
  function createImage(width, height) {
@@ -1019,6 +1020,7 @@ var TextureLoader = class {
1019
1020
  }
1020
1021
  static loadInBackground(src, format = import_three4.RGBAFormat, rotation = 0) {
1021
1022
  const texture = this.createTexture();
1023
+ texture.colorSpace = THREE.SRGBColorSpace;
1022
1024
  const image = ImageLoader.loadElement(src);
1023
1025
  image.onload = function() {
1024
1026
  texture.needsUpdate = true;
@@ -1030,6 +1032,7 @@ var TextureLoader = class {
1030
1032
  }
1031
1033
  static load(src, format = import_three4.RGBAFormat, rotation = 0) {
1032
1034
  const texture = new import_three4.Texture();
1035
+ texture.colorSpace = THREE.SRGBColorSpace;
1033
1036
  ImageLoader.getData(src).then((image) => {
1034
1037
  texture.needsUpdate = true;
1035
1038
  texture.image = image;
@@ -1041,11 +1044,11 @@ var TextureLoader = class {
1041
1044
  };
1042
1045
 
1043
1046
  // src/texture/Textures.ts
1044
- var THREE = __toESM(require("three"));
1047
+ var THREE2 = __toESM(require("three"));
1045
1048
  var Textures = class _Textures {
1046
1049
  static initTextureProps(texture) {
1047
- texture.magFilter = THREE.NearestFilter;
1048
- texture.minFilter = THREE.NearestFilter;
1050
+ texture.magFilter = THREE2.NearestFilter;
1051
+ texture.minFilter = THREE2.NearestFilter;
1049
1052
  texture.anisotropy = 0;
1050
1053
  return texture;
1051
1054
  }
@@ -1056,7 +1059,9 @@ var Textures = class _Textures {
1056
1059
  return new import_three5.Texture();
1057
1060
  }
1058
1061
  static createCanvasTexture(canvas) {
1059
- return this.initTextureProps(new import_three5.CanvasTexture(canvas));
1062
+ const texture = new import_three5.CanvasTexture(canvas);
1063
+ texture.colorSpace = THREE2.SRGBColorSpace;
1064
+ return this.initTextureProps(texture);
1060
1065
  }
1061
1066
  static getImage(key) {
1062
1067
  const keyStr = serializeTextureKey(key);
@@ -1173,6 +1178,9 @@ var _Materials = class _Materials {
1173
1178
  gl_FragColor = vec4(lift + color.rgb * light2, 1.0);
1174
1179
 
1175
1180
  }
1181
+
1182
+ #include <tonemapping_fragment>
1183
+ #include <colorspace_fragment>
1176
1184
  }
1177
1185
  `;
1178
1186
  try {
@@ -3047,7 +3055,7 @@ function isSceneObject(obj) {
3047
3055
  // src/entity/scene/EntityObject.ts
3048
3056
  var import_ts_deepmerge5 = __toESM(require_dist());
3049
3057
  var import_three11 = require("three");
3050
- var THREE2 = __toESM(require("three"));
3058
+ var THREE3 = __toESM(require("three"));
3051
3059
  var EntityObject = class extends SceneObject {
3052
3060
  constructor(entity, options) {
3053
3061
  super();
@@ -3091,8 +3099,8 @@ var EntityObject = class extends SceneObject {
3091
3099
  const l = cube.maxZ - cube.minZ;
3092
3100
  const uv = texture.toUvArray(w, h, l);
3093
3101
  const cubeGeo = this._getBoxGeometryForDimensionsAndUv(w, h, l, uv).clone();
3094
- cubeGeo.applyMatrix4(new THREE2.Matrix4().makeTranslation(w / 2, h / 2, l / 2));
3095
- cubeGeo.applyMatrix4(new THREE2.Matrix4().makeTranslation(cube.minX, cube.minY, cube.minZ));
3102
+ cubeGeo.applyMatrix4(new THREE3.Matrix4().makeTranslation(w / 2, h / 2, l / 2));
3103
+ cubeGeo.applyMatrix4(new THREE3.Matrix4().makeTranslation(cube.minX, cube.minY, cube.minZ));
3096
3104
  applyModelPartRotation(part, cubeGeo);
3097
3105
  const mesh = this.createMesh(partName, cubeGeo, mat);
3098
3106
  partAnchor.add(mesh);
@@ -6190,8 +6198,6 @@ var MapControls = class extends OrbitControls {
6190
6198
  var _Renderer = class _Renderer {
6191
6199
  constructor(options) {
6192
6200
  this._dirty = true;
6193
- this._animationTimer = void 0;
6194
- this._animationFrame = void 0;
6195
6201
  this._resizeListener = void 0;
6196
6202
  this._disposed = false;
6197
6203
  this._debugHelpers = [];
@@ -6201,7 +6207,7 @@ var _Renderer = class _Renderer {
6201
6207
  };
6202
6208
  this.options = (0, import_ts_deepmerge10.default)({}, _Renderer.DEFAULT_OPTIONS, options ?? {});
6203
6209
  this._animationLoop = this.animate.bind(this);
6204
- this._fpsTimer = this.options.render.fpsLimit > 0 ? 1e3 / this.options.render.fpsLimit : void 0;
6210
+ this._frameInterval = this.options.render.fpsLimit > 0 ? 1e3 / this.options.render.fpsLimit : void 0;
6205
6211
  this._scene = this.createScene();
6206
6212
  this._camera = this.createCamera();
6207
6213
  this._renderer = this.createRenderer();
@@ -6248,13 +6254,13 @@ var _Renderer = class _Renderer {
6248
6254
  renderer.setClearColor(0, 0);
6249
6255
  renderer.shadowMap.enabled = true;
6250
6256
  renderer.shadowMap.type = import_three19.PCFSoftShadowMap;
6251
- renderer.outputEncoding = import_three19.LinearEncoding;
6257
+ renderer.outputColorSpace = import_three19.SRGBColorSpace;
6252
6258
  renderer.setSize(this.viewWidth, this.viewHeight);
6253
6259
  return renderer;
6254
6260
  }
6255
6261
  createComposer() {
6262
+ if (!this.options.composer.enabled) return void 0;
6256
6263
  const composer = new import_postprocessing.EffectComposer(this.renderer);
6257
- if (!this.options.composer.enabled) return composer;
6258
6264
  composer.setSize(this.viewWidth, this.viewHeight);
6259
6265
  composer.addPass(new import_postprocessing.RenderPass(this.scene, this.camera));
6260
6266
  return composer;
@@ -6363,7 +6369,7 @@ var _Renderer = class _Renderer {
6363
6369
  this.camera.updateProjectionMatrix();
6364
6370
  }
6365
6371
  this.renderer.setSize(width, height);
6366
- this.composer.setSize(width, height);
6372
+ this.composer?.setSize(width, height);
6367
6373
  this._dirty = true;
6368
6374
  }
6369
6375
  //<editor-fold desc="RENDER">
@@ -6382,12 +6388,7 @@ var _Renderer = class _Renderer {
6382
6388
  stop() {
6383
6389
  if (this._disposed) return;
6384
6390
  this.renderer.setAnimationLoop(null);
6385
- if (this._animationTimer)
6386
- clearTimeout(this._animationTimer);
6387
- this._animationTimer = void 0;
6388
- if (this._animationFrame)
6389
- cancelAnimationFrame(this._animationFrame);
6390
- this._animationFrame = void 0;
6391
+ this._nextFrameTime = void 0;
6391
6392
  }
6392
6393
  /**
6393
6394
  * Stops rendering and releases owned resources. Repeated calls have no effect, and a disposed
@@ -6427,25 +6428,30 @@ var _Renderer = class _Renderer {
6427
6428
  }
6428
6429
  }
6429
6430
  this._debugHelpers.length = 0;
6430
- this.composer.dispose();
6431
+ this.composer?.dispose();
6431
6432
  this.renderer.dispose();
6432
6433
  this.renderer.forceContextLoss();
6433
6434
  }
6434
- animate(t) {
6435
+ animate(t = performance.now()) {
6435
6436
  if (this._disposed) return;
6436
- if (this._stats) {
6437
- this._stats.begin();
6438
- }
6439
6437
  if (this._controls?.enabled) {
6440
6438
  this._controls.update();
6441
6439
  }
6442
6440
  if (this._disposed) return;
6443
- if (this.dirty || this.options.render.renderAlways) {
6444
- if (this.options.composer.enabled) {
6445
- this.composer.render();
6446
- } else {
6447
- this.renderer.render(this.scene, this.camera);
6448
- }
6441
+ if (!this.dirty && !this.options.render.renderAlways) return;
6442
+ const interval = this._frameInterval;
6443
+ if (interval) {
6444
+ const next = this._nextFrameTime;
6445
+ if (next !== void 0 && t + 0.1 < next) return;
6446
+ this._nextFrameTime = next !== void 0 && t - next < interval ? next + interval : t + interval;
6447
+ }
6448
+ if (this._stats) {
6449
+ this._stats.begin();
6450
+ }
6451
+ if (this.options.composer.enabled && this.composer) {
6452
+ this.composer.render();
6453
+ } else {
6454
+ this.renderer.render(this.scene, this.camera);
6449
6455
  }
6450
6456
  this.dirty = false;
6451
6457
  if (this._stats) {