@luma.gl/webgl 9.0.0-beta.3 → 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,159 +1,209 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
1
3
  import { Resource, assert, uid, stubRemovedMethods } from '@luma.gl/core';
2
- import { isWebGL2, assertWebGLContext } from "../../context/context/webgl-checks.js";
3
- import { WebGLDevice } from "../webgl-device.js";
4
- import { getKeyValue } from "./constants-to-keys.js";
4
+ import { WebGLDevice } from '../webgl-device';
5
+ // Requires full GL enum to be bundled... Make these bindings dependent on dynamic import (debug)?
6
+ import { getKeyValue } from './constants-to-keys';
5
7
  const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual methods';
8
+ /**
9
+ * Base class for WebGL object wrappers
10
+ */
6
11
  export class WebGLResource extends Resource {
7
- constructor(device, props, defaultProps) {
8
- super(device, props, defaultProps);
9
- this.device = void 0;
10
- this.gl = void 0;
11
- this.gl2 = void 0;
12
- this._handle = void 0;
13
- this._bound = false;
14
- this.byteLength = 0;
15
- this.device = WebGLDevice.attach(device);
16
- const gl = this.device.gl;
17
- assertWebGLContext(gl);
18
- const {
19
- id
20
- } = props || {};
21
- this.gl = gl;
22
- this.gl2 = gl;
23
- this.id = id || uid(this.constructor.name);
24
- this._handle = props === null || props === void 0 ? void 0 : props.handle;
25
- if (this._handle === undefined) {
26
- this._handle = this._createHandle();
27
- }
28
- this.byteLength = 0;
29
- }
30
- toString() {
31
- return `${this.constructor.name}(${this.id})`;
32
- }
33
- get handle() {
34
- return this._handle;
35
- }
36
- delete() {
37
- let {
38
- deleteChildren = false
39
- } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
40
- const children = this._handle && this._deleteHandle(this._handle);
41
- if (this._handle) {
42
- this.removeStats();
43
- }
44
- this._handle = null;
45
- if (children && deleteChildren) {
46
- children.filter(Boolean).forEach(child => child.destroy());
47
- }
48
- return this;
49
- }
50
- bind() {
51
- let funcOrHandle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.handle;
52
- if (typeof funcOrHandle !== 'function') {
53
- this._bindHandle(funcOrHandle);
54
- return this;
55
- }
56
- let value;
57
- if (!this._bound) {
58
- this._bindHandle(this.handle);
59
- this._bound = true;
60
- value = funcOrHandle();
61
- this._bound = false;
62
- this._bindHandle(null);
63
- } else {
64
- value = funcOrHandle();
65
- }
66
- return value;
67
- }
68
- unbind() {
69
- this.bind(null);
70
- }
71
- getParameter(pname) {
72
- let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
73
- pname = getKeyValue(this.gl, pname);
74
- assert(pname);
75
- const parameters = this.constructor.PARAMETERS || {};
76
- const parameter = parameters[pname];
77
- if (parameter) {
78
- const isWebgl2 = isWebGL2(this.gl);
79
- const parameterAvailable = (!('webgl2' in parameter) || isWebgl2) && (!('extension' in parameter) || this.gl.getExtension(parameter.extension));
80
- if (!parameterAvailable) {
81
- const webgl1Default = parameter.webgl1;
82
- const webgl2Default = 'webgl2' in parameter ? parameter.webgl2 : parameter.webgl1;
83
- const defaultValue = isWebgl2 ? webgl2Default : webgl1Default;
84
- return defaultValue;
85
- }
86
- }
87
- return this._getParameter(pname, props);
88
- }
89
- getParameters() {
90
- let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
91
- const {
92
- parameters,
93
- keys
94
- } = options;
95
- const PARAMETERS = this.constructor.PARAMETERS || {};
96
- const isWebgl2 = isWebGL2(this.gl);
97
- const values = {};
98
- const parameterKeys = parameters || Object.keys(PARAMETERS);
99
- for (const pname of parameterKeys) {
100
- const parameter = PARAMETERS[pname];
101
- const parameterAvailable = parameter && (!('webgl2' in parameter) || isWebgl2) && (!('extension' in parameter) || this.gl.getExtension(parameter.extension));
102
- if (parameterAvailable) {
103
- const key = keys ? this.device.getGLKey(pname) : pname;
104
- values[key] = this.getParameter(pname, options);
105
- if (keys && parameter.type === 'GLenum') {
106
- values[key] = this.device.getGLKey(values[key]);
12
+ device;
13
+ gl;
14
+ gl2;
15
+ _handle;
16
+ _bound = false;
17
+ // Only meaningful for resources that allocate GPU memory
18
+ byteLength = 0;
19
+ constructor(device, props, defaultProps) {
20
+ super(device, props, defaultProps);
21
+ this.device = WebGLDevice.attach(device);
22
+ const gl = this.device.gl;
23
+ // extends
24
+ const { id } = props || {};
25
+ this.gl = gl;
26
+ this.gl2 = gl;
27
+ this.id = id || uid(this.constructor.name);
28
+ // Set the handle
29
+ // If handle was provided, use it, otherwise create a new handle
30
+ // TODO - Stores the handle with context loss information
31
+ // this.glCount = glGetContextLossCount(this.gl);
32
+ // Default VertexArray needs to be created with null handle, so compare against undefined
33
+ this._handle = props?.handle;
34
+ if (this._handle === undefined) {
35
+ this._handle = this._createHandle();
107
36
  }
108
- }
109
- }
110
- return values;
111
- }
112
- setParameter(pname, value) {
113
- pname = getKeyValue(this.gl, pname);
114
- assert(pname);
115
- const parameters = this.constructor.PARAMETERS || {};
116
- const parameter = parameters[pname];
117
- if (parameter) {
118
- const isWebgl2 = isWebGL2(this.gl);
119
- const parameterAvailable = (!('webgl2' in parameter) || isWebgl2) && (!('extension' in parameter) || this.gl.getExtension(parameter.extension));
120
- if (!parameterAvailable) {
121
- throw new Error('Parameter not available on this platform');
122
- }
123
- if (parameter.type === 'GLenum') {
124
- value = getKeyValue(value);
125
- }
126
- }
127
- this._setParameter(pname, value);
128
- return this;
129
- }
130
- setParameters(parameters) {
131
- for (const pname in parameters) {
132
- this.setParameter(pname, parameters[pname]);
133
- }
134
- return this;
135
- }
136
- stubRemovedMethods(className, version, methodNames) {
137
- return stubRemovedMethods(this, className, version, methodNames);
138
- }
139
- initialize(props) {}
140
- _createHandle() {
141
- throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
142
- }
143
- _deleteHandle() {
144
- throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
145
- }
146
- _bindHandle(handle) {
147
- throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
148
- }
149
- _getOptsFromHandle() {
150
- throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
151
- }
152
- _getParameter(pname, props) {
153
- throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
154
- }
155
- _setParameter(pname, value) {
156
- throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
157
- }
37
+ this.byteLength = 0;
38
+ }
39
+ toString() {
40
+ return `${this.constructor.name}(${this.id})`;
41
+ }
42
+ get handle() {
43
+ // TODO - Add context loss handling
44
+ // Will regenerate and reinitialize the handle if necessary
45
+ // const glCount = glGetContextLossCount(this.gl);
46
+ // if (this.glCount !== glCount) {
47
+ // this._handle = this._createHandle(this.props);
48
+ // this._glCount = glCount;
49
+ // // Reinitialize object
50
+ // this.initialize(this.props);
51
+ // }
52
+ return this._handle;
53
+ }
54
+ delete({ deleteChildren = false } = {}) {
55
+ // Delete this object, and get refs to any children
56
+ // @ts-expect-error
57
+ const children = this._handle && this._deleteHandle(this._handle);
58
+ if (this._handle) {
59
+ this.removeStats();
60
+ }
61
+ this._handle = null;
62
+ // Optionally, recursively delete the children
63
+ // @ts-expect-error
64
+ if (children && deleteChildren) {
65
+ // @ts-expect-error
66
+ children.filter(Boolean).forEach((child) => child.destroy());
67
+ }
68
+ return this;
69
+ }
70
+ bind(funcOrHandle = this.handle) {
71
+ if (typeof funcOrHandle !== 'function') {
72
+ this._bindHandle(funcOrHandle);
73
+ return this;
74
+ }
75
+ let value;
76
+ if (!this._bound) {
77
+ this._bindHandle(this.handle);
78
+ this._bound = true;
79
+ value = funcOrHandle();
80
+ this._bound = false;
81
+ this._bindHandle(null);
82
+ }
83
+ else {
84
+ value = funcOrHandle();
85
+ }
86
+ return value;
87
+ }
88
+ unbind() {
89
+ this.bind(null);
90
+ }
91
+ /**
92
+ * Query a Resource parameter
93
+ *
94
+ * @param name
95
+ * @return param
96
+ */
97
+ getParameter(pname, props = {}) {
98
+ pname = getKeyValue(this.gl, pname);
99
+ assert(pname);
100
+ // @ts-expect-error
101
+ const parameters = this.constructor.PARAMETERS || {};
102
+ // Use parameter definitions to handle unsupported parameters
103
+ const parameter = parameters[pname];
104
+ if (parameter) {
105
+ // Check if we can query for this parameter
106
+ const parameterAvailable = (!('extension' in parameter) || this.gl.getExtension(parameter.extension));
107
+ if (!parameterAvailable) {
108
+ return parameter.webgl2;
109
+ }
110
+ }
111
+ // If unknown parameter - Could be a valid parameter not covered by PARAMS
112
+ // Attempt to query for it and let WebGL report errors
113
+ return this._getParameter(pname, props);
114
+ }
115
+ // Many resources support a getParameter call -
116
+ // getParameters will get all parameters - slow but useful for debugging
117
+ // eslint-disable-next-line complexity
118
+ getParameters(options = {}) {
119
+ const { parameters, keys } = options;
120
+ // Get parameter definitions for this Resource
121
+ // @ts-expect-error
122
+ const PARAMETERS = this.constructor.PARAMETERS || {};
123
+ const values = {};
124
+ // Query all parameters if no list provided
125
+ const parameterKeys = parameters || Object.keys(PARAMETERS);
126
+ // WEBGL limits
127
+ for (const pname of parameterKeys) {
128
+ const parameter = PARAMETERS[pname];
129
+ // Check if this parameter is available on this platform
130
+ const parameterAvailable = parameter &&
131
+ (!('extension' in parameter) || this.gl.getExtension(parameter.extension));
132
+ if (parameterAvailable) {
133
+ const key = keys ? this.device.getGLKey(pname) : pname;
134
+ values[key] = this.getParameter(pname, options);
135
+ if (keys && parameter.type === 'GLenum') {
136
+ values[key] = this.device.getGLKey(values[key]);
137
+ }
138
+ }
139
+ }
140
+ return values;
141
+ }
142
+ /**
143
+ * Update a Resource setting
144
+ *
145
+ * @todo - cache parameter to avoid issuing WebGL calls?
146
+ *
147
+ * @param pname - parameter (GL constant, value or key)
148
+ * @param value {GLint|GLfloat|GLenum}
149
+ * @return returns self to enable chaining
150
+ */
151
+ setParameter(pname, value) {
152
+ pname = getKeyValue(this.gl, pname);
153
+ assert(pname);
154
+ // @ts-expect-error
155
+ const parameters = this.constructor.PARAMETERS || {};
156
+ const parameter = parameters[pname];
157
+ if (parameter) {
158
+ // Check if this parameter is available on this platform
159
+ const parameterAvailable = (!('extension' in parameter) || this.gl.getExtension(parameter.extension));
160
+ if (!parameterAvailable) {
161
+ throw new Error('Parameter not available on this platform');
162
+ }
163
+ // Handle string keys
164
+ if (parameter.type === 'GLenum') {
165
+ // @ts-expect-error
166
+ value = getKeyValue(value);
167
+ }
168
+ }
169
+ // If unknown parameter - Could be a valid parameter not covered by PARAMS
170
+ // attempt to set it and let WebGL report errors
171
+ this._setParameter(pname, value);
172
+ return this;
173
+ }
174
+ /*
175
+ * Batch update resource parameters
176
+ * Assumes the subclass supports a setParameter call
177
+ */
178
+ setParameters(parameters) {
179
+ for (const pname in parameters) {
180
+ this.setParameter(pname, parameters[pname]);
181
+ }
182
+ return this;
183
+ }
184
+ // Install stubs for removed methods
185
+ stubRemovedMethods(className, version, methodNames) {
186
+ return stubRemovedMethods(this, className, version, methodNames);
187
+ }
188
+ // PUBLIC VIRTUAL METHODS
189
+ initialize(props) { }
190
+ // PROTECTED METHODS - These must be overridden by subclass
191
+ _createHandle() {
192
+ throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
193
+ }
194
+ _deleteHandle() {
195
+ throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
196
+ }
197
+ _bindHandle(handle) {
198
+ throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
199
+ }
200
+ _getOptsFromHandle() {
201
+ throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
202
+ }
203
+ _getParameter(pname, props) {
204
+ throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
205
+ }
206
+ _setParameter(pname, value) {
207
+ throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);
208
+ }
158
209
  }
