@zephyr3d/device 0.2.5 → 0.2.7

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 (41) hide show
  1. package/dist/base_types.js +12 -13
  2. package/dist/base_types.js.map +1 -1
  3. package/dist/builder/ast.js +34 -48
  4. package/dist/builder/ast.js.map +1 -1
  5. package/dist/builder/base.js +6 -2
  6. package/dist/builder/base.js.map +1 -1
  7. package/dist/builder/builtinfunc.js +42 -6
  8. package/dist/builder/builtinfunc.js.map +1 -1
  9. package/dist/builder/constructors.js +2 -0
  10. package/dist/builder/constructors.js.map +1 -1
  11. package/dist/builder/errors.js +4 -4
  12. package/dist/builder/errors.js.map +1 -1
  13. package/dist/builder/misc.js +1 -1
  14. package/dist/builder/misc.js.map +1 -1
  15. package/dist/builder/programbuilder.js +18 -27
  16. package/dist/builder/programbuilder.js.map +1 -1
  17. package/dist/builder/reflection.js +1 -1
  18. package/dist/builder/reflection.js.map +1 -1
  19. package/dist/builder/types.js +7 -6
  20. package/dist/builder/types.js.map +1 -1
  21. package/dist/device.js +148 -39
  22. package/dist/device.js.map +1 -1
  23. package/dist/gpuobject.js +2 -1
  24. package/dist/gpuobject.js.map +1 -1
  25. package/dist/helpers/drawtext.js +29 -25
  26. package/dist/helpers/drawtext.js.map +1 -1
  27. package/dist/helpers/font.js.map +1 -1
  28. package/dist/helpers/glyphmanager.js +26 -8
  29. package/dist/helpers/glyphmanager.js.map +1 -1
  30. package/dist/helpers/textureatlas.js +7 -3
  31. package/dist/helpers/textureatlas.js.map +1 -1
  32. package/dist/index.d.ts +290 -266
  33. package/dist/pool.js +15 -6
  34. package/dist/pool.js.map +1 -1
  35. package/dist/timer.js +3 -2
  36. package/dist/timer.js.map +1 -1
  37. package/dist/uniformdata.js +1 -1
  38. package/dist/uniformdata.js.map +1 -1
  39. package/dist/vertexdata.js +2 -2
  40. package/dist/vertexdata.js.map +1 -1
  41. package/package.json +80 -80
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { TypedArray, IDisposable, CubeFace, VectorBase, MaybeArray, IEventTarget, Vector4, Observable } from '@zephyr3d/base';
1
+ import { Nullable, Immutable, TypedArray, IDisposable, CubeFace, VectorBase, MaybeArray, IEventTarget, Vector4, Observable } from '@zephyr3d/base';
2
2
 
3
3
  /**
4
4
  * Struct layout types
@@ -149,7 +149,7 @@ type TypeDetailInfo = PrimitiveTypeDetail | StructTypeDetail | ArrayTypeDetail |
149
149
  * @public
150
150
  */
151
151
  interface PrimitiveTypeDetail {
152
- primitiveType?: PBPrimitiveType;
152
+ primitiveType: PBPrimitiveType;
153
153
  }
154
154
  /**
155
155
  * Detail informations for struct type
@@ -159,9 +159,9 @@ interface StructTypeDetail {
159
159
  /** Layout of the struct type */
160
160
  layout: PBStructLayout;
161
161
  /** Name of the struct type */
162
- structName?: string;
162
+ structName: Nullable<string>;
163
163
  /** Members of the struct type */
164
- structMembers?: {
164
+ structMembers: {
165
165
  /** Name of the struct member */
166
166
  name: string;
167
167
  /** Type of the struct member */
@@ -216,7 +216,7 @@ interface TextureTypeDetail {
216
216
  /** type of the texture */
217
217
  textureType: PBTextureType;
218
218
  /** texture format if this is a storage texture */
219
- storageTexelFormat: TextureFormat;
219
+ storageTexelFormat: Nullable<TextureFormat>;
220
220
  /** true if this is a readable storage texture type */
221
221
  readable: boolean;
222
222
  /** true if this is a writable storage texture type */
@@ -280,7 +280,7 @@ declare abstract class PBTypeInfo<DetailType extends TypeDetailInfo = TypeDetail
280
280
  * @param layout - Type of the layout
281
281
  * @returns The created buffer layout
282
282
  */
283
- abstract toBufferLayout(offset: number, layout: PBStructLayout): UniformBufferLayout;
283
+ abstract toBufferLayout(offset: number, layout: PBStructLayout): Nullable<UniformBufferLayout>;
284
284
  }
285
285
  /**
286
286
  * The void type info
@@ -291,7 +291,7 @@ declare class PBVoidTypeInfo extends PBTypeInfo<null> {
291
291
  /** {@inheritDoc PBTypeInfo.isVoidType} */
292
292
  isVoidType(): this is PBVoidTypeInfo;
293
293
  /** {@inheritDoc PBTypeInfo.toBufferLayout} */
294
- toBufferLayout(_offset: number): UniformBufferLayout;
294
+ toBufferLayout(_offset: number): null;
295
295
  }
296
296
  /**
297
297
  * The void type info
@@ -302,7 +302,7 @@ declare class PBAnyTypeInfo extends PBTypeInfo<null> {
302
302
  /** {@inheritDoc PBTypeInfo.isAnyType} */
303
303
  isAnyType(): this is PBAnyTypeInfo;
304
304
  /** {@inheritDoc PBTypeInfo.toBufferLayout} */
305
- toBufferLayout(_offset: number): UniformBufferLayout;
305
+ toBufferLayout(_offset: number): null;
306
306
  /** {@inheritDoc PBTypeInfo.isCompatibleType} */
307
307
  isCompatibleType(_other: PBTypeInfo<TypeDetailInfo>): boolean;
308
308
  }
@@ -342,22 +342,22 @@ declare class PBPrimitiveTypeInfo extends PBTypeInfo<PrimitiveTypeDetail> {
342
342
  /** {@inheritDoc PBTypeInfo.isPrimitiveType} */
343
343
  isPrimitiveType(): this is PBPrimitiveTypeInfo;
344
344
  /** {@inheritDoc PBTypeInfo.toBufferLayout} */
345
- toBufferLayout(_offset: number): UniformBufferLayout;
345
+ toBufferLayout(_offset: number): null;
346
346
  }
347
347
  /**
348
348
  * The struct type info
349
349
  * @public
350
350
  */
