@luma.gl/webgl 9.0.0-beta.4 → 9.0.0-beta.6
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/converters/device-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/device-parameters.js +297 -155
- package/dist/adapter/converters/sampler-parameters.d.ts +0 -4
- package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +73 -67
- package/dist/adapter/converters/shader-formats.d.ts.map +1 -1
- package/dist/adapter/converters/shader-formats.js +53 -46
- package/dist/adapter/converters/texture-formats.d.ts +13 -19
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +474 -879
- package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/vertex-formats.js +53 -61
- package/dist/adapter/device-helpers/device-features.d.ts +2 -5
- package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
- package/dist/adapter/device-helpers/device-features.js +56 -87
- package/dist/adapter/device-helpers/device-limits.d.ts +2 -4
- package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
- package/dist/adapter/device-helpers/device-limits.js +88 -83
- package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
- package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
- package/dist/adapter/device-helpers/get-device-info.js +79 -63
- package/dist/adapter/device-helpers/webgl-device-features.d.ts +19 -0
- package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-features.js +86 -0
- package/dist/adapter/device-helpers/webgl-device-info.d.ts +5 -0
- package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-info.js +90 -0
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts +35 -0
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-limits.js +47 -0
- package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -1
- package/dist/adapter/helpers/decode-webgl-types.js +88 -76
- package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
- package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.js +261 -225
- package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.js +47 -37
- package/dist/adapter/helpers/set-uniform.d.ts +1 -1
- package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +68 -82
- package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.js +78 -93
- package/dist/adapter/objects/constants-to-keys.d.ts +1 -1
- package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
- package/dist/adapter/objects/constants-to-keys.js +19 -12
- package/dist/adapter/objects/webgl-renderbuffer.d.ts +2 -2
- package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.js +86 -77
- package/dist/adapter/objects/webgl-resource.d.ts +3 -25
- package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-resource.js +102 -146
- package/dist/adapter/resources/webgl-buffer.d.ts +3 -4
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +161 -119
- package/dist/adapter/resources/webgl-command-buffer.d.ts +1 -1
- package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +266 -168
- package/dist/adapter/resources/webgl-command-encoder.d.ts +8 -3
- package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.js +33 -39
- package/dist/adapter/resources/webgl-external-texture.js +93 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts +8 -10
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +167 -137
- package/dist/adapter/resources/webgl-query-set.d.ts +44 -0
- package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -0
- package/dist/adapter/resources/webgl-query-set.js +136 -0
- package/dist/adapter/resources/webgl-render-pass.d.ts +3 -1
- package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.js +124 -90
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +15 -6
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +356 -221
- package/dist/adapter/resources/webgl-sampler.d.ts +1 -3
- package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +43 -33
- package/dist/adapter/resources/webgl-shader.d.ts +12 -2
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +114 -47
- package/dist/adapter/resources/webgl-texture-view.d.ts +14 -0
- package/dist/adapter/resources/webgl-texture-view.d.ts.map +1 -0
- package/dist/adapter/resources/webgl-texture-view.js +18 -0
- package/dist/adapter/resources/webgl-texture.d.ts +6 -9
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +615 -695
- package/dist/adapter/resources/webgl-transform-feedback.d.ts +2 -2
- package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-transform-feedback.js +141 -143
- package/dist/adapter/resources/webgl-vertex-array.d.ts +3 -3
- package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-vertex-array.js +229 -157
- package/dist/adapter/webgl-canvas-context.d.ts +2 -2
- package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgl-canvas-context.js +58 -36
- package/dist/adapter/webgl-device.d.ts +34 -40
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +418 -363
- package/dist/classic/accessor.d.ts.map +1 -1
- package/dist/classic/accessor.js +132 -101
- package/dist/classic/clear.d.ts +2 -2
- package/dist/classic/clear.d.ts.map +1 -1
- package/dist/classic/clear.js +73 -72
- package/dist/classic/copy-and-blit.d.ts +1 -1
- package/dist/classic/copy-and-blit.d.ts.map +1 -1
- package/dist/classic/copy-and-blit.js +175 -175
- package/dist/classic/format-utils.d.ts +2 -2
- package/dist/classic/format-utils.d.ts.map +1 -1
- package/dist/classic/format-utils.js +39 -32
- package/dist/classic/typed-array-utils.d.ts.map +1 -1
- package/dist/classic/typed-array-utils.js +96 -81
- package/dist/context/context/context-data.d.ts +14 -0
- package/dist/context/context/context-data.d.ts.map +1 -0
- package/dist/context/context/context-data.js +33 -0
- package/dist/context/context/create-browser-context.d.ts +1 -6
- package/dist/context/context/create-browser-context.d.ts.map +1 -1
- package/dist/context/context/create-browser-context.js +62 -49
- package/dist/context/debug/spector.d.ts.map +1 -1
- package/dist/context/debug/spector.js +55 -50
- package/dist/context/debug/webgl-developer-tools.d.ts +1 -2
- package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js +104 -77
- package/dist/context/helpers/create-browser-context.d.ts +35 -0
- package/dist/context/helpers/create-browser-context.d.ts.map +1 -0
- package/dist/context/helpers/create-browser-context.js +67 -0
- package/dist/context/{polyfill/context-data.d.ts → helpers/webgl-context-data.d.ts} +2 -2
- package/dist/context/helpers/webgl-context-data.d.ts.map +1 -0
- package/dist/context/helpers/webgl-context-data.js +21 -0
- package/dist/context/helpers/webgl-extensions.d.ts +4 -0
- package/dist/context/helpers/webgl-extensions.d.ts.map +1 -0
- package/dist/context/helpers/webgl-extensions.js +10 -0
- package/dist/context/parameters/unified-parameter-api.d.ts +3 -3
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +94 -44
- package/dist/context/parameters/webgl-parameter-tables.d.ts +120 -99
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +469 -404
- package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
- package/dist/context/state-tracker/deep-array-equal.js +19 -14
- package/dist/context/state-tracker/track-context-state.d.ts +4 -4
- package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
- package/dist/context/state-tracker/track-context-state.js +188 -123
- package/dist/context/state-tracker/with-parameters.d.ts +2 -2
- package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
- package/dist/context/state-tracker/with-parameters.js +43 -26
- package/dist/dist.dev.js +3135 -4142
- package/dist/index.cjs +1766 -2717
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +25 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -1
- package/dist.min.js +9 -42
- package/package.json +11 -15
- package/src/adapter/converters/device-parameters.ts +105 -17
- package/src/adapter/converters/sampler-parameters.ts +12 -20
- package/src/adapter/converters/shader-formats.ts +47 -22
- package/src/adapter/converters/texture-formats.ts +138 -185
- package/src/adapter/converters/vertex-formats.ts +3 -3
- package/src/adapter/device-helpers/webgl-device-features.ts +101 -0
- package/src/adapter/device-helpers/{get-device-info.ts → webgl-device-info.ts} +30 -22
- package/src/adapter/device-helpers/webgl-device-limits.ts +53 -0
- package/src/adapter/helpers/decode-webgl-types.ts +13 -7
- package/src/adapter/helpers/get-shader-layout.ts +21 -31
- package/src/adapter/helpers/parse-shader-compiler-log.ts +10 -6
- package/src/adapter/helpers/set-uniform.ts +3 -4
- package/src/adapter/helpers/webgl-topology-utils.ts +10 -3
- package/src/adapter/objects/constants-to-keys.ts +3 -2
- package/src/adapter/objects/webgl-renderbuffer.ts +38 -16
- package/src/adapter/objects/webgl-resource.ts +7 -140
- package/src/adapter/resources/webgl-buffer.ts +10 -14
- package/src/adapter/resources/webgl-command-buffer.ts +24 -34
- package/src/adapter/resources/webgl-command-encoder.ts +14 -11
- package/src/adapter/resources/webgl-external-texture.ts +5 -5
- package/src/adapter/resources/webgl-framebuffer.ts +38 -34
- package/src/adapter/resources/webgl-query-set.ts +171 -0
- package/src/adapter/resources/webgl-render-pass.ts +24 -15
- package/src/adapter/resources/webgl-render-pipeline.ts +138 -70
- package/src/adapter/resources/webgl-sampler.ts +7 -10
- package/src/adapter/resources/webgl-shader.ts +65 -11
- package/src/adapter/resources/webgl-texture-view.ts +28 -0
- package/src/adapter/resources/webgl-texture.ts +38 -105
- package/src/adapter/resources/webgl-transform-feedback.ts +16 -22
- package/src/adapter/resources/webgl-vertex-array.ts +20 -21
- package/src/adapter/webgl-canvas-context.ts +7 -11
- package/src/adapter/webgl-device.ts +106 -151
- package/src/classic/accessor.ts +5 -4
- package/src/classic/clear.ts +25 -20
- package/src/classic/copy-and-blit.ts +12 -6
- package/src/classic/format-utils.ts +2 -1
- package/src/classic/typed-array-utils.ts +3 -7
- package/src/context/debug/spector.ts +9 -6
- package/src/context/debug/webgl-developer-tools.ts +31 -20
- package/src/context/{context → helpers}/create-browser-context.ts +9 -33
- package/src/context/{polyfill/context-data.ts → helpers/webgl-context-data.ts} +3 -2
- package/src/context/helpers/webgl-extensions.ts +17 -0
- package/src/context/parameters/unified-parameter-api.ts +5 -4
- package/src/context/parameters/webgl-parameter-tables.ts +118 -90
- package/src/context/state-tracker/deep-array-equal.ts +2 -1
- package/src/context/state-tracker/track-context-state.ts +29 -23
- package/src/context/state-tracker/with-parameters.ts +7 -2
- package/src/index.ts +4 -18
- package/src/types.ts +2 -1
- package/dist/adapter/converters/device-parameters.js.map +0 -1
- package/dist/adapter/converters/sampler-parameters.js.map +0 -1
- package/dist/adapter/converters/shader-formats.js.map +0 -1
- package/dist/adapter/converters/texture-formats.js.map +0 -1
- package/dist/adapter/converters/vertex-formats.js.map +0 -1
- package/dist/adapter/device-helpers/device-features.js.map +0 -1
- package/dist/adapter/device-helpers/device-limits.js.map +0 -1
- package/dist/adapter/device-helpers/get-device-info.js.map +0 -1
- package/dist/adapter/device-helpers/is-old-ie.d.ts +0 -2
- package/dist/adapter/device-helpers/is-old-ie.d.ts.map +0 -1
- package/dist/adapter/device-helpers/is-old-ie.js +0 -9
- package/dist/adapter/device-helpers/is-old-ie.js.map +0 -1
- package/dist/adapter/helpers/decode-webgl-types.js.map +0 -1
- package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
- package/dist/adapter/helpers/set-uniform.js.map +0 -1
- package/dist/adapter/helpers/webgl-topology-utils.js.map +0 -1
- package/dist/adapter/objects/constants-to-keys.js.map +0 -1
- package/dist/adapter/objects/webgl-renderbuffer.js.map +0 -1
- package/dist/adapter/objects/webgl-resource.js.map +0 -1
- package/dist/adapter/resources/webgl-buffer.js.map +0 -1
- package/dist/adapter/resources/webgl-command-buffer.js.map +0 -1
- package/dist/adapter/resources/webgl-command-encoder.js.map +0 -1
- package/dist/adapter/resources/webgl-external-texture.js.map +0 -1
- package/dist/adapter/resources/webgl-framebuffer.js.map +0 -1
- package/dist/adapter/resources/webgl-render-pass.js.map +0 -1
- package/dist/adapter/resources/webgl-render-pipeline.js.map +0 -1
- package/dist/adapter/resources/webgl-sampler.js.map +0 -1
- package/dist/adapter/resources/webgl-shader.js.map +0 -1
- package/dist/adapter/resources/webgl-texture.js.map +0 -1
- package/dist/adapter/resources/webgl-transform-feedback.js.map +0 -1
- package/dist/adapter/resources/webgl-vertex-array.js.map +0 -1
- package/dist/adapter/webgl-canvas-context.js.map +0 -1
- package/dist/adapter/webgl-device.js.map +0 -1
- package/dist/classic/accessor.js.map +0 -1
- package/dist/classic/clear.js.map +0 -1
- package/dist/classic/copy-and-blit.js.map +0 -1
- package/dist/classic/format-utils.js.map +0 -1
- package/dist/classic/typed-array-utils.js.map +0 -1
- package/dist/context/context/create-browser-context.js.map +0 -1
- package/dist/context/context/create-headless-context.d.ts +0 -9
- package/dist/context/context/create-headless-context.d.ts.map +0 -1
- package/dist/context/context/create-headless-context.js +0 -42
- package/dist/context/context/create-headless-context.js.map +0 -1
- package/dist/context/context/webgl-checks.d.ts +0 -13
- package/dist/context/context/webgl-checks.d.ts.map +0 -1
- package/dist/context/context/webgl-checks.js +0 -31
- package/dist/context/context/webgl-checks.js.map +0 -1
- package/dist/context/debug/spector.js.map +0 -1
- package/dist/context/debug/webgl-developer-tools.js.map +0 -1
- package/dist/context/parameters/unified-parameter-api.js.map +0 -1
- package/dist/context/parameters/webgl-parameter-tables.js.map +0 -1
- package/dist/context/polyfill/context-data.d.ts.map +0 -1
- package/dist/context/polyfill/context-data.js +0 -12
- package/dist/context/polyfill/context-data.js.map +0 -1
- package/dist/context/polyfill/get-parameter-polyfill.d.ts +0 -2
- package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +0 -1
- package/dist/context/polyfill/get-parameter-polyfill.js +0 -85
- package/dist/context/polyfill/get-parameter-polyfill.js.map +0 -1
- package/dist/context/polyfill/polyfill-context.d.ts +0 -5
- package/dist/context/polyfill/polyfill-context.d.ts.map +0 -1
- package/dist/context/polyfill/polyfill-context.js +0 -87
- package/dist/context/polyfill/polyfill-context.js.map +0 -1
- package/dist/context/polyfill/polyfill-table.d.ts +0 -48
- package/dist/context/polyfill/polyfill-table.d.ts.map +0 -1
- package/dist/context/polyfill/polyfill-table.js +0 -137
- package/dist/context/polyfill/polyfill-table.js.map +0 -1
- package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +0 -2
- package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +0 -1
- package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -265
- package/dist/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
- package/dist/context/state-tracker/deep-array-equal.js.map +0 -1
- package/dist/context/state-tracker/track-context-state.js.map +0 -1
- package/dist/context/state-tracker/with-parameters.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/src/adapter/device-helpers/device-features.ts +0 -161
- package/src/adapter/device-helpers/device-limits.ts +0 -155
- package/src/adapter/device-helpers/is-old-ie.ts +0 -14
- package/src/context/context/create-headless-context.ts +0 -51
- package/src/context/context/webgl-checks.ts +0 -51
- package/src/context/polyfill/get-parameter-polyfill.ts +0 -122
- package/src/context/polyfill/polyfill-context.ts +0 -104
- package/src/context/polyfill/polyfill-table.ts +0 -167
- package/src/context/polyfill/polyfill-vertex-array-object.ts +0 -365
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
2
3
|
// Copyright (c) vis.gl contributors
|
|
3
4
|
|
|
4
5
|
import type {FramebufferProps, TextureFormat} from '@luma.gl/core';
|
|
@@ -6,16 +7,16 @@ import {Framebuffer, Texture, assert} from '@luma.gl/core';
|
|
|
6
7
|
import {GL} from '@luma.gl/constants';
|
|
7
8
|
import {WebGLDevice} from '../webgl-device';
|
|
8
9
|
import {WEBGLTexture} from './webgl-texture';
|
|
10
|
+
import {WEBGLTextureView} from './webgl-texture-view';
|
|
9
11
|
import {WEBGLRenderbuffer} from '../objects/webgl-renderbuffer';
|
|
10
12
|
import {getDepthStencilAttachmentWebGL} from '../converters/texture-formats';
|
|
11
13
|
|
|
12
|
-
export type
|
|
13
|
-
export type Attachment = WEBGLTexture | WEBGLRenderbuffer | TextureAttachment;
|
|
14
|
+
export type Attachment = WEBGLTextureView | WEBGLTexture | WEBGLRenderbuffer;
|
|
14
15
|
|
|
15
16
|
/** luma.gl Framebuffer, WebGL implementation */
|
|
16
17
|
export class WEBGLFramebuffer extends Framebuffer {
|
|
17
18
|
device: WebGLDevice;
|
|
18
|
-
gl:
|
|
19
|
+
gl: WebGL2RenderingContext;
|
|
19
20
|
handle: WebGLFramebuffer;
|
|
20
21
|
|
|
21
22
|
get texture() {
|
|
@@ -45,26 +46,30 @@ export class WEBGLFramebuffer extends Framebuffer {
|
|
|
45
46
|
|
|
46
47
|
// Walk the attachments
|
|
47
48
|
for (let i = 0; i < this.colorAttachments.length; ++i) {
|
|
48
|
-
const attachment = this.colorAttachments[i];
|
|
49
|
+
const attachment = this.colorAttachments[i] as WEBGLTextureView;
|
|
49
50
|
const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;
|
|
50
51
|
if (attachment) {
|
|
51
|
-
this._attachOne(attachmentPoint, attachment
|
|
52
|
+
this._attachOne(attachmentPoint, attachment);
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
|
|
55
56
|
if (this.depthStencilAttachment) {
|
|
56
57
|
this._attachOne(
|
|
57
|
-
getDepthStencilAttachmentWebGL(this.depthStencilAttachment.format),
|
|
58
|
-
this.depthStencilAttachment as
|
|
58
|
+
getDepthStencilAttachmentWebGL(this.depthStencilAttachment.props.format),
|
|
59
|
+
this.depthStencilAttachment as WEBGLTextureView
|
|
59
60
|
);
|
|
60
61
|
}
|
|
61
62
|
|
|
62
|
-
|
|
63
|
-
|
|
63
|
+
/** Check the status */
|
|
64
|
+
// @ts-expect-error
|
|
65
|
+
if (props.check !== false) {
|
|
66
|
+
const status = this.gl.checkFramebufferStatus(GL.FRAMEBUFFER) as GL;
|
|
67
|
+
if (status !== GL.FRAMEBUFFER_COMPLETE) {
|
|
68
|
+
throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
64
71
|
|
|
65
|
-
|
|
66
|
-
if (props.check !== false) {
|
|
67
|
-
this._checkStatus();
|
|
72
|
+
this.gl.bindFramebuffer(GL.FRAMEBUFFER, null);
|
|
68
73
|
}
|
|
69
74
|
}
|
|
70
75
|
|
|
@@ -79,18 +84,6 @@ export class WEBGLFramebuffer extends Framebuffer {
|
|
|
79
84
|
|
|
80
85
|
// PRIVATE
|
|
81
86
|
|
|
82
|
-
/** Check the status */
|
|
83
|
-
protected _checkStatus(): void {
|
|
84
|
-
const {gl} = this;
|
|
85
|
-
// TODO - should we really rely on this trick?
|
|
86
|
-
const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle) as unknown as WebGLFramebuffer;
|
|
87
|
-
const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);
|
|
88
|
-
gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
|
|
89
|
-
if (status !== gl.FRAMEBUFFER_COMPLETE) {
|
|
90
|
-
throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
87
|
/** In WebGL we must use renderbuffers for depth/stencil attachments (unless we have extensions) */
|
|
95
88
|
protected override createDepthStencilTexture(format: TextureFormat): Texture {
|
|
96
89
|
return new WEBGLRenderbuffer(this.device, {
|
|
@@ -103,8 +96,8 @@ export class WEBGLFramebuffer extends Framebuffer {
|
|
|
103
96
|
}) as unknown as WEBGLTexture;
|
|
104
97
|
}
|
|
105
98
|
|
|
106
|
-
/**
|
|
107
|
-
* Attachment resize is expected to be a noop if size is same
|
|
99
|
+
/**
|
|
100
|
+
* Attachment resize is expected to be a noop if size is same
|
|
108
101
|
*/
|
|
109
102
|
protected override resizeAttachments(width: number, height: number): this {
|
|
110
103
|
// for default framebuffer, just update the stored size
|
|
@@ -125,10 +118,10 @@ export class WEBGLFramebuffer extends Framebuffer {
|
|
|
125
118
|
// TODO Not clear that this is better than default destroy/create implementation
|
|
126
119
|
|
|
127
120
|
for (const colorAttachment of this.colorAttachments) {
|
|
128
|
-
(colorAttachment as WEBGLTexture).resize({width, height});
|
|
121
|
+
(colorAttachment.texture as WEBGLTexture).resize({width, height});
|
|
129
122
|
}
|
|
130
123
|
if (this.depthStencilAttachment) {
|
|
131
|
-
(this.depthStencilAttachment as WEBGLTexture).resize({width, height});
|
|
124
|
+
(this.depthStencilAttachment.texture as WEBGLTexture).resize({width, height});
|
|
132
125
|
}
|
|
133
126
|
return this;
|
|
134
127
|
}
|
|
@@ -148,6 +141,15 @@ export class WEBGLFramebuffer extends Framebuffer {
|
|
|
148
141
|
} else if (attachment instanceof WEBGLTexture) {
|
|
149
142
|
this._attachTexture(attachmentPoint, attachment, 0, 0);
|
|
150
143
|
return attachment;
|
|
144
|
+
} else if (attachment instanceof WEBGLTextureView) {
|
|
145
|
+
const textureView = attachment;
|
|
146
|
+
this._attachTexture(
|
|
147
|
+
attachmentPoint,
|
|
148
|
+
textureView.texture,
|
|
149
|
+
textureView.props.baseMipLevel,
|
|
150
|
+
textureView.props.baseArrayLayer
|
|
151
|
+
);
|
|
152
|
+
return attachment.texture;
|
|
151
153
|
}
|
|
152
154
|
throw new Error('attach');
|
|
153
155
|
}
|
|
@@ -165,7 +167,7 @@ export class WEBGLFramebuffer extends Framebuffer {
|
|
|
165
167
|
* @param attachment
|
|
166
168
|
* @param texture
|
|
167
169
|
* @param layer = 0 - index into WEBGLTextureArray and Texture3D or face for `TextureCubeMap`
|
|
168
|
-
* @param level
|
|
170
|
+
* @param level = 0 - mipmapLevel
|
|
169
171
|
*/
|
|
170
172
|
protected _attachTexture(
|
|
171
173
|
attachment: GL,
|
|
@@ -173,14 +175,14 @@ export class WEBGLFramebuffer extends Framebuffer {
|
|
|
173
175
|
layer: number,
|
|
174
176
|
level: number
|
|
175
177
|
): void {
|
|
176
|
-
const {gl
|
|
178
|
+
const {gl} = this.device;
|
|
179
|
+
|
|
177
180
|
gl.bindTexture(texture.target, texture.handle);
|
|
178
181
|
|
|
179
182
|
switch (texture.target) {
|
|
180
183
|
case GL.TEXTURE_2D_ARRAY:
|
|
181
184
|
case GL.TEXTURE_3D:
|
|
182
|
-
|
|
183
|
-
gl2?.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);
|
|
185
|
+
gl.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);
|
|
184
186
|
break;
|
|
185
187
|
|
|
186
188
|
case GL.TEXTURE_CUBE_MAP:
|
|
@@ -207,7 +209,9 @@ export class WEBGLFramebuffer extends Framebuffer {
|
|
|
207
209
|
function mapIndexToCubeMapFace(layer: number | GL): GL {
|
|
208
210
|
// TEXTURE_CUBE_MAP_POSITIVE_X is a big value (0x8515)
|
|
209
211
|
// if smaller assume layer is index, otherwise assume it is already a cube map face constant
|
|
210
|
-
return layer < (GL.TEXTURE_CUBE_MAP_POSITIVE_X as number)
|
|
212
|
+
return layer < (GL.TEXTURE_CUBE_MAP_POSITIVE_X as number)
|
|
213
|
+
? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X
|
|
214
|
+
: layer;
|
|
211
215
|
}
|
|
212
216
|
|
|
213
217
|
// Helper METHODS
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// WebGL2 Query (also handles disjoint timer extensions)
|
|
2
|
+
import {QuerySet, QuerySetProps} from '@luma.gl/core';
|
|
3
|
+
import {GL} from '@luma.gl/constants';
|
|
4
|
+
import {WebGLDevice} from '../webgl-device';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Asynchronous queries for different kinds of information
|
|
8
|
+
*/
|
|
9
|
+
export class WEBGLQuerySet extends QuerySet {
|
|
10
|
+
device: WebGLDevice;
|
|
11
|
+
handle: WebGLQuery;
|
|
12
|
+
|
|
13
|
+
target: number | null = null;
|
|
14
|
+
_queryPending = false;
|
|
15
|
+
_pollingPromise: Promise<any> | null = null;
|
|
16
|
+
|
|
17
|
+
override get [Symbol.toStringTag](): string {
|
|
18
|
+
return 'Query';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Create a query class
|
|
22
|
+
constructor(device: WebGLDevice, props: QuerySetProps) {
|
|
23
|
+
super(device, props);
|
|
24
|
+
this.device = device;
|
|
25
|
+
|
|
26
|
+
if (props.count > 1) {
|
|
27
|
+
throw new Error('WebGL QuerySet can only have one value');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
this.handle = this.device.gl.createQuery();
|
|
31
|
+
Object.seal(this);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
override destroy() {
|
|
35
|
+
this.device.gl.deleteQuery(this.handle);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// FOR RENDER PASS AND COMMAND ENCODER
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Shortcut for timer query (dependent on extension in both WebGL1 and 2)
|
|
42
|
+
* Measures GPU time delta between this call and a matching `end` call in the
|
|
43
|
+
* GPU instruction stream.
|
|
44
|
+
*/
|
|
45
|
+
beginTimestampQuery(): void {
|
|
46
|
+
return this._begin(GL.TIME_ELAPSED_EXT);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
endTimestampQuery(): void {
|
|
50
|
+
this._end();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Shortcut for occlusion queries
|
|
54
|
+
beginOcclusionQuery(options?: {conservative?: boolean}): void {
|
|
55
|
+
return this._begin(
|
|
56
|
+
options?.conservative ? GL.ANY_SAMPLES_PASSED_CONSERVATIVE : GL.ANY_SAMPLES_PASSED
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
endOcclusionQuery() {
|
|
61
|
+
this._end();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Shortcut for transformFeedbackQuery
|
|
65
|
+
beginTransformFeedbackQuery(): void {
|
|
66
|
+
return this._begin(GL.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
endTransformFeedbackQuery(): void {
|
|
70
|
+
this._end();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async resolveQuery(): Promise<bigint[]> {
|
|
74
|
+
const value = await this.pollQuery();
|
|
75
|
+
return [value];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// PRIVATE METHODS
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Due to OpenGL API limitations, after calling `begin()` on one Query
|
|
82
|
+
* instance, `end()` must be called on that same instance before
|
|
83
|
+
* calling `begin()` on another query. While there can be multiple
|
|
84
|
+
* outstanding queries representing disjoint `begin()`/`end()` intervals.
|
|
85
|
+
* It is not possible to interleave or overlap `begin` and `end` calls.
|
|
86
|
+
*/
|
|
87
|
+
protected _begin(target: number): void {
|
|
88
|
+
// Don't start a new query if one is already active.
|
|
89
|
+
if (this._queryPending) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
this.target = target;
|
|
94
|
+
this.device.gl.beginQuery(this.target, this.handle);
|
|
95
|
+
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// ends the current query
|
|
100
|
+
protected _end(): void {
|
|
101
|
+
// Can't end a new query if the last one hasn't been resolved.
|
|
102
|
+
if (this._queryPending) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (this.target) {
|
|
107
|
+
this.device.gl.endQuery(this.target);
|
|
108
|
+
this.target = null;
|
|
109
|
+
this._queryPending = true;
|
|
110
|
+
}
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Returns true if the query result is available
|
|
115
|
+
isResultAvailable(): boolean {
|
|
116
|
+
if (!this._queryPending) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const resultAvailable = this.device.gl.getQueryParameter(
|
|
121
|
+
this.handle,
|
|
122
|
+
GL.QUERY_RESULT_AVAILABLE
|
|
123
|
+
);
|
|
124
|
+
if (resultAvailable) {
|
|
125
|
+
this._queryPending = false;
|
|
126
|
+
}
|
|
127
|
+
return resultAvailable;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Timing query is disjoint, i.e. results are invalid
|
|
131
|
+
isTimerDisjoint(): boolean {
|
|
132
|
+
return this.device.gl.getParameter(GL.GPU_DISJOINT_EXT);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Returns query result.
|
|
136
|
+
getResult(): any {
|
|
137
|
+
return this.device.gl.getQueryParameter(this.handle, GL.QUERY_RESULT);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Returns the query result, converted to milliseconds to match JavaScript conventions.
|
|
141
|
+
getTimerMilliseconds() {
|
|
142
|
+
return this.getResult() / 1e6;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Polls the query
|
|
146
|
+
pollQuery(limit: number = Number.POSITIVE_INFINITY): Promise<any> {
|
|
147
|
+
if (this._pollingPromise) {
|
|
148
|
+
return this._pollingPromise;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
let counter = 0;
|
|
152
|
+
|
|
153
|
+
this._pollingPromise = new Promise((resolve, reject) => {
|
|
154
|
+
const poll = () => {
|
|
155
|
+
if (this.isResultAvailable()) {
|
|
156
|
+
resolve(this.getResult());
|
|
157
|
+
this._pollingPromise = null;
|
|
158
|
+
} else if (counter++ > limit) {
|
|
159
|
+
reject('Timed out');
|
|
160
|
+
this._pollingPromise = null;
|
|
161
|
+
} else {
|
|
162
|
+
requestAnimationFrame(poll);
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
requestAnimationFrame(poll);
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
return this._pollingPromise;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
2
3
|
// Copyright (c) vis.gl contributors
|
|
3
4
|
|
|
4
5
|
import {RenderPass, RenderPassProps, NumberArray, RenderPassParameters} from '@luma.gl/core';
|
|
@@ -7,6 +8,7 @@ import {GL, GLParameters} from '@luma.gl/constants';
|
|
|
7
8
|
import {withGLParameters} from '../../context/state-tracker/with-parameters';
|
|
8
9
|
import {setGLParameters} from '../../context/parameters/unified-parameter-api';
|
|
9
10
|
import {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';
|
|
11
|
+
import {WEBGLQuerySet} from './webgl-query-set';
|
|
10
12
|
|
|
11
13
|
// Should collapse during minification
|
|
12
14
|
const GL_DEPTH_BUFFER_BIT = 0x00000100;
|
|
@@ -45,8 +47,6 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
45
47
|
popDebugGroup(): void {}
|
|
46
48
|
insertDebugMarker(markerLabel: string): void {}
|
|
47
49
|
|
|
48
|
-
// writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;
|
|
49
|
-
|
|
50
50
|
// beginOcclusionQuery(queryIndex: number): void;
|
|
51
51
|
// endOcclusionQuery(): void;
|
|
52
52
|
|
|
@@ -102,7 +102,17 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
102
102
|
setGLParameters(this.device, glParameters);
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
beginOcclusionQuery(queryIndex: number): void {
|
|
106
|
+
const webglQuerySet = this.props.occlusionQuerySet as WEBGLQuerySet;
|
|
107
|
+
webglQuerySet?.beginOcclusionQuery();
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
override endOcclusionQuery(): void {
|
|
111
|
+
const webglQuerySet = this.props.occlusionQuerySet as WEBGLQuerySet;
|
|
112
|
+
webglQuerySet?.endOcclusionQuery();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// PRIVATE
|
|
106
116
|
|
|
107
117
|
/**
|
|
108
118
|
* Optionally clears depth, color and stencil buffers based on parameters
|
|
@@ -133,27 +143,27 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
133
143
|
|
|
134
144
|
// TODO - clear multiple color attachments
|
|
135
145
|
// for (attachment of this.framebuffer.colorAttachments) {
|
|
136
|
-
// this.clearColorBuffer
|
|
146
|
+
// this.clearColorBuffer
|
|
137
147
|
// }
|
|
138
148
|
}
|
|
139
149
|
}
|
|
140
150
|
|
|
141
|
-
/**
|
|
142
|
-
* WebGL2 - clear a specific color buffer
|
|
151
|
+
/**
|
|
152
|
+
* WebGL2 - clear a specific color buffer
|
|
143
153
|
*/
|
|
144
154
|
protected clearColorBuffer(drawBuffer: number = 0, value: NumberArray = [0, 0, 0, 0]) {
|
|
145
|
-
withGLParameters(this.device.
|
|
155
|
+
withGLParameters(this.device.gl, {framebuffer: this.props.framebuffer}, () => {
|
|
146
156
|
// Method selection per OpenGL ES 3 docs
|
|
147
157
|
switch (value.constructor) {
|
|
148
158
|
case Int32Array:
|
|
149
|
-
this.device.
|
|
159
|
+
this.device.gl.clearBufferiv(GL_COLOR, drawBuffer, value);
|
|
150
160
|
break;
|
|
151
161
|
case Uint32Array:
|
|
152
|
-
this.device.
|
|
162
|
+
this.device.gl.clearBufferuiv(GL_COLOR, drawBuffer, value);
|
|
153
163
|
break;
|
|
154
164
|
case Float32Array:
|
|
155
165
|
default:
|
|
156
|
-
this.device.
|
|
166
|
+
this.device.gl.clearBufferfv(GL_COLOR, drawBuffer, value);
|
|
157
167
|
break;
|
|
158
168
|
}
|
|
159
169
|
});
|
|
@@ -165,16 +175,16 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
165
175
|
// const GL_DEPTH_STENCIL = 0x84f9;
|
|
166
176
|
|
|
167
177
|
// case GL_DEPTH:
|
|
168
|
-
// this.device.
|
|
178
|
+
// this.device.gl.clearBufferfv(GL_DEPTH, 0, [value]);
|
|
169
179
|
// break;
|
|
170
180
|
|
|
171
181
|
// case GL_STENCIL:
|
|
172
|
-
// this.device.
|
|
182
|
+
// this.device.gl.clearBufferiv(GL_STENCIL, 0, [value]);
|
|
173
183
|
// break;
|
|
174
184
|
|
|
175
185
|
// case GL_DEPTH_STENCIL:
|
|
176
186
|
// const [depth, stencil] = value;
|
|
177
|
-
// this.device.
|
|
187
|
+
// this.device.gl.clearBufferfi(GL_DEPTH_STENCIL, 0, depth, stencil);
|
|
178
188
|
// break;
|
|
179
189
|
|
|
180
190
|
// default:
|
|
@@ -182,4 +192,3 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
182
192
|
// }
|
|
183
193
|
// });
|
|
184
194
|
}
|
|
185
|
-
|