@luma.gl/webgl 8.6.0-alpha.2 → 8.6.0-alpha.3

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 (280) hide show
  1. package/LICENSE +8 -1
  2. package/dist/adapter/converters/set-device-parameters.d.ts +5 -0
  3. package/dist/adapter/converters/set-device-parameters.d.ts.map +1 -0
  4. package/dist/adapter/converters/set-device-parameters.js +124 -0
  5. package/dist/adapter/converters/set-device-parameters.js.map +1 -0
  6. package/dist/adapter/converters/webgpu-texture-formats.d.ts +281 -0
  7. package/dist/adapter/converters/webgpu-texture-formats.d.ts.map +1 -0
  8. package/dist/adapter/converters/webgpu-texture-formats.js +285 -0
  9. package/dist/adapter/converters/webgpu-texture-formats.js.map +1 -0
  10. package/dist/{device → adapter/device-helpers}/device-features.d.ts +0 -0
  11. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -0
  12. package/dist/{esm/device → adapter/device-helpers}/device-features.js +2 -2
  13. package/dist/adapter/device-helpers/device-features.js.map +1 -0
  14. package/dist/{device → adapter/device-helpers}/device-limits.d.ts +0 -0
  15. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -0
  16. package/dist/{esm/device → adapter/device-helpers}/device-limits.js +1 -1
  17. package/dist/adapter/device-helpers/device-limits.js.map +1 -0
  18. package/dist/{device → adapter/device-helpers}/get-device-info.d.ts +0 -0
  19. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -0
  20. package/dist/{device → adapter/device-helpers}/get-device-info.js +1 -1
  21. package/dist/adapter/device-helpers/get-device-info.js.map +1 -0
  22. package/dist/{webgl-utils → adapter/device-helpers}/is-old-ie.d.ts +0 -0
  23. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +1 -0
  24. package/dist/{esm/webgl-utils → adapter/device-helpers}/is-old-ie.js +0 -0
  25. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -0
  26. package/dist/{device → adapter}/webgl-device.d.ts +3 -3
  27. package/dist/adapter/webgl-device.d.ts.map +1 -0
  28. package/dist/{esm/device → adapter}/webgl-device.js +6 -6
  29. package/dist/adapter/webgl-device.js.map +1 -0
  30. package/dist/adapter/webgl-shader.d.ts +18 -0
  31. package/dist/adapter/webgl-shader.d.ts.map +1 -0
  32. package/dist/adapter/webgl-shader.js +82 -0
  33. package/dist/adapter/webgl-shader.js.map +1 -0
  34. package/dist/classes/framebuffer.js +1 -1
  35. package/dist/classes/framebuffer.js.map +1 -1
  36. package/dist/classes/program-configuration.d.ts +14 -17
  37. package/dist/classes/program-configuration.d.ts.map +1 -1
  38. package/dist/classes/program-configuration.js +10 -97
  39. package/dist/classes/program-configuration.js.map +1 -1
  40. package/dist/classes/program.d.ts +20 -15
  41. package/dist/classes/program.d.ts.map +1 -1
  42. package/dist/classes/program.js +31 -22
  43. package/dist/classes/program.js.map +1 -1
  44. package/dist/classes/query.js +1 -1
  45. package/dist/classes/query.js.map +1 -1
  46. package/dist/classes/renderbuffer.js +1 -1
  47. package/dist/classes/renderbuffer.js.map +1 -1
  48. package/dist/classes/{webgl-shader.d.ts → shader.d.ts} +4 -15
  49. package/dist/classes/shader.d.ts.map +1 -0
  50. package/dist/{esm/classes/webgl-shader.js → classes/shader.js} +6 -81
  51. package/dist/classes/shader.js.map +1 -0
  52. package/dist/classes/texture-3d.js +1 -1
  53. package/dist/classes/texture-3d.js.map +1 -1
  54. package/dist/classes/texture-cube.js.map +1 -1
  55. package/dist/classes/texture.d.ts +1 -1
  56. package/dist/classes/texture.d.ts.map +1 -1
  57. package/dist/classes/texture.js +1 -1
  58. package/dist/classes/texture.js.map +1 -1
  59. package/dist/classes/transform-feedback.js +1 -1
  60. package/dist/classes/transform-feedback.js.map +1 -1
  61. package/dist/classes/vertex-array-object.d.ts +6 -5
  62. package/dist/classes/vertex-array-object.d.ts.map +1 -1
  63. package/dist/classes/vertex-array-object.js +5 -5
  64. package/dist/classes/vertex-array-object.js.map +1 -1
  65. package/dist/classes/vertex-array.d.ts +13 -13
  66. package/dist/classes/vertex-array.d.ts.map +1 -1
  67. package/dist/classes/vertex-array.js +2 -2
  68. package/dist/classes/vertex-array.js.map +1 -1
  69. package/dist/classes/webgl-buffer.d.ts +1 -1
  70. package/dist/classes/webgl-buffer.d.ts.map +1 -1
  71. package/dist/classes/webgl-buffer.js +1 -1
  72. package/dist/classes/webgl-buffer.js.map +1 -1
  73. package/dist/classes/webgl-resource.d.ts +1 -1
  74. package/dist/classes/webgl-resource.d.ts.map +1 -1
  75. package/dist/classes/webgl-resource.js +1 -1
  76. package/dist/classes/webgl-resource.js.map +1 -1
  77. package/dist/context/parameters/unified-parameter-api.d.ts +2 -1
  78. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  79. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  80. package/dist/context/parameters/webgl-parameters.d.ts.map +1 -1
  81. package/dist/context/parameters/webgl-parameters.js.map +1 -1
  82. package/dist/es5/adapter/converters/set-device-parameters.js +138 -0
  83. package/dist/es5/adapter/converters/set-device-parameters.js.map +1 -0
  84. package/dist/es5/adapter/converters/webgpu-texture-formats.js +296 -0
  85. package/dist/es5/adapter/converters/webgpu-texture-formats.js.map +1 -0
  86. package/dist/es5/{device → adapter/device-helpers}/device-features.js +2 -2
  87. package/dist/es5/adapter/device-helpers/device-features.js.map +1 -0
  88. package/dist/es5/{device → adapter/device-helpers}/device-limits.js +1 -1
  89. package/dist/es5/adapter/device-helpers/device-limits.js.map +1 -0
  90. package/dist/es5/{device → adapter/device-helpers}/get-device-info.js +1 -1
  91. package/dist/es5/adapter/device-helpers/get-device-info.js.map +1 -0
  92. package/dist/es5/{webgl-utils → adapter/device-helpers}/is-old-ie.js +0 -0
  93. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +1 -0
  94. package/dist/es5/{device → adapter}/webgl-device.js +6 -6
  95. package/dist/es5/adapter/webgl-device.js.map +1 -0
  96. package/dist/es5/adapter/webgl-shader.js +155 -0
  97. package/dist/es5/adapter/webgl-shader.js.map +1 -0
  98. package/dist/es5/classes/framebuffer.js +1 -1
  99. package/dist/es5/classes/framebuffer.js.map +1 -1
  100. package/dist/es5/classes/program-configuration.js +34 -101
  101. package/dist/es5/classes/program-configuration.js.map +1 -1
  102. package/dist/es5/classes/program.js +38 -27
  103. package/dist/es5/classes/program.js.map +1 -1
  104. package/dist/es5/classes/query.js +1 -1
  105. package/dist/es5/classes/query.js.map +1 -1
  106. package/dist/es5/classes/renderbuffer.js +1 -1
  107. package/dist/es5/classes/renderbuffer.js.map +1 -1
  108. package/dist/es5/classes/{webgl-shader.js → shader.js} +18 -132
  109. package/dist/es5/classes/shader.js.map +1 -0
  110. package/dist/es5/classes/texture-3d.js +1 -1
  111. package/dist/es5/classes/texture-3d.js.map +1 -1
  112. package/dist/es5/classes/texture-cube.js.map +1 -1
  113. package/dist/es5/classes/texture.js +1 -1
  114. package/dist/es5/classes/texture.js.map +1 -1
  115. package/dist/es5/classes/transform-feedback.js +1 -1
  116. package/dist/es5/classes/transform-feedback.js.map +1 -1
  117. package/dist/es5/classes/vertex-array-object.js +5 -5
  118. package/dist/es5/classes/vertex-array-object.js.map +1 -1
  119. package/dist/es5/classes/vertex-array.js +5 -5
  120. package/dist/es5/classes/vertex-array.js.map +1 -1
  121. package/dist/es5/classes/webgl-buffer.js +1 -1
  122. package/dist/es5/classes/webgl-buffer.js.map +1 -1
  123. package/dist/es5/classes/webgl-resource.js +1 -1
  124. package/dist/es5/classes/webgl-resource.js.map +1 -1
  125. package/dist/es5/context/parameters/unified-parameter-api.js.map +1 -1
  126. package/dist/es5/context/parameters/webgl-parameters.js.map +1 -1
  127. package/dist/es5/helpers/get-program-bindings.js +274 -0
  128. package/dist/es5/helpers/get-program-bindings.js.map +1 -0
  129. package/dist/es5/helpers/program-bindings.js +2 -0
  130. package/dist/es5/helpers/program-bindings.js.map +1 -0
  131. package/dist/es5/index.js +31 -15
  132. package/dist/es5/index.js.map +1 -1
  133. package/dist/es5/init.js +1 -1
  134. package/dist/es5/init.js.map +1 -1
  135. package/dist/es5/types/accessor.d.ts +29 -0
  136. package/dist/esm/adapter/converters/set-device-parameters.js +124 -0
  137. package/dist/esm/adapter/converters/set-device-parameters.js.map +1 -0
  138. package/dist/esm/adapter/converters/webgpu-texture-formats.js +285 -0
  139. package/dist/esm/adapter/converters/webgpu-texture-formats.js.map +1 -0
  140. package/dist/{device → esm/adapter/device-helpers}/device-features.js +2 -2
  141. package/dist/esm/adapter/device-helpers/device-features.js.map +1 -0
  142. package/dist/{device → esm/adapter/device-helpers}/device-limits.js +1 -1
  143. package/dist/esm/adapter/device-helpers/device-limits.js.map +1 -0
  144. package/dist/esm/{device → adapter/device-helpers}/get-device-info.js +1 -1
  145. package/dist/esm/adapter/device-helpers/get-device-info.js.map +1 -0
  146. package/dist/{webgl-utils → esm/adapter/device-helpers}/is-old-ie.js +0 -0
  147. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +1 -0
  148. package/dist/{device → esm/adapter}/webgl-device.js +6 -6
  149. package/dist/esm/adapter/webgl-device.js.map +1 -0
  150. package/dist/esm/adapter/webgl-shader.js +82 -0
  151. package/dist/esm/adapter/webgl-shader.js.map +1 -0
  152. package/dist/esm/classes/framebuffer.js +1 -1
  153. package/dist/esm/classes/framebuffer.js.map +1 -1
  154. package/dist/esm/classes/program-configuration.js +10 -97
  155. package/dist/esm/classes/program-configuration.js.map +1 -1
  156. package/dist/esm/classes/program.js +31 -22
  157. package/dist/esm/classes/program.js.map +1 -1
  158. package/dist/esm/classes/query.js +1 -1
  159. package/dist/esm/classes/query.js.map +1 -1
  160. package/dist/esm/classes/renderbuffer.js +1 -1
  161. package/dist/esm/classes/renderbuffer.js.map +1 -1
  162. package/dist/{classes/webgl-shader.js → esm/classes/shader.js} +6 -81
  163. package/dist/esm/classes/shader.js.map +1 -0
  164. package/dist/esm/classes/texture-3d.js +1 -1
  165. package/dist/esm/classes/texture-3d.js.map +1 -1
  166. package/dist/esm/classes/texture-cube.js.map +1 -1
  167. package/dist/esm/classes/texture.js +1 -1
  168. package/dist/esm/classes/texture.js.map +1 -1
  169. package/dist/esm/classes/transform-feedback.js +1 -1
  170. package/dist/esm/classes/transform-feedback.js.map +1 -1
  171. package/dist/esm/classes/vertex-array-object.js +5 -5
  172. package/dist/esm/classes/vertex-array-object.js.map +1 -1
  173. package/dist/esm/classes/vertex-array.js +2 -2
  174. package/dist/esm/classes/vertex-array.js.map +1 -1
  175. package/dist/esm/classes/webgl-buffer.js +1 -1
  176. package/dist/esm/classes/webgl-buffer.js.map +1 -1
  177. package/dist/esm/classes/webgl-resource.js +1 -1
  178. package/dist/esm/classes/webgl-resource.js.map +1 -1
  179. package/dist/esm/context/parameters/unified-parameter-api.js.map +1 -1
  180. package/dist/esm/context/parameters/webgl-parameters.js.map +1 -1
  181. package/dist/esm/helpers/get-program-bindings.js +228 -0
  182. package/dist/esm/helpers/get-program-bindings.js.map +1 -0
  183. package/dist/esm/helpers/program-bindings.js +2 -0
  184. package/dist/esm/helpers/program-bindings.js.map +1 -0
  185. package/dist/esm/index.js +4 -2
  186. package/dist/esm/index.js.map +1 -1
  187. package/dist/esm/init.js +1 -1
  188. package/dist/esm/init.js.map +1 -1
  189. package/dist/esm/types/accessor.d.ts +29 -0
  190. package/dist/helpers/get-program-bindings.d.ts +8 -0
  191. package/dist/helpers/get-program-bindings.d.ts.map +1 -0
  192. package/dist/helpers/get-program-bindings.js +228 -0
  193. package/dist/helpers/get-program-bindings.js.map +1 -0
  194. package/dist/helpers/program-bindings.d.ts +41 -0
  195. package/dist/helpers/program-bindings.d.ts.map +1 -0
  196. package/dist/helpers/program-bindings.js +2 -0
  197. package/dist/helpers/program-bindings.js.map +1 -0
  198. package/dist/index.d.ts +6 -4
  199. package/dist/index.d.ts.map +1 -1
  200. package/dist/index.js +4 -2
  201. package/dist/index.js.map +1 -1
  202. package/dist/init.js +1 -1
  203. package/dist/init.js.map +1 -1
  204. package/dist/types/accessor.d.ts +29 -0
  205. package/package.json +5 -5
  206. package/src/adapter/converters/set-device-parameters.ts +182 -0
  207. package/src/adapter/converters/webgpu-texture-formats.ts +167 -0
  208. package/src/{device → adapter/device-helpers}/device-features.ts +4 -4
  209. package/src/{device → adapter/device-helpers}/device-limits.ts +1 -1
  210. package/src/{device → adapter/device-helpers}/get-device-info.ts +2 -2
  211. package/src/{webgl-utils → adapter/device-helpers}/is-old-ie.ts +0 -0
  212. package/src/{device → adapter}/webgl-device.ts +9 -9
  213. package/src/adapter/webgl-shader.ts +84 -0
  214. package/src/classes/framebuffer.ts +1 -1
  215. package/src/classes/program-configuration.ts +28 -81
  216. package/src/classes/program.ts +70 -62
  217. package/src/classes/query.ts +1 -1
  218. package/src/classes/renderbuffer.ts +1 -1
  219. package/src/classes/{webgl-shader.ts → shader.ts} +6 -79
  220. package/src/classes/texture-3d.ts +1 -1
  221. package/src/classes/texture-cube.ts +1 -1
  222. package/src/classes/texture.ts +1 -1
  223. package/src/classes/transform-feedback.ts +1 -1
  224. package/src/classes/vertex-array-object.ts +9 -8
  225. package/src/classes/vertex-array.ts +14 -8
  226. package/src/classes/webgl-buffer.ts +1 -1
  227. package/src/classes/webgl-resource.ts +1 -1
  228. package/src/context/parameters/unified-parameter-api.ts +3 -2
  229. package/src/context/parameters/webgl-parameters.ts +115 -115
  230. package/src/helpers/get-program-bindings.ts +244 -0
  231. package/src/helpers/program-bindings.ts +46 -0
  232. package/src/index.ts +12 -6
  233. package/src/init.ts +1 -1
  234. package/src/types/accessor.d.ts +29 -0
  235. package/dist/api/device2.d.ts +0 -52
  236. package/dist/api/device2.d.ts.map +0 -1
  237. package/dist/api/device2.js +0 -23
  238. package/dist/api/device2.js.map +0 -1
  239. package/dist/classes/webgl-shader.d.ts.map +0 -1
  240. package/dist/classes/webgl-shader.js.map +0 -1
  241. package/dist/device/check-glsl-extension.d.ts +0 -4
  242. package/dist/device/check-glsl-extension.d.ts.map +0 -1
  243. package/dist/device/check-glsl-extension.js +0 -22
  244. package/dist/device/check-glsl-extension.js.map +0 -1
  245. package/dist/device/device-features.d.ts.map +0 -1
  246. package/dist/device/device-features.js.map +0 -1
  247. package/dist/device/device-limits.d.ts.map +0 -1
  248. package/dist/device/device-limits.js.map +0 -1
  249. package/dist/device/get-device-info.d.ts.map +0 -1
  250. package/dist/device/get-device-info.js.map +0 -1
  251. package/dist/device/webgl-device.d.ts.map +0 -1
  252. package/dist/device/webgl-device.js.map +0 -1
  253. package/dist/es5/api/device2.js +0 -42
  254. package/dist/es5/api/device2.js.map +0 -1
  255. package/dist/es5/classes/webgl-shader.js.map +0 -1
  256. package/dist/es5/device/check-glsl-extension.js +0 -33
  257. package/dist/es5/device/check-glsl-extension.js.map +0 -1
  258. package/dist/es5/device/device-features.js.map +0 -1
  259. package/dist/es5/device/device-limits.js.map +0 -1
  260. package/dist/es5/device/get-device-info.js.map +0 -1
  261. package/dist/es5/device/webgl-device.js.map +0 -1
  262. package/dist/es5/webgl-utils/is-old-ie.js.map +0 -1
  263. package/dist/es5/webgl-utils/webgl-info.ts.disabled +0 -135
  264. package/dist/esm/api/device2.js +0 -23
  265. package/dist/esm/api/device2.js.map +0 -1
  266. package/dist/esm/classes/webgl-shader.js.map +0 -1
  267. package/dist/esm/device/check-glsl-extension.js +0 -22
  268. package/dist/esm/device/check-glsl-extension.js.map +0 -1
  269. package/dist/esm/device/device-features.js.map +0 -1
  270. package/dist/esm/device/device-limits.js.map +0 -1
  271. package/dist/esm/device/get-device-info.js.map +0 -1
  272. package/dist/esm/device/webgl-device.js.map +0 -1
  273. package/dist/esm/webgl-utils/is-old-ie.js.map +0 -1
  274. package/dist/esm/webgl-utils/webgl-info.ts.disabled +0 -135
  275. package/dist/webgl-utils/is-old-ie.d.ts.map +0 -1
  276. package/dist/webgl-utils/is-old-ie.js.map +0 -1
  277. package/dist/webgl-utils/webgl-info.ts.disabled +0 -135
  278. package/src/api/device2.ts +0 -71
  279. package/src/device/check-glsl-extension.ts +0 -44
  280. package/src/webgl-utils/webgl-info.ts.disabled +0 -135