159
- //# sourceMappingURL=webgl-resource.js.map
@@ -5,8 +5,7 @@ import { WebGLDevice } from '../webgl-device';
5
5
  /** WebGL Buffer interface */
6
6
  export declare class WEBGLBuffer extends Buffer {
7
7
  readonly device: WebGLDevice;
8
- readonly gl: WebGLRenderingContext;
9
- readonly gl2: WebGL2RenderingContext | null;
8
+ readonly gl: WebGL2RenderingContext;
10
9
  readonly handle: WebGLBuffer;
11
10
  /** Target in OpenGL defines the type of buffer */
12
11
  readonly glTarget: GL.ARRAY_BUFFER | GL.ELEMENT_ARRAY_BUFFER | GL.UNIFORM_BUFFER;
@@ -27,6 +26,6 @@ export declare class WEBGLBuffer extends Buffer {
27
26
  /** Asynchronously read data from the buffer */
28
27
  readAsync(byteOffset?: number, byteLength?: number): Promise<Uint8Array>;
29
28
  /** Synchronously read data from the buffer. WebGL only. */
30
- readSyncWebGL2(byteOffset?: number, byteLength?: number): Uint8Array;
29
+ readSyncWebGL(byteOffset?: number, byteLength?: number): Uint8Array;
31
30
  }
32
31
  //# sourceMappingURL=webgl-buffer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-buffer.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-buffer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,MAAM,EAAS,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AACtC,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAE5C,6BAA6B;AAC7B,qBAAa,WAAY,SAAQ,MAAM;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,qBAAqB,CAAC;IACnC,QAAQ,CAAC,GAAG,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,oBAAoB,GAAG,EAAE,CAAC,cAAc,CAAC;IACjF,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC;IACnD,yEAAyE;IACzE,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,YAAY,CAAqB;IAE9E,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;gBAEN,MAAM,EAAE,WAAW,EAAE,KAAK,GAAE,WAAgB;IA4BxD,sEAAsE;IACtE,aAAa,CACX,IAAI,EAAE,WAAW,GAAG,eAAe,EACnC,UAAU,GAAE,MAAU,EACtB,UAAU,GAAE,MAAqC,GAChD,IAAI;IAgBP,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IA2BpC,OAAO,IAAI,IAAI;IAWf,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,GAAE,MAAU,GAAG,IAAI;IAoBnE,+CAA+C;IAChC,SAAS,CAAC,UAAU,SAAI,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIlF,2DAA2D;IAClD,cAAc,CAAC,UAAU,SAAI,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU;CAiBzE"}
1
+ {"version":3,"file":"webgl-buffer.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-buffer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,MAAM,EAAS,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AACtC,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAE5C,6BAA6B;AAC7B,qBAAa,WAAY,SAAQ,MAAM;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,oBAAoB,GAAG,EAAE,CAAC,cAAc,CAAC;IACjF,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC;IACnD,yEAAyE;IACzE,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,cAAc,GAAG,EAAE,CAAC,YAAY,CAAqB;IAE9E,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;gBAEN,MAAM,EAAE,WAAW,EAAE,KAAK,GAAE,WAAgB;IA2BxD,sEAAsE;IACtE,aAAa,CACX,IAAI,EAAE,WAAW,GAAG,eAAe,EACnC,UAAU,GAAE,MAAU,EACtB,UAAU,GAAE,MAAqC,GAChD,IAAI;IAgBP,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IA2BpC,OAAO,IAAI,IAAI;IAWf,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,GAAE,MAAU,GAAG,IAAI;IAmBnE,+CAA+C;IAChC,SAAS,CAAC,UAAU,SAAI,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIlF,2DAA2D;IAClD,aAAa,CAAC,UAAU,SAAI,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU;CAexE"}