@luma.gl/webgl 9.0.0-beta.4 → 9.0.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/dist/adapter/converters/device-parameters.js +240 -158
  2. package/dist/adapter/converters/sampler-parameters.d.ts +0 -4
  3. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/sampler-parameters.js +73 -68
  5. package/dist/adapter/converters/shader-formats.js +33 -46
  6. package/dist/adapter/converters/texture-formats.d.ts +9 -18
  7. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  8. package/dist/adapter/converters/texture-formats.js +454 -871
  9. package/dist/adapter/converters/vertex-formats.js +52 -61
  10. package/dist/adapter/device-helpers/device-features.d.ts +2 -5
  11. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  12. package/dist/adapter/device-helpers/device-features.js +56 -87
  13. package/dist/adapter/device-helpers/device-limits.d.ts +2 -4
  14. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  15. package/dist/adapter/device-helpers/device-limits.js +88 -83
  16. package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
  17. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  18. package/dist/adapter/device-helpers/get-device-info.js +79 -63
  19. package/dist/adapter/device-helpers/webgl-device-features.d.ts +6 -0
  20. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
  21. package/dist/adapter/device-helpers/webgl-device-features.js +52 -0
  22. package/dist/adapter/device-helpers/webgl-device-info.d.ts +4 -0
  23. package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
  24. package/dist/adapter/device-helpers/webgl-device-info.js +87 -0
  25. package/dist/adapter/device-helpers/webgl-device-limits.d.ts +50 -0
  26. package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
  27. package/dist/adapter/device-helpers/webgl-device-limits.js +92 -0
  28. package/dist/adapter/helpers/decode-webgl-types.js +87 -76
  29. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
  30. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  31. package/dist/adapter/helpers/get-shader-layout.js +261 -226
  32. package/dist/adapter/helpers/parse-shader-compiler-log.js +46 -37
  33. package/dist/adapter/helpers/set-uniform.d.ts +1 -1
  34. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  35. package/dist/adapter/helpers/set-uniform.js +67 -82
  36. package/dist/adapter/helpers/webgl-topology-utils.js +77 -93
  37. package/dist/adapter/objects/constants-to-keys.d.ts +1 -1
  38. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  39. package/dist/adapter/objects/constants-to-keys.js +18 -12
  40. package/dist/adapter/objects/webgl-renderbuffer.js +76 -80
  41. package/dist/adapter/objects/webgl-resource.d.ts +1 -1
  42. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  43. package/dist/adapter/objects/webgl-resource.js +204 -154
  44. package/dist/adapter/resources/webgl-buffer.d.ts +2 -3
  45. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  46. package/dist/adapter/resources/webgl-buffer.js +160 -119
  47. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  48. package/dist/adapter/resources/webgl-command-buffer.js +268 -171
  49. package/dist/adapter/resources/webgl-command-encoder.js +32 -40
  50. package/dist/adapter/resources/webgl-external-texture.js +92 -1
  51. package/dist/adapter/resources/webgl-framebuffer.d.ts +2 -2
  52. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  53. package/dist/adapter/resources/webgl-framebuffer.js +167 -139
  54. package/dist/adapter/resources/webgl-render-pass.js +121 -95
  55. package/dist/adapter/resources/webgl-render-pipeline.d.ts +11 -1
  56. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  57. package/dist/adapter/resources/webgl-render-pipeline.js +378 -228
  58. package/dist/adapter/resources/webgl-sampler.d.ts +0 -2
  59. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  60. package/dist/adapter/resources/webgl-sampler.js +43 -34
  61. package/dist/adapter/resources/webgl-shader.d.ts +10 -1
  62. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  63. package/dist/adapter/resources/webgl-shader.js +106 -45
  64. package/dist/adapter/resources/webgl-texture.d.ts +2 -6
  65. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  66. package/dist/adapter/resources/webgl-texture.js +614 -699
  67. package/dist/adapter/resources/webgl-transform-feedback.d.ts +1 -1
  68. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -1
  69. package/dist/adapter/resources/webgl-transform-feedback.js +143 -145
  70. package/dist/adapter/resources/webgl-vertex-array.d.ts +1 -1
  71. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
  72. package/dist/adapter/resources/webgl-vertex-array.js +229 -158
  73. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  74. package/dist/adapter/webgl-canvas-context.js +58 -37
  75. package/dist/adapter/webgl-device.d.ts +7 -15
  76. package/dist/adapter/webgl-device.d.ts.map +1 -1
  77. package/dist/adapter/webgl-device.js +440 -381
  78. package/dist/classic/accessor.js +132 -102
  79. package/dist/classic/clear.d.ts +2 -2
  80. package/dist/classic/clear.d.ts.map +1 -1
  81. package/dist/classic/clear.js +73 -73
  82. package/dist/classic/copy-and-blit.d.ts.map +1 -1
  83. package/dist/classic/copy-and-blit.js +176 -177
  84. package/dist/classic/format-utils.d.ts +2 -2
  85. package/dist/classic/format-utils.js +38 -32
  86. package/dist/classic/typed-array-utils.js +95 -81
  87. package/dist/context/{polyfill → context}/context-data.d.ts +2 -1
  88. package/dist/context/context/context-data.d.ts.map +1 -0
  89. package/dist/context/context/context-data.js +33 -0
  90. package/dist/context/context/create-browser-context.d.ts +1 -6
  91. package/dist/context/context/create-browser-context.d.ts.map +1 -1
  92. package/dist/context/context/create-browser-context.js +62 -49
  93. package/dist/context/debug/spector.js +54 -50
  94. package/dist/context/debug/webgl-developer-tools.d.ts +1 -2
  95. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  96. package/dist/context/debug/webgl-developer-tools.js +102 -76
  97. package/dist/context/parameters/unified-parameter-api.d.ts +3 -3
  98. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  99. package/dist/context/parameters/unified-parameter-api.js +95 -46
  100. package/dist/context/parameters/webgl-parameter-tables.d.ts +110 -99
  101. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  102. package/dist/context/parameters/webgl-parameter-tables.js +456 -404
  103. package/dist/context/state-tracker/deep-array-equal.js +18 -14
  104. package/dist/context/state-tracker/track-context-state.d.ts +4 -4
  105. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  106. package/dist/context/state-tracker/track-context-state.js +190 -126
  107. package/dist/context/state-tracker/with-parameters.d.ts +1 -1
  108. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  109. package/dist/context/state-tracker/with-parameters.js +45 -29
  110. package/dist/dist.dev.js +2568 -3786
  111. package/dist/index.cjs +1346 -2464
  112. package/dist/index.cjs.map +7 -0
  113. package/dist/index.d.ts +2 -5
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js +36 -26
  116. package/dist/types.js +2 -1
  117. package/dist.min.js +9 -42
  118. package/package.json +11 -15
  119. package/src/adapter/converters/device-parameters.ts +0 -1
  120. package/src/adapter/converters/sampler-parameters.ts +0 -17
  121. package/src/adapter/converters/texture-formats.ts +86 -154
  122. package/src/adapter/device-helpers/webgl-device-features.ts +69 -0
  123. package/src/adapter/device-helpers/{get-device-info.ts → webgl-device-info.ts} +3 -4
  124. package/src/adapter/device-helpers/{device-limits.ts → webgl-device-limits.ts} +25 -23
  125. package/src/adapter/helpers/get-shader-layout.ts +17 -28
  126. package/src/adapter/helpers/set-uniform.ts +1 -3
  127. package/src/adapter/objects/constants-to-keys.ts +1 -1
  128. package/src/adapter/objects/webgl-renderbuffer.ts +4 -4
  129. package/src/adapter/objects/webgl-resource.ts +3 -18
  130. package/src/adapter/resources/webgl-buffer.ts +6 -11
  131. package/src/adapter/resources/webgl-command-buffer.ts +20 -30
  132. package/src/adapter/resources/webgl-external-texture.ts +2 -3
  133. package/src/adapter/resources/webgl-framebuffer.ts +4 -5
  134. package/src/adapter/resources/webgl-render-pass.ts +7 -7
  135. package/src/adapter/resources/webgl-render-pipeline.ts +106 -31
  136. package/src/adapter/resources/webgl-sampler.ts +5 -9
  137. package/src/adapter/resources/webgl-shader.ts +57 -10
  138. package/src/adapter/resources/webgl-texture.ts +29 -103
  139. package/src/adapter/resources/webgl-transform-feedback.ts +14 -15
  140. package/src/adapter/resources/webgl-vertex-array.ts +16 -18
  141. package/src/adapter/webgl-canvas-context.ts +1 -7
  142. package/src/adapter/webgl-device.ts +18 -67
  143. package/src/classic/clear.ts +13 -14
  144. package/src/classic/copy-and-blit.ts +1 -2
  145. package/src/context/context/context-data.ts +44 -0
  146. package/src/context/context/create-browser-context.ts +7 -32
  147. package/src/context/debug/webgl-developer-tools.ts +6 -8
  148. package/src/context/parameters/unified-parameter-api.ts +3 -3
  149. package/src/context/parameters/webgl-parameter-tables.ts +66 -75
  150. package/src/context/state-tracker/track-context-state.ts +18 -17
  151. package/src/context/state-tracker/with-parameters.ts +1 -1
  152. package/src/index.ts +2 -17
  153. package/dist/adapter/converters/device-parameters.js.map +0 -1
  154. package/dist/adapter/converters/sampler-parameters.js.map +0 -1
  155. package/dist/adapter/converters/shader-formats.js.map +0 -1
  156. package/dist/adapter/converters/texture-formats.js.map +0 -1
  157. package/dist/adapter/converters/vertex-formats.js.map +0 -1
  158. package/dist/adapter/device-helpers/device-features.js.map +0 -1
  159. package/dist/adapter/device-helpers/device-limits.js.map +0 -1
  160. package/dist/adapter/device-helpers/get-device-info.js.map +0 -1
  161. package/dist/adapter/device-helpers/is-old-ie.d.ts +0 -2
  162. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +0 -1
  163. package/dist/adapter/device-helpers/is-old-ie.js +0 -9
  164. package/dist/adapter/device-helpers/is-old-ie.js.map +0 -1
  165. package/dist/adapter/helpers/decode-webgl-types.js.map +0 -1
  166. package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
  167. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  168. package/dist/adapter/helpers/set-uniform.js.map +0 -1
  169. package/dist/adapter/helpers/webgl-topology-utils.js.map +0 -1
  170. package/dist/adapter/objects/constants-to-keys.js.map +0 -1
  171. package/dist/adapter/objects/webgl-renderbuffer.js.map +0 -1
  172. package/dist/adapter/objects/webgl-resource.js.map +0 -1
  173. package/dist/adapter/resources/webgl-buffer.js.map +0 -1
  174. package/dist/adapter/resources/webgl-command-buffer.js.map +0 -1
  175. package/dist/adapter/resources/webgl-command-encoder.js.map +0 -1
  176. package/dist/adapter/resources/webgl-external-texture.js.map +0 -1
  177. package/dist/adapter/resources/webgl-framebuffer.js.map +0 -1
  178. package/dist/adapter/resources/webgl-render-pass.js.map +0 -1
  179. package/dist/adapter/resources/webgl-render-pipeline.js.map +0 -1
  180. package/dist/adapter/resources/webgl-sampler.js.map +0 -1
  181. package/dist/adapter/resources/webgl-shader.js.map +0 -1
  182. package/dist/adapter/resources/webgl-texture.js.map +0 -1
  183. package/dist/adapter/resources/webgl-transform-feedback.js.map +0 -1
  184. package/dist/adapter/resources/webgl-vertex-array.js.map +0 -1
  185. package/dist/adapter/webgl-canvas-context.js.map +0 -1
  186. package/dist/adapter/webgl-device.js.map +0 -1
  187. package/dist/classic/accessor.js.map +0 -1
  188. package/dist/classic/clear.js.map +0 -1
  189. package/dist/classic/copy-and-blit.js.map +0 -1
  190. package/dist/classic/format-utils.js.map +0 -1
  191. package/dist/classic/typed-array-utils.js.map +0 -1
  192. package/dist/context/context/create-browser-context.js.map +0 -1
  193. package/dist/context/context/create-headless-context.d.ts +0 -9
  194. package/dist/context/context/create-headless-context.d.ts.map +0 -1
  195. package/dist/context/context/create-headless-context.js +0 -42
  196. package/dist/context/context/create-headless-context.js.map +0 -1
  197. package/dist/context/context/webgl-checks.d.ts +0 -13
  198. package/dist/context/context/webgl-checks.d.ts.map +0 -1
  199. package/dist/context/context/webgl-checks.js +0 -31
  200. package/dist/context/context/webgl-checks.js.map +0 -1
  201. package/dist/context/debug/spector.js.map +0 -1
  202. package/dist/context/debug/webgl-developer-tools.js.map +0 -1
  203. package/dist/context/parameters/unified-parameter-api.js.map +0 -1
  204. package/dist/context/parameters/webgl-parameter-tables.js.map +0 -1
  205. package/dist/context/polyfill/context-data.d.ts.map +0 -1
  206. package/dist/context/polyfill/context-data.js +0 -12
  207. package/dist/context/polyfill/context-data.js.map +0 -1
  208. package/dist/context/polyfill/get-parameter-polyfill.d.ts +0 -2
  209. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +0 -1
  210. package/dist/context/polyfill/get-parameter-polyfill.js +0 -85
  211. package/dist/context/polyfill/get-parameter-polyfill.js.map +0 -1
  212. package/dist/context/polyfill/polyfill-context.d.ts +0 -5
  213. package/dist/context/polyfill/polyfill-context.d.ts.map +0 -1
  214. package/dist/context/polyfill/polyfill-context.js +0 -87
  215. package/dist/context/polyfill/polyfill-context.js.map +0 -1
  216. package/dist/context/polyfill/polyfill-table.d.ts +0 -48
  217. package/dist/context/polyfill/polyfill-table.d.ts.map +0 -1
  218. package/dist/context/polyfill/polyfill-table.js +0 -137
  219. package/dist/context/polyfill/polyfill-table.js.map +0 -1
  220. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +0 -2
  221. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +0 -1
  222. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -265
  223. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  224. package/dist/context/state-tracker/deep-array-equal.js.map +0 -1
  225. package/dist/context/state-tracker/track-context-state.js.map +0 -1
  226. package/dist/context/state-tracker/with-parameters.js.map +0 -1
  227. package/dist/index.js.map +0 -1
  228. package/dist/types.js.map +0 -1
  229. package/src/adapter/device-helpers/device-features.ts +0 -161
  230. package/src/adapter/device-helpers/is-old-ie.ts +0 -14
  231. package/src/context/context/create-headless-context.ts +0 -51
  232. package/src/context/context/webgl-checks.ts +0 -51
  233. package/src/context/polyfill/context-data.ts +0 -30
  234. package/src/context/polyfill/get-parameter-polyfill.ts +0 -122
  235. package/src/context/polyfill/polyfill-context.ts +0 -104
  236. package/src/context/polyfill/polyfill-table.ts +0 -167
  237. package/src/context/polyfill/polyfill-vertex-array-object.ts +0 -365