351
351
  declare class PBStructTypeInfo extends PBTypeInfo<StructTypeDetail> {
352
- constructor(name: string, layout: PBStructLayout, members: {
352
+ constructor(name: Nullable<string>, layout: PBStructLayout, members: {
353
353
  name: string;
354
354
  type: PBPrimitiveTypeInfo | PBArrayTypeInfo | PBAtomicI32TypeInfo | PBAtomicU32TypeInfo | PBStructTypeInfo;
355
355
  }[]);
356
356
  /** Get the layout type */
357
357
  get layout(): PBStructLayout;
358
358
  /** Get name of the struct type */
359
- get structName(): string;
360
- set structName(val: string);
359
+ get structName(): Nullable<string>;
360
+ set structName(val: Nullable<string>);
361
361
  /** Get member types of the struct type */
362
362
  get structMembers(): {
363
363
  /** Name of the struct member */
@@ -397,7 +397,7 @@ declare class PBStructTypeInfo extends PBTypeInfo<StructTypeDetail> {
397
397
  declare class PBArrayTypeInfo extends PBTypeInfo<ArrayTypeDetail> {
398
398
  constructor(elementType: PBPrimitiveTypeInfo | PBArrayTypeInfo | PBStructTypeInfo | PBAnyTypeInfo | PBAtomicI32TypeInfo | PBAtomicU32TypeInfo, dimension?: number);
399
399
  /** Get the element type */
400
- get elementType(): PBPrimitiveTypeInfo | PBArrayTypeInfo | PBStructTypeInfo | PBAnyTypeInfo | PBAtomicI32TypeInfo | PBAtomicU32TypeInfo;
400
+ get elementType(): PBPrimitiveTypeInfo | PBArrayTypeInfo | PBStructTypeInfo | PBAtomicI32TypeInfo | PBAtomicU32TypeInfo | PBAnyTypeInfo;
401
401
  /** Get dimension of the array type */
402
402
  get dimension(): number;
403
403
  /** Wether array have atomic members */
@@ -405,7 +405,7 @@ declare class PBArrayTypeInfo extends PBTypeInfo<ArrayTypeDetail> {
405
405
  /** {@inheritDoc PBTypeInfo.isArrayType} */
406
406
  isArrayType(): this is PBArrayTypeInfo;
407
407
  /** {@inheritDoc PBTypeInfo.toBufferLayout} */
408
- toBufferLayout(_offset: number): UniformBufferLayout;
408
+ toBufferLayout(_offset: number): null;
409
409
  isCompatibleType(other: PBTypeInfo<TypeDetailInfo>): boolean;
410
410
  }
411
411
  /**
@@ -415,7 +415,7 @@ declare class PBArrayTypeInfo extends PBTypeInfo<ArrayTypeDetail> {
415
415
  declare class PBPointerTypeInfo extends PBTypeInfo<PointerTypeDetail> {
416
416
  constructor(pointerType: PBTypeInfo, addressSpace: PBAddressSpace);
417
417
  /** Get type of the pointer */
418
- get pointerType(): PBTypeInfo;
418
+ get pointerType(): PBTypeInfo<TypeDetailInfo>;
419
419
  /** Get address space of the pointer */
420
420
  get addressSpace(): PBAddressSpace;
421
421
  set addressSpace(val: PBAddressSpace);
@@ -424,7 +424,7 @@ declare class PBPointerTypeInfo extends PBTypeInfo<PointerTypeDetail> {
424
424
  /** {@inheritDoc PBTypeInfo.isPointerType} */
425
425
  isPointerType(): this is PBPointerTypeInfo;
426
426
  /** {@inheritDoc PBTypeInfo.toBufferLayout} */
427
- toBufferLayout(_offset: number): UniformBufferLayout;
427
+ toBufferLayout(_offset: number): null;
428
428
  }
429
429
  /**
430
430
  * The atomic int type info
@@ -435,7 +435,7 @@ declare class PBAtomicI32TypeInfo extends PBTypeInfo<null> {
435
435
  /** {@inheritDoc PBTypeInfo.isPointerType} */
436
436
  haveAtomicMembers(): boolean;
437
437
  /** {@inheritDoc PBTypeInfo.toBufferLayout} */
438
- toBufferLayout(_offset: number): UniformBufferLayout;
438
+ toBufferLayout(_offset: number): null;
439
439
  }
440
440
  /**
441
441
  * The atomic int type info
@@ -446,7 +446,7 @@ declare class PBAtomicU32TypeInfo extends PBTypeInfo<null> {
446
446
  /** {@inheritDoc PBTypeInfo.isPointerType} */
447
447
  haveAtomicMembers(): boolean;
448
448
  /** {@inheritDoc PBTypeInfo.toBufferLayout} */
449
- toBufferLayout(_offset: number): UniformBufferLayout;
449
+ toBufferLayout(_offset: number): null;
450
450
  }
451
451
  /**
452
452
  * The sampler type info
@@ -457,7 +457,7 @@ declare class PBSamplerTypeInfo extends PBTypeInfo<SamplerTypeDetail> {
457
457
  /** Get the access mode */
458
458
  get accessMode(): PBSamplerAccessMode;
459
459
  /** {@inheritDoc PBTypeInfo.toBufferLayout} */
460
- toBufferLayout(_offset: number): UniformBufferLayout;
460
+ toBufferLayout(_offset: number): null;
461
461
  }
462
462
  /**
463
463
  * The texture type info
@@ -468,7 +468,7 @@ declare class PBTextureTypeInfo extends PBTypeInfo<TextureTypeDetail> {
468
468
  /** Get the texture type */
469
469
  get textureType(): PBTextureType;
470
470
  /** Get texture format if this is a storage texture */
471
- get storageTexelFormat(): TextureFormat;
471
+ get storageTexelFormat(): Nullable<TextureFormat>;
472
472
  /** Returns true if this is a readable storage texture type */
473
473
  get readable(): boolean;
474
474
  set readable(val: boolean);
@@ -496,7 +496,7 @@ declare class PBTextureTypeInfo extends PBTypeInfo<TextureTypeDetail> {
496
496
  /** Returns true if the texture format is of type unsigned integer */
497
497
  isUIntTexture(): boolean;
498
498
  /** {@inheritDoc PBTypeInfo.toBufferLayout} */
499
- toBufferLayout(_offset: number): UniformBufferLayout;
499
+ toBufferLayout(_offset: number): null;
500
500
  }
501
501
  /**
502
502
  * The function type info
@@ -510,16 +510,18 @@ declare class PBFunctionTypeInfo extends PBTypeInfo<FunctionTypeDetail> {
510
510
  /** Get name of the function */
511
511
  get name(): string;
512
512
  /** Get return type of the function */
513
- get returnType(): PBTypeInfo;
513
+ get returnType(): PBTypeInfo<TypeDetailInfo>;
514
514
  /** Get all the argument types for this function */
515
515
  get argTypes(): {
516
+ /** Type of the argument */
516
517
  type: PBTypeInfo;
518
+ /** true if this argument will be passed by reference */
517
519
  byRef?: boolean;
518
520
  }[];
519
521
  /** Get hash for parameter types */
520
522
  get argHash(): string;
521
523
  /** {@inheritDoc PBTypeInfo.toBufferLayout} */
522
- toBufferLayout(_offset: number): UniformBufferLayout;
524
+ toBufferLayout(_offset: number): null;
523
525
  }
524
526
 
525
527
  /**
@@ -546,9 +548,9 @@ declare class VertexData {
546
548
  */
547
549
  clone(): VertexData;
548
550
  /** Vertex buffer information list */
549
- get vertexBuffers(): VertexBufferInfo[];
551
+ get vertexBuffers(): Nullable<VertexBufferInfo>[];
550
552
  /** Index buffer */
551
- get indexBuffer(): IndexBuffer;
553
+ get indexBuffer(): Nullable<IndexBuffer<unknown>>;
552
554
  /** Number of vertices */
553
555
  get numVertices(): number;
554
556
  /** Draw offset */
@@ -559,25 +561,25 @@ declare class VertexData {
559
561
  * @param semantic - The vertex semantic
560
562
  * @returns Vertex buffer of the given semantic
561
563
  */
562
- getVertexBuffer(semantic: VertexSemantic): StructuredBuffer;
564
+ getVertexBuffer(semantic: VertexSemantic): StructuredBuffer<unknown> | null;
563
565
  /**
564
566
  * Gets the vertex buffer information by specific vertex semantic
565
567
  * @param semantic - The vertex semantic
566
568
  * @returns Vertex buffer information of the given semantic
567
569
  */
568
- getVertexBufferInfo(semantic: VertexSemantic): VertexBufferInfo;
570
+ getVertexBufferInfo(semantic: VertexSemantic): VertexBufferInfo | null;
569
571
  /**
570
572
  * Gets the index buffer
571
573
  * @returns The index buffer
572
574
  */
573
- getIndexBuffer(): IndexBuffer;
575
+ getIndexBuffer(): Nullable<IndexBuffer<unknown>>;
574
576
  /**
575
577
  * Sets a vertex buffer
576
578
  * @param buffer - The vertex buffer object
577
579
  * @param stepMode - Step mode of the buffer
578
580
  * @returns The buffer that was set
579
581
  */
580
- setVertexBuffer(buffer: StructuredBuffer, stepMode?: VertexStepMode): StructuredBuffer;
582
+ setVertexBuffer(buffer: StructuredBuffer, stepMode?: VertexStepMode): StructuredBuffer<unknown> | null;
581
583
  /**
582
584
  * Removes a vertex buffer
583
585
  * @param buffer - Vertex buffer to be removed
@@ -589,7 +591,7 @@ declare class VertexData {
589
591
  * @param buffer - Index buffer to be set
590
592
  * @returns The index buffer that was set
591
593
  */
592
- setIndexBuffer(buffer: IndexBuffer): IndexBuffer;
594
+ setIndexBuffer(buffer: Nullable<IndexBuffer>): Nullable<IndexBuffer<unknown>>;
593
595
  }
594
596
 
595
597
  /**
@@ -656,7 +658,7 @@ type VertexLayoutOptions = {
656
658
  /**
657
659
  * optional index buffer in this vertex layout
658
660
  */
659
- indexBuffer?: IndexBuffer;
661
+ indexBuffer?: Nullable<IndexBuffer>;
660
662
  };
661
663
  /**
662
664
  * Supported colorspace types for texture
@@ -684,9 +686,9 @@ interface BaseCreationOptions {
684
686
  */
685
687
  interface TextureCreationOptions extends BaseCreationOptions {
686
688
  writable?: boolean;
687
- texture?: BaseTexture;
689
+ texture?: Nullable<BaseTexture>;
688
690
  mipmapping?: boolean;
689
- samplerOptions?: SamplerOptions;
691
+ samplerOptions?: Nullable<SamplerOptions>;
690
692
  }
691
693
  /**
692
694
  * Options for creating gpu buffer
@@ -724,7 +726,7 @@ declare enum GPUResourceUsageFlags {
724
726
  * Get vertex attribute index by semantic
725
727
  * @public
726
728
  */
727
- declare function getVertexAttribByName(name: VertexSemantic): number;
729
+ declare function getVertexAttribByName(name: Nullable<VertexSemantic>): 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 12 | undefined;
728
730
  /**
729
731
  * Get vertex semantic by attribute index
730
732
  * @public
@@ -754,19 +756,19 @@ declare function getVertexAttributeFormat(fmt: VertexAttribFormat): "f32" | "i32
754
756
  *
755
757
  * @public
756
758
  */
757
- declare function getVertexAttributeIndex(fmt: VertexAttribFormat): number;
759
+ declare function getVertexAttributeIndex(fmt: VertexAttribFormat): 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 12;
758
760
  /**
759
761
  * Get byte size of specified vertex format
760
762
  *
761
763
  * @public
762
764
  */
763
- declare function getVertexFormatSize(fmt: VertexAttribFormat): number;
765
+ declare function getVertexFormatSize(fmt: VertexAttribFormat): 2 | 4 | 6 | 8 | 16 | 12;
764
766
  /**
765
767
  * Get number of components of specified vertex format
766
768
  *
767
769
  * @public
768
770
  */
769
- declare function getVertexFormatComponentCount(fmt: VertexAttribFormat): number;
771
+ declare function getVertexFormatComponentCount(fmt: VertexAttribFormat): 1 | 2 | 3 | 4;
770
772
  /**
771
773
  * Get vertex format by semantic and component type and component count
772
774
  * @param semantic - The vertex semantic
@@ -776,7 +778,7 @@ declare function getVertexFormatComponentCount(fmt: VertexAttribFormat): number;
776
778
  *
777
779
  * @public
778
780
  */
779
- declare function getVertexAttribFormat(semantic: VertexSemantic, type: DataType, count: number): VertexAttribFormat;
781
+ declare function getVertexAttribFormat(semantic: VertexSemantic, type: DataType, count: number): VertexAttribFormat | null;
780
782
  /**
781
783
  * Get the length of a vertex buffer by specified structure type of the vertex buffer
782
784
  * @param vertexBufferType - The structure type of the vertex buffer
@@ -792,7 +794,7 @@ declare function getVertexBufferLength(vertexBufferType: PBStructTypeInfo): numb
792
794
  *
793
795
  * @public
794
796
  */
795
- declare function getVertexBufferStride(vertexBufferType: PBStructTypeInfo): number;
797
+ declare function getVertexBufferStride(vertexBufferType: Immutable<PBStructTypeInfo>): number;
796
798
  /**
797
799
  * Get primitive type of a vertex attribute by specified vertex semantic
798
800
  * @param vertexBufferType - The structure type of the vertex buffer
@@ -801,7 +803,7 @@ declare function getVertexBufferStride(vertexBufferType: PBStructTypeInfo): numb
801
803
  *
802
804
  * @public
803
805
  */
804
- declare function getVertexBufferAttribTypeBySemantic(vertexBufferType: PBStructTypeInfo, semantic: VertexSemantic): PBPrimitiveTypeInfo;
806
+ declare function getVertexBufferAttribTypeBySemantic(vertexBufferType: Immutable<PBStructTypeInfo>, semantic: VertexSemantic): PBPrimitiveTypeInfo | null;
805
807
  /**
806
808
  * Get primitive type of a vertex attribute by specified vertex attribute index
807
809
  * @param vertexBufferType - The structure type of the vertex buffer
@@ -810,7 +812,7 @@ declare function getVertexBufferAttribTypeBySemantic(vertexBufferType: PBStructT
810
812
  *
811
813
  * @public
812
814
  */
813
- declare function getVertexBufferAttribType(vertexBufferType: PBStructTypeInfo, attrib: number): PBPrimitiveTypeInfo;
815
+ declare function getVertexBufferAttribType(vertexBufferType: Immutable<PBStructTypeInfo>, attrib: number): PBPrimitiveTypeInfo | null;
814
816
  /**
815
817
  * Get the structure type of a vertex buffer by specified vertex attribute formats and the length of the vertex buffer
816
818
  * @param length - The length of the vertex buffer
@@ -819,7 +821,7 @@ declare function getVertexBufferAttribType(vertexBufferType: PBStructTypeInfo, a
819
821
  *
820
822
  * @public
821
823
  */
822
- declare function makeVertexBufferType(length: number, ...attributes: VertexAttribFormat[]): PBStructTypeInfo;
824
+ declare function makeVertexBufferType(length: number, ...attributes: Immutable<VertexAttribFormat[]>): PBStructTypeInfo | null;
823
825
  /**
824
826
  * Vertex step mode.
825
827
  *
@@ -924,7 +926,7 @@ interface UniformLayout {
924
926
  /** The primitive type of the uniform */
925
927
  type: PBPrimitiveType;
926
928
  /** Layout of the members if the uniform is struct type */
927
- subLayout: UniformBufferLayout;
929
+ subLayout: Nullable<UniformBufferLayout>;
928
930
  }
929
931
  /**
930
932
  * Binding layout of a uniform buffer or storage buffer
@@ -962,9 +964,9 @@ interface TextureBindingLayout {
962
964
  /** Whether the textur is a multisampled texture */
963
965
  multisampled: boolean;
964
966
  /** name of the default sampler uniform when using WebGPU device */
965
- autoBindSampler: string;
967
+ autoBindSampler: Nullable<string>;
966
968
  /** name of the default comparison sampler uniform when using WebGPU device */
967
- autoBindSamplerComparison: string;
969
+ autoBindSamplerComparison: Nullable<string>;
968
970
  }
969
971
  /**
970
972
  * Binding layout of a storage texture
@@ -984,7 +986,7 @@ interface StorageTextureBindingLayout {
984
986
  */
985
987
  interface ExternalTextureBindingLayout {
986
988
  /** name of the default sampler uniform when using WebGPU device */
987
- autoBindSampler: string;
989
+ autoBindSampler: Nullable<string>;
988
990
  }
989
991
  /**
990
992
  * Information of bind group entries
@@ -1044,7 +1046,7 @@ interface SamplerOptions {
1044
1046
  mipFilter?: TextureFilterMode;
1045
1047
  lodMin?: number;
1046
1048
  lodMax?: number;
1047
- compare?: CompareFunc;
1049
+ compare?: Nullable<CompareFunc>;
1048
1050
  maxAnisotropy?: number;
1049
1051
  }
1050
1052
  /**
@@ -1055,13 +1057,13 @@ interface GPUObject<T = unknown> extends IDisposable {
1055
1057
  /** The object was created by which device */
1056
1058
  readonly device: AbstractDevice;
1057
1059
  /** The internal GPU object */
1058
- readonly object: T;
1060
+ readonly object: Nullable<T>;
1059
1061
  /** unique id */
1060
1062
  readonly uid: number;
1061
1063
  readonly cid: number;
1062
1064
  readonly disposed: boolean;
1063
1065
  name: string;
1064
- restoreHandler: (tex: GPUObject) => void;
1066
+ restoreHandler: Nullable<(tex: GPUObject) => void>;
1065
1067
  isVertexLayout(): this is VertexLayout;
1066
1068
  isFramebuffer(): this is FrameBuffer;
1067
1069
  isSampler(): this is TextureSampler;
