@luma.gl/core 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 (152) hide show
  1. package/dist/adapter/attribute-utils/get-attribute-from-layouts.js +140 -109
  2. package/dist/adapter/canvas-context.js +305 -233
  3. package/dist/adapter/device.d.ts +9 -11
  4. package/dist/adapter/device.d.ts.map +1 -1
  5. package/dist/adapter/device.js +114 -95
  6. package/dist/adapter/resources/buffer.d.ts +1 -1
  7. package/dist/adapter/resources/buffer.d.ts.map +1 -1
  8. package/dist/adapter/resources/buffer.js +65 -57
  9. package/dist/adapter/resources/command-buffer.js +13 -13
  10. package/dist/adapter/resources/command-encoder.js +17 -17
  11. package/dist/adapter/resources/compute-pass.js +10 -13
  12. package/dist/adapter/resources/compute-pipeline.js +19 -18
  13. package/dist/adapter/resources/external-texture.js +10 -15
  14. package/dist/adapter/resources/framebuffer.js +155 -94
  15. package/dist/adapter/resources/render-pass.js +28 -21
  16. package/dist/adapter/resources/render-pipeline.d.ts +3 -1
  17. package/dist/adapter/resources/render-pipeline.d.ts.map +1 -1
  18. package/dist/adapter/resources/render-pipeline.js +37 -34
  19. package/dist/adapter/resources/resource.js +131 -93
  20. package/dist/adapter/resources/sampler.js +24 -24
  21. package/dist/adapter/resources/shader.d.ts +2 -2
  22. package/dist/adapter/resources/shader.d.ts.map +1 -1
  23. package/dist/adapter/resources/shader.js +90 -78
  24. package/dist/adapter/resources/texture.js +49 -43
  25. package/dist/adapter/resources/transform-feedback.d.ts +2 -2
  26. package/dist/adapter/resources/transform-feedback.d.ts.map +1 -1
  27. package/dist/adapter/resources/transform-feedback.js +13 -15
  28. package/dist/adapter/resources/vertex-array.js +30 -22
  29. package/dist/adapter/type-utils/decode-attribute-type.js +56 -52
  30. package/dist/adapter/type-utils/decode-data-type.js +36 -35
  31. package/dist/adapter/type-utils/decode-shader-types.js +36 -97
  32. package/dist/adapter/type-utils/decode-texture-format.js +160 -93
  33. package/dist/adapter/type-utils/decode-vertex-format.js +28 -23
  34. package/dist/adapter/type-utils/vertex-format-from-attribute.js +69 -65
  35. package/dist/adapter/type-utils/wgsl-utils.js +14 -13
  36. package/dist/adapter/types/accessor.js +0 -1
  37. package/dist/adapter/types/buffer-layout.js +0 -1
  38. package/dist/adapter/types/parameters.js +31 -26
  39. package/dist/adapter/types/shader-layout.js +0 -1
  40. package/dist/adapter/types/shader-types.js +2 -1
  41. package/dist/adapter/types/texture-formats.d.ts +1 -1
  42. package/dist/adapter/types/texture-formats.d.ts.map +1 -1
  43. package/dist/adapter/types/texture-formats.js +2 -1
  44. package/dist/adapter/types/types.js +0 -1
  45. package/dist/adapter/types/vertex-formats.js +2 -1
  46. package/dist/dist.dev.js +453 -270
  47. package/dist/index.cjs +66 -168
  48. package/dist/index.cjs.map +7 -0
  49. package/dist/index.d.ts +1 -1
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +57 -46
  52. package/dist/init.js +29 -19
  53. package/dist/lib/compiler-log/compiler-message.js +2 -1
  54. package/dist/lib/compiler-log/format-compiler-log.js +66 -48
  55. package/dist/lib/compiler-log/get-shader-info.js +22 -19
  56. package/dist/lib/luma.d.ts.map +1 -1
  57. package/dist/lib/luma.js +60 -55
  58. package/dist/lib/uniforms/uniform-block.d.ts +0 -1
  59. package/dist/lib/uniforms/uniform-block.d.ts.map +1 -1
  60. package/dist/lib/uniforms/uniform-block.js +50 -43
  61. package/dist/lib/uniforms/uniform-buffer-layout.js +87 -70
  62. package/dist/lib/uniforms/uniform-store.js +112 -79
  63. package/dist/lib/uniforms/uniform.js +13 -16
  64. package/dist/types.js +1 -3
  65. package/dist/utils/array-equal.js +25 -23
  66. package/dist/utils/array-utils-flat.js +28 -28
  67. package/dist/utils/assert.js +5 -4
  68. package/dist/utils/cast.js +2 -2
  69. package/dist/utils/check-props.js +28 -27
  70. package/dist/utils/deep-equal.js +39 -32
  71. package/dist/utils/format-value.js +33 -39
  72. package/dist/utils/is-array.js +17 -6
  73. package/dist/utils/load-file.js +62 -37
  74. package/dist/utils/log.js +2 -4
  75. package/dist/utils/random.js +10 -9
  76. package/dist/utils/request-animation-frame.js +9 -3
  77. package/dist/utils/stats-manager.js +13 -14
  78. package/dist/utils/stub-methods.js +13 -13
  79. package/dist/utils/utils.d.ts +0 -6
  80. package/dist/utils/utils.d.ts.map +1 -1
  81. package/dist/utils/utils.js +20 -15
  82. package/dist.min.js +8 -23
  83. package/package.json +6 -6
  84. package/src/adapter/device.ts +38 -59
  85. package/src/adapter/resources/buffer.ts +1 -1
  86. package/src/adapter/resources/render-pipeline.ts +3 -1
  87. package/src/adapter/resources/shader.ts +2 -2
  88. package/src/adapter/resources/transform-feedback.ts +2 -2
  89. package/src/adapter/types/texture-formats.ts +1 -1
  90. package/src/index.ts +1 -1
  91. package/src/lib/luma.ts +0 -2
  92. package/src/lib/uniforms/uniform-block.ts +0 -1
  93. package/src/utils/utils.ts +0 -9
  94. package/dist/adapter/attribute-utils/get-attribute-from-layouts.js.map +0 -1
  95. package/dist/adapter/canvas-context.js.map +0 -1
  96. package/dist/adapter/device.js.map +0 -1
  97. package/dist/adapter/resources/buffer.js.map +0 -1
  98. package/dist/adapter/resources/command-buffer.js.map +0 -1
  99. package/dist/adapter/resources/command-encoder.js.map +0 -1
  100. package/dist/adapter/resources/compute-pass.js.map +0 -1
  101. package/dist/adapter/resources/compute-pipeline.js.map +0 -1
  102. package/dist/adapter/resources/external-texture.js.map +0 -1
  103. package/dist/adapter/resources/framebuffer.js.map +0 -1
  104. package/dist/adapter/resources/render-pass.js.map +0 -1
  105. package/dist/adapter/resources/render-pipeline.js.map +0 -1
  106. package/dist/adapter/resources/resource.js.map +0 -1
  107. package/dist/adapter/resources/sampler.js.map +0 -1
  108. package/dist/adapter/resources/shader.js.map +0 -1
  109. package/dist/adapter/resources/texture.js.map +0 -1
  110. package/dist/adapter/resources/transform-feedback.js.map +0 -1
  111. package/dist/adapter/resources/vertex-array.js.map +0 -1
  112. package/dist/adapter/type-utils/decode-attribute-type.js.map +0 -1
  113. package/dist/adapter/type-utils/decode-data-type.js.map +0 -1
  114. package/dist/adapter/type-utils/decode-shader-types.js.map +0 -1
  115. package/dist/adapter/type-utils/decode-texture-format.js.map +0 -1
  116. package/dist/adapter/type-utils/decode-vertex-format.js.map +0 -1
  117. package/dist/adapter/type-utils/vertex-format-from-attribute.js.map +0 -1
  118. package/dist/adapter/type-utils/wgsl-utils.js.map +0 -1
  119. package/dist/adapter/types/accessor.js.map +0 -1
  120. package/dist/adapter/types/buffer-layout.js.map +0 -1
  121. package/dist/adapter/types/parameters.js.map +0 -1
  122. package/dist/adapter/types/shader-layout.js.map +0 -1
  123. package/dist/adapter/types/shader-types.js.map +0 -1
  124. package/dist/adapter/types/texture-formats.js.map +0 -1
  125. package/dist/adapter/types/types.js.map +0 -1
  126. package/dist/adapter/types/vertex-formats.js.map +0 -1
  127. package/dist/index.js.map +0 -1
  128. package/dist/init.js.map +0 -1
  129. package/dist/lib/compiler-log/compiler-message.js.map +0 -1
  130. package/dist/lib/compiler-log/format-compiler-log.js.map +0 -1
  131. package/dist/lib/compiler-log/get-shader-info.js.map +0 -1
  132. package/dist/lib/luma.js.map +0 -1
  133. package/dist/lib/uniforms/uniform-block.js.map +0 -1
  134. package/dist/lib/uniforms/uniform-buffer-layout.js.map +0 -1
  135. package/dist/lib/uniforms/uniform-store.js.map +0 -1
  136. package/dist/lib/uniforms/uniform.js.map +0 -1
  137. package/dist/types.js.map +0 -1
  138. package/dist/utils/array-equal.js.map +0 -1
  139. package/dist/utils/array-utils-flat.js.map +0 -1
  140. package/dist/utils/assert.js.map +0 -1
  141. package/dist/utils/cast.js.map +0 -1
  142. package/dist/utils/check-props.js.map +0 -1
  143. package/dist/utils/deep-equal.js.map +0 -1
  144. package/dist/utils/format-value.js.map +0 -1
  145. package/dist/utils/is-array.js.map +0 -1
  146. package/dist/utils/load-file.js.map +0 -1
  147. package/dist/utils/log.js.map +0 -1
  148. package/dist/utils/random.js.map +0 -1
  149. package/dist/utils/request-animation-frame.js.map +0 -1
  150. package/dist/utils/stats-manager.js.map +0 -1
  151. package/dist/utils/stub-methods.js.map +0 -1
  152. package/dist/utils/utils.js.map +0 -1