@@ -59,139 +59,139 @@ type GL_STENCIL_OP =
59
59
  GL.INVERT;
60
60
 
61
61
  export type GLValueParameters = {
62
- [GL.BLEND]?: boolean;
63
- [GL.BLEND_COLOR]?: [number, number, number, number] | NumberArray;
64
- [GL.BLEND_EQUATION_RGB]?: GL_BLEND_EQUATION;
65
- [GL.BLEND_EQUATION_ALPHA]?: GL_BLEND_EQUATION;
66
- [GL.BLEND_SRC_RGB]?: GL_BLEND_FUNCTION;
67
- [GL.BLEND_DST_RGB]?: GL_BLEND_FUNCTION;
68
- [GL.BLEND_SRC_ALPHA]?: GL_BLEND_FUNCTION;
69
- [GL.BLEND_DST_ALPHA]?: GL_BLEND_FUNCTION;
70
- [GL.COLOR_CLEAR_VALUE]?: [number, number, number, number] | NumberArray;
71
- [GL.COLOR_WRITEMASK]?: [boolean, boolean, boolean, boolean] | boolean[];
72
- [GL.CULL_FACE]?: boolean;
73
- [GL.CULL_FACE_MODE]?: GL.FRONT | GL.BACK | GL.FRONT_AND_BACK;
74
- [GL.DEPTH_TEST]?: boolean;
75
- [GL.DEPTH_CLEAR_VALUE]?: number;
76
- [GL.DEPTH_FUNC]?: GL_FUNCTION;
77
- [GL.DEPTH_RANGE]?: [number, number] | NumberArray;
78
- [GL.DEPTH_WRITEMASK]?: boolean;
79
- [GL.DITHER]?: boolean;
80
- [GL.FRAGMENT_SHADER_DERIVATIVE_HINT]?: GL.FASTEST | GL.NICEST | GL.DONT_CARE;
81
- [GL.CURRENT_PROGRAM]?: WebGLProgram | null,
82
- [GL.FRAMEBUFFER_BINDING]?: WebGLFramebuffer | null;
83
- [GL.RENDERBUFFER_BINDING]?: WebGLRenderbuffer | null,
84
- [GL.TRANSFORM_FEEDBACK_BINDING]?: WebGLTransformFeedback | null,
85
- [GL.VERTEX_ARRAY_BINDING]?: WebGLVertexArrayObject | null,
86
- [GL.ARRAY_BUFFER_BINDING]?: WebGLBuffer | null,
87
- [GL.COPY_READ_BUFFER_BINDING]?: WebGLBuffer | null,
88
- [GL.COPY_WRITE_BUFFER_BINDING]?: WebGLBuffer | null,
89
- [GL.PIXEL_PACK_BUFFER_BINDING]?: WebGLBuffer | null,
90
- [GL.PIXEL_UNPACK_BUFFER_BINDING]?: WebGLBuffer | null,
91
- [GL.TEXTURE_BINDING_2D]?: WebGLTexture | null,
92
- [GL.TEXTURE_BINDING_2D_ARRAY]?: WebGLTexture | null,
93
- [GL.TEXTURE_BINDING_3D]?: WebGLTexture | null,
94
- [GL.TEXTURE_BINDING_CUBE_MAP]?: WebGLTexture | null,
95
- [GL.FRONT_FACE]?: GL.CW | GL.CCW;
96
- [GL.GENERATE_MIPMAP_HINT]?: GL.FASTEST | GL.NICEST | GL.DONT_CARE;
97
- [GL.LINE_WIDTH]?: number;
98
- [GL.POLYGON_OFFSET_FILL]?: boolean;
99
- [GL.POLYGON_OFFSET_FACTOR]?: number;
100
- [GL.POLYGON_OFFSET_UNITS]?: number;
101
- [GL.SAMPLE_ALPHA_TO_COVERAGE]?: boolean,
102
- [GL.SAMPLE_COVERAGE]?: boolean,
103
- [GL.RASTERIZER_DISCARD]?: boolean;
104
- [GL.SAMPLE_COVERAGE_VALUE]?: number;
105
- [GL.SAMPLE_COVERAGE_INVERT]?: boolean;
106
- [GL.SCISSOR_TEST]?: boolean;
107
- [GL.SCISSOR_BOX]?: [number, number, number, number] | NumberArray;
108
- [GL.STENCIL_TEST]?: boolean;
109
- [GL.STENCIL_CLEAR_VALUE]?: number;
110
- [GL.STENCIL_WRITEMASK]?: number;
111
- [GL.STENCIL_BACK_WRITEMASK]?: number;
112
- [GL.STENCIL_FUNC]?: GL_FUNCTION;
113
- [GL.STENCIL_REF]?: GL_FUNCTION;
114
- [GL.STENCIL_VALUE_MASK]?: GL_FUNCTION;
115
- [GL.STENCIL_BACK_FUNC]?: GL_FUNCTION;
116
- [GL.STENCIL_BACK_REF]?: GL_FUNCTION;
117
- [GL.STENCIL_BACK_VALUE_MASK]?: GL_FUNCTION;
118
- [GL.STENCIL_FAIL]?: GL_STENCIL_OP;
119
- [GL.STENCIL_PASS_DEPTH_FAIL]?: GL_STENCIL_OP;
120
- [GL.STENCIL_PASS_DEPTH_PASS]?: GL_STENCIL_OP;
121
- [GL.STENCIL_BACK_FAIL]?: GL_STENCIL_OP;
122
- [GL.STENCIL_BACK_PASS_DEPTH_FAIL]?: GL_STENCIL_OP;
123
- [GL.STENCIL_BACK_PASS_DEPTH_PASS]?: GL_STENCIL_OP;
124
- [GL.VIEWPORT]?: [number, number, number, number] | NumberArray;
125
-
126
- // WEBGL1 PIXEL PACK/UNPACK MODES
127
- [GL.PACK_ALIGNMENT]?: number;
128
- [GL.UNPACK_ALIGNMENT]?: number;
129
- [GL.UNPACK_FLIP_Y_WEBGL]?: boolean;
130
- [GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]?: boolean;
131
- [GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]?: GL.NONE | GL.BROWSER_DEFAULT_WEBGL;
132
-
133
- // WEBGL2 PIXEL PACK/UNPACK MODES
134
- // RASTERIZER_DISCARD ...
135
- [GL.PACK_ROW_LENGTH]?: number;
136
- [GL.PACK_SKIP_PIXELS]?: number;
137
- [GL.PACK_SKIP_ROWS]?: number;
138
- [GL.READ_FRAMEBUFFER_BINDING]?: Framebuffer | null;
139
- [GL.UNPACK_ROW_LENGTH]?: number;
140
- [GL.UNPACK_IMAGE_HEIGHT]?: number;
141
- [GL.UNPACK_SKIP_PIXELS]?: number;
142
- [GL.UNPACK_SKIP_ROWS]?: number;
143
- [GL.UNPACK_SKIP_IMAGES]?: number;
62
+ [GL.BLEND]?: boolean;
63
+ [GL.BLEND_COLOR]?: [number, number, number, number] | NumberArray;
64
+ [GL.BLEND_EQUATION_RGB]?: GL_BLEND_EQUATION;
65
+ [GL.BLEND_EQUATION_ALPHA]?: GL_BLEND_EQUATION;
66
+ [GL.BLEND_SRC_RGB]?: GL_BLEND_FUNCTION;
67
+ [GL.BLEND_DST_RGB]?: GL_BLEND_FUNCTION;
68
+ [GL.BLEND_SRC_ALPHA]?: GL_BLEND_FUNCTION;
69
+ [GL.BLEND_DST_ALPHA]?: GL_BLEND_FUNCTION;
70
+ [GL.COLOR_CLEAR_VALUE]?: [number, number, number, number] | NumberArray;
71
+ [GL.COLOR_WRITEMASK]?: [boolean, boolean, boolean, boolean] | boolean[];
72
+ [GL.CULL_FACE]?: boolean;
73
+ [GL.CULL_FACE_MODE]?: GL.FRONT | GL.BACK | GL.FRONT_AND_BACK;
74
+ [GL.DEPTH_TEST]?: boolean;
75
+ [GL.DEPTH_CLEAR_VALUE]?: number;
76
+ [GL.DEPTH_FUNC]?: GL_FUNCTION;
77
+ [GL.DEPTH_RANGE]?: [number, number] | NumberArray;
78
+ [GL.DEPTH_WRITEMASK]?: boolean;
79
+ [GL.DITHER]?: boolean;
80
+ [GL.FRAGMENT_SHADER_DERIVATIVE_HINT]?: GL.FASTEST | GL.NICEST | GL.DONT_CARE;
81
+ [GL.CURRENT_PROGRAM]?: WebGLProgram | null,
82
+ [GL.FRAMEBUFFER_BINDING]?: WebGLFramebuffer | null;
83
+ [GL.RENDERBUFFER_BINDING]?: WebGLRenderbuffer | null,
84
+ [GL.TRANSFORM_FEEDBACK_BINDING]?: WebGLTransformFeedback | null,
85
+ [GL.VERTEX_ARRAY_BINDING]?: WebGLVertexArrayObject | null,
86
+ [GL.ARRAY_BUFFER_BINDING]?: WebGLBuffer | null,
87
+ [GL.COPY_READ_BUFFER_BINDING]?: WebGLBuffer | null,
88
+ [GL.COPY_WRITE_BUFFER_BINDING]?: WebGLBuffer | null,
89
+ [GL.PIXEL_PACK_BUFFER_BINDING]?: WebGLBuffer | null,
90
+ [GL.PIXEL_UNPACK_BUFFER_BINDING]?: WebGLBuffer | null,
91
+ [GL.TEXTURE_BINDING_2D]?: WebGLTexture | null,
92
+ [GL.TEXTURE_BINDING_2D_ARRAY]?: WebGLTexture | null,
93
+ [GL.TEXTURE_BINDING_3D]?: WebGLTexture | null,
94
+ [GL.TEXTURE_BINDING_CUBE_MAP]?: WebGLTexture | null,
95
+ [GL.FRONT_FACE]?: GL.CW | GL.CCW;
96
+ [GL.GENERATE_MIPMAP_HINT]?: GL.FASTEST | GL.NICEST | GL.DONT_CARE;
97
+ [GL.LINE_WIDTH]?: number;
98
+ [GL.POLYGON_OFFSET_FILL]?: boolean;
99
+ [GL.POLYGON_OFFSET_FACTOR]?: number;
100
+ [GL.POLYGON_OFFSET_UNITS]?: number;
101
+ [GL.SAMPLE_ALPHA_TO_COVERAGE]?: boolean,
102
+ [GL.SAMPLE_COVERAGE]?: boolean,
103
+ [GL.RASTERIZER_DISCARD]?: boolean;
104
+ [GL.SAMPLE_COVERAGE_VALUE]?: number;
105
+ [GL.SAMPLE_COVERAGE_INVERT]?: boolean;
106
+ [GL.SCISSOR_TEST]?: boolean;
107
+ [GL.SCISSOR_BOX]?: [number, number, number, number] | NumberArray;
108
+ [GL.STENCIL_TEST]?: boolean;
109
+ [GL.STENCIL_CLEAR_VALUE]?: number;
110
+ [GL.STENCIL_WRITEMASK]?: number;
111
+ [GL.STENCIL_BACK_WRITEMASK]?: number;
112
+ [GL.STENCIL_FUNC]?: GL_FUNCTION;
113
+ [GL.STENCIL_REF]?: GL_FUNCTION;
114
+ [GL.STENCIL_VALUE_MASK]?: GL_FUNCTION;
115
+ [GL.STENCIL_BACK_FUNC]?: GL_FUNCTION;
116
+ [GL.STENCIL_BACK_REF]?: GL_FUNCTION;
117
+ [GL.STENCIL_BACK_VALUE_MASK]?: GL_FUNCTION;
118
+ [GL.STENCIL_FAIL]?: GL_STENCIL_OP;
119
+ [GL.STENCIL_PASS_DEPTH_FAIL]?: GL_STENCIL_OP;
120
+ [GL.STENCIL_PASS_DEPTH_PASS]?: GL_STENCIL_OP;
121
+ [GL.STENCIL_BACK_FAIL]?: GL_STENCIL_OP;
122
+ [GL.STENCIL_BACK_PASS_DEPTH_FAIL]?: GL_STENCIL_OP;
123
+ [GL.STENCIL_BACK_PASS_DEPTH_PASS]?: GL_STENCIL_OP;
124
+ [GL.VIEWPORT]?: [number, number, number, number] | NumberArray;
125
+
126
+ // WEBGL1 PIXEL PACK/UNPACK MODES
127
+ [GL.PACK_ALIGNMENT]?: number;
128
+ [GL.UNPACK_ALIGNMENT]?: number;
129
+ [GL.UNPACK_FLIP_Y_WEBGL]?: boolean;
130
+ [GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]?: boolean;
131
+ [GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]?: GL.NONE | GL.BROWSER_DEFAULT_WEBGL;
132
+
133
+ // WEBGL2 PIXEL PACK/UNPACK MODES
134
+ // RASTERIZER_DISCARD ...
135
+ [GL.PACK_ROW_LENGTH]?: number;
136
+ [GL.PACK_SKIP_PIXELS]?: number;
137
+ [GL.PACK_SKIP_ROWS]?: number;
138
+ [GL.READ_FRAMEBUFFER_BINDING]?: Framebuffer | null;
139
+ [GL.UNPACK_ROW_LENGTH]?: number;
140
+ [GL.UNPACK_IMAGE_HEIGHT]?: number;
141
+ [GL.UNPACK_SKIP_PIXELS]?: number;
142
+ [GL.UNPACK_SKIP_ROWS]?: number;
143
+ [GL.UNPACK_SKIP_IMAGES]?: number;
144
144
  };