@@ -1092,7 +1094,7 @@ interface TextureSampler<T = unknown> extends GPUObject<T> {
1092
1094
  readonly mipFilter: TextureFilterMode;
1093
1095
  readonly lodMin: number;
1094
1096
  readonly lodMax: number;
1095
- readonly compare: CompareFunc;
1097
+ readonly compare: Nullable<CompareFunc>;
1096
1098
  readonly maxAnisotropy: number;
1097
1099
  }
1098
1100
  /**
@@ -1107,7 +1109,7 @@ interface BaseTexture<T = unknown> extends GPUObject<T> {
1107
1109
  readonly format: TextureFormat;
1108
1110
  readonly mipLevelCount: number;
1109
1111
  readonly memCost: number;
1110
- samplerOptions: SamplerOptions;
1112
+ samplerOptions: Nullable<Immutable<SamplerOptions>>;
1111
1113
  init(): void;
1112
1114
  generateMipmaps(): void;
1113
1115
  isSRGBFormat(): boolean;
@@ -1173,7 +1175,7 @@ interface GPUDataBuffer<T = unknown> extends GPUObject<T> {
1173
1175
  readonly byteLength: number;
1174
1176
  readonly usage: number;
1175
1177
  bufferSubData(dstByteOffset: number, data: TypedArray, srcOffset?: number, srcLength?: number): void;
1176
- getBufferSubData(dstBuffer?: Uint8Array<ArrayBuffer>, offsetInBytes?: number, sizeInBytes?: number): Promise<Uint8Array<ArrayBuffer>>;
1178
+ getBufferSubData(dstBuffer?: Nullable<Uint8Array<ArrayBuffer>>, offsetInBytes?: number, sizeInBytes?: number): Promise<Uint8Array<ArrayBuffer>>;
1177
1179
  }
1178
1180
  /**
1179
1181
  * Abstract interface for index buffer
@@ -1188,8 +1190,8 @@ interface IndexBuffer<T = unknown> extends GPUDataBuffer<T> {
1188
1190
  * @public
1189
1191
  */
1190
1192
  interface StructuredBuffer<T = unknown> extends GPUDataBuffer<T> {
1191
- structure: PBStructTypeInfo;
1192
- set(name: string, value: StructuredValue): any;
1193
+ structure: Immutable<PBStructTypeInfo>;
1194
+ set(name: string, value: StructuredValue): void;
1193
1195
  }
1194
1196
  /**
1195
1197
  * Abstract interface for vertex layout
@@ -1197,19 +1199,19 @@ interface StructuredBuffer<T = unknown> extends GPUDataBuffer<T> {
1197
1199
  */
1198
1200
  interface VertexLayout<T = unknown> extends GPUObject<T> {
1199
1201
  readonly vertexBuffers: {
1200
- [semantic: number]: {
1202
+ [semantic: number]: Nullable<{
1201
1203
  buffer: StructuredBuffer;
1202
1204
  offset: number;
1203
- };
1205
+ }>;
1204
1206
  };
1205
- readonly indexBuffer: IndexBuffer;
1207
+ readonly indexBuffer: Nullable<IndexBuffer>;
1206
1208
  setDrawOffset(buffer: StructuredBuffer, byteOffset: number): void;
1207
- getVertexBuffer(semantic: VertexSemantic): StructuredBuffer;
1208
- getVertexBufferInfo(semantic: VertexSemantic): VertexBufferInfo;
1209
- getIndexBuffer(): IndexBuffer;
1209
+ getVertexBuffer(semantic: VertexSemantic): Nullable<StructuredBuffer>;
1210
+ getVertexBufferInfo(semantic: VertexSemantic): Nullable<VertexBufferInfo>;
1211
+ getIndexBuffer(): Nullable<IndexBuffer>;
1210
1212
  bind(): void;
1211
1213
  draw(primitiveType: PrimitiveType, first: number, count: number): void;
1212
- drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number): any;
1214
+ drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number): void;
1213
1215
  }
1214
1216
  /**
1215
1217
  * Abstract interface for frame buffer
@@ -1233,7 +1235,7 @@ interface FrameBuffer<T = unknown> extends GPUObject<T> {
1233
1235
  setDepthAttachmentLayer(layer: number): void;
1234
1236
  getDepthAttachmentLayer(): number;
1235
1237
  getColorAttachments(): BaseTexture[];
1236
- getDepthAttachment(): BaseTexture;
1238
+ getDepthAttachment(): Nullable<BaseTexture>;
1237
1239
  getColorAttachment<T extends BaseTexture = BaseTexture>(index: number): T;
1238
1240
  bind(): boolean;
1239
1241
  unbind(): void;
@@ -1243,12 +1245,12 @@ interface FrameBuffer<T = unknown> extends GPUObject<T> {
1243
1245
  * @public
1244
1246
  */
1245
1247
  interface GPUProgram<T = unknown> extends GPUObject<T> {
1246
- readonly bindGroupLayouts: BindGroupLayout[];
1248
+ readonly bindGroupLayouts: Immutable<BindGroupLayout[]>;
1247
1249
  readonly type: 'render' | 'compute';
1248
- getShaderSource(kind: ShaderKind): string;
1249
- getCompileError(): string;
1250
- getBindingInfo(name: string): BindPointInfo;
1251
- createUniformBuffer(uniform: string): StructuredBuffer;
1250
+ getShaderSource(kind: ShaderKind): Nullable<string>;
1251
+ getCompileError(): Nullable<string>;
1252
+ getBindingInfo(name: string): Nullable<BindPointInfo>;
1253
+ createUniformBuffer(uniform: string): Nullable<StructuredBuffer>;
1252
1254
  use(): void;
1253
1255
  }
1254
1256
  /**
@@ -1263,17 +1265,17 @@ type StructuredValue = number | TypedArray | VectorBase | {
1263
1265
  * @public
1264
1266
  */
1265
1267
  interface BindGroup extends GPUObject<unknown> {
1266
- getLayout(): BindGroupLayout;
1267
- getDynamicOffsets(): number[];
1268
+ getLayout(): Immutable<BindGroupLayout>;
1269
+ getDynamicOffsets(): Nullable<Immutable<number[]>>;
1268
1270
  getGPUId(): string;
1269
- getBuffer(name: string, nocreate?: boolean): GPUDataBuffer;
1270
- getTexture(name: string): BaseTexture;
1271
+ getBuffer(name: string, nocreate?: boolean): Nullable<GPUDataBuffer>;
1272
+ getTexture(name: string): Nullable<BaseTexture>;
1271
1273
  setBuffer(name: string, buffer: GPUDataBuffer, offset?: number, bindOffset?: number, bindSize?: number): void;
1272
- setValue(name: string, value: StructuredValue): any;
1273
- setRawData(name: string, byteOffset: number, data: TypedArray, srcPos?: number, srcLength?: number): any;
1274
- setTexture(name: string, texture: BaseTexture, sampler?: TextureSampler): any;
1275
- setTextureView(name: string, value: BaseTexture, level?: number, face?: number, mipCount?: number, sampler?: TextureSampler): any;
1276
- setSampler(name: string, sampler: TextureSampler): any;
1274
+ setValue(name: string, value: StructuredValue): void;
1275
+ setRawData(name: string, byteOffset: number, data: TypedArray, srcPos?: number, srcLength?: number): void;
1276
+ setTexture(name: string, texture: BaseTexture, sampler?: Nullable<TextureSampler>): void;
1277
+ setTextureView(name: string, value: BaseTexture, level?: number, face?: number, mipCount?: number, sampler?: Nullable<TextureSampler>): void;
1278
+ setSampler(name: string, sampler: TextureSampler): void;
1277
1279
  }
1278
1280
  /**
1279
1281
  * Render bundle
@@ -1317,20 +1319,20 @@ declare abstract class Proxiable<T> {
1317
1319
  */
1318
1320
  declare class PBShaderExp extends Proxiable<PBShaderExp> {
1319
1321
  [name: string]: any;
1320
- get $group(): number;
1321
- set $group(val: number);
1322
+ get $group(): Nullable<number>;
1323
+ set $group(val: Nullable<number>);
1322
1324
  /**
1323
1325
  * Point out that the variable should be in uniform address space
1324
1326
  * @param group - The bind group index
1325
1327
  * @returns self
1326
1328
  */
1327
- uniform(group: number): PBShaderExp;
1329
+ uniform(group: number): this;
1328
1330
  /**
1329
1331
  * Point out that the variable should be an uniform buffer
1330
1332
  * @param group - The bind group index
1331
1333
  * @returns self
1332
1334
  */
1333
- uniformBuffer(group: number, bindingSize?: number): PBShaderExp;
1335
+ uniformBuffer(group: number, bindingSize?: number): this;
1334
1336
  /**
1335
1337
  * Point out that the variable should be in workgroup address space
1336
1338
  *
@@ -1339,51 +1341,51 @@ declare class PBShaderExp extends Proxiable<PBShaderExp> {
1339
1341
  *
1340
1342
  * @returns self
1341
1343
  */
1342
- workgroup(): PBShaderExp;
1344
+ workgroup(): this;
1343
1345
  /**
1344
1346
  * Point out that the variable should be in storage address space
1345
1347
  * @param group - The bind group index
1346
1348
  * @returns self
1347
1349
  */
1348
- storage(group: number): PBShaderExp;
1350
+ storage(group: number): this;
1349
1351
  /**
1350
1352
  * Point out that the variable is read-only and should be in storage address space
1351
1353
  * @param group - The bind group index
1352
1354
  * @returns self
1353
1355
  */
1354
- storageReadonly(group: number): PBShaderExp;
1356
+ storageReadonly(group: number): this;
1355
1357
  /**
1356
1358
  * Point out that the variable should be a storage buffer
1357
1359
  * @param group - The bind group index
1358
1360
  * @returns self
1359
1361
  */
1360
- storageBuffer(group: number, bindingSize?: number): PBShaderExp;
1362
+ storageBuffer(group: number, bindingSize?: number): this;
1361
1363
  /**
1362
1364
  * Point out that the variable is read-only and should be a storage buffer
1363
1365
  * @param group - The bind group index
1364
1366
  * @returns self
1365
1367
  */
1366
- storageBufferReadonly(group: number, bindingSize?: number): PBShaderExp;
1367
- inout(): PBShaderExp;
1368
- out(): PBShaderExp;
1368
+ storageBufferReadonly(group: number, bindingSize?: number): this;
1369
+ inout(): this;
1370
+ out(): this;
1369
1371
  /**
1370
1372
  * Point out that the variable is a input vertex attribute
1371
1373
  * @param attr - The vertex semantic
1372
1374
  * @returns self
1373
1375
  */
1374
- attrib(attr: VertexSemantic): PBShaderExp;
1376
+ attrib(attr: VertexSemantic): this;
1375
1377
  /**
1376
1378
  * Create tags for the variable
1377
1379
  * @param args - tags
1378
1380
  * @returns self
1379
1381
  */
1380
- tag(...args: ShaderExpTagValue[]): PBShaderExp;
1382
+ tag(...args: ShaderExpTagValue[]): this;
1381
1383
  /**
1382
1384
  * Set sample type for the variable if the variable is of type texture
1383
1385
  * @param type - sample type
1384
1386
  * @returns self
1385
1387
  */
1386
- sampleType(type: 'float' | 'unfilterable-float' | 'sint' | 'uint' | 'depth'): PBShaderExp;
1388
+ sampleType(type: 'float' | 'unfilterable-float' | 'sint' | 'uint' | 'depth'): this;
1387
1389
  /**
1388
1390
  * Get element in the array by index
1389
1391
  * @param index - index of the element
@@ -1400,17 +1402,17 @@ declare class PBShaderExp extends Proxiable<PBShaderExp> {
1400
1402
  * Point out that the variable should be in high precision
1401
1403
  * @returns self
1402
1404
  */
1403
- highp(): PBShaderExp;
1405
+ highp(): this;
1404
1406
  /**
1405
1407
  * Points out that the variable should be in medium precision
1406
1408
  * @returns self
1407
1409
  */
1408
- mediump(): PBShaderExp;
1410
+ mediump(): this;
1409
1411
  /**
1410
1412
  * Points out that the variable should be in low precision
1411
1413
  * @returns self
1412
1414
  */
1413
- lowp(): PBShaderExp;
1415
+ lowp(): this;
1414
1416
  /**
1415
1417
  * Whether this is a constructor
1416
1418
  * @returns true if this is a constructor
@@ -1475,7 +1477,7 @@ declare class PBReflection {
1475
1477
  * Gets the variable which is the vertex attribute of specified semantic
1476
1478
  * @param attrib - The vertex semantic
1477
1479
  */
1478
- attribute(attrib: VertexSemantic): PBShaderExp;
1480
+ attribute(attrib: VertexSemantic): PBShaderExp | null;
1479
1481
  }