@@ -1,130 +1,161 @@
1
- import { log } from "../../utils/log.js";
2
- import { decodeShaderAttributeType } from "../type-utils/decode-attribute-type.js";
3
- import { decodeVertexFormat } from "../type-utils/decode-vertex-format.js";
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+ import { log } from '../../utils/log';
4
+ import { decodeShaderAttributeType } from '../type-utils/decode-attribute-type';
5
+ import { decodeVertexFormat } from '../type-utils/decode-vertex-format';
6
+ /**
7
+ * Map from "attribute names" to "resolved attribute infos"
8
+ * containing information about both buffer layouts and shader attribute declarations
9
+ */
4
10
  export function getAttributeInfosFromLayouts(shaderLayout, bufferLayout) {
5
- const attributeInfos = {};
6
- for (const attribute of shaderLayout.attributes) {
7
- attributeInfos[attribute.name] = getAttributeInfoFromLayouts(shaderLayout, bufferLayout, attribute.name);
8
- }
9
- return attributeInfos;
11
+ const attributeInfos = {};
12
+ for (const attribute of shaderLayout.attributes) {
13
+ attributeInfos[attribute.name] = getAttributeInfoFromLayouts(shaderLayout, bufferLayout, attribute.name);
14
+ }
15
+ return attributeInfos;
10
16
  }