145
145
 
146
146
  export type GLFunctionStyleParameters = {
147
- // Function-style setters
148
- framebuffer?: Framebuffer | null;
149
- blend?: boolean;
150
- blendColor?: [number, number, number, number] | NumberArray;
151
- blendEquation?: GL_BLEND_EQUATION | [GL_BLEND_EQUATION, GL_BLEND_EQUATION];
152
- blendFunc?:
147
+ // Function-style setters
148
+ framebuffer?: Framebuffer | null;
149
+ blend?: boolean;
150
+ blendColor?: [number, number, number, number] | NumberArray;
151
+ blendEquation?: GL_BLEND_EQUATION | [GL_BLEND_EQUATION, GL_BLEND_EQUATION];
152
+ blendFunc?:
153
153
  [GL_BLEND_FUNCTION, GL_BLEND_FUNCTION] |
154
154
  [GL_BLEND_FUNCTION, GL_BLEND_FUNCTION, GL_BLEND_FUNCTION, GL_BLEND_FUNCTION];
155
155
 
156
- clearColor?: [number, number, number, number] | NumberArray;
157
- clearDepth?: number;
158
- clearStencil?: number;
156
+ clearColor?: [number, number, number, number] | NumberArray;
157
+ clearDepth?: number;
158
+ clearStencil?: number;
159
159
 
160
- colorMask?: [boolean, boolean, boolean, boolean];
160
+ colorMask?: [boolean, boolean, boolean, boolean];
161
161
 
162
- cull?: boolean;
163
- cullFace?: GL.FRONT | GL.BACK | GL.FRONT_AND_BACK;
162
+ cull?: boolean;
163
+ cullFace?: GL.FRONT | GL.BACK | GL.FRONT_AND_BACK;
164
164
 
165
- depthTest?: boolean;
166
- depthFunc?: GL_FUNCTION;
167
- depthMask?: boolean;
168
- depthRange?: [number, number] | NumberArray;
165
+ depthTest?: boolean;
166
+ depthFunc?: GL_FUNCTION;
167
+ depthMask?: boolean;
168
+ depthRange?: [number, number] | NumberArray;
169
169
 
170
- dither?: boolean;
170
+ dither?: boolean;
171
171
 
172
- derivativeHint?: GL.FASTEST | GL.NICEST | GL.DONT_CARE;
172
+ derivativeHint?: GL.FASTEST | GL.NICEST | GL.DONT_CARE;
173
173
 
174
- frontFace?: GL.CW | GL.CCW;
174
+ frontFace?: GL.CW | GL.CCW;
175
175
 
176
- mipmapHint?: GL.FASTEST | GL.NICEST | GL.DONT_CARE;
176
+ mipmapHint?: GL.FASTEST | GL.NICEST | GL.DONT_CARE;
177
177
 
178
- lineWidth?: number;
178
+ lineWidth?: number;
179
179
 
180
- polygonOffsetFill?: boolean;
181
- polygonOffset?: [number, number];
180
+ polygonOffsetFill?: boolean;
181
+ polygonOffset?: [number, number];
182
182
 
183
- sampleCoverage?: [number, boolean];
183
+ sampleCoverage?: [number, boolean];
184
184
 
185
- scissorTest?: boolean;
186
- scissor?: [number, number, number, number] | NumberArray;
185
+ scissorTest?: boolean;
186
+ scissor?: [number, number, number, number] | NumberArray;
187
187
 
188
- stencilTest?: boolean;
189
- stencilMask?: number | [number, number];
190
- stencilFunc?: [GL_FUNCTION, number, number] | [GL_FUNCTION, number, number, GL_FUNCTION, number, number];
191
- stencilOp?:
188
+ stencilTest?: boolean;
189
+ stencilMask?: number | [number, number];
190
+ stencilFunc?: [GL_FUNCTION, number, number] | [GL_FUNCTION, number, number, GL_FUNCTION, number, number];
191
+ stencilOp?:
192
192
  [GL_STENCIL_OP, GL_STENCIL_OP, GL_STENCIL_OP] |
193
193
  [GL_STENCIL_OP, GL_STENCIL_OP, GL_STENCIL_OP, GL_STENCIL_OP, GL_STENCIL_OP, GL_STENCIL_OP];
194
- viewport?: [number, number, number, number] | NumberArray;
195
- };
194
+ viewport?: [number, number, number, number] | NumberArray;
195
+ };
196
196
 
