@luma.gl/webgl 9.3.0-alpha.4 → 9.3.0-alpha.8

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 (210) hide show
  1. package/dist/adapter/converters/device-parameters.d.ts +1 -1
  2. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  3. package/dist/adapter/converters/device-parameters.js +4 -1
  4. package/dist/adapter/converters/device-parameters.js.map +1 -1
  5. package/dist/adapter/converters/sampler-parameters.d.ts +1 -1
  6. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  7. package/dist/adapter/converters/sampler-parameters.js +1 -1
  8. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  9. package/dist/adapter/converters/shader-formats.d.ts +1 -64
  10. package/dist/adapter/converters/shader-formats.d.ts.map +1 -1
  11. package/dist/adapter/converters/shader-formats.js +1 -64
  12. package/dist/adapter/converters/shader-formats.js.map +1 -1
  13. package/dist/adapter/converters/webgl-shadertypes.d.ts +1 -3
  14. package/dist/adapter/converters/webgl-shadertypes.d.ts.map +1 -1
  15. package/dist/adapter/converters/webgl-shadertypes.js +1 -6
  16. package/dist/adapter/converters/webgl-shadertypes.js.map +1 -1
  17. package/dist/adapter/converters/webgl-texture-table.d.ts +8 -4
  18. package/dist/adapter/converters/webgl-texture-table.d.ts.map +1 -1
  19. package/dist/adapter/converters/webgl-texture-table.js +122 -58
  20. package/dist/adapter/converters/webgl-texture-table.js.map +1 -1
  21. package/dist/adapter/converters/webgl-vertex-formats.d.ts +1 -1
  22. package/dist/adapter/converters/webgl-vertex-formats.d.ts.map +1 -1
  23. package/dist/adapter/converters/webgl-vertex-formats.js +1 -1
  24. package/dist/adapter/converters/webgl-vertex-formats.js.map +1 -1
  25. package/dist/adapter/device-helpers/webgl-device-features.d.ts +1 -1
  26. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -1
  27. package/dist/adapter/device-helpers/webgl-device-features.js +1 -2
  28. package/dist/adapter/device-helpers/webgl-device-features.js.map +1 -1
  29. package/dist/adapter/device-helpers/webgl-device-info.d.ts +1 -1
  30. package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -1
  31. package/dist/adapter/device-helpers/webgl-device-info.js +6 -1
  32. package/dist/adapter/device-helpers/webgl-device-info.js.map +1 -1
  33. package/dist/adapter/device-helpers/webgl-device-limits.d.ts +1 -1
  34. package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -1
  35. package/dist/adapter/device-helpers/webgl-device-limits.js +1 -1
  36. package/dist/adapter/device-helpers/webgl-device-limits.js.map +1 -1
  37. package/dist/adapter/helpers/format-utils.d.ts +1 -1
  38. package/dist/adapter/helpers/format-utils.d.ts.map +1 -1
  39. package/dist/adapter/helpers/format-utils.js +1 -1
  40. package/dist/adapter/helpers/format-utils.js.map +1 -1
  41. package/dist/adapter/helpers/get-shader-layout-from-glsl.js +30 -19
  42. package/dist/adapter/helpers/get-shader-layout-from-glsl.js.map +1 -1
  43. package/dist/adapter/helpers/set-uniform.d.ts +1 -1
  44. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  45. package/dist/adapter/helpers/set-uniform.js +1 -1
  46. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  47. package/dist/adapter/helpers/webgl-texture-utils.d.ts +1 -1
  48. package/dist/adapter/helpers/webgl-texture-utils.d.ts.map +1 -1
  49. package/dist/adapter/helpers/webgl-texture-utils.js +4 -4
  50. package/dist/adapter/helpers/webgl-texture-utils.js.map +1 -1
  51. package/dist/adapter/helpers/webgl-topology-utils.d.ts +1 -1
  52. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -1
  53. package/dist/adapter/helpers/webgl-topology-utils.js +1 -1
  54. package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -1
  55. package/dist/adapter/resources/webgl-buffer.d.ts +1 -1
  56. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  57. package/dist/adapter/resources/webgl-buffer.js +20 -5
  58. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  59. package/dist/adapter/resources/webgl-command-buffer.d.ts +3 -3
  60. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  61. package/dist/adapter/resources/webgl-command-buffer.js +22 -36
  62. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  63. package/dist/adapter/resources/webgl-command-encoder.d.ts +6 -5
  64. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  65. package/dist/adapter/resources/webgl-command-encoder.js +23 -8
  66. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  67. package/dist/adapter/resources/webgl-framebuffer.d.ts +3 -1
  68. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  69. package/dist/adapter/resources/webgl-framebuffer.js +10 -1
  70. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  71. package/dist/adapter/resources/webgl-query-set.d.ts +37 -31
  72. package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -1
  73. package/dist/adapter/resources/webgl-query-set.js +247 -96
  74. package/dist/adapter/resources/webgl-query-set.js.map +1 -1
  75. package/dist/adapter/resources/webgl-render-pass.d.ts +1 -1
  76. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  77. package/dist/adapter/resources/webgl-render-pass.js +25 -11
  78. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  79. package/dist/adapter/resources/webgl-render-pipeline.d.ts +17 -21
  80. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  81. package/dist/adapter/resources/webgl-render-pipeline.js +69 -167
  82. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  83. package/dist/adapter/resources/webgl-sampler.d.ts +1 -1
  84. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  85. package/dist/adapter/resources/webgl-sampler.js +1 -1
  86. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  87. package/dist/adapter/resources/webgl-shader.d.ts +1 -1
  88. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  89. package/dist/adapter/resources/webgl-shader.js +15 -8
  90. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  91. package/dist/adapter/resources/webgl-shared-render-pipeline.d.ts +24 -0
  92. package/dist/adapter/resources/webgl-shared-render-pipeline.d.ts.map +1 -0
  93. package/dist/adapter/resources/webgl-shared-render-pipeline.js +155 -0
  94. package/dist/adapter/resources/webgl-shared-render-pipeline.js.map +1 -0
  95. package/dist/adapter/resources/webgl-texture.d.ts +27 -6
  96. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  97. package/dist/adapter/resources/webgl-texture.js +199 -101
  98. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  99. package/dist/adapter/resources/webgl-transform-feedback.js +1 -1
  100. package/dist/adapter/resources/webgl-transform-feedback.js.map +1 -1
  101. package/dist/adapter/resources/webgl-vertex-array.d.ts +2 -2
  102. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
  103. package/dist/adapter/resources/webgl-vertex-array.js +1 -1
  104. package/dist/adapter/resources/webgl-vertex-array.js.map +1 -1
  105. package/dist/adapter/webgl-device.d.ts +6 -3
  106. package/dist/adapter/webgl-device.d.ts.map +1 -1
  107. package/dist/adapter/webgl-device.js +36 -4
  108. package/dist/adapter/webgl-device.js.map +1 -1
  109. package/dist/adapter/webgl-presentation-context.d.ts +21 -0
  110. package/dist/adapter/webgl-presentation-context.d.ts.map +1 -0
  111. package/dist/adapter/webgl-presentation-context.js +64 -0
  112. package/dist/adapter/webgl-presentation-context.js.map +1 -0
  113. package/dist/constants/index.d.ts +3 -0
  114. package/dist/constants/index.d.ts.map +1 -0
  115. package/dist/constants/index.js +5 -0
  116. package/dist/constants/index.js.map +1 -0
  117. package/dist/constants/webgl-constants.d.ts +822 -0
  118. package/dist/constants/webgl-constants.d.ts.map +1 -0
  119. package/dist/constants/webgl-constants.js +928 -0
  120. package/dist/constants/webgl-constants.js.map +1 -0
  121. package/dist/constants/webgl-types.d.ts +480 -0
  122. package/dist/constants/webgl-types.d.ts.map +1 -0
  123. package/dist/constants/webgl-types.js +6 -0
  124. package/dist/constants/webgl-types.js.map +1 -0
  125. package/dist/context/debug/webgl-developer-tools.js +1 -1
  126. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  127. package/dist/context/helpers/webgl-context-data.d.ts +1 -1
  128. package/dist/context/helpers/webgl-context-data.d.ts.map +1 -1
  129. package/dist/context/helpers/webgl-extensions.d.ts +1 -1
  130. package/dist/context/helpers/webgl-extensions.d.ts.map +1 -1
  131. package/dist/context/parameters/unified-parameter-api.d.ts +1 -1
  132. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  133. package/dist/context/parameters/webgl-parameter-tables.d.ts +1 -1
  134. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  135. package/dist/context/parameters/webgl-parameter-tables.js +1 -1
  136. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  137. package/dist/context/polyfills/polyfill-webgl1-extensions.js +1 -1
  138. package/dist/context/polyfills/polyfill-webgl1-extensions.js.map +1 -1
  139. package/dist/dist.dev.js +1473 -824
  140. package/dist/dist.min.js +2 -2
  141. package/dist/index.cjs +3 -5491
  142. package/dist/index.cjs.map +4 -4
  143. package/dist/index.d.ts +2 -0
  144. package/dist/index.d.ts.map +1 -1
  145. package/dist/index.js +1 -0
  146. package/dist/index.js.map +1 -1
  147. package/dist/webgl-constants.d.ts +2 -0
  148. package/dist/webgl-constants.d.ts.map +1 -0
  149. package/dist/webgl-constants.js +5 -0
  150. package/dist/webgl-constants.js.map +1 -0
  151. package/dist/webgl-types.d.ts +2 -0
  152. package/dist/webgl-types.d.ts.map +1 -0
  153. package/dist/{types.js → webgl-types.js} +1 -1
  154. package/dist/webgl-types.js.map +1 -0
  155. package/package.json +18 -4
  156. package/src/adapter/converters/device-parameters.ts +6 -2
  157. package/src/adapter/converters/sampler-parameters.ts +1 -1
  158. package/src/adapter/converters/shader-formats.ts +1 -66
  159. package/src/adapter/converters/webgl-shadertypes.ts +1 -9
  160. package/src/adapter/converters/webgl-texture-table.ts +160 -68
  161. package/src/adapter/converters/webgl-vertex-formats.ts +1 -1
  162. package/src/adapter/device-helpers/webgl-device-features.ts +2 -3
  163. package/src/adapter/device-helpers/webgl-device-info.ts +7 -1
  164. package/src/adapter/device-helpers/webgl-device-limits.ts +1 -1
  165. package/src/adapter/helpers/format-utils.ts +1 -1
  166. package/src/adapter/helpers/get-shader-layout-from-glsl.ts +38 -20
  167. package/src/adapter/helpers/set-uniform.ts +1 -1
  168. package/src/adapter/helpers/webgl-texture-utils.ts +4 -4
  169. package/src/adapter/helpers/webgl-topology-utils.ts +1 -1
  170. package/src/adapter/resources/webgl-buffer.ts +17 -5
  171. package/src/adapter/resources/webgl-command-buffer.ts +28 -28
  172. package/src/adapter/resources/webgl-command-encoder.ts +28 -11
  173. package/src/adapter/resources/webgl-framebuffer.ts +12 -1
  174. package/src/adapter/resources/webgl-query-set.ts +295 -101
  175. package/src/adapter/resources/webgl-render-pass.ts +26 -13
  176. package/src/adapter/resources/webgl-render-pipeline.ts +101 -196
  177. package/src/adapter/resources/webgl-sampler.ts +1 -1
  178. package/src/adapter/resources/webgl-shader.ts +15 -8
  179. package/src/adapter/resources/webgl-shared-render-pipeline.ts +211 -0
  180. package/src/adapter/resources/webgl-texture.ts +324 -122
  181. package/src/adapter/resources/webgl-transform-feedback.ts +1 -1
  182. package/src/adapter/resources/webgl-vertex-array.ts +1 -1
  183. package/src/adapter/webgl-device.ts +50 -6
  184. package/src/adapter/webgl-presentation-context.ts +93 -0
  185. package/src/constants/index.d.ts.map +1 -0
  186. package/src/constants/index.js.map +1 -0
  187. package/src/constants/index.ts +31 -0
  188. package/src/constants/webgl-constants.d.ts.map +1 -0
  189. package/src/constants/webgl-constants.js.map +1 -0
  190. package/src/constants/webgl-constants.ts +1051 -0
  191. package/src/constants/webgl-types.d.ts.map +1 -0
  192. package/src/constants/webgl-types.js.map +1 -0
  193. package/src/constants/webgl-types.ts +813 -0
  194. package/src/context/debug/webgl-developer-tools.ts +1 -1
  195. package/src/context/helpers/webgl-context-data.ts +1 -1
  196. package/src/context/helpers/webgl-extensions.ts +1 -1
  197. package/src/context/parameters/unified-parameter-api.ts +1 -1
  198. package/src/context/parameters/webgl-parameter-tables.ts +1 -1
  199. package/src/context/polyfills/polyfill-webgl1-extensions.ts +1 -1
  200. package/src/index.ts +26 -0
  201. package/src/webgl-constants.d.ts.map +1 -0
  202. package/src/webgl-constants.js.map +1 -0
  203. package/src/webgl-constants.ts +5 -0
  204. package/src/webgl-types.d.ts.map +1 -0
  205. package/src/webgl-types.js.map +1 -0
  206. package/src/webgl-types.ts +29 -0
  207. package/dist/types.d.ts +0 -11
  208. package/dist/types.d.ts.map +0 -1
  209. package/dist/types.js.map +0 -1
  210. package/src/types.ts +0 -14