11
- export function getAttributeInfosByLocation(shaderLayout, bufferLayout) {
12
- let maxVertexAttributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 16;
13
- const attributeInfos = getAttributeInfosFromLayouts(shaderLayout, bufferLayout);
14
- const locationInfos = new Array(maxVertexAttributes).fill(null);
15
- for (const attributeInfo of Object.values(attributeInfos)) {
16
- locationInfos[attributeInfo.location] = attributeInfo;
17
- }
18
- return locationInfos;
17
+ /**
18
+ * Array indexed by "location" holding "resolved attribute infos"
19
+ */
20
+ export function getAttributeInfosByLocation(shaderLayout, bufferLayout, maxVertexAttributes = 16) {
21
+ const attributeInfos = getAttributeInfosFromLayouts(shaderLayout, bufferLayout);
22
+ const locationInfos = new Array(maxVertexAttributes).fill(null);
23
+ for (const attributeInfo of Object.values(attributeInfos)) {
24
+ locationInfos[attributeInfo.location] = attributeInfo;
25
+ }
26
+ return locationInfos;
19
27
  }
28
+ /**
29
+ * Get the combined information from a shader layout and a buffer layout for a specific attribute
30
+ */
20
31
  function getAttributeInfoFromLayouts(shaderLayout, bufferLayout, name) {
21
- const shaderDeclaration = getAttributeFromShaderLayout(shaderLayout, name);
22
- const bufferMapping = getAttributeFromBufferLayout(bufferLayout, name);
23
- if (!shaderDeclaration) {
24
- return null;
25
- }
26
- const attributeTypeInfo = decodeShaderAttributeType(shaderDeclaration.type);
27
- const vertexFormat = (bufferMapping === null || bufferMapping === void 0 ? void 0 : bufferMapping.vertexFormat) || attributeTypeInfo.defaultVertexFormat;
28
- const vertexFormatInfo = decodeVertexFormat(vertexFormat);
29
- return {
30
- attributeName: (bufferMapping === null || bufferMapping === void 0 ? void 0 : bufferMapping.attributeName) || shaderDeclaration.name,
31
- bufferName: (bufferMapping === null || bufferMapping === void 0 ? void 0 : bufferMapping.bufferName) || shaderDeclaration.name,
32
- location: shaderDeclaration.location,
33
- shaderType: shaderDeclaration.type,
34
- shaderDataType: attributeTypeInfo.dataType,
35
- shaderComponents: attributeTypeInfo.components,
36
- vertexFormat,
37
- bufferDataType: vertexFormatInfo.type,
38
- bufferComponents: vertexFormatInfo.components,
39
- normalized: vertexFormatInfo.normalized,
40
- integer: attributeTypeInfo.integer,
41
- stepMode: (bufferMapping === null || bufferMapping === void 0 ? void 0 : bufferMapping.stepMode) || shaderDeclaration.stepMode,
42
- byteOffset: (bufferMapping === null || bufferMapping === void 0 ? void 0 : bufferMapping.byteOffset) || 0,
43
- byteStride: (bufferMapping === null || bufferMapping === void 0 ? void 0 : bufferMapping.byteStride) || 0
44
- };
32
+ const shaderDeclaration = getAttributeFromShaderLayout(shaderLayout, name);
33
+ const bufferMapping = getAttributeFromBufferLayout(bufferLayout, name);
34
+ // TODO should no longer happen
35
+ if (!shaderDeclaration) {
36
+ // || !bufferMapping
37
+ return null;
38
+ }
39
+ const attributeTypeInfo = decodeShaderAttributeType(shaderDeclaration.type);
40
+ const vertexFormat = bufferMapping?.vertexFormat || attributeTypeInfo.defaultVertexFormat;
41
+ const vertexFormatInfo = decodeVertexFormat(vertexFormat);
42
+ return {
43
+ attributeName: bufferMapping?.attributeName || shaderDeclaration.name,
44
+ bufferName: bufferMapping?.bufferName || shaderDeclaration.name,
45
+ location: shaderDeclaration.location,
46
+ shaderType: shaderDeclaration.type,
47
+ shaderDataType: attributeTypeInfo.dataType,
48
+ shaderComponents: attributeTypeInfo.components,
49
+ vertexFormat,
50
+ bufferDataType: vertexFormatInfo.type,
51
+ bufferComponents: vertexFormatInfo.components,
52
+ // normalized is a property of the buffer's vertex format
53
+ normalized: vertexFormatInfo.normalized,
54
+ // integer is a property of the shader declaration
55
+ integer: attributeTypeInfo.integer,
56
+ stepMode: bufferMapping?.stepMode || shaderDeclaration.stepMode,
57
+ byteOffset: bufferMapping?.byteOffset || 0,
58
+ byteStride: bufferMapping?.byteStride || 0
59
+ };
45
60
  }
46
61
  function getAttributeFromShaderLayout(shaderLayout, name) {
47
- const attribute = shaderLayout.attributes.find(attr => attr.name === name);
48
- if (!attribute) {
49
- log.warn(`shader layout attribute "${name}" not present in shader`);
50
- }
51
- return attribute || null;
62
+ const attribute = shaderLayout.attributes.find(attr => attr.name === name);
63
+ if (!attribute) {
64
+ log.warn(`shader layout attribute "${name}" not present in shader`);
65
+ }
66
+ return attribute || null;
52
67
  }
53
68
  function getAttributeFromBufferLayout(bufferLayouts, name) {
54
- checkBufferLayouts(bufferLayouts);
55
- let bufferLayoutInfo = getAttributeFromShortHand(bufferLayouts, name);
56
- if (bufferLayoutInfo) {
57
- return bufferLayoutInfo;
58
- }
59
- bufferLayoutInfo = getAttributeFromAttributesList(bufferLayouts, name);
60
- if (bufferLayoutInfo) {
61
- return bufferLayoutInfo;
62
- }
63
- log.warn(`layout for attribute "${name}" not present in buffer layout`);
64
- return null;
69
+ // Check that bufferLayouts are valid (each either has format or attribute)
70
+ checkBufferLayouts(bufferLayouts);
71
+ let bufferLayoutInfo = getAttributeFromShortHand(bufferLayouts, name);
72
+ if (bufferLayoutInfo) {
73
+ return bufferLayoutInfo;
74
+ }
75
+ bufferLayoutInfo = getAttributeFromAttributesList(bufferLayouts, name);
76
+ if (bufferLayoutInfo) {
77
+ return bufferLayoutInfo;
78
+ }
79
+ // Didn't find...
80
+ log.warn(`layout for attribute "${name}" not present in buffer layout`);
81
+ return null;
65
82
  }
83
+ /** Check that bufferLayouts are valid (each either has format or attribute) */
66
84
  function checkBufferLayouts(bufferLayouts) {
67
- for (const bufferLayout of bufferLayouts) {
68
- if (bufferLayout.attributes && bufferLayout.format || !bufferLayout.attributes && !bufferLayout.format) {
69
- log.warn(`BufferLayout ${name} must have either 'attributes' or 'format' field`);
85
+ for (const bufferLayout of bufferLayouts) {
86
+ if ((bufferLayout.attributes && bufferLayout.format) ||
87
+ (!bufferLayout.attributes && !bufferLayout.format)) {
88
+ log.warn(`BufferLayout ${name} must have either 'attributes' or 'format' field`);
89
+ }
70
90
  }
71
- }
72
91
  }
92
+ /** Get attribute from format shorthand if specified */
73
93
  function getAttributeFromShortHand(bufferLayouts, name) {
74
- for (const bufferLayout of bufferLayouts) {
75
- if (bufferLayout.format && bufferLayout.name === name) {
76
- return {
77
- attributeName: bufferLayout.name,
78
- bufferName: name,
79
- stepMode: bufferLayout.stepMode,
80
- vertexFormat: bufferLayout.format,
81
- byteOffset: 0,
82
- byteStride: bufferLayout.byteStride || 0
83
- };
94
+ for (const bufferLayout of bufferLayouts) {
95
+ if (bufferLayout.format && bufferLayout.name === name) {
96
+ return {
97
+ attributeName: bufferLayout.name,
98
+ bufferName: name,
99
+ stepMode: bufferLayout.stepMode,
100
+ vertexFormat: bufferLayout.format,
101
+ // If offset is needed, use `attributes` field.
102
+ byteOffset: 0,
103
+ byteStride: bufferLayout.byteStride || 0
104
+ };
105
+ }
84
106
  }
85
- }
86
- return null;
107
+ return null;
87
108
  }
109
+ /**
110
+ * Search attribute mappings (e.g. interleaved attributes) for buffer mapping.
111
+ * Not the name of the buffer might be the same as one of the interleaved attributes.
112
+ */
88
113
  function getAttributeFromAttributesList(bufferLayouts, name) {
89
- for (const bufferLayout of bufferLayouts) {
90
- var _bufferLayout$attribu;
91
- let byteStride = bufferLayout.byteStride;
92
- if (typeof bufferLayout.byteStride !== 'number') {
93
- for (const attributeMapping of bufferLayout.attributes || []) {
94
- const info = decodeVertexFormat(attributeMapping.format);
95
- byteStride += info.byteLength;
96
- }
114
+ for (const bufferLayout of bufferLayouts) {
115
+ let byteStride = bufferLayout.byteStride;
116
+ // Calculate a default byte stride if not provided
117
+ if (typeof bufferLayout.byteStride !== 'number') {
118
+ for (const attributeMapping of bufferLayout.attributes || []) {
119
+ const info = decodeVertexFormat(attributeMapping.format);
120
+ byteStride += info.byteLength;
121
+ }
122
+ }
123
+ const attributeMapping = bufferLayout.attributes?.find(mapping => mapping.attribute === name);
124
+ if (attributeMapping) {
125
+ return {
126
+ attributeName: attributeMapping.attribute,
127
+ bufferName: bufferLayout.name,
128
+ stepMode: bufferLayout.stepMode,
129
+ vertexFormat: attributeMapping.format,
130
+ byteOffset: attributeMapping.byteOffset,
131
+ byteStride
132
+ };
133
+ }
97
134
  }
98
- const attributeMapping = (_bufferLayout$attribu = bufferLayout.attributes) === null || _bufferLayout$attribu === void 0 ? void 0 : _bufferLayout$attribu.find(mapping => mapping.attribute === name);
99
- if (attributeMapping) {
100
- return {
101
- attributeName: attributeMapping.attribute,
102
- bufferName: bufferLayout.name,
103
- stepMode: bufferLayout.stepMode,
104
- vertexFormat: attributeMapping.format,
105
- byteOffset: attributeMapping.byteOffset,
106
- byteStride
107
- };
108
- }
109
- }
110
- return null;
135
+ return null;
111
136
  }
137
+ /**
138
+ * Merges an provided shader layout into a base shader layout
139
+ * In WebGL, this allows the auto generated shader layout to be overridden by the application
140
+ * Typically to change the format of the vertex attributes (from float32x4 to uint8x4 etc).
141
+ * @todo Drop this? Aren't all use cases covered by mergeBufferLayout()?
142
+ */
112
143
  export function mergeShaderLayout(baseLayout, overrideLayout) {
113
- const mergedLayout = {
114
- ...baseLayout,
115
- attributes: baseLayout.attributes.map(attribute => ({
116
- ...attribute
117
- }))
118
- };
119
- for (const attribute of (overrideLayout === null || overrideLayout === void 0 ? void 0 : overrideLayout.attributes) || []) {
120
- const baseAttribute = mergedLayout.attributes.find(attr => attr.name === attribute.name);
121
- if (!baseAttribute) {
122
- log.warn(`shader layout attribute ${attribute.name} not present in shader`);
123
- } else {
124
- baseAttribute.type = attribute.type || baseAttribute.type;
125
- baseAttribute.stepMode = attribute.stepMode || baseAttribute.stepMode;
144
+ // Deep clone the base layout
145
+ const mergedLayout = {
146
+ ...baseLayout,
147
+ attributes: baseLayout.attributes.map(attribute => ({ ...attribute }))
148
+ };
149
+ // Merge the attributes
150
+ for (const attribute of overrideLayout?.attributes || []) {
151
+ const baseAttribute = mergedLayout.attributes.find(attr => attr.name === attribute.name);
152
+ if (!baseAttribute) {
153
+ log.warn(`shader layout attribute ${attribute.name} not present in shader`);
154
+ }
155
+ else {
156
+ baseAttribute.type = attribute.type || baseAttribute.type;
157
+ baseAttribute.stepMode = attribute.stepMode || baseAttribute.stepMode;
158
+ }
126
159
  }
127
- }
128
- return mergedLayout;
160
+ return mergedLayout;
129
161
  }
130
- //# sourceMappingURL=get-attribute-from-layouts.js.map