@luma.gl/core 9.2.6 → 9.3.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter/canvas-context.d.ts +6 -162
- package/dist/adapter/canvas-context.d.ts.map +1 -1
- package/dist/adapter/canvas-context.js +5 -419
- package/dist/adapter/canvas-context.js.map +1 -1
- package/dist/adapter/canvas-observer.d.ts +32 -0
- package/dist/adapter/canvas-observer.d.ts.map +1 -0
- package/dist/adapter/canvas-observer.js +90 -0
- package/dist/adapter/canvas-observer.js.map +1 -0
- package/dist/adapter/canvas-surface.d.ts +150 -0
- package/dist/adapter/canvas-surface.d.ts.map +1 -0
- package/dist/adapter/canvas-surface.js +392 -0
- package/dist/adapter/canvas-surface.js.map +1 -0
- package/dist/adapter/device.d.ts +81 -16
- package/dist/adapter/device.d.ts.map +1 -1
- package/dist/adapter/device.js +191 -10
- package/dist/adapter/device.js.map +1 -1
- package/dist/adapter/luma.js +1 -1
- package/dist/adapter/luma.js.map +1 -1
- package/dist/adapter/presentation-context.d.ts +11 -0
- package/dist/adapter/presentation-context.d.ts.map +1 -0
- package/dist/adapter/presentation-context.js +12 -0
- package/dist/adapter/presentation-context.js.map +1 -0
- package/dist/adapter/resources/buffer.d.ts +1 -1
- package/dist/adapter/resources/buffer.d.ts.map +1 -1
- package/dist/adapter/resources/buffer.js +14 -6
- package/dist/adapter/resources/buffer.js.map +1 -1
- package/dist/adapter/resources/command-buffer.d.ts +3 -1
- package/dist/adapter/resources/command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/command-buffer.js +3 -1
- package/dist/adapter/resources/command-buffer.js.map +1 -1
- package/dist/adapter/resources/command-encoder.d.ts +30 -7
- package/dist/adapter/resources/command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/command-encoder.js +68 -2
- package/dist/adapter/resources/command-encoder.js.map +1 -1
- package/dist/adapter/resources/compute-pipeline.d.ts +2 -2
- package/dist/adapter/resources/compute-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/fence.d.ts +16 -0
- package/dist/adapter/resources/fence.d.ts.map +1 -0
- package/dist/adapter/resources/fence.js +17 -0
- package/dist/adapter/resources/fence.js.map +1 -0
- package/dist/adapter/resources/framebuffer.d.ts +1 -1
- package/dist/adapter/resources/framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/framebuffer.js +15 -12
- package/dist/adapter/resources/framebuffer.js.map +1 -1
- package/dist/adapter/resources/query-set.d.ts +17 -1
- package/dist/adapter/resources/query-set.d.ts.map +1 -1
- package/dist/adapter/resources/query-set.js.map +1 -1
- package/dist/adapter/resources/render-pipeline.d.ts +28 -10
- package/dist/adapter/resources/render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/render-pipeline.js +21 -2
- package/dist/adapter/resources/render-pipeline.js.map +1 -1
- package/dist/adapter/resources/resource.d.ts +13 -0
- package/dist/adapter/resources/resource.d.ts.map +1 -1
- package/dist/adapter/resources/resource.js +243 -14
- package/dist/adapter/resources/resource.js.map +1 -1
- package/dist/adapter/resources/shader.js +27 -25
- package/dist/adapter/resources/shader.js.map +1 -1
- package/dist/adapter/resources/shared-render-pipeline.d.ts +22 -0
- package/dist/adapter/resources/shared-render-pipeline.d.ts.map +1 -0
- package/dist/adapter/resources/shared-render-pipeline.js +25 -0
- package/dist/adapter/resources/shared-render-pipeline.js.map +1 -0
- package/dist/adapter/resources/texture-view.d.ts +1 -1
- package/dist/adapter/resources/texture-view.d.ts.map +1 -1
- package/dist/adapter/resources/texture.d.ts +168 -28
- package/dist/adapter/resources/texture.d.ts.map +1 -1
- package/dist/adapter/resources/texture.js +284 -25
- package/dist/adapter/resources/texture.js.map +1 -1
- package/dist/adapter/types/attachments.d.ts +1 -1
- package/dist/adapter/types/attachments.d.ts.map +1 -1
- package/dist/adapter/types/buffer-layout.d.ts +1 -1
- package/dist/adapter/types/buffer-layout.d.ts.map +1 -1
- package/dist/adapter/types/parameters.d.ts +3 -1
- package/dist/adapter/types/parameters.d.ts.map +1 -1
- package/dist/adapter/types/parameters.js +1 -0
- package/dist/adapter/types/parameters.js.map +1 -1
- package/dist/adapter/types/shader-layout.d.ts +10 -6
- package/dist/adapter/types/shader-layout.d.ts.map +1 -1
- package/dist/adapter/types/uniforms.d.ts +6 -0
- package/dist/adapter/types/uniforms.d.ts.map +1 -1
- package/dist/adapter-utils/bind-groups.d.ts +9 -0
- package/dist/adapter-utils/bind-groups.d.ts.map +1 -0
- package/dist/adapter-utils/bind-groups.js +41 -0
- package/dist/adapter-utils/bind-groups.js.map +1 -0
- package/dist/adapter-utils/format-compiler-log.d.ts.map +1 -1
- package/dist/adapter-utils/format-compiler-log.js +23 -15
- package/dist/adapter-utils/format-compiler-log.js.map +1 -1
- package/dist/adapter-utils/get-attribute-from-layouts.d.ts +2 -2
- package/dist/adapter-utils/get-attribute-from-layouts.d.ts.map +1 -1
- package/dist/adapter-utils/get-attribute-from-layouts.js +6 -6
- package/dist/adapter-utils/get-attribute-from-layouts.js.map +1 -1
- package/dist/dist.dev.js +2686 -644
- package/dist/dist.min.js +10 -9
- package/dist/factories/bind-group-factory.d.ts +20 -0
- package/dist/factories/bind-group-factory.d.ts.map +1 -0
- package/dist/factories/bind-group-factory.js +79 -0
- package/dist/factories/bind-group-factory.js.map +1 -0
- package/dist/factories/core-module-state.d.ts +7 -0
- package/dist/factories/core-module-state.d.ts.map +1 -0
- package/dist/{shadertypes/data-types/shader-types.js → factories/core-module-state.js} +1 -1
- package/dist/factories/core-module-state.js.map +1 -0
- package/dist/factories/pipeline-factory.d.ts +54 -0
- package/dist/factories/pipeline-factory.d.ts.map +1 -0
- package/dist/factories/pipeline-factory.js +270 -0
- package/dist/factories/pipeline-factory.js.map +1 -0
- package/dist/factories/shader-factory.d.ts +20 -0
- package/dist/factories/shader-factory.d.ts.map +1 -0
- package/dist/factories/shader-factory.js +84 -0
- package/dist/factories/shader-factory.js.map +1 -0
- package/dist/index.cjs +2422 -554
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +30 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -7
- package/dist/index.js.map +1 -1
- package/dist/portable/shader-block-writer.d.ts +51 -0
- package/dist/portable/shader-block-writer.d.ts.map +1 -0
- package/dist/portable/shader-block-writer.js +185 -0
- package/dist/portable/shader-block-writer.js.map +1 -0
- package/dist/portable/uniform-block.d.ts +1 -1
- package/dist/portable/uniform-block.d.ts.map +1 -1
- package/dist/portable/uniform-store.d.ts +55 -24
- package/dist/portable/uniform-store.d.ts.map +1 -1
- package/dist/portable/uniform-store.js +73 -25
- package/dist/portable/uniform-store.js.map +1 -1
- package/dist/shadertypes/data-types/data-type-decoder.d.ts +20 -0
- package/dist/shadertypes/data-types/data-type-decoder.d.ts.map +1 -0
- package/dist/shadertypes/data-types/data-type-decoder.js +79 -0
- package/dist/shadertypes/data-types/data-type-decoder.js.map +1 -0
- package/dist/shadertypes/data-types/data-types.d.ts +31 -12
- package/dist/shadertypes/data-types/data-types.d.ts.map +1 -1
- package/dist/shadertypes/data-types/decode-data-types.d.ts.map +1 -1
- package/dist/shadertypes/data-types/decode-data-types.js +2 -1
- package/dist/shadertypes/data-types/decode-data-types.js.map +1 -1
- package/dist/{image-utils → shadertypes/image-types}/image-types.d.ts +0 -6
- package/dist/shadertypes/image-types/image-types.d.ts.map +1 -0
- package/dist/shadertypes/image-types/image-types.js.map +1 -0
- package/dist/shadertypes/shader-types/shader-block-layout.d.ts +72 -0
- package/dist/shadertypes/shader-types/shader-block-layout.d.ts.map +1 -0
- package/dist/shadertypes/shader-types/shader-block-layout.js +209 -0
- package/dist/shadertypes/shader-types/shader-block-layout.js.map +1 -0
- package/dist/shadertypes/shader-types/shader-type-decoder.d.ts +41 -0
- package/dist/shadertypes/shader-types/shader-type-decoder.d.ts.map +1 -0
- package/dist/shadertypes/{data-types/decode-shader-types.js → shader-types/shader-type-decoder.js} +43 -4
- package/dist/shadertypes/shader-types/shader-type-decoder.js.map +1 -0
- package/dist/shadertypes/shader-types/shader-types.d.ts +101 -0
- package/dist/shadertypes/shader-types/shader-types.d.ts.map +1 -0
- package/dist/shadertypes/shader-types/shader-types.js +30 -0
- package/dist/shadertypes/shader-types/shader-types.js.map +1 -0
- package/dist/shadertypes/texture-types/pixel-utils.d.ts.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/pixel-utils.js +4 -4
- package/dist/shadertypes/texture-types/pixel-utils.js.map +1 -0
- package/dist/shadertypes/texture-types/texture-format-decoder.d.ts +36 -0
- package/dist/shadertypes/texture-types/texture-format-decoder.d.ts.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/texture-format-decoder.js +109 -37
- package/dist/shadertypes/texture-types/texture-format-decoder.js.map +1 -0
- package/dist/shadertypes/texture-types/texture-format-generics.d.ts +34 -0
- package/dist/shadertypes/texture-types/texture-format-generics.d.ts.map +1 -0
- package/dist/shadertypes/texture-types/texture-format-generics.js.map +1 -0
- package/dist/shadertypes/texture-types/texture-format-table.d.ts.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/texture-format-table.js +10 -9
- package/dist/shadertypes/texture-types/texture-format-table.js.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/texture-formats.d.ts +51 -17
- package/dist/shadertypes/texture-types/texture-formats.d.ts.map +1 -0
- package/dist/shadertypes/{textures → texture-types}/texture-formats.js +1 -0
- package/dist/shadertypes/texture-types/texture-formats.js.map +1 -0
- package/dist/shadertypes/texture-types/texture-layout.d.ts +5 -0
- package/dist/shadertypes/texture-types/texture-layout.d.ts.map +1 -0
- package/dist/shadertypes/texture-types/texture-layout.js +41 -0
- package/dist/shadertypes/texture-types/texture-layout.js.map +1 -0
- package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts +24 -0
- package/dist/shadertypes/vertex-types/vertex-format-decoder.d.ts.map +1 -0
- package/dist/shadertypes/vertex-types/vertex-format-decoder.js +106 -0
- package/dist/shadertypes/vertex-types/vertex-format-decoder.js.map +1 -0
- package/dist/shadertypes/vertex-types/vertex-formats.d.ts +50 -0
- package/dist/shadertypes/vertex-types/vertex-formats.d.ts.map +1 -0
- package/dist/shadertypes/vertex-types/vertex-formats.js.map +1 -0
- package/dist/utils/array-equal.d.ts +1 -1
- package/dist/utils/array-equal.d.ts.map +1 -1
- package/dist/utils/array-equal.js +15 -9
- package/dist/utils/array-equal.js.map +1 -1
- package/dist/utils/assert.d.ts +5 -0
- package/dist/utils/assert.d.ts.map +1 -0
- package/dist/utils/assert.js +17 -0
- package/dist/utils/assert.js.map +1 -0
- package/dist/utils/stats-manager.d.ts.map +1 -1
- package/dist/utils/stats-manager.js +61 -1
- package/dist/utils/stats-manager.js.map +1 -1
- package/package.json +6 -6
- package/src/adapter/canvas-context.ts +7 -556
- package/src/adapter/canvas-observer.ts +130 -0
- package/src/adapter/canvas-surface.ts +521 -0
- package/src/adapter/device.ts +308 -24
- package/src/adapter/presentation-context.ts +16 -0
- package/src/adapter/resources/buffer.ts +13 -5
- package/src/adapter/resources/command-buffer.ts +4 -2
- package/src/adapter/resources/command-encoder.ts +101 -10
- package/src/adapter/resources/compute-pipeline.ts +2 -2
- package/src/adapter/resources/fence.ts +32 -0
- package/src/adapter/resources/framebuffer.ts +16 -13
- package/src/adapter/resources/query-set.ts +17 -1
- package/src/adapter/resources/render-pipeline.ts +52 -16
- package/src/adapter/resources/resource.ts +289 -14
- package/src/adapter/resources/shader.ts +28 -28
- package/src/adapter/resources/shared-render-pipeline.ts +40 -0
- package/src/adapter/resources/texture-view.ts +1 -1
- package/src/adapter/resources/texture.ts +427 -49
- package/src/adapter/types/attachments.ts +1 -1
- package/src/adapter/types/buffer-layout.ts +1 -1
- package/src/adapter/types/parameters.ts +4 -1
- package/src/adapter/types/shader-layout.ts +15 -9
- package/src/adapter/types/uniforms.ts +12 -0
- package/src/adapter-utils/bind-groups.ts +71 -0
- package/src/adapter-utils/format-compiler-log.ts +23 -15
- package/src/adapter-utils/get-attribute-from-layouts.ts +8 -11
- package/src/factories/bind-group-factory.ts +139 -0
- package/src/factories/core-module-state.ts +11 -0
- package/src/factories/pipeline-factory.ts +328 -0
- package/src/factories/shader-factory.ts +103 -0
- package/src/index.ts +70 -26
- package/src/portable/shader-block-writer.ts +254 -0
- package/src/portable/uniform-block.ts +1 -1
- package/src/portable/uniform-store.ts +98 -40
- package/src/shadertypes/data-types/data-type-decoder.ts +105 -0
- package/src/shadertypes/data-types/data-types.ts +100 -48
- package/src/shadertypes/data-types/decode-data-types.ts +2 -1
- package/src/{image-utils → shadertypes/image-types}/image-types.ts +0 -7
- package/src/shadertypes/shader-types/shader-block-layout.ts +340 -0
- package/src/shadertypes/{data-types/decode-shader-types.ts → shader-types/shader-type-decoder.ts} +88 -14
- package/src/shadertypes/shader-types/shader-types.ts +207 -0
- package/src/shadertypes/{textures → texture-types}/pixel-utils.ts +4 -4
- package/src/shadertypes/{textures → texture-types}/texture-format-decoder.ts +166 -45
- package/src/shadertypes/{textures → texture-types}/texture-format-generics.ts +42 -48
- package/src/shadertypes/{textures → texture-types}/texture-format-table.ts +10 -9
- package/src/shadertypes/{textures → texture-types}/texture-formats.ts +73 -17
- package/src/shadertypes/texture-types/texture-layout.ts +60 -0
- package/src/shadertypes/vertex-types/vertex-format-decoder.ts +131 -0
- package/src/shadertypes/vertex-types/vertex-formats.ts +183 -0
- package/src/utils/array-equal.ts +21 -9
- package/src/utils/assert.ts +18 -0
- package/src/utils/stats-manager.ts +76 -2
- package/dist/image-utils/image-types.d.ts.map +0 -1
- package/dist/image-utils/image-types.js.map +0 -1
- package/dist/portable/uniform-buffer-layout.d.ts +0 -28
- package/dist/portable/uniform-buffer-layout.d.ts.map +0 -1
- package/dist/portable/uniform-buffer-layout.js +0 -96
- package/dist/portable/uniform-buffer-layout.js.map +0 -1
- package/dist/shadertypes/data-types/decode-shader-types.d.ts +0 -17
- package/dist/shadertypes/data-types/decode-shader-types.d.ts.map +0 -1
- package/dist/shadertypes/data-types/decode-shader-types.js.map +0 -1
- package/dist/shadertypes/data-types/shader-types.d.ts +0 -45
- package/dist/shadertypes/data-types/shader-types.d.ts.map +0 -1
- package/dist/shadertypes/data-types/shader-types.js.map +0 -1
- package/dist/shadertypes/textures/pixel-utils.d.ts.map +0 -1
- package/dist/shadertypes/textures/pixel-utils.js.map +0 -1
- package/dist/shadertypes/textures/texture-format-decoder.d.ts +0 -18
- package/dist/shadertypes/textures/texture-format-decoder.d.ts.map +0 -1
- package/dist/shadertypes/textures/texture-format-decoder.js.map +0 -1
- package/dist/shadertypes/textures/texture-format-generics.d.ts +0 -33
- package/dist/shadertypes/textures/texture-format-generics.d.ts.map +0 -1
- package/dist/shadertypes/textures/texture-format-generics.js.map +0 -1
- package/dist/shadertypes/textures/texture-format-table.d.ts.map +0 -1
- package/dist/shadertypes/textures/texture-format-table.js.map +0 -1
- package/dist/shadertypes/textures/texture-formats.d.ts.map +0 -1
- package/dist/shadertypes/textures/texture-formats.js.map +0 -1
- package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts +0 -18
- package/dist/shadertypes/vertex-arrays/decode-vertex-format.d.ts.map +0 -1
- package/dist/shadertypes/vertex-arrays/decode-vertex-format.js +0 -100
- package/dist/shadertypes/vertex-arrays/decode-vertex-format.js.map +0 -1
- package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts +0 -27
- package/dist/shadertypes/vertex-arrays/vertex-formats.d.ts.map +0 -1
- package/dist/shadertypes/vertex-arrays/vertex-formats.js.map +0 -1
- package/src/portable/uniform-buffer-layout.ts +0 -118
- package/src/shadertypes/data-types/shader-types.ts +0 -87
- package/src/shadertypes/vertex-arrays/decode-vertex-format.ts +0 -124
- package/src/shadertypes/vertex-arrays/vertex-formats.ts +0 -91
- /package/dist/{image-utils → shadertypes/image-types}/image-types.js +0 -0
- /package/dist/shadertypes/{textures → texture-types}/pixel-utils.d.ts +0 -0
- /package/dist/shadertypes/{textures → texture-types}/texture-format-generics.js +0 -0
- /package/dist/shadertypes/{textures → texture-types}/texture-format-table.d.ts +0 -0
- /package/dist/shadertypes/{vertex-arrays → vertex-types}/vertex-formats.js +0 -0
|
@@ -2,14 +2,20 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import {TypedArray} from '@math.gl/types';
|
|
6
|
-
import type
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
import {type TypedArray} from '@math.gl/types';
|
|
6
|
+
import {type Device} from '../device';
|
|
7
|
+
import {
|
|
8
|
+
type TextureFormat,
|
|
9
|
+
type TextureMemoryLayout,
|
|
10
|
+
type TextureFormatInfo
|
|
11
|
+
} from '../../shadertypes/texture-types/texture-formats';
|
|
12
|
+
import {type ExternalImage} from '../../shadertypes/image-types/image-types';
|
|
13
|
+
import {type TextureView, type TextureViewProps} from './texture-view';
|
|
14
|
+
import {Resource, type ResourceProps} from './resource';
|
|
15
|
+
import {Sampler, type SamplerProps} from './sampler';
|
|
16
|
+
import {Buffer} from './buffer';
|
|
12
17
|
import {log} from '../../utils/log';
|
|
18
|
+
import {textureFormatDecoder} from '../../shadertypes/texture-types/texture-format-decoder';
|
|
13
19
|
|
|
14
20
|
/** Options for Texture.copyExternalImage */
|
|
15
21
|
export type CopyExternalImageOptions = {
|
|
@@ -49,10 +55,18 @@ export type CopyImageDataOptions = {
|
|
|
49
55
|
data: ArrayBuffer | SharedArrayBuffer | ArrayBufferView;
|
|
50
56
|
/** Offset into the data (in addition to any offset built-in to the ArrayBufferView) */
|
|
51
57
|
byteOffset?: number;
|
|
52
|
-
/** The stride, in bytes, between
|
|
58
|
+
/** The stride, in bytes, between successive texel rows in the CPU source data. Tightly packed uploads can omit this. */
|
|
53
59
|
bytesPerRow?: number;
|
|
54
|
-
/** Number
|
|
60
|
+
/** Number of rows that make up one image when uploading multiple layers or depth slices from CPU memory. */
|
|
55
61
|
rowsPerImage?: number;
|
|
62
|
+
/** Width to copy */
|
|
63
|
+
width?: number;
|
|
64
|
+
/** Height to copy */
|
|
65
|
+
height?: number;
|
|
66
|
+
/** Copy depth or number of layers */
|
|
67
|
+
depthOrArrayLayers?: number;
|
|
68
|
+
/** @deprecated Use `depthOrArrayLayers` */
|
|
69
|
+
depth?: number;
|
|
56
70
|
/** Start copying into offset x (default 0) */
|
|
57
71
|
x?: number;
|
|
58
72
|
/** Start copying into offset y (default 0) */
|
|
@@ -65,18 +79,62 @@ export type CopyImageDataOptions = {
|
|
|
65
79
|
aspect?: 'all' | 'stencil-only' | 'depth-only';
|
|
66
80
|
};
|
|
67
81
|
|
|
68
|
-
|
|
82
|
+
export type TextureReadOptions = {
|
|
83
|
+
/** Start reading from offset x (default 0) */
|
|
84
|
+
x?: number;
|
|
85
|
+
/** Start reading from offset y (default 0) */
|
|
86
|
+
y?: number;
|
|
87
|
+
/** Start reading from layer / depth slice z (default 0) */
|
|
88
|
+
z?: number;
|
|
89
|
+
/** Width of the region to read. Defaults to the mip width. */
|
|
90
|
+
width?: number;
|
|
91
|
+
/** Height of the region to read. Defaults to the mip height. */
|
|
92
|
+
height?: number;
|
|
93
|
+
/** Number of array layers or depth slices to read. Defaults to 1. */
|
|
94
|
+
depthOrArrayLayers?: number;
|
|
95
|
+
/** Which mip-level to read from (default 0) */
|
|
96
|
+
mipLevel?: number;
|
|
97
|
+
/** When reading from depth stencil textures (default 'all') */
|
|
98
|
+
aspect?: 'all' | 'stencil-only' | 'depth-only';
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
export type TextureWriteOptions = {
|
|
102
|
+
/** Offset into the source data or buffer, in bytes. */
|
|
103
|
+
byteOffset?: number;
|
|
104
|
+
/** The stride, in bytes, between successive texel rows in the source data or buffer. */
|
|
105
|
+
bytesPerRow?: number;
|
|
106
|
+
/** The number of rows that make up one image when writing multiple layers or slices. */
|
|
107
|
+
rowsPerImage?: number;
|
|
108
|
+
/** Start writing into offset x (default 0) */
|
|
109
|
+
x?: number;
|
|
110
|
+
/** Start writing into offset y (default 0) */
|
|
111
|
+
y?: number;
|
|
112
|
+
/** Start writing into layer / depth slice z (default 0) */
|
|
113
|
+
z?: number;
|
|
114
|
+
/** Width of the region to write. Defaults to the mip width. */
|
|
115
|
+
width?: number;
|
|
116
|
+
/** Height of the region to write. Defaults to the mip height. */
|
|
117
|
+
height?: number;
|
|
118
|
+
/** Number of array layers or depth slices to write. Defaults to 1, or the full mip depth for 3D textures. */
|
|
119
|
+
depthOrArrayLayers?: number;
|
|
120
|
+
/** Which mip-level to write into (default 0) */
|
|
121
|
+
mipLevel?: number;
|
|
122
|
+
/** When writing into depth stencil textures (default 'all') */
|
|
123
|
+
aspect?: 'all' | 'stencil-only' | 'depth-only';
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const BASE_DIMENSIONS = {
|
|
69
127
|
'1d': '1d',
|
|
70
128
|
'2d': '2d',
|
|
71
129
|
'2d-array': '2d',
|
|
72
130
|
cube: '2d',
|
|
73
131
|
'cube-array': '2d',
|
|
74
132
|
'3d': '3d'
|
|
75
|
-
}
|
|
133
|
+
} as const satisfies Record<string, '1d' | '2d' | '3d'>;
|
|
76
134
|
|
|
77
135
|
/** Texture properties */
|
|
78
136
|
export type TextureProps = ResourceProps & {
|
|
79
|
-
/** @deprecated Use
|
|
137
|
+
/** @deprecated Use DynamicTexture to create textures with data. */
|
|
80
138
|
data?: ExternalImage | TypedArray | null;
|
|
81
139
|
/** Dimension of this texture. Defaults to '2d' */
|
|
82
140
|
dimension?: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';
|
|
@@ -130,19 +188,28 @@ export abstract class Texture extends Resource<TextureProps> {
|
|
|
130
188
|
/** format of this texture */
|
|
131
189
|
readonly format: TextureFormat;
|
|
132
190
|
/** width in pixels of this texture */
|
|
133
|
-
width: number;
|
|
191
|
+
readonly width: number;
|
|
134
192
|
/** height in pixels of this texture */
|
|
135
|
-
height: number;
|
|
193
|
+
readonly height: number;
|
|
136
194
|
/** depth of this texture */
|
|
137
|
-
depth: number;
|
|
195
|
+
readonly depth: number;
|
|
138
196
|
/** mip levels in this texture */
|
|
139
|
-
mipLevels: number;
|
|
197
|
+
readonly mipLevels: number;
|
|
198
|
+
/** sample count */
|
|
199
|
+
readonly samples: number;
|
|
200
|
+
/** Rows are multiples of this length, padded with extra bytes if needed */
|
|
201
|
+
readonly byteAlignment: number;
|
|
140
202
|
/** Default sampler for this texture */
|
|
141
203
|
abstract sampler: Sampler;
|
|
142
204
|
/** Default view for this texture */
|
|
143
205
|
abstract view: TextureView;
|
|
144
206
|
|
|
145
|
-
/**
|
|
207
|
+
/** The ready promise is always resolved. It is provided for type compatibility with DynamicTexture. */
|
|
208
|
+
readonly ready: Promise<Texture> = Promise.resolve(this);
|
|
209
|
+
/** isReady is always true. It is provided for type compatibility with DynamicTexture. */
|
|
210
|
+
readonly isReady: boolean = true;
|
|
211
|
+
|
|
212
|
+
/** "Time" of last update. Monotonically increasing timestamp. TODO move to DynamicTexture? */
|
|
146
213
|
updateTimestamp: number;
|
|
147
214
|
|
|
148
215
|
override get [Symbol.toStringTag](): string {
|
|
@@ -154,7 +221,7 @@ export abstract class Texture extends Resource<TextureProps> {
|
|
|
154
221
|
}
|
|
155
222
|
|
|
156
223
|
/** Do not use directly. Create with device.createTexture() */
|
|
157
|
-
constructor(device: Device, props: TextureProps) {
|
|
224
|
+
constructor(device: Device, props: TextureProps, backendProps?: {byteAlignment?: number}) {
|
|
158
225
|
props = Texture.normalizeProps(device, props);
|
|
159
226
|
super(device, props, Texture.defaultProps);
|
|
160
227
|
this.dimension = this.props.dimension;
|
|
@@ -166,6 +233,11 @@ export abstract class Texture extends Resource<TextureProps> {
|
|
|
166
233
|
this.height = this.props.height;
|
|
167
234
|
this.depth = this.props.depth;
|
|
168
235
|
this.mipLevels = this.props.mipLevels;
|
|
236
|
+
this.samples = this.props.samples || 1;
|
|
237
|
+
|
|
238
|
+
if (this.dimension === 'cube') {
|
|
239
|
+
this.depth = 6;
|
|
240
|
+
}
|
|
169
241
|
|
|
170
242
|
// Calculate size, if not provided
|
|
171
243
|
if (this.props.width === undefined || this.props.height === undefined) {
|
|
@@ -178,38 +250,149 @@ export abstract class Texture extends Resource<TextureProps> {
|
|
|
178
250
|
this.height = 1;
|
|
179
251
|
if (this.props.width === undefined || this.props.height === undefined) {
|
|
180
252
|
log.warn(
|
|
181
|
-
`${this} created with undefined width or height. This is deprecated. Use
|
|
253
|
+
`${this} created with undefined width or height. This is deprecated. Use DynamicTexture instead.`
|
|
182
254
|
)();
|
|
183
255
|
}
|
|
184
256
|
}
|
|
185
257
|
}
|
|
186
258
|
|
|
259
|
+
this.byteAlignment = backendProps?.byteAlignment || 1;
|
|
260
|
+
|
|
187
261
|
// TODO - perhaps this should be set on async write completion?
|
|
188
262
|
this.updateTimestamp = device.incrementTimestamp();
|
|
189
263
|
}
|
|
190
264
|
|
|
265
|
+
/**
|
|
266
|
+
* Create a new texture with the same parameters and optionally a different size
|
|
267
|
+
* @note Textures are immutable and cannot be resized after creation, but we can create a similar texture with the same parameters but a new size.
|
|
268
|
+
* @note Does not copy contents of the texture
|
|
269
|
+
*/
|
|
270
|
+
clone(size?: {width: number; height: number}): Texture {
|
|
271
|
+
return this.device.createTexture({...this.props, ...size});
|
|
272
|
+
}
|
|
273
|
+
|
|
191
274
|
/** Set sampler props associated with this texture */
|
|
192
275
|
setSampler(sampler: Sampler | SamplerProps): void {
|
|
193
276
|
this.sampler = sampler instanceof Sampler ? sampler : this.device.createSampler(sampler);
|
|
194
277
|
}
|
|
278
|
+
|
|
195
279
|
/** Create a texture view for this texture */
|
|
196
280
|
abstract createView(props: TextureViewProps): TextureView;
|
|
281
|
+
|
|
197
282
|
/** Copy an image (e.g an ImageBitmap) into the texture */
|
|
198
283
|
abstract copyExternalImage(options: CopyExternalImageOptions): {width: number; height: number};
|
|
199
|
-
/** Copy raw image data (bytes) into the texture */
|
|
200
|
-
abstract copyImageData(options: CopyImageDataOptions): void;
|
|
201
|
-
/** Generate mipmaps (WebGL only) */
|
|
202
|
-
abstract generateMipmapsWebGL(): void;
|
|
203
284
|
|
|
204
285
|
/**
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
-
* @note
|
|
286
|
+
* Copy raw image data (bytes) into the texture.
|
|
287
|
+
*
|
|
288
|
+
* @note Deprecated compatibility wrapper over {@link writeData}.
|
|
289
|
+
* @note Uses the same layout defaults and alignment rules as {@link writeData}.
|
|
290
|
+
* @note Tightly packed CPU uploads can omit `bytesPerRow` and `rowsPerImage`.
|
|
291
|
+
* @note If the CPU source rows are padded, pass explicit `bytesPerRow` and `rowsPerImage`.
|
|
292
|
+
* @deprecated Use writeData()
|
|
208
293
|
*/
|
|
209
|
-
|
|
210
|
-
|
|
294
|
+
copyImageData(options: CopyImageDataOptions): void {
|
|
295
|
+
const {data, depth, ...writeOptions} = options;
|
|
296
|
+
this.writeData(data, {
|
|
297
|
+
...writeOptions,
|
|
298
|
+
depthOrArrayLayers: writeOptions.depthOrArrayLayers ?? depth
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Calculates the memory layout of the texture, required when reading and writing data.
|
|
304
|
+
* @return the backend-aligned linear layout, in particular bytesPerRow which includes any required padding for buffer copy/read paths
|
|
305
|
+
*/
|
|
306
|
+
computeMemoryLayout(options_: TextureReadOptions = {}): TextureMemoryLayout {
|
|
307
|
+
const options = this._normalizeTextureReadOptions(options_);
|
|
308
|
+
const {width = this.width, height = this.height, depthOrArrayLayers = this.depth} = options;
|
|
309
|
+
const {format, byteAlignment} = this;
|
|
310
|
+
|
|
311
|
+
// TODO - does the overriding above make sense?
|
|
312
|
+
// return textureFormatDecoder.computeMemoryLayout(this);
|
|
313
|
+
return textureFormatDecoder.computeMemoryLayout({
|
|
314
|
+
format,
|
|
315
|
+
width,
|
|
316
|
+
height,
|
|
317
|
+
depth: depthOrArrayLayers,
|
|
318
|
+
byteAlignment
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Read the contents of a texture into a GPU Buffer.
|
|
324
|
+
* @returns A Buffer containing the texture data.
|
|
325
|
+
*
|
|
326
|
+
* @note The memory layout of the texture data is determined by the texture format and dimensions.
|
|
327
|
+
* @note The application can call Texture.computeMemoryLayout() to compute the backend-aligned layout.
|
|
328
|
+
* @note The application can call Buffer.readAsync() to read the returned buffer on the CPU.
|
|
329
|
+
* @note The destination buffer must be supplied by the caller and must be large enough for the requested region.
|
|
330
|
+
* @note On WebGPU this corresponds to a texture-to-buffer copy and uses buffer-copy alignment rules.
|
|
331
|
+
* @note On WebGL, luma.gl emulates the same logical readback behavior.
|
|
332
|
+
*/
|
|
333
|
+
readBuffer(options?: TextureReadOptions, buffer?: Buffer): Buffer {
|
|
334
|
+
throw new Error('readBuffer not implemented');
|
|
211
335
|
}
|
|
212
336
|
|
|
337
|
+
/**
|
|
338
|
+
* Reads data from a texture into an ArrayBuffer.
|
|
339
|
+
* @returns An ArrayBuffer containing the texture data.
|
|
340
|
+
*
|
|
341
|
+
* @note The memory layout of the texture data is determined by the texture format and dimensions.
|
|
342
|
+
* @note The application can call Texture.computeMemoryLayout() to compute the layout.
|
|
343
|
+
* @deprecated Use Texture.readBuffer() with an explicit destination buffer, or DynamicTexture.readAsync() for convenience readback.
|
|
344
|
+
*/
|
|
345
|
+
readDataAsync(options?: TextureReadOptions): Promise<ArrayBuffer> {
|
|
346
|
+
throw new Error('readBuffer not implemented');
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* Writes a GPU Buffer into a texture.
|
|
351
|
+
*
|
|
352
|
+
* @param buffer - Source GPU buffer.
|
|
353
|
+
* @param options - Destination subresource, extent, and source layout options.
|
|
354
|
+
* @note The memory layout of the texture data is determined by the texture format and dimensions.
|
|
355
|
+
* @note The application can call Texture.computeMemoryLayout() to compute the backend-aligned layout.
|
|
356
|
+
* @note On WebGPU this corresponds to a buffer-to-texture copy and uses buffer-copy alignment rules.
|
|
357
|
+
* @note On WebGL, luma.gl emulates the same destination and layout semantics.
|
|
358
|
+
*/
|
|
359
|
+
writeBuffer(buffer: Buffer, options?: TextureWriteOptions): void {
|
|
360
|
+
throw new Error('readBuffer not implemented');
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Writes an array buffer into a texture.
|
|
365
|
+
*
|
|
366
|
+
* @param data - Source texel data.
|
|
367
|
+
* @param options - Destination subresource, extent, and source layout options.
|
|
368
|
+
* @note If `bytesPerRow` and `rowsPerImage` are omitted, luma.gl computes a tightly packed CPU-memory layout for the requested region.
|
|
369
|
+
* @note On WebGPU this corresponds to `GPUQueue.writeTexture()` and does not implicitly pad rows to 256 bytes.
|
|
370
|
+
* @note On WebGL, padded CPU data is supported via the same `bytesPerRow` and `rowsPerImage` options.
|
|
371
|
+
*/
|
|
372
|
+
writeData(
|
|
373
|
+
data: ArrayBuffer | SharedArrayBuffer | ArrayBufferView,
|
|
374
|
+
options?: TextureWriteOptions
|
|
375
|
+
): void {
|
|
376
|
+
throw new Error('readBuffer not implemented');
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
// IMPLEMENTATION SPECIFIC
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* WebGL can read data synchronously.
|
|
383
|
+
* @note While it is convenient, the performance penalty is very significant
|
|
384
|
+
*/
|
|
385
|
+
readDataSyncWebGL(options?: TextureReadOptions): ArrayBuffer | ArrayBufferView {
|
|
386
|
+
throw new Error('readDataSyncWebGL not available');
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/** Generate mipmaps (WebGL only) */
|
|
390
|
+
generateMipmapsWebGL(): void {
|
|
391
|
+
throw new Error('generateMipmapsWebGL not available');
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
// HELPERS
|
|
395
|
+
|
|
213
396
|
/** Ensure we have integer coordinates */
|
|
214
397
|
protected static normalizeProps(device: Device, props: TextureProps): TextureProps {
|
|
215
398
|
const newProps = {...props};
|
|
@@ -225,8 +408,6 @@ export abstract class Texture extends Resource<TextureProps> {
|
|
|
225
408
|
return newProps;
|
|
226
409
|
}
|
|
227
410
|
|
|
228
|
-
// HELPERS
|
|
229
|
-
|
|
230
411
|
/** Initialize texture with supplied props */
|
|
231
412
|
// eslint-disable-next-line max-statements
|
|
232
413
|
_initializeData(data: TextureProps['data']): void {
|
|
@@ -263,40 +444,208 @@ export abstract class Texture extends Resource<TextureProps> {
|
|
|
263
444
|
}
|
|
264
445
|
|
|
265
446
|
_normalizeCopyImageDataOptions(options_: CopyImageDataOptions): Required<CopyImageDataOptions> {
|
|
266
|
-
const {
|
|
267
|
-
const options = {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
}
|
|
273
|
-
options.bytesPerRow = options_.bytesPerRow || width * (info.bytesPerPixel || 4);
|
|
274
|
-
options.rowsPerImage = options_.rowsPerImage || height;
|
|
275
|
-
|
|
276
|
-
// WebGL will error if we try to copy outside the bounds of the texture
|
|
277
|
-
// options.width = Math.min(options.width, this.width - options.x);
|
|
278
|
-
// options.height = Math.min(options.height, this.height - options.y);
|
|
279
|
-
return options;
|
|
447
|
+
const {data, depth, ...writeOptions} = options_;
|
|
448
|
+
const options = this._normalizeTextureWriteOptions({
|
|
449
|
+
...writeOptions,
|
|
450
|
+
depthOrArrayLayers: writeOptions.depthOrArrayLayers ?? depth
|
|
451
|
+
});
|
|
452
|
+
return {data, depth: options.depthOrArrayLayers, ...options};
|
|
280
453
|
}
|
|
281
454
|
|
|
282
455
|
_normalizeCopyExternalImageOptions(
|
|
283
456
|
options_: CopyExternalImageOptions
|
|
284
457
|
): Required<CopyExternalImageOptions> {
|
|
458
|
+
const optionsWithoutUndefined = Texture._omitUndefined(options_);
|
|
459
|
+
const mipLevel = optionsWithoutUndefined.mipLevel ?? 0;
|
|
460
|
+
const mipLevelSize = this._getMipLevelSize(mipLevel);
|
|
285
461
|
const size = this.device.getExternalImageSize(options_.image);
|
|
286
|
-
const options = {
|
|
462
|
+
const options = {
|
|
463
|
+
...Texture.defaultCopyExternalImageOptions,
|
|
464
|
+
...mipLevelSize,
|
|
465
|
+
...size,
|
|
466
|
+
...optionsWithoutUndefined
|
|
467
|
+
};
|
|
287
468
|
// WebGL will error if we try to copy outside the bounds of the texture
|
|
288
|
-
options.width = Math.min(options.width,
|
|
289
|
-
options.height = Math.min(options.height,
|
|
469
|
+
options.width = Math.min(options.width, mipLevelSize.width - options.x);
|
|
470
|
+
options.height = Math.min(options.height, mipLevelSize.height - options.y);
|
|
471
|
+
options.depth = Math.min(options.depth, mipLevelSize.depthOrArrayLayers - options.z);
|
|
290
472
|
return options;
|
|
291
473
|
}
|
|
292
474
|
|
|
293
|
-
|
|
475
|
+
_normalizeTextureReadOptions(options_: TextureReadOptions): Required<TextureReadOptions> {
|
|
476
|
+
const optionsWithoutUndefined = Texture._omitUndefined(options_);
|
|
477
|
+
const mipLevel = optionsWithoutUndefined.mipLevel ?? 0;
|
|
478
|
+
const mipLevelSize = this._getMipLevelSize(mipLevel);
|
|
479
|
+
const options = {
|
|
480
|
+
...Texture.defaultTextureReadOptions,
|
|
481
|
+
...mipLevelSize,
|
|
482
|
+
...optionsWithoutUndefined
|
|
483
|
+
};
|
|
484
|
+
// WebGL will error if we try to copy outside the bounds of the texture
|
|
485
|
+
options.width = Math.min(options.width, mipLevelSize.width - options.x);
|
|
486
|
+
options.height = Math.min(options.height, mipLevelSize.height - options.y);
|
|
487
|
+
options.depthOrArrayLayers = Math.min(
|
|
488
|
+
options.depthOrArrayLayers,
|
|
489
|
+
mipLevelSize.depthOrArrayLayers - options.z
|
|
490
|
+
);
|
|
491
|
+
return options;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Normalizes a texture read request and validates the color-only readback contract used by the
|
|
496
|
+
* current texture read APIs. Supported dimensions are `2d`, `cube`, `cube-array`,
|
|
497
|
+
* `2d-array`, and `3d`.
|
|
498
|
+
*
|
|
499
|
+
* @throws if the texture format, aspect, or dimension is not supported by the first-pass
|
|
500
|
+
* color-read implementation.
|
|
501
|
+
*/
|
|
502
|
+
protected _getSupportedColorReadOptions(
|
|
503
|
+
options_: TextureReadOptions
|
|
504
|
+
): Required<TextureReadOptions> {
|
|
505
|
+
const options = this._normalizeTextureReadOptions(options_);
|
|
506
|
+
const formatInfo = textureFormatDecoder.getInfo(this.format);
|
|
507
|
+
|
|
508
|
+
this._validateColorReadAspect(options);
|
|
509
|
+
this._validateColorReadFormat(formatInfo);
|
|
510
|
+
|
|
511
|
+
switch (this.dimension) {
|
|
512
|
+
case '2d':
|
|
513
|
+
case 'cube':
|
|
514
|
+
case 'cube-array':
|
|
515
|
+
case '2d-array':
|
|
516
|
+
case '3d':
|
|
517
|
+
return options;
|
|
518
|
+
|
|
519
|
+
default:
|
|
520
|
+
throw new Error(`${this} color readback does not support ${this.dimension} textures`);
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/** Validates that a read request targets the full color aspect of the texture. */
|
|
525
|
+
protected _validateColorReadAspect(options: Required<TextureReadOptions>): void {
|
|
526
|
+
if (options.aspect !== 'all') {
|
|
527
|
+
throw new Error(`${this} color readback only supports aspect 'all'`);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/** Validates that a read request targets an uncompressed color-renderable texture format. */
|
|
532
|
+
protected _validateColorReadFormat(formatInfo: TextureFormatInfo): void {
|
|
533
|
+
if (formatInfo.compressed) {
|
|
534
|
+
throw new Error(
|
|
535
|
+
`${this} color readback does not support compressed formats (${this.format})`
|
|
536
|
+
);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
switch (formatInfo.attachment) {
|
|
540
|
+
case 'color':
|
|
541
|
+
return;
|
|
542
|
+
|
|
543
|
+
case 'depth':
|
|
544
|
+
throw new Error(`${this} color readback does not support depth formats (${this.format})`);
|
|
545
|
+
|
|
546
|
+
case 'stencil':
|
|
547
|
+
throw new Error(`${this} color readback does not support stencil formats (${this.format})`);
|
|
548
|
+
|
|
549
|
+
case 'depth-stencil':
|
|
550
|
+
throw new Error(
|
|
551
|
+
`${this} color readback does not support depth-stencil formats (${this.format})`
|
|
552
|
+
);
|
|
553
|
+
|
|
554
|
+
default:
|
|
555
|
+
throw new Error(`${this} color readback does not support format ${this.format}`);
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
_normalizeTextureWriteOptions(options_: TextureWriteOptions): Required<TextureWriteOptions> {
|
|
560
|
+
const optionsWithoutUndefined = Texture._omitUndefined(options_);
|
|
561
|
+
const mipLevel = optionsWithoutUndefined.mipLevel ?? 0;
|
|
562
|
+
const mipLevelSize = this._getMipLevelSize(mipLevel);
|
|
563
|
+
const options = {
|
|
564
|
+
...Texture.defaultTextureWriteOptions,
|
|
565
|
+
...mipLevelSize,
|
|
566
|
+
...optionsWithoutUndefined
|
|
567
|
+
};
|
|
568
|
+
|
|
569
|
+
options.width = Math.min(options.width, mipLevelSize.width - options.x);
|
|
570
|
+
options.height = Math.min(options.height, mipLevelSize.height - options.y);
|
|
571
|
+
options.depthOrArrayLayers = Math.min(
|
|
572
|
+
options.depthOrArrayLayers,
|
|
573
|
+
mipLevelSize.depthOrArrayLayers - options.z
|
|
574
|
+
);
|
|
575
|
+
|
|
576
|
+
const layout = textureFormatDecoder.computeMemoryLayout({
|
|
577
|
+
format: this.format,
|
|
578
|
+
width: options.width,
|
|
579
|
+
height: options.height,
|
|
580
|
+
depth: options.depthOrArrayLayers,
|
|
581
|
+
byteAlignment: this.byteAlignment
|
|
582
|
+
});
|
|
583
|
+
|
|
584
|
+
const minimumBytesPerRow = layout.bytesPerPixel * options.width;
|
|
585
|
+
options.bytesPerRow = optionsWithoutUndefined.bytesPerRow ?? layout.bytesPerRow;
|
|
586
|
+
options.rowsPerImage = optionsWithoutUndefined.rowsPerImage ?? options.height;
|
|
587
|
+
|
|
588
|
+
if (options.bytesPerRow < minimumBytesPerRow) {
|
|
589
|
+
throw new Error(
|
|
590
|
+
`bytesPerRow (${options.bytesPerRow}) must be at least ${minimumBytesPerRow} for ${this.format}`
|
|
591
|
+
);
|
|
592
|
+
}
|
|
593
|
+
if (options.rowsPerImage < options.height) {
|
|
594
|
+
throw new Error(
|
|
595
|
+
`rowsPerImage (${options.rowsPerImage}) must be at least ${options.height} for ${this.format}`
|
|
596
|
+
);
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
const bytesPerPixel = this.device.getTextureFormatInfo(this.format).bytesPerPixel;
|
|
600
|
+
if (bytesPerPixel && options.bytesPerRow % bytesPerPixel !== 0) {
|
|
601
|
+
throw new Error(
|
|
602
|
+
`bytesPerRow (${options.bytesPerRow}) must be a multiple of bytesPerPixel (${bytesPerPixel}) for ${this.format}`
|
|
603
|
+
);
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
return options;
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
protected _getMipLevelSize(
|
|
610
|
+
mipLevel: number
|
|
611
|
+
): Required<Pick<TextureReadOptions, 'width' | 'height' | 'depthOrArrayLayers'>> {
|
|
612
|
+
const width = Math.max(1, this.width >> mipLevel);
|
|
613
|
+
const height = this.baseDimension === '1d' ? 1 : Math.max(1, this.height >> mipLevel);
|
|
614
|
+
const depthOrArrayLayers =
|
|
615
|
+
this.dimension === '3d' ? Math.max(1, this.depth >> mipLevel) : this.depth;
|
|
616
|
+
|
|
617
|
+
return {width, height, depthOrArrayLayers};
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
protected getAllocatedByteLength(): number {
|
|
621
|
+
let allocatedByteLength = 0;
|
|
622
|
+
|
|
623
|
+
for (let mipLevel = 0; mipLevel < this.mipLevels; mipLevel++) {
|
|
624
|
+
const {width, height, depthOrArrayLayers} = this._getMipLevelSize(mipLevel);
|
|
625
|
+
allocatedByteLength += textureFormatDecoder.computeMemoryLayout({
|
|
626
|
+
format: this.format,
|
|
627
|
+
width,
|
|
628
|
+
height,
|
|
629
|
+
depth: depthOrArrayLayers,
|
|
630
|
+
byteAlignment: 1
|
|
631
|
+
}).byteLength;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
return allocatedByteLength * this.samples;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
protected static _omitUndefined<T extends object>(options: T): Partial<T> {
|
|
638
|
+
return Object.fromEntries(
|
|
639
|
+
Object.entries(options).filter(([, value]) => value !== undefined)
|
|
640
|
+
) as Partial<T>;
|
|
641
|
+
}
|
|
642
|
+
|
|
294
643
|
static override defaultProps: Required<TextureProps> = {
|
|
295
644
|
...Resource.defaultProps,
|
|
296
645
|
data: null,
|
|
297
646
|
dimension: '2d',
|
|
298
647
|
format: 'rgba8unorm',
|
|
299
|
-
usage: Texture.
|
|
648
|
+
usage: Texture.SAMPLE | Texture.RENDER | Texture.COPY_DST,
|
|
300
649
|
width: undefined!,
|
|
301
650
|
height: undefined!,
|
|
302
651
|
depth: 1,
|
|
@@ -311,6 +660,10 @@ export abstract class Texture extends Resource<TextureProps> {
|
|
|
311
660
|
byteOffset: 0,
|
|
312
661
|
bytesPerRow: undefined!,
|
|
313
662
|
rowsPerImage: undefined!,
|
|
663
|
+
width: undefined!,
|
|
664
|
+
height: undefined!,
|
|
665
|
+
depthOrArrayLayers: undefined!,
|
|
666
|
+
depth: 1,
|
|
314
667
|
mipLevel: 0,
|
|
315
668
|
x: 0,
|
|
316
669
|
y: 0,
|
|
@@ -335,4 +688,29 @@ export abstract class Texture extends Resource<TextureProps> {
|
|
|
335
688
|
premultipliedAlpha: false,
|
|
336
689
|
flipY: false
|
|
337
690
|
};
|
|
691
|
+
|
|
692
|
+
protected static defaultTextureReadOptions: Required<TextureReadOptions> = {
|
|
693
|
+
x: 0,
|
|
694
|
+
y: 0,
|
|
695
|
+
z: 0,
|
|
696
|
+
width: undefined!,
|
|
697
|
+
height: undefined!,
|
|
698
|
+
depthOrArrayLayers: 1,
|
|
699
|
+
mipLevel: 0,
|
|
700
|
+
aspect: 'all'
|
|
701
|
+
};
|
|
702
|
+
|
|
703
|
+
protected static defaultTextureWriteOptions: Required<TextureWriteOptions> = {
|
|
704
|
+
byteOffset: 0,
|
|
705
|
+
bytesPerRow: undefined!,
|
|
706
|
+
rowsPerImage: undefined!,
|
|
707
|
+
x: 0,
|
|
708
|
+
y: 0,
|
|
709
|
+
z: 0,
|
|
710
|
+
width: undefined!,
|
|
711
|
+
height: undefined!,
|
|
712
|
+
depthOrArrayLayers: 1,
|
|
713
|
+
mipLevel: 0,
|
|
714
|
+
aspect: 'all'
|
|
715
|
+
};
|
|
338
716
|
}
|
|
@@ -6,7 +6,7 @@ import type {
|
|
|
6
6
|
TextureFormatColor,
|
|
7
7
|
TextureFormatDepthStencil,
|
|
8
8
|
TextureFormat
|
|
9
|
-
} from '../../shadertypes/
|
|
9
|
+
} from '../../shadertypes/texture-types/texture-formats';
|
|
10
10
|
import type {Texture} from '../resources/texture'; // TextureView...
|
|
11
11
|
import type {TextureView} from '../resources/texture-view'; // TextureView...
|
|
12
12
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
|
-
import type {VertexFormat} from '../../shadertypes/vertex-
|
|
5
|
+
import type {VertexFormat} from '../../shadertypes/vertex-types/vertex-formats';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Provides specific details about the memory layout of the actual buffers
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
5
|
import {NumberArray4, NumberArray6} from '@math.gl/types';
|
|
6
|
-
import {TextureFormatDepthStencil} from '../../shadertypes/
|
|
6
|
+
import {TextureFormatDepthStencil} from '../../shadertypes/texture-types/texture-formats';
|
|
7
7
|
|
|
8
8
|
export type CompareFunction =
|
|
9
9
|
| 'never'
|
|
@@ -102,6 +102,8 @@ export type DepthStencilParameters = {
|
|
|
102
102
|
depthCompare?: CompareFunction;
|
|
103
103
|
/** The format of depthStencilAttachment this GPURenderPipeline will be compatible with. */
|
|
104
104
|
depthFormat?: TextureFormatDepthStencil;
|
|
105
|
+
/** Depth value used when clearing depth buffers. */
|
|
106
|
+
clearDepth?: number;
|
|
105
107
|
|
|
106
108
|
/** Bitmask controlling which depthStencilAttachment stencil value bits are read when performing stencil comparison tests. */
|
|
107
109
|
stencilReadMask?: number;
|
|
@@ -217,6 +219,7 @@ export const DEFAULT_PARAMETERS: Required<Parameters> = {
|
|
|
217
219
|
depthWriteEnabled: false,
|
|
218
220
|
depthCompare: 'always',
|
|
219
221
|
depthFormat: 'depth24plus',
|
|
222
|
+
clearDepth: 1,
|
|
220
223
|
|
|
221
224
|
depthBias: 0,
|
|
222
225
|
depthBiasSlopeScale: 0,
|