@@ -0,0 +1,211 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import {GL} from '@luma.gl/webgl/constants';
6
+ import {
7
+ SharedRenderPipeline,
8
+ log,
9
+ type ShaderLayout,
10
+ type SharedRenderPipelineProps
11
+ } from '@luma.gl/core';
12
+
13
+ import {getShaderLayoutFromGLSL} from '../helpers/get-shader-layout-from-glsl';
14
+ import {isGLSamplerType} from '../converters/webgl-shadertypes';
15
+ import type {WebGLDevice} from '../webgl-device';
16
+ import type {WEBGLShader} from './webgl-shader';
17
+
18
+ const LOG_PROGRAM_PERF_PRIORITY = 4;
19
+
20
+ export class WEBGLSharedRenderPipeline extends SharedRenderPipeline {
21
+ readonly device: WebGLDevice;
22
+ readonly handle: WebGLProgram;
23
+ readonly vs: WEBGLShader;
24
+ readonly fs: WEBGLShader;
25
+ introspectedLayout: ShaderLayout = {attributes: [], bindings: [], uniforms: []};
26
+ linkStatus: 'pending' | 'success' | 'error' = 'pending';
27
+
28
+ constructor(
29
+ device: WebGLDevice,
30
+ props: SharedRenderPipelineProps & {
31
+ handle?: WebGLProgram;
32
+ vs: WEBGLShader;
33
+ fs: WEBGLShader;
34
+ }
35
+ ) {
36
+ super(device, props);
37
+ this.device = device;
38
+ this.handle = props.handle || this.device.gl.createProgram();
39
+ this.vs = props.vs;
40
+ this.fs = props.fs;
41
+
42
+ if (props.varyings && props.varyings.length > 0) {
43
+ this.device.gl.transformFeedbackVaryings(
44
+ this.handle,
45
+ props.varyings,
46
+ props.bufferMode || GL.SEPARATE_ATTRIBS
47
+ );
48
+ }
49
+
50
+ this._linkShaders();
51
+ // Introspection happens after linking to build wrapper-facing layout metadata.
52
+ // It is not a prerequisite for deciding whether a shared `WebGLProgram` can be
53
+ // reused; that decision must remain based on the shared-pipeline cache key alone.
54
+ log.time(3, `RenderPipeline ${this.id} - shaderLayout introspection`)();
55
+ this.introspectedLayout = getShaderLayoutFromGLSL(this.device.gl, this.handle);
56
+ log.timeEnd(3, `RenderPipeline ${this.id} - shaderLayout introspection`)();
57
+ }
58
+
59
+ override destroy(): void {
60
+ if (this.destroyed) {
61
+ return;
62
+ }
63
+
64
+ this.device.gl.useProgram(null);
65
+ this.device.gl.deleteProgram(this.handle);
66
+ // @ts-expect-error
67
+ this.handle.destroyed = true;
68
+ this.destroyResource();
69
+ }
70
+
71
+ protected async _linkShaders() {
72
+ const {gl} = this.device;
73
+ gl.attachShader(this.handle, this.vs.handle);
74
+ gl.attachShader(this.handle, this.fs.handle);
75
+ log.time(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();
76
+ gl.linkProgram(this.handle);
77
+ log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();
78
+
79
+ if (!this.device.features.has('compilation-status-async-webgl')) {
80
+ const status = this._getLinkStatus();
81
+ this._reportLinkStatus(status);
82
+ return;
83
+ }
84
+
85
+ log.once(1, 'RenderPipeline linking is asynchronous')();
86
+ await this._waitForLinkComplete();
87
+ log.info(2, `RenderPipeline ${this.id} - async linking complete: ${this.linkStatus}`)();
88
+ const status = this._getLinkStatus();
89
+ this._reportLinkStatus(status);
90
+ }
91
+
92
+ async _reportLinkStatus(status: 'success' | 'link-error' | 'validation-error'): Promise<void> {
93
+ switch (status) {
94
+ case 'success':
95
+ return;
96
+
97
+ default:
98
+ const errorType = status === 'link-error' ? 'Link error' : 'Validation error';
99
+ switch (this.vs.compilationStatus) {
100
+ case 'error':
101
+ this.vs.debugShader();
102
+ throw new Error(`${this} ${errorType} during compilation of ${this.vs}`);
103
+ case 'pending':
104
+ await this.vs.asyncCompilationStatus;
105
+ this.vs.debugShader();
106
+ break;
107
+ case 'success':
108
+ break;
109
+ }
110
+
111
+ switch (this.fs?.compilationStatus) {
112
+ case 'error':
113
+ this.fs.debugShader();
114
+ throw new Error(`${this} ${errorType} during compilation of ${this.fs}`);
115
+ case 'pending':
116
+ await this.fs.asyncCompilationStatus;
117
+ this.fs.debugShader();
118
+ break;
119
+ case 'success':
120
+ break;
121
+ }
122
+
123
+ const linkErrorLog = this.device.gl.getProgramInfoLog(this.handle);
124
+ this.device.reportError(
125
+ new Error(`${errorType} during ${status}: ${linkErrorLog}`),
126
+ this
127
+ )();
128
+ this.device.debug();
129
+ }
130
+ }
131
+
132
+ _getLinkStatus(): 'success' | 'link-error' | 'validation-error' {
133
+ const {gl} = this.device;
134
+ const linked = gl.getProgramParameter(this.handle, GL.LINK_STATUS);
135
+ if (!linked) {
136
+ this.linkStatus = 'error';
137
+ return 'link-error';
138
+ }
139
+
140
+ this._initializeSamplerUniforms();
141
+ gl.validateProgram(this.handle);
142
+ const validated = gl.getProgramParameter(this.handle, GL.VALIDATE_STATUS);
143
+ if (!validated) {
144
+ this.linkStatus = 'error';
145
+ return 'validation-error';
146
+ }
147
+
148
+ this.linkStatus = 'success';
149
+ return 'success';
150
+ }
151
+
152
+ _initializeSamplerUniforms(): void {
153
+ const {gl} = this.device;
154
+ gl.useProgram(this.handle);
155
+
156
+ let textureUnit = 0;
157
+ const uniformCount = gl.getProgramParameter(this.handle, GL.ACTIVE_UNIFORMS);
158
+ for (let uniformIndex = 0; uniformIndex < uniformCount; uniformIndex++) {
159
+ const activeInfo = gl.getActiveUniform(this.handle, uniformIndex);
160
+ if (activeInfo && isGLSamplerType(activeInfo.type)) {
161
+ const isArray = activeInfo.name.endsWith('[0]');
162
+ const uniformName = isArray ? activeInfo.name.slice(0, -3) : activeInfo.name;
163
+ const location = gl.getUniformLocation(this.handle, uniformName);
164
+
165
+ if (location !== null) {
166
+ textureUnit = this._assignSamplerUniform(location, activeInfo, isArray, textureUnit);
167
+ }
168
+ }
169
+ }
170
+ }
171
+
172
+ _assignSamplerUniform(
173
+ location: WebGLUniformLocation,
174
+ activeInfo: WebGLActiveInfo,
175
+ isArray: boolean,
176
+ textureUnit: number
177
+ ): number {
178
+ const {gl} = this.device;
179
+
180
+ if (isArray && activeInfo.size > 1) {
181
+ const textureUnits = Int32Array.from(
182
+ {length: activeInfo.size},
183
+ (_, arrayIndex) => textureUnit + arrayIndex
184
+ );
185
+ gl.uniform1iv(location, textureUnits);
186
+ return textureUnit + activeInfo.size;
187
+ }
188
+
189
+ gl.uniform1i(location, textureUnit);
190
+ return textureUnit + 1;
191
+ }
192
+
193
+ async _waitForLinkComplete(): Promise<void> {
194
+ const waitMs = async (ms: number) => await new Promise(resolve => setTimeout(resolve, ms));
195
+ const DELAY_MS = 10;
196
+
197
+ if (!this.device.features.has('compilation-status-async-webgl')) {
198
+ await waitMs(DELAY_MS);
199
+ return;
200
+ }
201
+
202
+ const {gl} = this.device;
203
+ for (;;) {
204
+ const complete = gl.getProgramParameter(this.handle, GL.COMPLETION_STATUS_KHR);
205
+ if (complete) {
206
+ return;
207
+ }
208
+ await waitMs(DELAY_MS);
209
+ }
210
+ }
211
+ }