197
- export type GLParameters = GLValueParameters | GLFunctionStyleParameters;
197
+ export type GLParameters = GLValueParameters | GLFunctionStyleParameters;
@@ -0,0 +1,244 @@
1
+ import GL from '@luma.gl/constants';
2
+ import {isWebGL2} from '../context/context/webgl-checks';
3
+ import {ProgramBindings, AttributeBinding, UniformBinding, UniformBlockBinding, VaryingBinding} from './program-bindings'
4
+ import Accessor from '../classes/accessor';
5
+ import {decomposeCompositeGLType} from '../webgl-utils/attribute-utils';
6
+
7
+ /**
8
+ * Extract metadata describing binding information for a program's shaders
9
+ * Note: `linkProgram()` needs to have been called
10
+ * (although linking does not need to have been successful).
11
+ */
12
+ export function getProgramBindings(gl: WebGL2RenderingContext, program: WebGLProgram): ProgramBindings {
13
+ const config: ProgramBindings = {
14
+ attributes: readAttributeBindings(gl, program),
15
+ uniforms: readUniformBindings(gl, program),
16
+ uniformBlocks: readUniformBlocks(gl, program),
17
+ varyings: readVaryings(gl, program)
18
+ };
19
+
20
+ Object.seal(config);
21
+ return config;
22
+ // generateWebGPUStyleBindings(bindings);
23
+ }
24
+
25
+
26
+ /**
27
+ * Extract info about all transform feedback varyings
28
+ *
29
+ * linkProgram needs to have been called, although linking does not need to have been successful
30
+ */
31
+ function readAttributeBindings(gl: WebGL2RenderingContext, program: WebGLProgram): AttributeBinding[] {
32
+ const attributes: AttributeBinding[] = [];
33
+
34
+ const count = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);
35
+
36
+ for (let index = 0; index < count; index++) {
37
+ const {name, type: compositeType, size} = gl.getActiveAttrib(program, index);
38
+ const location = gl.getAttribLocation(program, name);
39
+ // Add only user provided attributes, for built-in attributes like
40
+ // `gl_InstanceID` locaiton will be < 0
41
+ if (location >= 0) {
42
+ const {type, components} = decomposeCompositeGLType(compositeType);
43
+ const accessor = {type, size: size * components};
44
+ inferProperties(location, name, accessor);
45
+
46
+ const attributeInfo = {location, name, accessor: new Accessor(accessor)}; // Base values
47
+ attributes.push(attributeInfo);
48
+ }
49
+ }
50
+
51
+ attributes.sort((a, b) => a.location - b.location);
52
+ return attributes;
53
+ }
54
+
55
+ /**
56
+ * Extract info about all transform feedback varyings
57
+ *
58
+ * linkProgram needs to have been called, although linking does not need to have been successful
59
+ */
60
+ function readVaryings(gl: WebGL2RenderingContext, program: WebGLProgram): VaryingBinding[] {
61
+ if (!isWebGL2(gl)) {
62
+ return [];
63
+ }
64
+
65
+ const varyings = [];
66
+
67
+ const count = gl.getProgramParameter(program, gl.TRANSFORM_FEEDBACK_VARYINGS);
68
+ for (let location = 0; location < count; location++) {
69
+ const {name, type: compositeType, size} = gl.getTransformFeedbackVarying(program, location);
70
+ const {type, components} = decomposeCompositeGLType(compositeType);
71
+ const accessor = new Accessor({type, size: size * components});
72
+ const varying = {location, name, accessor}; // Base values
73
+ varyings.push(varying);
74
+ }
75
+
76
+ varyings.sort((a, b) => a.location - b.location);
77
+ return varyings;
78
+ }
79
+
80
+ /**
81
+ * Extract info about all uniforms
82
+ *
83
+ * Query uniform locations and build name to setter map.
84
+ */
85
+ function readUniformBindings(gl: WebGL2RenderingContext, program: WebGLProgram): UniformBinding[] {
86
+ const uniforms: UniformBinding[] = [];
87
+
88
+ const uniformCount = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);
89
+ for (let i = 0; i < uniformCount; i++) {
90
+ const {name: rawName, size, type} = gl.getActiveUniform(program, i);
91
+ const {name, isArray} = parseUniformName(rawName);
92
+ let webglLocation = gl.getUniformLocation(program, name);
93
+ const uniformInfo = {
94
+ // WebGL locations are uniquely typed but just numbers
95
+ location: webglLocation as number,
96
+ name,
97
+ size,
98
+ type,
99
+ isArray
100
+ };
101
+ uniforms.push(uniformInfo);
102
+
103
+ // Array (e.g. matrix) uniforms can occupy several 4x4 byte banks
104
+ if (uniformInfo.size > 1) {
105
+ for (let j = 0; j < uniformInfo.size; j++) {
106
+ const elementName = `${name}[${j}]`;
107
+
108
+ webglLocation = gl.getUniformLocation(program, elementName);
109
+
110
+ const arrayElementUniformInfo = {
111
+ ...uniformInfo,
112
+ name: elementName,
113
+ location: webglLocation as number
114
+ };
115
+
116
+ uniforms.push(arrayElementUniformInfo);
117
+ }
118
+ }
119
+ }
120
+ return uniforms;
121
+ }
122
+
123
+ /**
124
+ * Extract info about all "active" uniform blocks
125
+ *
126
+ * ("Active" just means that unused (aka inactive) blocks may have been
127
+ * optimized away during linking)
128
+ */
129
+ function readUniformBlocks(gl: WebGL2RenderingContext, program: WebGLProgram): UniformBlockBinding[] {
130
+ const getBlockParameter = (blockIndex, pname) => gl.getActiveUniformBlockParameter(program, blockIndex, pname);
131
+
132
+ const uniformBlocks: UniformBlockBinding[] = [];
133
+
134
+ const blockCount = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);
135
+ for (let blockIndex = 0; blockIndex < blockCount; blockIndex++) {
136
+
137
+ const blockInfo = {
138
+ name: gl.getActiveUniformBlockName(program, blockIndex),
139
+ location: getBlockParameter(blockIndex, gl.UNIFORM_BLOCK_BINDING),
140
+ byteLength: getBlockParameter(blockIndex, gl.UNIFORM_BLOCK_DATA_SIZE),
141
+ vertex: getBlockParameter(blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),
142
+ fragment: getBlockParameter(blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),
143
+ uniformCount: getBlockParameter(blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORMS),
144
+ uniformIndices: getBlockParameter(blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES),
145
+ uniforms: []
146
+ }
147
+
148
+ for (let uniformIndex = 0; uniformIndex < blockInfo.uniformCount; ++uniformIndex) {
149
+ // TODO - Can we extract more?
150
+ }
151
+
152
+ uniformBlocks.push(blockInfo);
153
+ }
154
+
155
+ uniformBlocks.sort((a, b) => a.location - b.location);
156
+ return uniformBlocks;
157
+ }
158
+
159
+ const SAMPLER_UNIFORMS_GL_TO_GPU = {
160
+ [GL.SAMPLER_2D]: ['2d', 'float'],
161
+ [GL.SAMPLER_CUBE]: ['cube', 'float'],
162
+ [GL.SAMPLER_3D]: ['3d', 'float'],
163
+ [GL.SAMPLER_2D_SHADOW]: ['3d', 'depth'],
164
+ [GL.SAMPLER_2D_ARRAY]: ['2d-array', 'float'],
165
+ [GL.SAMPLER_2D_ARRAY_SHADOW]: ['2d-array', 'depth'],
166
+ [GL.SAMPLER_CUBE_SHADOW]: ['cube', 'float'],
167
+ [GL.INT_SAMPLER_2D]: ['2d', 'sint'],
168
+ [GL.INT_SAMPLER_3D]: ['3d', 'sint'],
169
+ [GL.INT_SAMPLER_CUBE]: ['cube', 'sint'],
170
+ [GL.INT_SAMPLER_2D_ARRAY]: ['2d-array', 'sint'],
171
+ [GL.UNSIGNED_INT_SAMPLER_2D]: ['2d', 'sint'],
172
+ [GL.UNSIGNED_INT_SAMPLER_3D]: ['3d', 'sint'],
173
+ [GL.UNSIGNED_INT_SAMPLER_CUBE]: ['cube', 'sint'],
174
+ [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: ['2d-array', 'sint']
175
+ };
176
+
177
+ /**
178
+ * Generate a list of "WebGPU-style" bindings for this program
179
+ */
180
+ function generateWebGPUStyleBindings(config: ProgramBindings) {
181
+ const bindings: any = [];
182
+
183
+ // Uniform blocks
184
+ for (const blockInfo of config.uniformBlocks) {
185
+ bindings.push({
186
+ binding: blockInfo.location,
187
+ visibility: (blockInfo.vertex ? 0x1 : 0) & (blockInfo.fragment ? 0x2 : 0),
188
+ buffer: {
189
+ type: 'uniform',
190
+ // minBindingSize: blockInfo.size
191
+ }
192
+ })
193
+ }
194
+
195
+ // Sampler uniforms
196
+ for (const uniformInfo of config.uniforms) {
197
+ let sampler = SAMPLER_UNIFORMS_GL_TO_GPU[uniformInfo.type];
198
+ if (sampler) {
199
+ const [viewDimension, sampleType] = sampler;
200
+ bindings.push({
201
+ binding: uniformInfo.location,
202
+ visibility: 0, // Not available in WebGL on individual uniforms?
203
+ texture: {
204
+ viewDimension,
205
+ sampleType
206
+ }
207
+ });
208
+ }
209
+ }
210
+ }
211
+
212
+ // HELPERS
213
+
214
+ function parseUniformName(name) {
215
+ // Shortcut to avoid redundant or bad matches
216
+ if (name[name.length - 1] !== ']'){
217
+ return {
218
+ name,
219
+ length: 1,
220
+ isArray: false
221
+ };
222
+ }
223
+
224
+ // if array name then clean the array brackets
225
+ const UNIFORM_NAME_REGEXP = /([^[]*)(\[[0-9]+\])?/;
226
+ const matches = name.match(UNIFORM_NAME_REGEXP);
227
+ if (!matches || matches.length < 2) {
228
+ throw new Error(`Failed to parse GLSL uniform name ${name}`);
229
+ }
230
+
231
+ return {
232
+ name: matches[1],
233
+ length: matches[2] || 1,
234
+ isArray: Boolean(matches[2])
235
+ };
236
+ }
237
+
238
+ // Extract additional attribute metadata from shader names (based on attribute naming conventions)
239
+ function inferProperties(accessor, location, name) {
240
+ if (/instance/i.test(name)) {
241
+ // Any attribute containing the word "instance" will be assumed to be instanced
242
+ accessor.divisor = 1;
243
+ }
244
+ }
@@ -0,0 +1,46 @@
1
+ import {Accessor} from '../types/accessor';
2
+
3
+ /** Describes an attribute binding for a program */
4
+ export type AttributeBinding = {
5
+ location: number;
6
+ name: string;
7
+ accessor: Accessor;
8
+ }
9
+
10
+ /** Describes a varying binding for a program */
11
+ export type VaryingBinding = {
12
+ location: number;
13
+ name: string;
14
+ accessor: Accessor;
15
+ }
16
+
17
+ /** Describes a uniform block binding for a program */
18
+ export type UniformBlockBinding = {
19
+ location: number;
20
+ name: string;
21
+ byteLength: number;
22
+ vertex: boolean;
23
+ fragment: boolean;
24
+ uniformCount: number;
25
+ uniformIndices: number[];
26
+ }
27
+
28
+ /** Describes a uniform (sampler etc) binding for a program */
29
+ export type UniformBinding = {
30
+ location: number;
31
+ name: string;
32
+ size: number;
33
+ type: number;
34
+ isArray: boolean;
35
+ }
36
+
37
+ /**
38
+ * Holds metadata describing attribute configurations for a program's shaders
39
+ */
40
+ export type ProgramBindings = {
41
+ readonly attributes: AttributeBinding[];
42
+ readonly varyings: VaryingBinding[];
43
+ readonly uniformBlocks: UniformBlockBinding[];
44
+ // Note - samplers are always in unform bindings, even if uniform blocks are used
45
+ readonly uniforms: UniformBinding[];
46
+ }
package/src/index.ts CHANGED
@@ -8,8 +8,8 @@
8
8
  import './init';
9
9
 
10
10
  // export type {WebGLDeviceProps, WebGLDeviceInfo, WebGPUDeviceLimits} from './lib/webgl-device';
11
- export type {WebGLDeviceProps} from './device/webgl-device';
12
- export {default as WebGLDevice, getWebGLDevice} from './device/webgl-device';
11
+ export type {WebGLDeviceProps} from './adapter/webgl-device';
12
+ export {default as WebGLDevice, getWebGLDevice} from './adapter/webgl-device';
13
13
 
14
14
  // UTILS
15
15
  export {requestAnimationFrame, cancelAnimationFrame} from './webgl-utils/request-animation-frame';
@@ -29,8 +29,6 @@ export {default as Texture2D} from './classes/texture-2d';
29
29
  export type {TextureCubeProps} from './classes/texture-cube';
30
30
  export {default as TextureCube} from './classes/texture-cube';
31
31
 
32
- export type {ShaderProps} from './classes/webgl-shader';
33
- export {Shader, VertexShader, FragmentShader} from './classes/webgl-shader';
34
32
  export type {ProgramProps} from './classes/program';
35
33
  export {default as Program} from './classes/program';
36
34
  export type {FramebufferProps} from './classes/framebuffer';
@@ -38,6 +36,10 @@ export {default as Framebuffer} from './classes/framebuffer';
38
36
  export type {RenderbufferProps} from './classes/renderbuffer';
39
37
  export {default as Renderbuffer} from './classes/renderbuffer';
40
38
 
39
+ // Classic luma.gl classes (For backwards compatibility)
40
+ export type {ShaderProps} from './classes/shader';
41
+ export {Shader, VertexShader, FragmentShader} from './classes/shader';
42
+
41
43
  export {clear, clearBuffer} from './classes/clear';
42
44
 
43
45
  // Copy and Blit
@@ -63,6 +65,8 @@ export type {VertexArrayProps} from './classes/vertex-array';
63
65
  export {default as VertexArray} from './classes/vertex-array';
64
66
  export {default as UniformBufferLayout} from './classes/uniform-buffer-layout';
65
67
 
68
+ export {setDeviceParameters} from './adapter/converters/set-device-parameters';
69
+
66
70
  // experimental WebGL exports
67
71
 
68
72
  // UTILS
@@ -113,7 +117,6 @@ export {lumaStats} from './init';
113
117
  export {log, assert, uid, isObjectEmpty} from '@luma.gl/api';
114
118
  export {setPathPrefix, loadFile, loadImage} from '@luma.gl/api';
115
119
 
116
-
117
120
  // export {
118
121
  // getContextInfo, getGLContextInfo, getContextLimits,
119
122
  // FEATURES,
@@ -121,7 +124,10 @@ export {setPathPrefix, loadFile, loadImage} from '@luma.gl/api';
121
124
  // canCompileGLGSExtension
122
125
  // } from '@luma.gl/gltools';
123
126
 
124
- // REMOVED in v8.6
127
+ // HELPERS - EXPERIMENTAL
128
+ export {getProgramBindings} from './helpers/get-program-bindings';
129
+
130
+ // REMOVED in v8.7
125
131
  // getShaderInfo,
126
132
  // getShaderName
127
133
  // getShaderVersion
package/src/init.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import {log} from '@luma.gl/api';
2
2
  import {isBrowser} from '@probe.gl/env';
3
3
  import {luma, lumaStats} from '@luma.gl/api';
4
- import WebGLDevice from './device/webgl-device';
4
+ import WebGLDevice from './adapter/webgl-device';
5
5
 
6
6
  // Version detection using babel plugin
7
7
  // @ts-expect-error
@@ -0,0 +1,29 @@
1
+ // ACCESSORS
2
+
3
+ /**
4
+ * Attribute descriptor object
5
+ */
6
+ export type Accessor = {
7
+ format?: string;
8
+ offset?: number;
9
+ location?: number;
10
+
11
+ // can now be described with single WebGPU-style `format` string
12
+ type?: number;
13
+ size?: number;
14
+ normalized?: boolean;
15
+ integer?: boolean;
16
+
17
+ // deprecated - now shared between accessors in the surrounding BufferAccessor object
18
+ stride?: number;
19
+ divisor?: number;
20
+ };
21
+
22
+ /**
23
+ * List of attribute descriptors for one interleaved buffer
24
+ */
25
+ export type BufferAccessors = {
26
+ stride?: number;
27
+ stepMode?: 'vertex' | 'instance';
28
+ attributes: Accessor[];
29
+ }