@@ -1,130 +1,171 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
1
3
  import { Buffer, assert } from '@luma.gl/core';
4
+ import { GL } from '@luma.gl/constants';
5
+ /** WebGL Buffer interface */
2
6
  export class WEBGLBuffer extends Buffer {
3
- constructor(device) {
4
- let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
5
- super(device, props);
6
- this.device = void 0;
7
- this.gl = void 0;
8
- this.gl2 = void 0;
9
- this.handle = void 0;
10
- this.glTarget = void 0;
11
- this.glUsage = void 0;
12
- this.glIndexType = 5123;
13
- this.byteLength = void 0;
14
- this.bytesUsed = void 0;
15
- this.device = device;
16
- this.gl = this.device.gl;
17
- this.gl2 = this.device.gl2;
18
- const handle = typeof props === 'object' ? props.handle : undefined;
19
- this.handle = handle || this.gl.createBuffer();
20
- device.setSpectorMetadata(this.handle, {
21
- ...this.props,
22
- data: typeof this.props.data
23
- });
24
- this.glTarget = getWebGLTarget(this.props.usage);
25
- this.glUsage = getWebGLUsage(this.props.usage);
26
- this.glIndexType = this.props.indexType === 'uint32' ? 5125 : 5123;
27
- if (props.data) {
28
- this._initWithData(props.data, props.byteOffset, props.byteLength);
29
- } else {
30
- this._initWithByteLength(props.byteLength || 0);
7
+ device;
8
+ gl;
9
+ handle;
10
+ /** Target in OpenGL defines the type of buffer */
11
+ glTarget;
12
+ /** Usage is a hint on how frequently the buffer will be updates */
13
+ glUsage;
14
+ /** Index type is needed when issuing draw calls, so we pre-compute it */
15
+ glIndexType = GL.UNSIGNED_SHORT;
16
+ /** Number of bytes allocated on the GPU for this buffer */
17
+ byteLength;
18
+ /** Number of bytes used */
19
+ bytesUsed;
20
+ constructor(device, props = {}) {
21
+ super(device, props);
22
+ this.device = device;
23
+ this.gl = this.device.gl;
24
+ const handle = typeof props === 'object' ? props.handle : undefined;
25
+ this.handle = handle || this.gl.createBuffer();
26
+ device.setSpectorMetadata(this.handle, { ...this.props, data: typeof this.props.data });
27
+ // - In WebGL1, need to make sure we use GL.ELEMENT_ARRAY_BUFFER when initializing element buffers
28
+ // otherwise buffer type will lock to generic (non-element) buffer
29
+ // - In WebGL2, we can use GL.COPY_READ_BUFFER which avoids locking the type here
30
+ this.glTarget = getWebGLTarget(this.props.usage);
31
+ this.glUsage = getWebGLUsage(this.props.usage);
32
+ this.glIndexType = this.props.indexType === 'uint32' ? GL.UNSIGNED_INT : GL.UNSIGNED_SHORT;
33
+ // Set data: (re)initializes the buffer
34
+ if (props.data) {
35
+ this._initWithData(props.data, props.byteOffset, props.byteLength);
36
+ }
37
+ else {
38
+ this._initWithByteLength(props.byteLength || 0);
39
+ }
31
40
  }
32
- }
33
- _initWithData(data) {
34
- let byteOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
35
- let byteLength = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : data.byteLength + byteOffset;
36
- const glTarget = this.glTarget;
37
- this.gl.bindBuffer(glTarget, this.handle);
38
- this.gl.bufferData(glTarget, byteLength, this.glUsage);
39
- this.gl.bufferSubData(glTarget, byteOffset, data);
40
- this.gl.bindBuffer(glTarget, null);
41
- this.bytesUsed = byteLength;
42
- this.byteLength = byteLength;
43
- this._setDebugData(data, byteOffset, byteLength);
44
- this.trackAllocatedMemory(byteLength);
45
- }
46
- _initWithByteLength(byteLength) {
47
- assert(byteLength >= 0);
48
- let data = byteLength;
49
- if (byteLength === 0) {
50
- data = new Float32Array(0);
41
+ // PRIVATE METHODS
42
+ /** Allocate a new buffer and initialize to contents of typed array */
43
+ _initWithData(data, byteOffset = 0, byteLength = data.byteLength + byteOffset) {
44
+ // const glTarget = this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.glTarget;
45
+ const glTarget = this.glTarget;
46
+ this.gl.bindBuffer(glTarget, this.handle);
47
+ this.gl.bufferData(glTarget, byteLength, this.glUsage);
48
+ this.gl.bufferSubData(glTarget, byteOffset, data);
49
+ this.gl.bindBuffer(glTarget, null);
50
+ this.bytesUsed = byteLength;
51
+ this.byteLength = byteLength;
52
+ this._setDebugData(data, byteOffset, byteLength);
53
+ this.trackAllocatedMemory(byteLength);
51
54
  }
52
- const glTarget = this.glTarget;
53
- this.gl.bindBuffer(glTarget, this.handle);
54
- this.gl.bufferData(glTarget, data, this.glUsage);
55
- this.gl.bindBuffer(glTarget, null);
56
- this.bytesUsed = byteLength;
57
- this.byteLength = byteLength;
58
- this._setDebugData(null, 0, byteLength);
59
- this.trackAllocatedMemory(byteLength);
60
- return this;
61
- }
62
- destroy() {
63
- if (!this.destroyed && this.handle) {
64
- this.removeStats();
65
- this.trackDeallocatedMemory();
66
- this.gl.deleteBuffer(this.handle);
67
- this.destroyed = true;
68
- this.handle = null;
55
+ // Allocate a GPU buffer of specified size.
56
+ _initWithByteLength(byteLength) {
57
+ assert(byteLength >= 0);
58
+ // Workaround needed for Safari (#291):
59
+ // gl.bufferData with size equal to 0 crashes. Instead create zero sized array.
60
+ let data = byteLength;
61
+ if (byteLength === 0) {
62
+ // @ts-expect-error
63
+ data = new Float32Array(0);
64
+ }
65
+ // const glTarget = this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.glTarget;
66
+ const glTarget = this.glTarget;
67
+ this.gl.bindBuffer(glTarget, this.handle);
68
+ this.gl.bufferData(glTarget, data, this.glUsage);
69
+ this.gl.bindBuffer(glTarget, null);
70
+ this.bytesUsed = byteLength;
71
+ this.byteLength = byteLength;
72
+ this._setDebugData(null, 0, byteLength);
73
+ this.trackAllocatedMemory(byteLength);
74
+ return this;
69
75
  }
70
- }
71
- write(data) {
72
- let byteOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
73
- const srcOffset = 0;
74
- const byteLength = undefined;
75
- const glTarget = this.device.isWebGL2 ? 36663 : this.glTarget;
76
- this.gl.bindBuffer(glTarget, this.handle);
77
- if (srcOffset !== 0 || byteLength !== undefined) {
78
- this.device.assertWebGL2();
79
- this.gl2.bufferSubData(glTarget, byteOffset, data, srcOffset, byteLength);
80
- } else {
81
- this.gl.bufferSubData(glTarget, byteOffset, data);
76
+ destroy() {
77
+ if (!this.destroyed && this.handle) {
78
+ this.removeStats();
79
+ this.trackDeallocatedMemory();
80
+ this.gl.deleteBuffer(this.handle);
81
+ this.destroyed = true;
82
+ // @ts-expect-error
83
+ this.handle = null;
84
+ }
85
+ }
86
+ write(data, byteOffset = 0) {
87
+ const srcOffset = 0;
88
+ const byteLength = undefined; // data.byteLength;
89
+ // Create the buffer - binding it here for the first time locks the type
90
+ // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type
91
+ const glTarget = GL.COPY_WRITE_BUFFER;
92
+ this.gl.bindBuffer(glTarget, this.handle);
93
+ // WebGL2: subData supports additional srcOffset and length parameters
94
+ if (srcOffset !== 0 || byteLength !== undefined) {
95
+ this.gl.bufferSubData(glTarget, byteOffset, data, srcOffset, byteLength);
96
+ }
97
+ else {
98
+ this.gl.bufferSubData(glTarget, byteOffset, data);
99
+ }
100
+ this.gl.bindBuffer(glTarget, null);
101
+ this._setDebugData(data, byteOffset, data.byteLength);
102
+ }
103
+ /** Asynchronously read data from the buffer */
104
+ async readAsync(byteOffset = 0, byteLength) {
105
+ return this.readSyncWebGL(byteOffset, byteLength);
106
+ }
107
+ /** Synchronously read data from the buffer. WebGL only. */
108
+ readSyncWebGL(byteOffset = 0, byteLength) {
109
+ byteLength = byteLength ?? this.byteLength - byteOffset;
110
+ const data = new Uint8Array(byteLength);
111
+ const dstOffset = 0;
112
+ // Use GL.COPY_READ_BUFFER to avoid disturbing other targets and locking type
113
+ this.gl.bindBuffer(GL.COPY_READ_BUFFER, this.handle);
114
+ this.gl.getBufferSubData(GL.COPY_READ_BUFFER, byteOffset, data, dstOffset, byteLength);
115
+ this.gl.bindBuffer(GL.COPY_READ_BUFFER, null);
116
+ // Update local `data` if offsets are 0
117
+ this._setDebugData(data, byteOffset, byteLength);
118
+ return data;
82
119
  }
83
- this.gl.bindBuffer(glTarget, null);
84
- this._setDebugData(data, byteOffset, data.byteLength);
85
- }
86
- async readAsync() {
87
- let byteOffset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
88
- let byteLength = arguments.length > 1 ? arguments[1] : undefined;
89
- return this.readSyncWebGL2(byteOffset, byteLength);
90
- }
91
- readSyncWebGL2() {
92
- var _byteLength;
93
- let byteOffset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
94
- let byteLength = arguments.length > 1 ? arguments[1] : undefined;
95
- this.device.assertWebGL2();
96
- byteLength = (_byteLength = byteLength) !== null && _byteLength !== void 0 ? _byteLength : this.byteLength - byteOffset;
97
- const data = new Uint8Array(byteLength);
98
- const dstOffset = 0;
99
- this.gl.bindBuffer(36662, this.handle);
100
- this.gl2.getBufferSubData(36662, byteOffset, data, dstOffset, byteLength);
101
- this.gl.bindBuffer(36662, null);
102
- this._setDebugData(data, byteOffset, byteLength);
103
- return data;
104
- }
105
120
  }
121
+ /**
122
+ * Returns a WebGL buffer target
123
+ *
124
+ * @param usage
125
+ * static MAP_READ = 0x01;
126
+ * static MAP_WRITE = 0x02;
127
+ * static COPY_SRC = 0x0004;
128
+ * static COPY_DST = 0x0008;
129
+ * static INDEX = 0x0010;
130
+ * static VERTEX = 0x0020;
131
+ * static UNIFORM = 0x0040;
132
+ * static STORAGE = 0x0080;
133
+ * static INDIRECT = 0x0100;
134
+ * static QUERY_RESOLVE = 0x0200;
135
+ *
136
+ * @returns WebGL buffer targe
137
+ *
138
+ * Buffer bind points in WebGL2
139
+ * gl.COPY_READ_BUFFER: Buffer for copying from one buffer object to another.
140
+ * gl.COPY_WRITE_BUFFER: Buffer for copying from one buffer object to another.
141
+ * gl.TRANSFORM_FEEDBACK_BUFFER: Buffer for transform feedback operations.
142
+ * gl.PIXEL_PACK_BUFFER: Buffer used for pixel transfer operations.
143
+ * gl.PIXEL_UNPACK_BUFFER: Buffer used for pixel transfer operations.
144
+ */
106
145
  function getWebGLTarget(usage) {
107
- if (usage & Buffer.INDEX) {
108
- return 34963;
109
- }
110
- if (usage & Buffer.VERTEX) {
111
- return 34962;
112
- }
113
- if (usage & Buffer.UNIFORM) {
114
- return 35345;
115
- }
116
- return 34962;
146
+ if (usage & Buffer.INDEX) {
147
+ return GL.ELEMENT_ARRAY_BUFFER;
148
+ }
149
+ if (usage & Buffer.VERTEX) {
150
+ return GL.ARRAY_BUFFER;
151
+ }
152
+ if (usage & Buffer.UNIFORM) {
153
+ return GL.UNIFORM_BUFFER;
154
+ }
155
+ // Binding a buffer for the first time locks the type
156
+ // In WebGL2, we can use GL.COPY_WRITE_BUFFER to avoid locking the type
157
+ return GL.ARRAY_BUFFER;
117
158
  }
159
+ /** @todo usage is not passed correctly */
118
160
  function getWebGLUsage(usage) {
119
- if (usage & Buffer.INDEX) {
120
- return 35044;
121
- }
122
- if (usage & Buffer.VERTEX) {
123
- return 35044;
124
- }
125
- if (usage & Buffer.UNIFORM) {
126
- return 35048;
127
- }
128
- return 35044;
161
+ if (usage & Buffer.INDEX) {
162
+ return GL.STATIC_DRAW;
163
+ }
164
+ if (usage & Buffer.VERTEX) {
165
+ return GL.STATIC_DRAW;
166
+ }
167
+ if (usage & Buffer.UNIFORM) {
168
+ return GL.DYNAMIC_DRAW;
169
+ }
170
+ return GL.STATIC_DRAW;
129
171
  }
130
- //# sourceMappingURL=webgl-buffer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-command-buffer.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-command-buffer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,aAAa,EAAuB,MAAM,eAAe,CAAC;AAClE,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AAEtC,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAU5C,KAAK,yBAAyB,GAAG;IAC/B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,OAAO,EAAE,yBAAyB,CAAC;CACpC,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE,0BAA0B,CAAC;CACrC,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE,0BAA0B,CAAC;CACrC,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,IAAI,EAAE,yBAAyB,CAAC;IAChC,OAAO,EAAE,2BAA2B,CAAC;CACtC,CAAC;AAEF,KAAK,OAAO,GACR,yBAAyB,GACzB,0BAA0B,GAC1B,0BAA0B,GAC1B,2BAA2B,CAAC;AAEhC,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,OAAO,EAAE,CAAM;gBAEb,MAAM,EAAE,WAAW;IAK/B,cAAc,CAAC,QAAQ,GAAE,OAAO,EAAkB;CAkBnD;AAwQD,wBAAgB,oBAAoB,CAAC,MAAM,KAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAmB1D;AAGD,wBAAgB,aAAa,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAcjD"}
1
+ {"version":3,"file":"webgl-command-buffer.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-command-buffer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,aAAa,EAAuB,MAAM,eAAe,CAAC;AAClE,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AAEtC,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAU5C,KAAK,yBAAyB,GAAG;IAC/B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,OAAO,EAAE,yBAAyB,CAAC;CACpC,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE,0BAA0B,CAAC;CACrC,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE,0BAA0B,CAAC;CACrC,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,IAAI,EAAE,yBAAyB,CAAC;IAChC,OAAO,EAAE,2BAA2B,CAAC;CACtC,CAAC;AAEF,KAAK,OAAO,GACR,yBAAyB,GACzB,0BAA0B,GAC1B,0BAA0B,GAC1B,2BAA2B,CAAC;AAEhC,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,OAAO,EAAE,CAAM;gBAEb,MAAM,EAAE,WAAW;IAK/B,cAAc,CAAC,QAAQ,GAAE,OAAO,EAAkB;CAkBnD;AA8PD,wBAAgB,oBAAoB,CAAC,MAAM,KAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAmB1D;AAGD,wBAAgB,aAAa,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAcjD"}