1480
1482
 
1481
1483
  declare const StorageTextureFormatMap: {
@@ -1522,13 +1524,13 @@ interface PBRenderOptions {
1522
1524
  * @param this - Global scope object of the vertex shader
1523
1525
  * @param pb - The program builder instance
1524
1526
  */
1525
- vertex(this: PBGlobalScope, pb: ProgramBuilder): any;
1527
+ vertex(this: PBGlobalScope, pb: ProgramBuilder): void;
1526
1528
  /**
1527
1529
  * Fragment shader generator.
1528
1530
  * @param this - Global scope object of the fragment shader
1529
1531
  * @param pb - The program builder instance
1530
1532
  */
1531
- fragment(this: PBGlobalScope, pb: ProgramBuilder): any;
1533
+ fragment(this: PBGlobalScope, pb: ProgramBuilder): void;
1532
1534
  }
1533
1535
  /**
1534
1536
  * Compute program build options
@@ -1540,7 +1542,7 @@ interface PBComputeOptions {
1540
1542
  /** workgroup size */
1541
1543
  workgroupSize: [number, number, number];
1542
1544
  /** compute shader */
1543
- compute(this: PBGlobalScope, pb: ProgramBuilder): any;
1545
+ compute(this: PBGlobalScope, pb: ProgramBuilder): void;
1544
1546
  }
1545
1547
  /**
1546
1548
  * The program builder interface
@@ -2036,17 +2038,17 @@ interface ProgramBuilder {
2036
2038
  /** Same as isinf builtin function in GLSL, only valid for WebGL2 device */
2037
2039
  isinf(x: number | PBShaderExp): PBShaderExp;
2038
2040
  /** add two values */
2039
- add_2(x: number | PBShaderExp, y: number | PBShaderExp): any;
2041
+ add_2(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;
2040
2042
  /** add a couple of values togeter */
2041
- add(x: number | PBShaderExp, y: number | PBShaderExp, ...rest: (number | PBShaderExp)[]): any;
2043
+ add(x: number | PBShaderExp, y: number | PBShaderExp, ...rest: (number | PBShaderExp)[]): PBShaderExp;
2042
2044
  /** subtract two values */
2043
- sub(x: number | PBShaderExp, y: number | PBShaderExp): any;
2045
+ sub(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;
2044
2046
  /** multiply two values */
2045
- mul_2(x: number | PBShaderExp, y: number | PBShaderExp): any;
2047
+ mul_2(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;
2046
2048
  /** multiply a couple of values togeter */
2047
- mul(x: number | PBShaderExp, y: number | PBShaderExp, ...rest: (number | PBShaderExp)[]): any;
2049
+ mul(x: number | PBShaderExp, y: number | PBShaderExp, ...rest: (number | PBShaderExp)[]): PBShaderExp;
2048
2050
  /** divide the first number by the second number */
2049
- div(x: number | PBShaderExp, y: number | PBShaderExp): any;
2051
+ div(x: number | PBShaderExp, y: number | PBShaderExp): PBShaderExp;
2050
2052
  /** Same as length builtin function in GLSL and WGSL */
2051
2053
  length(x: number | PBShaderExp): PBShaderExp;
2052
2054
  /** Same as distance builtin function in GLSL and WGSL */
@@ -2092,7 +2094,7 @@ interface ProgramBuilder {
2092
2094
  /** return x && y */
2093
2095
  and_2(x: PBShaderExp | number | boolean, y: PBShaderExp | number | boolean): PBShaderExp;
2094
2096
  /** return x && y && ... */
2095
- and(x: PBShaderExp | number | boolean, y: PBShaderExp | number | boolean, ...rest: (PBShaderExp | number | boolean)[]): any;
2097
+ and(x: PBShaderExp | number | boolean, y: PBShaderExp | number | boolean, ...rest: (PBShaderExp | number | boolean)[]): PBShaderExp;
2096
2098
  /** return x & y, per component */
2097
2099
  compAnd(x: PBShaderExp | number, y: PBShaderExp | number): PBShaderExp;
2098
2100
  /** return x ^ y, per component */
@@ -2112,9 +2114,9 @@ interface ProgramBuilder {
2112
2114
  /** return the negate of the given value */
2113
2115
  neg(x: number | PBShaderExp): PBShaderExp;
2114
2116
  /** shift arithmetic left, not valid for WebGL1 device */
2115
- sal(a: number | PBShaderExp, b: number | PBShaderExp): any;
2117
+ sal(a: number | PBShaderExp, b: number | PBShaderExp): PBShaderExp;
2116
2118
  /** shift arithmetic right, not valid for WebGL1 device */
2117
- sar(a: number | PBShaderExp, b: number | PBShaderExp): any;
2119
+ sar(a: number | PBShaderExp, b: number | PBShaderExp): PBShaderExp;
2118
2120
  /** Same as the arrayLength builtin function in WGSL, only valid for WebGPU device */
2119
2121
  arrayLength(x: PBShaderExp): PBShaderExp;
2120
2122
  /** Same as the select builtin function in WGSL, only valid for WebGPU device */
@@ -2222,9 +2224,9 @@ interface ProgramBuilder {
2222
2224
  /** Same as workgroupBarrier builtin function in WebGPU, only valid for WebGPU device */
2223
2225
  workgroupBarrier(): void;
2224
2226
  /** atomicLoad, only valid for WebGPU device */
2225
- atomicLoad(ptr: PBShaderExp): any;
2227
+ atomicLoad(ptr: PBShaderExp): PBShaderExp;
2226
2228
  /** atomicStore, only valid for WebGPU device */
2227
- atomicStore(ptr: PBShaderExp, value: number | PBShaderExp): any;
2229
+ atomicStore(ptr: PBShaderExp, value: number | PBShaderExp): void;
2228
2230
  /** atomicAdd, only valid for WebGPU device */
2229
2231
  atomicAdd(ptr: PBShaderExp, value: number | PBShaderExp): PBShaderExp;
2230
2232
  /** atomicSub, only valid for WebGPU device */
@@ -2253,9 +2255,9 @@ declare class ProgramBuilder {
2253
2255
  */
2254
2256
  constructor(device: AbstractDevice);
2255
2257
  /** Get last error */
2256
- get lastError(): string;
2258
+ get lastError(): Nullable<string>;
2257
2259
  /** Current shader kind */
2258
- get shaderKind(): ShaderKind;
2260
+ get shaderKind(): Nullable<ShaderKind>;
2259
2261
  get emulateDepthClamp(): boolean;
2260
2262
  set emulateDepthClamp(val: boolean);
2261
2263
  /** Get the shader code reflection interface */
@@ -2286,7 +2288,7 @@ declare class PBScope extends Proxiable<PBScope> {
2286
2288
  * @param semantic - The vertex semantic
2287
2289
  * @returns The input vertex attribute or null if not exists
2288
2290
  */
2289
- $getVertexAttrib(semantic: VertexSemantic): PBShaderExp;
2291
+ $getVertexAttrib(semantic: VertexSemantic): Nullable<PBShaderExp>;
2290
2292
  /** Get the current local scope */
2291
2293
  get $l(): PBLocalScope;
2292
2294
  /** Get the global scope */
@@ -2409,7 +2411,7 @@ declare class PBInsideFunctionScope extends PBScope {
2409
2411
  */
2410
2412
  $while(condition: ExpValueNonArrayType, body: (this: PBWhileScope) => void): void;
2411
2413
  /** Gets main function scope */
2412
- $getMainScope(): PBFunctionScope;
2414
+ $getMainScope(): Nullable<PBFunctionScope>;
2413
2415
  }
2414
2416
  /**
2415
2417
  * Scope that insides a function
@@ -2738,15 +2740,15 @@ interface RenderStateSet {
2738
2740
  /** Shallow copy existing RenderStateSet object to this */
2739
2741
  copyFrom(stateSet: RenderStateSet): void;
2740
2742
  /** Fragment output related render statements or null if the default values should be used */
2741
- readonly colorState: ColorState;
2743
+ readonly colorState: Nullable<ColorState>;
2742
2744
  /** Alpha blending related render statements or null if the default values should be used */
2743
- readonly blendingState: BlendingState;
2745
+ readonly blendingState: Nullable<BlendingState>;
2744
2746
  /** Rasterization related render statements or null if the default values should be used */
2745
- readonly rasterizerState: RasterizerState;
2747
+ readonly rasterizerState: Nullable<RasterizerState>;
2746
2748
  /** Depth buffer related render statements or null if the default values should be used */
2747
- readonly depthState: DepthState;
2749
+ readonly depthState: Nullable<DepthState>;
2748
2750
  /** Stencil buffer related render statements or null if the default values should be used */
2749
- readonly stencilState: StencilState;
2751
+ readonly stencilState: Nullable<StencilState>;
2750
2752
  /**
2751
2753
  * Allocates a ColorState
2752
2754
  * @returns The created ColorState
@@ -2859,7 +2861,7 @@ declare class Pool {
2859
2861
  * @param attachmentLayer - The texture layer to which the color attachment will render, default is 0
2860
2862
  * @returns The fetched FrameBuffer object.
2861
2863
  */
2862
- fetchTemporalFramebuffer<T extends BaseTexture<unknown>>(autoRelease: boolean, width: number, height: number, colorTexOrFormat: MaybeArray<TextureFormat | T>, depthTexOrFormat?: TextureFormat | T, mipmapping?: boolean, sampleCount?: number, ignoreDepthStencil?: boolean, attachmentMipLevel?: number, attachmentCubeface?: number, attachmentLayer?: number): FrameBuffer;
2864
+ fetchTemporalFramebuffer<T extends BaseTexture<unknown>>(autoRelease: boolean, width: number, height: number, colorTexOrFormat: MaybeArray<TextureFormat | T>, depthTexOrFormat?: Nullable<TextureFormat | T>, mipmapping?: boolean, sampleCount?: number, ignoreDepthStencil?: boolean, attachmentMipLevel?: number, attachmentCubeface?: number, attachmentLayer?: number): FrameBuffer<unknown>;
2863
2865
  /**
2864
2866
  * Creates a temporal framebuffer from the object pool.
2865
2867
  * @param autoRelease - Whether the framebuffer should be automatically released at the next frame.
@@ -2872,7 +2874,7 @@ declare class Pool {
2872
2874
  * @param attachmentLayer - The texture layer to which the color attachment will render, default is 0.
2873
2875
  * @returns The fetched FrameBuffer object.
2874
2876
  */
2875
- createTemporalFramebuffer(autoRelease: boolean, colorAttachments: BaseTexture[], depthAttachment?: BaseTexture, sampleCount?: number, ignoreDepthStencil?: boolean, attachmentMipLevel?: number, attachmentCubeface?: number, attachmentLayer?: number): FrameBuffer;
2877
+ createTemporalFramebuffer(autoRelease: boolean, colorAttachments: BaseTexture[], depthAttachment?: Nullable<BaseTexture>, sampleCount?: number, ignoreDepthStencil?: boolean, attachmentMipLevel?: number, attachmentCubeface?: number, attachmentLayer?: number): FrameBuffer<unknown>;
2876
2878
  /**
2877
2879
  * Dispose a texture that is allocated from the object pool.
2878
2880
  * @param texture - The texture to dispose.
@@ -2909,6 +2911,29 @@ declare class Pool {
2909
2911
  purge(): void;
2910
2912
  }
2911
2913
 
2914
+ /**
2915
+ * Abstract timer interface
2916
+ * @public
2917
+ */
2918
+ interface ITimer {
2919
+ begin(): void;
2920
+ end(): void;
2921
+ ended(): boolean;
2922
+ elapsed(): number;
2923
+ }
2924
+ /**
2925
+ * CPU timer class
2926
+ * @public
2927
+ */
2928
+ declare class CPUTimer implements ITimer {
2929
+ constructor();
2930
+ now(): number;
2931
+ begin(): void;
2932
+ end(): void;
2933
+ ended(): boolean;
2934
+ elapsed(): number;
2935
+ }
2936
+
2912
2937
  /**
2913
2938
  * The webgl context type
2914
2939
  * @public
@@ -2943,14 +2968,14 @@ type DataType = 'u8' | 'u8norm' | 'i8' | 'i8norm' | 'u16' | 'u16norm' | 'i16' |
2943
2968
  * Texture format type
2944
2969
  * @public
2945
2970
  */
2946
- type TextureFormat = 'unknown' | 'r8unorm' | 'r8snorm' | 'r16f' | 'r32f' | 'r8ui' | 'r8i' | 'r16ui' | 'r16i' | 'r32ui' | 'r32i' | 'rg8unorm' | 'rg8snorm' | 'rg16f' | 'rg32f' | 'rg8ui' | 'rg8i' | 'rg16ui' | 'rg16i' | 'rg32ui' | 'rg32i' | 'rgba8unorm' | 'rgba8unorm-srgb' | 'rgba8snorm' | 'bgra8unorm' | 'bgra8unorm-srgb' | 'rgba16f' | 'rgba32f' | 'rgba8ui' | 'rgba8i' | 'rgba16ui' | 'rgba16i' | 'rgba32ui' | 'rgba32i' | 'rg11b10uf' | 'd16' | 'd24' | 'd32f' | 'd24s8' | 'd32fs8' | 'dxt1' | 'dxt1-srgb' | 'dxt3' | 'dxt3-srgb' | 'dxt5' | 'dxt5-srgb' | 'bc4' | 'bc4-signed' | 'bc5' | 'bc5-signed' | 'bc7' | 'bc7-srgb' | 'bc6h' | 'bc6h-signed' | 'astc-4x4' | 'astc-4x4-srgb' | 'astc-5x4' | 'astc-5x4-srgb' | 'astc-5x5' | 'astc-5x5-srgb' | 'astc-6x5' | 'astc-6x5-srgb' | 'astc-6x6' | 'astc-6x6-srgb' | 'astc-8x5' | 'astc-8x5-srgb' | 'astc-8x6' | 'astc-8x6-srgb' | 'astc-8x8' | 'astc-8x8-srgb' | 'astc-10x5' | 'astc-10x5-srgb' | 'astc-10x6' | 'astc-10x6-srgb' | 'astc-10x8' | 'astc-10x8-srgb' | 'astc-10x10' | 'astc-10x10-srgb' | 'astc-12x10' | 'astc-12x10-srgb' | 'astc-12x12' | 'astc-12x12-srgb';
2971
+ type TextureFormat = 'r8unorm' | 'r8snorm' | 'r16f' | 'r32f' | 'r8ui' | 'r8i' | 'r16ui' | 'r16i' | 'r32ui' | 'r32i' | 'rg8unorm' | 'rg8snorm' | 'rg16f' | 'rg32f' | 'rg8ui' | 'rg8i' | 'rg16ui' | 'rg16i' | 'rg32ui' | 'rg32i' | 'rgba8unorm' | 'rgba8unorm-srgb' | 'rgba8snorm' | 'bgra8unorm' | 'bgra8unorm-srgb' | 'rgba16f' | 'rgba32f' | 'rgba8ui' | 'rgba8i' | 'rgba16ui' | 'rgba16i' | 'rgba32ui' | 'rgba32i' | 'rg11b10uf' | 'd16' | 'd24' | 'd32f' | 'd24s8' | 'd32fs8' | 'dxt1' | 'dxt1-srgb' | 'dxt3' | 'dxt3-srgb' | 'dxt5' | 'dxt5-srgb' | 'bc4' | 'bc4-signed' | 'bc5' | 'bc5-signed' | 'bc7' | 'bc7-srgb' | 'bc6h' | 'bc6h-signed' | 'astc-4x4' | 'astc-4x4-srgb' | 'astc-5x4' | 'astc-5x4-srgb' | 'astc-5x5' | 'astc-5x5-srgb' | 'astc-6x5' | 'astc-6x5-srgb' | 'astc-6x6' | 'astc-6x6-srgb' | 'astc-8x5' | 'astc-8x5-srgb' | 'astc-8x6' | 'astc-8x6-srgb' | 'astc-8x8' | 'astc-8x8-srgb' | 'astc-10x5' | 'astc-10x5-srgb' | 'astc-10x6' | 'astc-10x6-srgb' | 'astc-10x8' | 'astc-10x8-srgb' | 'astc-10x10' | 'astc-10x10-srgb' | 'astc-12x10' | 'astc-12x10-srgb' | 'astc-12x12' | 'astc-12x12-srgb';
2947
2972
  /**
2948
2973
  * Converts a non-sRGB texture format to the corresponding sRGB texture format
2949
2974
  * @param format - The texture format to be converted
2950
2975
  * @returns The sRGB texture format
2951
2976
  * @public
2952
2977
  */
2953
- declare function linearTextureFormatToSRGB(format: TextureFormat): TextureFormat;
2978
+ declare function linearTextureFormatToSRGB(format: TextureFormat): "rgba8snorm" | "r8unorm" | "r8snorm" | "r16f" | "r32f" | "r8ui" | "r8i" | "r16ui" | "r16i" | "r32ui" | "r32i" | "rg8unorm" | "rg8snorm" | "rg16f" | "rg32f" | "rg8ui" | "rg8i" | "rg16ui" | "rg16i" | "rg32ui" | "rg32i" | "rgba8unorm-srgb" | "bgra8unorm-srgb" | "rgba16f" | "rgba32f" | "rgba8ui" | "rgba8i" | "rgba16ui" | "rgba16i" | "rgba32ui" | "rgba32i" | "rg11b10uf" | "d16" | "d24" | "d32f" | "d24s8" | "d32fs8" | "dxt1-srgb" | "dxt3-srgb" | "dxt5-srgb" | "bc4" | "bc4-signed" | "bc5" | "bc5-signed" | "bc7-srgb" | "bc6h" | "bc6h-signed" | "astc-4x4-srgb" | "astc-5x4-srgb" | "astc-5x5-srgb" | "astc-6x5-srgb" | "astc-6x6-srgb" | "astc-8x5-srgb" | "astc-8x6-srgb" | "astc-8x8-srgb" | "astc-10x5-srgb" | "astc-10x6-srgb" | "astc-10x8-srgb" | "astc-10x10-srgb" | "astc-12x10-srgb" | "astc-12x12-srgb";
2954
2979
  /**
2955
2980
  * Check if a given texture format contains an alpha channel.
2956
2981
  * @param format - The texture format to be checked.
@@ -3175,8 +3200,6 @@ interface ShaderCaps {
3175
3200
  supportShaderTextureLod: boolean;
3176
3201
  /** True if the device supports high precison float number for shader programs */
3177
3202
  supportHighPrecisionFloat: boolean;
3178
- /** True if the device supports high precison integer number for shader programs */
3179
- supportHighPrecisionInt: boolean;
3180
3203
  /** The maximum number of bytes of uniform buffer */
3181
3204
  maxUniformBufferSize: number;
3182
3205
  /** The uniform buffer offset alignment */
@@ -3254,7 +3277,7 @@ interface TextureCaps {
3254
3277
  * @param format - The texture format
3255
3278
  * @returns the texture format infomation
3256
3279
  */
3257
- getTextureFormatInfo(format: TextureFormat): TextureFormatInfo;
3280
+ getTextureFormatInfo(format: TextureFormat): Immutable<TextureFormatInfo>;
3258
3281
  }
3259
3282
  /**
3260
3283
  * Creation options of rendering shader program
@@ -3307,7 +3330,7 @@ interface DeviceOptions {
3307
3330
  * @public
3308
3331
  */
3309
3332
  type DeviceEventMap = {
3310
- resize: [width: number, height: number];
3333
+ resize: [cssWidth: number, cssHeight: number, deviceWidth: number, deviceHeight: number];
3311
3334
  devicelost: [];
3312
3335
  devicerestored: [];
3313
3336
  gpuobject_added: [obj: GPUObject];
@@ -3353,8 +3376,10 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3353
3376
  getFrameBufferSampleCount(): number;
3354
3377
  /** Returns true if device context is lost. */
3355
3378
  isContextLost(): boolean;
3356
- /** Get the value of device pixel ratio */
3357
- getScale(): number;
3379
+ /** Get the value of device pixel ratio in X axis */
3380
+ getScaleX(): number;
3381
+ /** Get the value of device pixel ratio in Y axis */
3382
+ getScaleY(): number;
3358
3383
  /** Get the width of current frame buffer */
3359
3384
  getDrawingBufferWidth(): number;
3360
3385
  /** Get the height of current frame buffer */
@@ -3364,13 +3389,13 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3364
3389
  /** Get the height of back buffer */
3365
3390
  getBackBufferHeight(): number;
3366
3391
  /** Get the device capabilities */
3367
- getDeviceCaps(): DeviceCaps;
3392
+ getDeviceCaps(): Immutable<DeviceCaps>;
3368
3393
  /** Schedule next frame */
3369
3394
  nextFrame(callback: () => void): number;
3370
3395
  /** Cancel schedule next frame */
3371
- cancelNextFrame(handle: number): any;
3396
+ cancelNextFrame(handle: number): void;
3372
3397
  /** Set font for drawText function */
3373
- setFont(fontName: string): any;
3398
+ setFont(fontName: string): void;
3374
3399
  /**
3375
3400
  * Draw a string
3376
3401
  * @param text - The string that will be drawn
@@ -3378,14 +3403,16 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3378
3403
  * @param y - y coordinate in pixels related to the viewport origin
3379
3404
  * @param color - A CSS color value
3380
3405
  */
3381
- drawText(text: string, x: number, y: number, color: string): any;
3406
+ drawText(text: string, x: number, y: number, color: string, viewport?: Immutable<number[]>): void;
3382
3407
  /**
3383
3408
  * Clears the current frame buffer
3384
3409
  * @param clearColor - If not null, the color buffer will be cleared to this value.
3385
3410
  * @param clearDepth - If not null, the depth buffer will be cleared to this value.
3386
3411
  * @param clearStencil - If not null, the stencil buffer will be cleared to this value.
3387
3412
  */
3388
- clearFrameBuffer(clearColor: Vector4, clearDepth: number, clearStencil: number): any;
3413
+ clearFrameBuffer(clearColor: Nullable<Vector4>, clearDepth: Nullable<number>, clearStencil: Nullable<number>): void;
3414
+ /** Creates a GPU timer */
3415
+ createGPUTimer(): Nullable<ITimer>;
3389
3416
  /** Creates a render state set object */
3390
3417
  createRenderStateSet(): RenderStateSet;
3391
3418
  /** Creates a blending state object */
@@ -3410,7 +3437,7 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3410
3437
  * @param options - Texture creation options
3411
3438
  * @returns The created texture
3412
3439
  */
3413
- createTextureFromMipmapData<T extends BaseTexture = BaseTexture>(data: TextureMipmapData, sRGB: boolean, options?: TextureCreationOptions): T;
3440
+ createTextureFromMipmapData<T extends BaseTexture = BaseTexture>(data: TextureMipmapData, sRGB: boolean, options?: TextureCreationOptions): Nullable<T>;
3414
3441
  /**
3415
3442
  * Creates a 2d texture
3416
3443
  * @param format - The texture format
@@ -3419,14 +3446,14 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3419
3446
  * @param options - The creation options
3420
3447
  * @returns The created 2D texture
3421
3448
  */
3422
- createTexture2D(format: TextureFormat, width: number, height: number, options?: TextureCreationOptions): Texture2D;
3449
+ createTexture2D(format: TextureFormat, width: number, height: number, options?: TextureCreationOptions): Nullable<Texture2D>;
3423
3450
  /**
3424
3451
  * Creates a 2d texture from a image element
3425
3452
  * @param element - The image element
3426
3453
  * @param options - The creation options
3427
3454
  * @returns The created 2D texture.
3428
3455
  */
3429
- createTexture2DFromImage(element: TextureImageElement, sRGB: boolean, options?: TextureCreationOptions): Texture2D;
3456
+ createTexture2DFromImage(element: TextureImageElement, sRGB: boolean, options?: TextureCreationOptions): Nullable<Texture2D>;
3430
3457
  /**
3431
3458
  * Creates a 2d array texture
3432
3459
  * @param format - The texture format
@@ -3436,7 +3463,7 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3436
3463
  * @param options - The creation options
3437
3464
  * @returns The created 2D array texture.
3438
3465
  */
3439
- createTexture2DArray(format: TextureFormat, width: number, height: number, depth: number, options?: TextureCreationOptions): Texture2DArray;
3466
+ createTexture2DArray(format: TextureFormat, width: number, height: number, depth: number, options?: TextureCreationOptions): Nullable<Texture2DArray>;
3440
3467
  /**
3441
3468
  * Creates a 2d array texture from a seris of image elements
3442
3469
  * @remarks image elements must have the same size.
@@ -3444,7 +3471,7 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3444
3471
  * @param options - The creation options
3445
3472
  * @returns The created 2D array texture.
3446
3473
  */
3447
- createTexture2DArrayFromImages(elements: TextureImageElement[], sRGB: boolean, options?: TextureCreationOptions): Texture2DArray;
3474
+ createTexture2DArrayFromImages(elements: TextureImageElement[], sRGB: boolean, options?: TextureCreationOptions): Nullable<Texture2DArray>;
3448
3475
  /**
3449
3476
  * Creates a 3D texture
3450
3477
  * @param format - The texture format
@@ -3454,7 +3481,7 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3454
3481
  * @param options - The creation options
3455
3482
  * @returns The created 3D texture.
3456
3483
  */
3457
- createTexture3D(format: TextureFormat, width: number, height: number, depth: number, options?: TextureCreationOptions): Texture3D;
3484
+ createTexture3D(format: TextureFormat, width: number, height: number, depth: number, options?: TextureCreationOptions): Nullable<Texture3D>;
3458
3485
  /**
3459
3486
  * Creates a cube texture
3460
3487
  * @param format - The texture format
@@ -3462,7 +3489,7 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3462
3489
  * @param options - The creation options
3463
3490
  * @returns The created cube texture.
3464
3491
  */
3465
- createCubeTexture(format: TextureFormat, size: number, options?: TextureCreationOptions): TextureCube;
3492
+ createCubeTexture(format: TextureFormat, size: number, options?: TextureCreationOptions): Nullable<TextureCube>;
3466
3493
  /**
3467
3494
  * Creates a video texture from a video element
3468
3495
  * @param el - The video element
@@ -3480,7 +3507,7 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3480
3507
  * @param dst - Texture that will be copied to.
3481
3508
  * @param dstLevel - Which mipmap level to be copied to.
3482
3509
  */
3483
- copyTexture2D(src: Texture2D, srcLevel: number, dst: Texture2D, dstLevel: number): any;
3510
+ copyTexture2D(src: Texture2D, srcLevel: number, dst: Texture2D, dstLevel: number): void;
3484
3511
  /**
3485
3512
  * Copies a color attachment of a framebuffer to a mipmap level of a texture.
3486
3513
  *
@@ -3492,7 +3519,7 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3492
3519
  * @param dst - Texture that will be copied to.
3493
3520
  * @param level - Which mipmap level should be copied to.
3494
3521
  */
3495
- copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number): any;
3522
+ copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number): void;
3496
3523
  /**
3497
3524
  * Set wether to reverse the winding order
3498
3525
  *
@@ -3517,7 +3544,7 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3517
3544
  * @param layout - Layout of the bind group
3518
3545
  * @returns The created bind group.
3519
3546
  */
3520
- createBindGroup(layout: BindGroupLayout): BindGroup;
3547
+ createBindGroup(layout: Immutable<BindGroupLayout>): BindGroup;
3521
3548
  /**
3522
3549
  * Creates a gpu buffer
3523
3550
  * @param sizeInBytes - Size of the buffer in bytes
@@ -3533,7 +3560,7 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3533
3560
  * @param dstOffset - Destination offset in bytes
3534
3561
  * @param bytes - How many bytes to be copy
3535
3562
  */
3536
- copyBuffer(sourceBuffer: GPUDataBuffer, destBuffer: GPUDataBuffer, srcOffset: number, dstOffset: number, bytes: number): any;
3563
+ copyBuffer(sourceBuffer: GPUDataBuffer, destBuffer: GPUDataBuffer, srcOffset: number, dstOffset: number, bytes: number): void;
3537
3564
  /**
3538
3565
  * Creates an index buffer
3539
3566
  * @param data - Data of the index buffer
@@ -3560,55 +3587,55 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3560
3587
  * @param options - The creation options
3561
3588
  * @returns The created framebuffer.
3562
3589
  */
3563
- createFrameBuffer(colorAttachments: BaseTexture[], depthAttachment: BaseTexture, options?: FrameBufferOptions): FrameBuffer;
3590
+ createFrameBuffer(colorAttachments: BaseTexture[], depthAttachment: Nullable<BaseTexture>, options?: Nullable<FrameBufferOptions>): FrameBuffer;
3564
3591
  /**
3565
3592
  * Set viewport from an array that contains the position and size
3566
3593
  *
3567
3594
  * @param vp - The viewport position and size, if not specified, the viewport will be set to [0, 0, drawingBufferWidth, drawingBufferHeight]
3568
3595
  */
3569
- setViewport(vp?: DeviceViewport | number[]): void;
3596
+ setViewport(vp: Nullable<Immutable<DeviceViewport | number[]>>): void;
3570
3597
  /** Get current viewport as [x, y, width, height] */
3571
- getViewport(): DeviceViewport;
3598
+ getViewport(): Immutable<DeviceViewport>;
3572
3599
  /**
3573
3600
  * Set scissor rectangle from an array that contains the position and size
3574
3601
  * @param scissor - The scissor rectangle position and size, if not specified, the scissor rectangle will be set to [0, 0, drawingBufferWidth,drawingBufferHeight]
3575
3602
  */
3576
- setScissor(scissor?: DeviceViewport | number[]): void;
3603
+ setScissor(scissor: Nullable<Immutable<DeviceViewport | number[]>>): void;
3577
3604
  /**
3578
3605
  * Get current scissor rectangle
3579
3606
  */
3580
- getScissor(): DeviceViewport;
3607
+ getScissor(): Immutable<DeviceViewport>;
3581
3608
  /**
3582
3609
  * Set current GPU program
3583
3610
  * @param program - The GPU program to be set
3584
3611
  */
3585
- setProgram(program: GPUProgram): void;
3612
+ setProgram(program: Nullable<GPUProgram>): void;
3586
3613
  /**
3587
3614
  * Get current GPU program
3588
3615
  */
3589
- getProgram(): GPUProgram;
3616
+ getProgram(): Nullable<GPUProgram>;
3590
3617
  /**
3591
3618
  * Set current vertex layout
3592
3619
  *
3593
3620
  * @param vertexData - The vertex layout to be set
3594
3621
  */
3595
- setVertexLayout(vertexData: VertexLayout): void;
3622
+ setVertexLayout(vertexData: Nullable<VertexLayout>): void;
3596
3623
  /** Get current vertex layout */
3597
- getVertexLayout(): VertexLayout;
3624
+ getVertexLayout(): Nullable<VertexLayout>;
3598
3625
  /**
3599
3626
  * Set current render states
3600
3627
  *
3601
3628
  * @param renderStates - The render state set
3602
3629
  */
3603
- setRenderStates(renderStates: RenderStateSet): void;
3630
+ setRenderStates(renderStates: Nullable<RenderStateSet>): void;
3604
3631
  /** Get current render states */
3605
- getRenderStates(): RenderStateSet;
3632
+ getRenderStates(): Nullable<RenderStateSet>;
3606
3633
  /**
3607
3634
  * Sets the current framebuffer to the specified FrameBuffer object.
3608
3635
  *
3609
3636
  * @param rt - The FrameBuffer object to set as the current framebuffer.
3610
3637
  */
3611
- setFramebuffer(rt: FrameBuffer): any;
3638
+ setFramebuffer(rt: Nullable<FrameBuffer>): void;
3612
3639
  /**
3613
3640
  * Sets the current framebuffer specifying complex color attachments, an optional depth attachment, MIP level, face, and sample count.
3614
3641
  *
@@ -3621,14 +3648,10 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3621
3648
  * @param depth - Optional BaseTexture to serve as the depth attachment.
3622
3649
  * @param sampleCount - Optional sample count defining the number of samples for multisampling.
3623
3650
  */
3624
- setFramebuffer(color: (BaseTexture | {
3625
- texture: BaseTexture;
3626
- miplevel?: number;
3627
- face?: number;
3628
- layer?: number;
3629
- })[], depth?: BaseTexture, miplevel?: number, face?: number, sampleCount?: number): any;
3651
+ setFramebuffer(color: BaseTexture[], depth?: BaseTexture, sampleCount?: number): void;
3652
+ setFramebuffer(colorOrRT: BaseTexture[] | Nullable<FrameBuffer>, depth?: BaseTexture, sampleCount?: number): void;
3630
3653
  /** Get current frame buffer */
3631
- getFramebuffer(): FrameBuffer;
3654
+ getFramebuffer(): Nullable<FrameBuffer>;
3632
3655
  /**
3633
3656
  * Set current bind group
3634
3657
  *
@@ -3636,12 +3659,12 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3636
3659
  * @param bindGroup - The bind group to be set
3637
3660
  * @param dynamicOffsets - dynamic uniform buffer offsets of the bind group or null
3638
3661
  */
3639
- setBindGroup(index: number, bindGroup: BindGroup, dynamicOffsets?: Iterable<number>): any;
3662
+ setBindGroup(index: number, bindGroup: BindGroup, dynamicOffsets?: Nullable<Iterable<number>>): void;
3640
3663
  /**
3641
3664
  * Get current bind group
3642
3665
  * @param index - index of the bind group to get
3643
3666
  */
3644
- getBindGroup(index: number): [BindGroup, Iterable<number>];
3667
+ getBindGroup(index: number): [BindGroup, Nullable<Iterable<number>>];
3645
3668
  /** Flush the gpu command buffer */
3646
3669
  flush(): void;
3647
3670
  /**
@@ -3681,7 +3704,7 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3681
3704
  * Executes render bundle
3682
3705
  * @param renderBundle - RenderBundle to be execute
3683
3706
  */
3684
- executeRenderBundle(renderBundle: RenderBundle): any;
3707
+ executeRenderBundle(renderBundle: RenderBundle): void;
3685
3708
  /**
3686
3709
  * End capture draw commands
3687
3710
  * @returns A RenderBundle that holds the captured draw commands
@@ -3700,7 +3723,7 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3700
3723
  /** Get the program builder */
3701
3724
  programBuilder: ProgramBuilder;
3702
3725
  /** Get the run loop callback function */
3703
- runLoopFunction: (device: AbstractDevice) => void;
3726
+ runLoopFunction: Nullable<(device: AbstractDevice) => void>;
3704
3727
  /**
3705
3728
  * Begins a frame for rendering
3706
3729
  *
@@ -3722,7 +3745,7 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3722
3745
  * @param dataType - The data type
3723
3746
  * @param componentCount - The component count
3724
3747
  */
3725
- getVertexAttribFormat(semantic: VertexSemantic, dataType: DataType, componentCount: number): VertexAttribFormat;
3748
+ getVertexAttribFormat(semantic: VertexSemantic, dataType: DataType, componentCount: number): Nullable<VertexAttribFormat>;
3726
3749
  /**
3727
3750
  * Creates an interleaved vertex buffer
3728
3751
  *
@@ -3731,7 +3754,7 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3731
3754
  * @param options - The creation options
3732
3755
  * @returns The created vertex buffer.
3733
3756
  */
3734
- createInterleavedVertexBuffer(attribFormats: VertexAttribFormat[], data: TypedArray, options?: BufferCreationOptions): StructuredBuffer;
3757
+ createInterleavedVertexBuffer(attribFormats: VertexAttribFormat[], data: TypedArray, options?: BufferCreationOptions): Nullable<StructuredBuffer>;
3735
3758
  /**
3736
3759
  * Creates a non-interleaved vertex buffer
3737
3760
  *
@@ -3740,7 +3763,7 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3740
3763
  * @param options - The creation options
3741
3764
  * @returns The created vertex buffer
3742
3765
  */
3743
- createVertexBuffer(attribFormat: VertexAttribFormat, data: TypedArray, options?: BufferCreationOptions): StructuredBuffer;
3766
+ createVertexBuffer(attribFormat: VertexAttribFormat, data: TypedArray, options?: BufferCreationOptions): Nullable<StructuredBuffer>;
3744
3767
  /**
3745
3768
  * Draw primitives
3746
3769
  *
@@ -3793,56 +3816,51 @@ interface AbstractDevice extends IEventTarget<DeviceEventMap> {
3793
3816
  *
3794
3817
  * @param uid - id of the GPU object
3795
3818
  */
3796
- getGPUObjectById(uid: number): GPUObject;
3819
+ getGPUObjectById(uid: number): Nullable<GPUObject>;
3820
+ /**
3821
+ * Calculates the actual position of current frame buffer from screen position in X axis.
3822
+ *
3823
+ * @remarks
3824
+ * If current frame buffer is the back buffer, the value will be scaled by the device pixel ratio.
3825
+ *
3826
+ * @param val - The screen position in pixels
3827
+ */
3828
+ screenXToDevice(val: number): number;
3797
3829
  /**
3798
- * Calculates the actual position of current frame buffer from screen position.
3830
+ * Calculates the screen position from position of current frame buffer in X axis.
3831
+ *
3832
+ * @remarks
3833
+ * If current frame buffer is the back buffer, the value will be divided by the device pixel ratio.
3834
+ *
3835
+ * @param val - The position of current frame buffer in pixels
3836
+ */
3837
+ deviceXToScreen(val: number): number;
3838
+ /**
3839
+ * Calculates the actual position of current frame buffer from screen position in Y axis.
3799
3840
  *
3800
3841
  * @remarks
3801
3842
  * If current frame buffer is the back buffer, the value will be scaled by the device pixel ratio.
3802
3843
  *
3803
3844
  * @param val - The screen position in pixels
3804
3845
  */
3805
- screenToDevice(val: number): number;
3846
+ screenYToDevice(val: number): number;
3806
3847
  /**
3807
- * Calculates the screen position from position of current frame buffer.
3848
+ * Calculates the screen position from position of current frame buffer in Y axis.
3808
3849
  *
3809
3850
  * @remarks
3810
3851
  * If current frame buffer is the back buffer, the value will be divided by the device pixel ratio.
3811
3852
  *
3812
3853
  * @param val - The position of current frame buffer in pixels
3813
3854
  */
3814
- deviceToScreen(val: number): number;
3855
+ deviceYToScreen(val: number): number;
3815
3856
  /** Builds render program */
3816
- buildRenderProgram(options: PBRenderOptions): GPUProgram;
3857
+ buildRenderProgram(options: PBRenderOptions): Nullable<GPUProgram>;
3817
3858
  /** Builds compute program */
3818
- buildComputeProgram(options: PBComputeOptions): GPUProgram;
3859
+ buildComputeProgram(options: PBComputeOptions): Nullable<GPUProgram>;
3819
3860
  /** Pushes current FrameBuffer state */
3820
- pushDeviceStates(): any;
3861
+ pushDeviceStates(): void;
3821
3862
  /** Pops last FrameBuffer state */
3822
- popDeviceStates(): any;
3823
- }
3824
-
3825
- /**
3826
- * Abstract timer interface
3827
- * @public
3828
- */
3829
- interface ITimer {
3830
- begin(): void;
3831
- end(): void;
3832
- ended(): boolean;
3833
- elapsed(): number;
3834
- }
3835
- /**
3836
- * CPU timer class
3837
- * @public
3838
- */
3839
- declare class CPUTimer implements ITimer {
3840
- constructor();
3841
- now(): number;
3842
- begin(): void;
3843
- end(): void;
3844
- ended(): boolean;
3845
- elapsed(): number;
3863
+ popDeviceStates(): void;
3846
3864
  }
3847
3865
 
3848
3866
  /**
@@ -3851,14 +3869,15 @@ declare class CPUTimer implements ITimer {
3851
3869
  */
3852
3870
  interface DeviceBackend {
3853
3871
  typeName(): string;
3854
- supported(): boolean;
3855
- createDevice(cvs: HTMLCanvasElement, options?: DeviceOptions): Promise<AbstractDevice>;
3872
+ supported(): Promise<boolean>;
3873
+ createDevice(cvs: HTMLCanvasElement, options?: DeviceOptions): Promise<Nullable<AbstractDevice>>;
3856
3874
  }
3857
3875
  /**
3858
3876
  * Base class for rendering device
3859
3877
  * @public
3860
3878
  */
3861
3879
  declare abstract class BaseDevice extends Observable<DeviceEventMap> {
3880
+ protected _dpr: number;
3862
3881
  protected _canvas: HTMLCanvasElement;
3863
3882
  protected _canvasClientWidth: number;
3864
3883
  protected _canvasClientHeight: number;
@@ -3869,13 +3888,13 @@ declare abstract class BaseDevice extends Observable<DeviceEventMap> {
3869
3888
  protected _endFrameTime: number;
3870
3889
  protected _frameInfo: FrameInfo;
3871
3890
  protected _cpuTimer: CPUTimer;
3872
- protected _gpuTimer: ITimer;
3873
- protected _runningLoop: number;
3891
+ protected _gpuTimer: Nullable<ITimer>;
3892
+ protected _runningLoop: Nullable<number>;
3874
3893
  protected _fpsCounter: {
3875
3894
  time: number;
3876
3895
  frame: number;
3877
3896
  };
3878
- protected _runLoopFunc: (device: AbstractDevice) => void;
3897
+ protected _runLoopFunc: Nullable<(device: AbstractDevice) => void>;
3879
3898
  protected _backend: DeviceBackend;
3880
3899
  protected _beginFrameCounter: number;
3881
3900
  protected _programBuilder: ProgramBuilder;
@@ -3883,20 +3902,22 @@ declare abstract class BaseDevice extends Observable<DeviceEventMap> {
3883
3902
  protected _defaultPoolKey: symbol;
3884
3903
  protected _temporalFramebuffer: boolean;
3885
3904
  protected _vSync: boolean;
3905
+ private readonly _resizer;
3886
3906
  private readonly _stateStack;
3887
- constructor(cvs: HTMLCanvasElement, backend: DeviceBackend);
3907
+ constructor(cvs: HTMLCanvasElement, backend: DeviceBackend, dpr?: number);
3908
+ getScaleX(): number;
3909
+ getScaleY(): number;
3888
3910
  abstract getAdapterInfo(): any;
3889
3911
  abstract getFrameBufferSampleCount(): number;
3890
3912
  abstract isContextLost(): boolean;
3891
- abstract getScale(): number;
3892
3913
  abstract getDrawingBufferWidth(): number;
3893
3914
  abstract getDrawingBufferHeight(): number;
3894
3915
  abstract getBackBufferWidth(): number;
3895
3916
  abstract getBackBufferHeight(): number;
3896
- abstract getDeviceCaps(): DeviceCaps;
3917
+ abstract getDeviceCaps(): Immutable<DeviceCaps>;
3897
3918
  abstract initContext(): Promise<void>;
3898
- abstract clearFrameBuffer(clearColor: Vector4, clearDepth: number, clearStencil: number): any;
3899
- abstract createGPUTimer(): ITimer;
3919
+ abstract clearFrameBuffer(clearColor: Nullable<Vector4>, clearDepth: Nullable<number>, clearStencil: Nullable<number>): void;
3920
+ abstract createGPUTimer(): Nullable<ITimer>;
3900
3921
  abstract createRenderStateSet(): RenderStateSet;
3901
3922
  abstract createBlendingState(): BlendingState;
3902
3923
  abstract createColorState(): ColorState;
@@ -3904,42 +3925,42 @@ declare abstract class BaseDevice extends Observable<DeviceEventMap> {
3904
3925
  abstract createDepthState(): DepthState;
3905
3926
  abstract createStencilState(): StencilState;
3906
3927
  abstract createSampler(options: SamplerOptions): TextureSampler;
3907
- abstract createTextureFromMipmapData<T extends BaseTexture>(data: TextureMipmapData, sRGB: boolean, options?: TextureCreationOptions): T;
3908
- abstract createTexture2D(format: TextureFormat, width: number, height: number, options?: TextureCreationOptions): Texture2D;
3909
- abstract createTexture2DFromImage(element: TextureImageElement, sRGB: boolean, options?: TextureCreationOptions): Texture2D;
3910
- abstract createTexture2DArray(format: TextureFormat, width: number, height: number, depth: number, options?: TextureCreationOptions): Texture2DArray;
3911
- abstract createTexture2DArrayFromImages(elements: TextureImageElement[], sRGB: boolean, options?: TextureCreationOptions): Texture2DArray;
3912
- abstract createTexture3D(format: TextureFormat, width: number, height: number, depth: number, options?: TextureCreationOptions): Texture3D;
3913
- abstract createCubeTexture(format: TextureFormat, size: number, options?: TextureCreationOptions): TextureCube;
3928
+ abstract createTextureFromMipmapData<T extends BaseTexture>(data: TextureMipmapData, sRGB: boolean, options?: TextureCreationOptions): Nullable<T>;
3929
+ abstract createTexture2D(format: TextureFormat, width: number, height: number, options?: TextureCreationOptions): Nullable<Texture2D>;
3930
+ abstract createTexture2DFromImage(element: TextureImageElement, sRGB: boolean, options?: TextureCreationOptions): Nullable<Texture2D>;
3931
+ abstract createTexture2DArray(format: TextureFormat, width: number, height: number, depth: number, options?: TextureCreationOptions): Nullable<Texture2DArray>;
3932
+ abstract createTexture2DArrayFromImages(elements: TextureImageElement[], sRGB: boolean, options?: TextureCreationOptions): Nullable<Texture2DArray>;
3933
+ abstract createTexture3D(format: TextureFormat, width: number, height: number, depth: number, options?: TextureCreationOptions): Nullable<Texture3D>;
3934
+ abstract createCubeTexture(format: TextureFormat, size: number, options?: TextureCreationOptions): Nullable<TextureCube>;
3914
3935
  abstract createTextureVideo(el: HTMLVideoElement, samplerOptions?: SamplerOptions): TextureVideo;
3915
3936
  abstract reverseVertexWindingOrder(reverse: boolean): void;
3916
3937
  abstract isWindingOrderReversed(): boolean;
3917
- abstract copyTexture2D(src: Texture2D, srcLevel: number, dst: Texture2D, dstLevel: number): any;
3918
- abstract copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number): any;
3938
+ abstract copyTexture2D(src: Texture2D, srcLevel: number, dst: Texture2D, dstLevel: number): void;
3939
+ abstract copyFramebufferToTexture2D(src: FrameBuffer, index: number, dst: Texture2D, level: number): void;
3919
3940
  abstract createGPUProgram(params: GPUProgramConstructParams): GPUProgram;
3920
- abstract createBindGroup(layout: BindGroupLayout): BindGroup;
3941
+ abstract createBindGroup(layout: Immutable<BindGroupLayout>): BindGroup;
3921
3942
  abstract createBuffer(sizeInBytes: number, options: BufferCreationOptions): GPUDataBuffer;
3922
- abstract copyBuffer(sourceBuffer: GPUDataBuffer, destBuffer: GPUDataBuffer, srcOffset: number, dstOffset: number, bytes: number): any;
3943
+ abstract copyBuffer(sourceBuffer: GPUDataBuffer, destBuffer: GPUDataBuffer, srcOffset: number, dstOffset: number, bytes: number): void;
3923
3944
  abstract createIndexBuffer(data: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>, options?: BufferCreationOptions): IndexBuffer;
3924
3945
  abstract createStructuredBuffer(structureType: PBStructTypeInfo, options: BufferCreationOptions, data?: TypedArray): StructuredBuffer;
3925
3946
  abstract createVertexLayout(options: VertexLayoutOptions): VertexLayout;
3926
- abstract createFrameBuffer(colorAttachments: BaseTexture[], depthAttachment: BaseTexture, options?: FrameBufferOptions): FrameBuffer;
3927
- abstract setViewport(vp?: number[] | DeviceViewport): void;
3928
- abstract getViewport(): DeviceViewport;
3929
- abstract setScissor(scissor?: number[] | DeviceViewport): void;
3930
- abstract getScissor(): DeviceViewport;
3931
- abstract setProgram(program: GPUProgram): void;
3932
- abstract getProgram(): GPUProgram;
3933
- abstract setVertexLayout(vertexData: VertexLayout): void;
3934
- abstract getVertexLayout(): VertexLayout;
3935
- abstract setRenderStates(renderStates: RenderStateSet): void;
3936
- abstract getRenderStates(): RenderStateSet;
3937
- abstract getFramebuffer(): FrameBuffer;
3938
- abstract setBindGroup(index: number, bindGroup: BindGroup, dynamicOffsets?: Iterable<number>): any;
3939
- abstract getBindGroup(index: number): [BindGroup, Iterable<number>];
3947
+ abstract createFrameBuffer(colorAttachments: BaseTexture[], depthAttachment: Nullable<BaseTexture>, options?: Nullable<FrameBufferOptions>): FrameBuffer;
3948
+ abstract setViewport(vp: Nullable<Immutable<number[] | DeviceViewport>>): void;
3949
+ abstract getViewport(): Immutable<DeviceViewport>;
3950
+ abstract setScissor(scissor: Nullable<Immutable<number[] | DeviceViewport>>): void;
3951
+ abstract getScissor(): Immutable<DeviceViewport>;
3952
+ abstract setProgram(program: Nullable<GPUProgram>): void;
3953
+ abstract getProgram(): Nullable<GPUProgram>;
3954
+ abstract setVertexLayout(vertexData: Nullable<VertexLayout>): void;
3955
+ abstract getVertexLayout(): Nullable<VertexLayout>;
3956
+ abstract setRenderStates(renderStates: Nullable<RenderStateSet>): void;
3957
+ abstract getRenderStates(): Nullable<RenderStateSet>;
3958
+ abstract getFramebuffer(): Nullable<FrameBuffer>;
3959
+ abstract setBindGroup(index: number, bindGroup: BindGroup, dynamicOffsets?: Nullable<Iterable<number>>): void;
3960
+ abstract getBindGroup(index: number): [BindGroup, Nullable<Iterable<number>>];
3940
3961
  abstract flush(): void;
3941
3962
  abstract nextFrame(callback: () => void): number;
3942
- abstract cancelNextFrame(handle: number): any;
3963
+ abstract cancelNextFrame(handle: number): void;
3943
3964
  abstract readPixels(index: number, x: number, y: number, w: number, h: number, buffer: TypedArray): Promise<void>;
3944
3965
  abstract readPixelsToBuffer(index: number, x: number, y: number, w: number, h: number, buffer: GPUDataBuffer): void;
3945
3966
  abstract beginCapture(): void;
@@ -3959,26 +3980,26 @@ declare abstract class BaseDevice extends Observable<DeviceEventMap> {
3959
3980
  get vSync(): boolean;
3960
3981
  set vSync(val: boolean);
3961
3982
  get pool(): Pool;
3962
- get runLoopFunction(): (device: AbstractDevice) => void;
3983
+ get runLoopFunction(): Nullable<(device: AbstractDevice) => void>;
3963
3984
  get programBuilder(): ProgramBuilder;
3964
3985
  poolExists(key: string | symbol): boolean;
3965
3986
  getPool(key: string | symbol): Pool;
3966
3987
  setFont(fontName: string): void;
3967
- drawText(text: string, x: number, y: number, color: string): void;
3968
- setFramebuffer(rt: FrameBuffer): any;
3969
- setFramebuffer(color: BaseTexture[], depth?: BaseTexture, sampleCount?: number): any;
3988
+ drawText(text: string, x: number, y: number, color: string, viewport?: Immutable<number[]>): void;
3989
+ setFramebuffer(rt: Nullable<FrameBuffer>): void;
3990
+ setFramebuffer(color: BaseTexture[], depth?: BaseTexture, sampleCount?: number): void;
3970
3991
  disposeObject(obj: GPUObject, remove?: boolean): void;
3971
3992
  restoreObject(obj: GPUObject): void;
3972
3993
  enableGPUTimeRecording(enable: boolean): void;
3973
3994
  beginFrame(): boolean;
3974
3995
  endFrame(): void;
3975
- getVertexAttribFormat(semantic: VertexSemantic, dataType: DataType, componentCount: number): VertexAttribFormat;
3976
- createInterleavedVertexBuffer(attribFormats: VertexAttribFormat[], data: TypedArray, options?: BufferCreationOptions): StructuredBuffer;
3977
- createVertexBuffer(attribFormat: VertexAttribFormat, data: TypedArray, options?: BufferCreationOptions): StructuredBuffer;
3996
+ getVertexAttribFormat(semantic: VertexSemantic, dataType: DataType, componentCount: number): VertexAttribFormat | null;
3997
+ createInterleavedVertexBuffer(attribFormats: VertexAttribFormat[], data: TypedArray, options?: BufferCreationOptions): StructuredBuffer<unknown> | null;
3998
+ createVertexBuffer(attribFormat: VertexAttribFormat, data: TypedArray, options?: BufferCreationOptions): StructuredBuffer<unknown> | null;
3978
3999
  draw(primitiveType: PrimitiveType, first: number, count: number): void;
3979
4000
  drawInstanced(primitiveType: PrimitiveType, first: number, count: number, numInstances: number): void;
3980
4001
  executeRenderBundle(renderBundle: RenderBundle): void;
3981
- compute(workgroupCountX: any, workgroupCountY: any, workgroupCountZ: any): void;
4002
+ compute(workgroupCountX: number, workgroupCountY: number, workgroupCountZ: number): void;
3982
4003
  runNextFrame(f: () => void): void;
3983
4004
  runNextFrameAsync(f: () => void | Promise<void>): Promise<void>;
3984
4005
  exitLoop(): void;
@@ -3986,25 +4007,27 @@ declare abstract class BaseDevice extends Observable<DeviceEventMap> {
3986
4007
  pushDeviceStates(): void;
3987
4008
  popDeviceStates(): void;
3988
4009
  getGPUObjects(): GPUObjectList;
3989
- getGPUObjectById(uid: number): GPUObject;
3990
- screenToDevice(val: number): number;
3991
- deviceToScreen(val: number): number;
3992
- buildRenderProgram(options: PBRenderOptions): GPUProgram;
3993
- buildComputeProgram(options: PBComputeOptions): GPUProgram;
4010
+ getGPUObjectById(uid: number): GPUDataBuffer<unknown> | BaseTexture<unknown> | VertexLayout<unknown> | FrameBuffer<unknown> | TextureSampler<unknown> | GPUProgram<unknown> | null;
4011
+ screenXToDevice(val: number): number;
4012
+ deviceXToScreen(val: number): number;
4013
+ screenYToDevice(val: number): number;
4014
+ deviceYToScreen(val: number): number;
4015
+ buildRenderProgram(options: PBRenderOptions): Nullable<GPUProgram<unknown>>;
4016
+ buildComputeProgram(options: PBComputeOptions): Nullable<GPUProgram<unknown>>;
3994
4017
  addGPUObject(obj: GPUObject): void;
3995
4018
  removeGPUObject(obj: GPUObject): void;
3996
4019
  updateVideoMemoryCost(delta: number): void;
3997
4020
  protected abstract onBeginFrame(): boolean;
3998
4021
  protected abstract onEndFrame(): void;
3999
- protected abstract _setFramebuffer(fb: FrameBuffer): any;
4000
- private _onresize;
4001
- private _registerEventHandlers;
4022
+ protected abstract _setFramebuffer(fb: Nullable<FrameBuffer>): void;
4023
+ protected abstract _handleResize(cssWidth: number, cssHeight: number, deviceWidth: number, deviceHeight: number): void;
4024
+ protected initResizer(): Promise<void>;
4002
4025
  private updateFrameInfo;
4003
4026
  private getGPUObjectList;
4004
4027
  protected invalidateAll(): void;
4005
4028
  protected reloadAll(): void;
4006
4029
  protected parseTextureOptions(options?: TextureCreationOptions): number;
4007
- protected parseBufferOptions(options: BufferCreationOptions, defaultUsage?: BufferUsage): number;
4030
+ protected parseBufferOptions(options?: BufferCreationOptions, defaultUsage?: BufferUsage): number;
4008
4031
  }
4009
4032
  /**
4010
4033
  * Merge event target interface
@@ -4044,20 +4067,20 @@ declare class TextureAtlasManager {
4044
4067
  * The texture restore handler callback function
4045
4068
  * This callback function will be called whenever the device has been restored
4046
4069
  */
4047
- get atlasTextureRestoreHandler(): (tex: BaseTexture) => void;
4048
- set atlasTextureRestoreHandler(f: (tex: BaseTexture) => void);
4070
+ get atlasTextureRestoreHandler(): Nullable<(tex: BaseTexture) => void>;
4071
+ set atlasTextureRestoreHandler(f: Nullable<(tex: BaseTexture) => void>);
4049
4072
  /**
4050
4073
  * Gets the atlas texture of a given index
4051
4074
  * @param index - Index of the atlas bin
4052
4075
  * @returns Atlas texture for given index
4053
4076
  */
4054
- getAtlasTexture(index: number): Texture2D;
4077
+ getAtlasTexture(index: number): Texture2D<unknown> | undefined;
4055
4078
  /**
4056
4079
  * Gets the information about specified atlas
4057
4080
  * @param key - Key of the atlas
4058
4081
  * @returns Information of the atlas
4059
4082
  */
4060
- getAtlasInfo(key: string): AtlasInfo;
4083
+ getAtlasInfo(key: string): AtlasInfo | null;
4061
4084
  /**
4062
4085
  * Check if no atlas has been created
4063
4086
  * @returns true if no atlas has been created
@@ -4077,14 +4100,14 @@ declare class TextureAtlasManager {
4077
4100
  * @param h - height of the rectangle
4078
4101
  * @returns The atals info or null if insert failed
4079
4102
  */
4080
- pushCanvas(key: string, ctx: CanvasRenderingContext2D, x: number, y: number, w: number, h: number): AtlasInfo;
4103
+ pushCanvas(key: string, ctx: CanvasRenderingContext2D, x: number, y: number, w: number, h: number): AtlasInfo | null;
4081
4104
  /**
4082
4105
  * Inserts a bitmap to the atlas texture
4083
4106
  * @param key - Key of the atlas
4084
4107
  * @param bitmap - The bitmap object
4085
4108
  * @returns The atals info or null if insert failed
4086
4109
  */
4087
- pushBitmap(key: string, bitmap: ImageData | ImageBitmap): AtlasInfo;
4110
+ pushBitmap(key: string, bitmap: ImageData | ImageBitmap): AtlasInfo | null;
4088
4111
  }
4089
4112
 
4090
4113
  /**
@@ -4144,12 +4167,13 @@ declare class GlyphManager extends TextureAtlasManager {
4144
4167
  */
4145
4168
  constructor(device: AbstractDevice, binWidth: number, binHeight: number, border: number);
4146
4169
  /**
4147
- * Gets the atlas information for given character
4170
+ * Gets the size for given character
4148
4171
  * @param char - The character
4149
4172
  * @param font - Font of the character
4150
- * @returns Atlas information for the glyph
4173
+ * @returns [width, height]
4151
4174
  */
4152
- getGlyphInfo(char: string, font: Font): AtlasInfo;
4175
+ getGlyphSize(char: string, font: Font): number[] | null;
4176
+ getGlyphInfo(char: string, font: Font): AtlasInfo | null;
4153
4177
  /**
4154
4178
  * Measuring the width of a string
4155
4179
  * @param str - The string to be measured
@@ -4196,7 +4220,7 @@ declare class DrawText {
4196
4220
  * @param x - X coordinate of the text
4197
4221
  * @param y - Y coordinate of the text
4198
4222
  */
4199
- static drawText(device: AbstractDevice, text: string, color: string, x: number, y: number): void;
4223
+ static drawText(device: AbstractDevice, text: string, color: string, x: number, y: number, viewport?: Immutable<number[]>): void;
4200
4224
  }
4201
4225
 
4202
4226
  /**
@@ -4209,11 +4233,11 @@ declare class StructuredBufferData {
4209
4233
  * @param layout - Layout of the structure
4210
4234
  * @param buffer - Buffer that holds the data
4211
4235
  */
4212
- constructor(layout: UniformBufferLayout, buffer?: StructuredBuffer | ArrayBuffer);
4236
+ constructor(layout: UniformBufferLayout, buffer?: Nullable<StructuredBuffer | ArrayBuffer>);
4213
4237
  /** The buffer size in bytes */
4214
4238
  get byteLength(): number;
4215
4239
  /** Get the data cache buffer */
4216
- get buffer(): ArrayBuffer;
4240
+ get buffer(): Nullable<ArrayBuffer>;
4217
4241
  /** Get all the uniform datas */
4218
4242
  get uniforms(): Record<string, TypedArray>;
4219
4243
  /**