@luma.gl/webgl 9.0.0-alpha.5 → 9.0.0-alpha.7

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 (236) hide show
  1. package/dist/adapter/converters/device-parameters.d.ts +11 -1
  2. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  3. package/dist/adapter/converters/device-parameters.js +15 -2
  4. package/dist/adapter/converters/device-parameters.js.map +1 -1
  5. package/dist/adapter/converters/sampler-parameters.d.ts +4 -4
  6. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  7. package/dist/adapter/converters/sampler-parameters.js +21 -2
  8. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  9. package/dist/adapter/converters/texture-formats.js +3 -3
  10. package/dist/adapter/converters/texture-formats.js.map +1 -1
  11. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  12. package/dist/adapter/device-helpers/device-features.js +12 -2
  13. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  14. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  15. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  16. package/dist/adapter/helpers/get-shader-layout.js +40 -16
  17. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  18. package/dist/adapter/helpers/uniforms.d.ts +1 -1
  19. package/dist/adapter/helpers/uniforms.d.ts.map +1 -1
  20. package/dist/adapter/helpers/uniforms.js +4 -4
  21. package/dist/adapter/helpers/uniforms.js.map +1 -1
  22. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +1 -1
  23. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
  24. package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  25. package/dist/adapter/resources/webgl-buffer.d.ts +1 -1
  26. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  27. package/dist/adapter/resources/webgl-buffer.js +2 -2
  28. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  29. package/dist/adapter/resources/webgl-framebuffer.d.ts +2 -1
  30. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  31. package/dist/adapter/resources/webgl-framebuffer.js +5 -3
  32. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  33. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  34. package/dist/adapter/resources/webgl-render-pass.js +2 -0
  35. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  36. package/dist/adapter/resources/webgl-render-pipeline.d.ts +1 -1
  37. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  38. package/dist/adapter/resources/webgl-render-pipeline.js +40 -24
  39. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  40. package/dist/adapter/resources/webgl-sampler.d.ts +2 -2
  41. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  42. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  43. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  44. package/dist/adapter/resources/webgl-shader.js +4 -3
  45. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  46. package/dist/adapter/resources/webgl-texture.d.ts +19 -19
  47. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  48. package/dist/adapter/resources/webgl-texture.js +14 -13
  49. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  50. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  51. package/dist/adapter/webgl-canvas-context.js +1 -1
  52. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  53. package/dist/adapter/webgl-device.d.ts.map +1 -1
  54. package/dist/adapter/webgl-device.js +13 -4
  55. package/dist/adapter/webgl-device.js.map +1 -1
  56. package/dist/classic/buffer.js +14 -6
  57. package/dist/classic/buffer.js.map +1 -1
  58. package/dist/classic/typed-array-utils.d.ts +1 -1
  59. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  60. package/dist/classic/typed-array-utils.js.map +1 -1
  61. package/dist/context/context/{create-context.d.ts → create-browser-context.d.ts} +1 -1
  62. package/dist/context/context/create-browser-context.d.ts.map +1 -0
  63. package/dist/context/context/{create-context.js → create-browser-context.js} +9 -3
  64. package/dist/context/context/create-browser-context.js.map +1 -0
  65. package/dist/context/context/create-headless-context.d.ts +9 -0
  66. package/dist/context/context/create-headless-context.d.ts.map +1 -0
  67. package/dist/context/context/create-headless-context.js +43 -0
  68. package/dist/context/context/create-headless-context.js.map +1 -0
  69. package/dist/context/context/device-pixels.d.ts.map +1 -1
  70. package/dist/context/context/device-pixels.js +13 -8
  71. package/dist/context/context/device-pixels.js.map +1 -1
  72. package/dist/context/debug/spector.js +1 -1
  73. package/dist/context/debug/spector.js.map +1 -1
  74. package/dist/context/debug/webgl-developer-tools.js +1 -1
  75. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  76. package/dist/context/parameters/unified-parameter-api.d.ts +5 -4
  77. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  78. package/dist/context/parameters/unified-parameter-api.js +1 -3
  79. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  80. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  81. package/dist/context/polyfill/polyfill-table.d.ts +1 -1
  82. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  83. package/dist/context/polyfill/polyfill-table.js +1 -1
  84. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  85. package/dist/context/state-tracker/track-context-state.js +1 -1
  86. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  87. package/dist/es5/adapter/converters/device-parameters.js +17 -2
  88. package/dist/es5/adapter/converters/device-parameters.js.map +1 -1
  89. package/dist/es5/adapter/converters/sampler-parameters.js +21 -2
  90. package/dist/es5/adapter/converters/sampler-parameters.js.map +1 -1
  91. package/dist/es5/adapter/converters/texture-formats.js +3 -3
  92. package/dist/es5/adapter/converters/texture-formats.js.map +1 -1
  93. package/dist/es5/adapter/device-helpers/device-features.js +15 -4
  94. package/dist/es5/adapter/device-helpers/device-features.js.map +1 -1
  95. package/dist/es5/adapter/device-helpers/device-limits.js.map +1 -1
  96. package/dist/es5/adapter/helpers/get-shader-layout.js +48 -28
  97. package/dist/es5/adapter/helpers/get-shader-layout.js.map +1 -1
  98. package/dist/es5/adapter/helpers/uniforms.js +4 -4
  99. package/dist/es5/adapter/helpers/uniforms.js.map +1 -1
  100. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  101. package/dist/es5/adapter/resources/webgl-buffer.js +2 -2
  102. package/dist/es5/adapter/resources/webgl-buffer.js.map +1 -1
  103. package/dist/es5/adapter/resources/webgl-framebuffer.js +4 -3
  104. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +1 -1
  105. package/dist/es5/adapter/resources/webgl-render-pass.js +1 -0
  106. package/dist/es5/adapter/resources/webgl-render-pass.js.map +1 -1
  107. package/dist/es5/adapter/resources/webgl-render-pipeline.js +43 -30
  108. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +1 -1
  109. package/dist/es5/adapter/resources/webgl-sampler.js.map +1 -1
  110. package/dist/es5/adapter/resources/webgl-shader.js +4 -3
  111. package/dist/es5/adapter/resources/webgl-shader.js.map +1 -1
  112. package/dist/es5/adapter/resources/webgl-texture.js +16 -16
  113. package/dist/es5/adapter/resources/webgl-texture.js.map +1 -1
  114. package/dist/es5/adapter/webgl-canvas-context.js +1 -1
  115. package/dist/es5/adapter/webgl-canvas-context.js.map +1 -1
  116. package/dist/es5/adapter/webgl-device.js +14 -4
  117. package/dist/es5/adapter/webgl-device.js.map +1 -1
  118. package/dist/es5/classic/buffer.js +14 -6
  119. package/dist/es5/classic/buffer.js.map +1 -1
  120. package/dist/es5/classic/typed-array-utils.js.map +1 -1
  121. package/dist/es5/context/context/{create-context.js → create-browser-context.js} +9 -3
  122. package/dist/es5/context/context/create-browser-context.js.map +1 -0
  123. package/dist/es5/context/context/create-headless-context.js +60 -0
  124. package/dist/es5/context/context/create-headless-context.js.map +1 -0
  125. package/dist/es5/context/context/device-pixels.js +14 -8
  126. package/dist/es5/context/context/device-pixels.js.map +1 -1
  127. package/dist/es5/context/debug/spector.js +1 -1
  128. package/dist/es5/context/debug/spector.js.map +1 -1
  129. package/dist/es5/context/debug/webgl-developer-tools.js +1 -1
  130. package/dist/es5/context/debug/webgl-developer-tools.js.map +1 -1
  131. package/dist/es5/context/parameters/unified-parameter-api.js +2 -2
  132. package/dist/es5/context/parameters/unified-parameter-api.js.map +1 -1
  133. package/dist/es5/context/polyfill/polyfill-context.js.map +1 -1
  134. package/dist/es5/context/polyfill/polyfill-table.js +1 -1
  135. package/dist/es5/context/polyfill/polyfill-table.js.map +1 -1
  136. package/dist/es5/context/state-tracker/track-context-state.js +1 -1
  137. package/dist/es5/context/state-tracker/track-context-state.js.map +1 -1
  138. package/dist/es5/index.js +30 -16
  139. package/dist/es5/index.js.map +1 -1
  140. package/dist/es5/types/webgl.js.map +1 -1
  141. package/dist/esm/adapter/converters/device-parameters.js +15 -2
  142. package/dist/esm/adapter/converters/device-parameters.js.map +1 -1
  143. package/dist/esm/adapter/converters/sampler-parameters.js +21 -2
  144. package/dist/esm/adapter/converters/sampler-parameters.js.map +1 -1
  145. package/dist/esm/adapter/converters/texture-formats.js +3 -3
  146. package/dist/esm/adapter/converters/texture-formats.js.map +1 -1
  147. package/dist/esm/adapter/device-helpers/device-features.js +12 -2
  148. package/dist/esm/adapter/device-helpers/device-features.js.map +1 -1
  149. package/dist/esm/adapter/device-helpers/device-limits.js.map +1 -1
  150. package/dist/esm/adapter/helpers/get-shader-layout.js +40 -16
  151. package/dist/esm/adapter/helpers/get-shader-layout.js.map +1 -1
  152. package/dist/esm/adapter/helpers/uniforms.js +4 -4
  153. package/dist/esm/adapter/helpers/uniforms.js.map +1 -1
  154. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  155. package/dist/esm/adapter/resources/webgl-buffer.js +2 -2
  156. package/dist/esm/adapter/resources/webgl-buffer.js.map +1 -1
  157. package/dist/esm/adapter/resources/webgl-framebuffer.js +5 -3
  158. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +1 -1
  159. package/dist/esm/adapter/resources/webgl-render-pass.js +2 -0
  160. package/dist/esm/adapter/resources/webgl-render-pass.js.map +1 -1
  161. package/dist/esm/adapter/resources/webgl-render-pipeline.js +40 -24
  162. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +1 -1
  163. package/dist/esm/adapter/resources/webgl-sampler.js.map +1 -1
  164. package/dist/esm/adapter/resources/webgl-shader.js +4 -3
  165. package/dist/esm/adapter/resources/webgl-shader.js.map +1 -1
  166. package/dist/esm/adapter/resources/webgl-texture.js +14 -13
  167. package/dist/esm/adapter/resources/webgl-texture.js.map +1 -1
  168. package/dist/esm/adapter/webgl-canvas-context.js +1 -1
  169. package/dist/esm/adapter/webgl-canvas-context.js.map +1 -1
  170. package/dist/esm/adapter/webgl-device.js +13 -4
  171. package/dist/esm/adapter/webgl-device.js.map +1 -1
  172. package/dist/esm/classic/buffer.js +14 -6
  173. package/dist/esm/classic/buffer.js.map +1 -1
  174. package/dist/esm/classic/typed-array-utils.js.map +1 -1
  175. package/dist/esm/context/context/{create-context.js → create-browser-context.js} +9 -3
  176. package/dist/esm/context/context/create-browser-context.js.map +1 -0
  177. package/dist/esm/context/context/create-headless-context.js +43 -0
  178. package/dist/esm/context/context/create-headless-context.js.map +1 -0
  179. package/dist/esm/context/context/device-pixels.js +13 -8
  180. package/dist/esm/context/context/device-pixels.js.map +1 -1
  181. package/dist/esm/context/debug/spector.js +1 -1
  182. package/dist/esm/context/debug/spector.js.map +1 -1
  183. package/dist/esm/context/debug/webgl-developer-tools.js +1 -1
  184. package/dist/esm/context/debug/webgl-developer-tools.js.map +1 -1
  185. package/dist/esm/context/parameters/unified-parameter-api.js +1 -3
  186. package/dist/esm/context/parameters/unified-parameter-api.js.map +1 -1
  187. package/dist/esm/context/polyfill/polyfill-context.js.map +1 -1
  188. package/dist/esm/context/polyfill/polyfill-table.js +1 -1
  189. package/dist/esm/context/polyfill/polyfill-table.js.map +1 -1
  190. package/dist/esm/context/state-tracker/track-context-state.js +1 -1
  191. package/dist/esm/context/state-tracker/track-context-state.js.map +1 -1
  192. package/dist/esm/index.js +3 -2
  193. package/dist/esm/index.js.map +1 -1
  194. package/dist/esm/types/webgl.js.map +1 -1
  195. package/dist/index.d.ts +5 -3
  196. package/dist/index.d.ts.map +1 -1
  197. package/dist/index.js +3 -2
  198. package/dist/index.js.map +1 -1
  199. package/dist/types/webgl.d.ts +3 -3
  200. package/dist/types/webgl.d.ts.map +1 -1
  201. package/dist/types/webgl.js.map +1 -1
  202. package/package.json +4 -4
  203. package/src/adapter/converters/device-parameters.ts +28 -2
  204. package/src/adapter/converters/sampler-parameters.ts +16 -7
  205. package/src/adapter/converters/texture-formats.ts +3 -3
  206. package/src/adapter/device-helpers/device-features.ts +9 -1
  207. package/src/adapter/device-helpers/device-limits.ts +1 -1
  208. package/src/adapter/helpers/get-shader-layout.ts +40 -21
  209. package/src/adapter/helpers/uniforms.ts +21 -10
  210. package/src/adapter/objects/webgl-vertex-array-object.ts +1 -1
  211. package/src/adapter/resources/webgl-buffer.ts +3 -3
  212. package/src/adapter/resources/webgl-framebuffer.ts +6 -3
  213. package/src/adapter/resources/webgl-render-pass.ts +1 -0
  214. package/src/adapter/resources/webgl-render-pipeline.ts +43 -35
  215. package/src/adapter/resources/webgl-sampler.ts +5 -3
  216. package/src/adapter/resources/webgl-shader.ts +5 -4
  217. package/src/adapter/resources/webgl-texture.ts +37 -25
  218. package/src/adapter/webgl-canvas-context.ts +1 -1
  219. package/src/adapter/webgl-device.ts +16 -4
  220. package/src/classic/buffer.ts +7 -7
  221. package/src/classic/typed-array-utils.ts +3 -1
  222. package/src/context/context/{create-context.ts → create-browser-context.ts} +9 -5
  223. package/src/context/context/create-headless-context.ts +48 -0
  224. package/src/context/context/device-pixels.ts +15 -9
  225. package/src/context/debug/spector.ts +1 -1
  226. package/src/context/debug/webgl-developer-tools.ts +1 -1
  227. package/src/context/parameters/unified-parameter-api.ts +12 -9
  228. package/src/context/polyfill/polyfill-context.ts +1 -1
  229. package/src/context/polyfill/polyfill-table.ts +1 -1
  230. package/src/context/state-tracker/track-context-state.ts +1 -1
  231. package/src/index.ts +13 -5
  232. package/src/types/webgl.ts +3 -3
  233. package/dist/context/context/create-context.d.ts.map +0 -1
  234. package/dist/context/context/create-context.js.map +0 -1
  235. package/dist/es5/context/context/create-context.js.map +0 -1
  236. package/dist/esm/context/context/create-context.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapter/resources/webgl-framebuffer.ts"],"names":["WEBGLFramebuffer","device","props","undefined","gl","handle","createFramebuffer","__SPECTOR_Metadata","id","colorAttachments","_createColorAttachments","depthStencilAttachment","_createDepthStencilAttachment","prevHandle","bindFramebuffer","GL","FRAMEBUFFER","i","length","attachment","attachmentPoint","COLOR_ATTACHMENT0","_attachOne","format","check","_checkStatus","_ownResources","resource","destroy","deleteFramebuffer","status","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","Error","_getFrameBufferStatus","map","colorAttachment","WebGLTexture","_createColorAttachment","width","height","texture","_createTexture","data","mipmaps","sampler","minFilter","magFilter","addressModeU","addressModeV","push","Renderbuffer","Texture","webglFormat","drawingBufferWidth","drawingBufferHeight","log","resize","_attachRenderbuffer","Array","isArray","layer","level","_attachTexture","renderbuffer","framebufferRenderbuffer","RENDERBUFFER","gl2","bindTexture","target","TEXTURE_2D_ARRAY","TEXTURE_3D","assertWebGL2","framebufferTextureLayer","TEXTURE_CUBE_MAP","face","mapIndexToCubeMapFace","framebufferTexture2D","TEXTURE_2D","Framebuffer","TEXTURE_CUBE_MAP_POSITIVE_X","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_UNSUPPORTED","FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"],"mappings":"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","sourcesContent":["import type {FramebufferProps, DepthStencilTextureFormat, ColorTextureFormat} from '@luma.gl/api';\nimport {Framebuffer, Texture, log, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport WebGLDevice from '../webgl-device';\nimport WebGLTexture from './webgl-texture';\nimport Renderbuffer from '../objects/webgl-renderbuffer';\nimport {getWebGLTextureFormat, getWebGLDepthStencilAttachment} from '../converters/texture-formats';\n\nexport type TextureAttachment = [Texture, number?, number?];\nexport type Attachment = WebGLTexture | Renderbuffer | TextureAttachment;\n\n/** luma.gl Framebuffer, WebGL implementation */\nexport default class WEBGLFramebuffer extends Framebuffer {\n device: WebGLDevice;\n gl: WebGLRenderingContext;\n handle: WebGLFramebuffer;\n\n get texture() { return this.colorAttachments[0]; }\n readonly colorAttachments: WebGLTexture[] = [];\n readonly depthStencilAttachment: WebGLTexture | undefined = undefined;\n protected _ownResources: (WebGLTexture | Renderbuffer)[] = [];\n\n constructor(device: WebGLDevice, props: FramebufferProps) {\n super(device, props);\n this.device = device;\n this.gl = device.gl;\n this.handle = this.props.handle !== undefined ? this.props.handle : this.gl.createFramebuffer();\n\n if (this.handle) { // default framebuffer is null...\n // @ts-expect-error Per SPECTOR docs\n this.handle.__SPECTOR_Metadata = {id: this.props.id, props: this.props};\n }\n\n this.colorAttachments = this._createColorAttachments();\n // @ts-expect-error\n this.depthStencilAttachment = this._createDepthStencilAttachment();\n\n /** Attach from a map of attachments */\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n // Walk the attachments\n for (let i = 0; i < this.colorAttachments.length; ++i) {\n const attachment = this.colorAttachments[i];\n const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;\n if (attachment) {\n this._attachOne(attachmentPoint, attachment);\n }\n }\n\n if (this.props.depthStencilAttachment) {\n this._attachOne(getWebGLDepthStencilAttachment(this.depthStencilAttachment.format), this.depthStencilAttachment);\n }\n\n // @ts-expect-error\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n // @ts-expect-error\n if (props.check !== false) {\n this._checkStatus();\n }\n }\n\n destroy() {\n if (this.handle !== null) {\n for (const resource of this._ownResources) {\n resource.destroy();\n }\n this.gl.deleteFramebuffer(this.handle);\n this.handle = null;\n }\n }\n\n // PRIVATE\n\n /** Check the status */\n protected _checkStatus(): void {\n const {gl} = this;\n const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);\n // @ts-expect-error\n gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n if (status !== gl.FRAMEBUFFER_COMPLETE) {\n throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);\n }\n }\n\n _createColorAttachments(): WebGLTexture[] {\n return this.props.colorAttachments.map(colorAttachment => {\n if (!colorAttachment) {\n return undefined;\n }\n if (colorAttachment instanceof WebGLTexture) {\n return colorAttachment;\n }\n // if (typeof colorAttachment === 'default') {\n // return this._createColorAttachment('rgba8unorm', this.width, this.height);\n // }\n // @ts-expect-error\n return this._createColorAttachment(colorAttachment, this.width, this.height);\n });\n }\n\n /** Create a color attachment */\n protected _createColorAttachment(format: ColorTextureFormat, width: number, height: number): WebGLTexture {\n const texture = this.device._createTexture({\n id: `${this.id}-color`,\n data: null, // reserves texture memory, but texels are undefined\n format,\n // type: GL.UNSIGNED_BYTE,\n width,\n height,\n // Note: Mipmapping can be disabled by texture resource when we resize the texture\n // to a non-power-of-two dimenstion (NPOT texture) under WebGL1. To have consistant\n // behavior we always disable mipmaps.\n mipmaps: false,\n // Set MIN and MAG filtering parameters so mipmaps are not used in sampling.\n // Use LINEAR so subpixel algos like fxaa work.\n // Set WRAP modes that support NPOT textures too.\n sampler: {\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n },\n // parameters: {\n // [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,\n // [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n // [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n // [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n // }\n }) as WebGLTexture;\n this._ownResources.push(texture);\n return texture;\n }\n\n /** Create a depth stencil attachment GL.DEPTH24_STENCIL8 */\n protected _createDepthStencilAttachment(): Renderbuffer | WebGLTexture {\n if (!this.props.depthStencilAttachment) {\n return undefined;\n }\n if (this.props.depthStencilAttachment instanceof Renderbuffer) {\n return this.props.depthStencilAttachment;\n }\n if (this.props.depthStencilAttachment instanceof Texture) {\n return this.props.depthStencilAttachment as unknown as WebGLTexture;\n }\n const format = this.props.depthStencilAttachment;\n const webglFormat = getWebGLTextureFormat(this.gl, format);\n\n const texture = new Renderbuffer(this.device, {\n id: `${this.id}-depth-stencil`, // TODO misleading if not depth and stencil?\n format: webglFormat,\n // dataFormat: GL.DEPTH_STENCIL,\n // type: GL.UNSIGNED_INT_24_8,\n width: this.width,\n height: this.height\n });\n this._ownResources.push(texture);\n return texture;\n }\n\n /** Attachment resize is expected to be a noop if size is same */\n protected _resizeAttachments(width: number, height: number): this {\n // for default framebuffer, just update the stored size\n if (this.handle === null) {\n // assert(width === undefined && height === undefined);\n this.width = this.gl.drawingBufferWidth;\n this.height = this.gl.drawingBufferHeight;\n return this;\n }\n if (width === undefined) {\n width = this.gl.drawingBufferWidth;\n }\n if (height === undefined) {\n height = this.gl.drawingBufferHeight;\n }\n\n if (width !== this.width && height !== this.height) {\n log.log(2, `Resizing framebuffer ${this.id} to ${width}x${height}`)();\n }\n\n for (const colorAttachment of this.colorAttachments) {\n colorAttachment.resize({width, height});\n }\n this.depthStencilAttachment?.resize({width, height});\n return this;\n }\n\n /** Attach one attachment */\n protected _attachOne(attachmentPoint: GL, attachment: Attachment): WebGLTexture | Renderbuffer {\n if (attachment instanceof Renderbuffer) {\n this._attachRenderbuffer(attachmentPoint, attachment);\n return attachment;\n } else if (Array.isArray(attachment)) {\n const [texture, layer = 0, level = 0] = attachment;\n this._attachTexture(attachmentPoint, texture as unknown as WebGLTexture, layer, level);\n return texture as unknown as WebGLTexture;\n } else if (attachment instanceof WebGLTexture) {\n this._attachTexture(attachmentPoint, attachment, 0, 0);\n return attachment;\n }\n }\n\n protected _attachRenderbuffer(attachment: GL, renderbuffer: Renderbuffer): void {\n this.gl.framebufferRenderbuffer(\n GL.FRAMEBUFFER,\n attachment,\n GL.RENDERBUFFER,\n renderbuffer.handle\n );\n }\n\n /**\n * @param attachment\n * @param texture\n * @param layer = 0 - index into WebGLTextureArray and Texture3D or face for `TextureCubeMap`\n * @param level = 0 - mipmapLevel (must be 0 in WebGL1)\n */\n protected _attachTexture(attachment: GL, texture: WebGLTexture, layer: number, level: number): void {\n const {gl, gl2} = this.device;\n gl.bindTexture(texture.target, texture.handle);\n\n switch (texture.target) {\n case GL.TEXTURE_2D_ARRAY:\n case GL.TEXTURE_3D:\n this.device.assertWebGL2();\n gl2.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);\n break;\n\n case GL.TEXTURE_CUBE_MAP:\n // layer must be a cubemap face (or if index, converted to cube map face)\n const face = mapIndexToCubeMapFace(layer);\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, face, texture.handle, level);\n break;\n\n case GL.TEXTURE_2D:\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, texture.handle, level);\n break;\n\n default:\n assert(false, 'Illegal texture type');\n }\n\n gl.bindTexture(texture.target, null);\n }\n}\n\n// Helper functions\n\n// Map an index to a cube map face constant\nfunction mapIndexToCubeMapFace(layer) {\n // TEXTURE_CUBE_MAP_POSITIVE_X is a big value (0x8515)\n // if smaller assume layer is index, otherwise assume it is already a cube map face constant\n return layer < GL.TEXTURE_CUBE_MAP_POSITIVE_X ? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X : layer;\n}\n\n// Helper METHODS\n// Get a string describing the framebuffer error if installed\nfunction _getFrameBufferStatus(status) {\n switch (status) {\n case GL.FRAMEBUFFER_COMPLETE:\n return 'success';\n case GL.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n return 'Mismatched attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n return 'No attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n return 'Height/width mismatch';\n case GL.FRAMEBUFFER_UNSUPPORTED:\n return 'Unsupported or split attachments';\n // WebGL2\n case GL.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:\n return 'Samples mismatch';\n // OVR_multiview2 extension\n // case GL.FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: return 'baseViewIndex mismatch';\n default:\n return `${status}`;\n }\n}\n"],"file":"webgl-framebuffer.js"}
1
+ {"version":3,"sources":["../../../../src/adapter/resources/webgl-framebuffer.ts"],"names":["WEBGLFramebuffer","device","props","gl","handle","undefined","createFramebuffer","__SPECTOR_Metadata","id","colorAttachments","_createColorAttachments","depthStencilAttachment","_createDepthStencilAttachment","prevHandle","bindFramebuffer","GL","FRAMEBUFFER","i","length","attachment","attachmentPoint","COLOR_ATTACHMENT0","_attachOne","format","check","_checkStatus","_ownResources","resource","destroy","deleteFramebuffer","destroyed","status","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","Error","_getFrameBufferStatus","map","colorAttachment","WebGLTexture","_createColorAttachment","width","height","texture","_createTexture","data","mipmaps","sampler","minFilter","magFilter","addressModeU","addressModeV","push","Renderbuffer","Texture","webglFormat","drawingBufferWidth","drawingBufferHeight","log","resize","_attachRenderbuffer","Array","isArray","layer","level","_attachTexture","renderbuffer","framebufferRenderbuffer","RENDERBUFFER","gl2","bindTexture","target","TEXTURE_2D_ARRAY","TEXTURE_3D","assertWebGL2","framebufferTextureLayer","TEXTURE_CUBE_MAP","face","mapIndexToCubeMapFace","framebufferTexture2D","TEXTURE_2D","Framebuffer","TEXTURE_CUBE_MAP_POSITIVE_X","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_UNSUPPORTED","FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\n\nimport type {FramebufferProps, DepthStencilTextureFormat, ColorTextureFormat} from '@luma.gl/api';\nimport {Framebuffer, Texture, log, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport WebGLDevice from '../webgl-device';\nimport WebGLTexture from './webgl-texture';\nimport Renderbuffer from '../objects/webgl-renderbuffer';\nimport {getWebGLTextureFormat, getWebGLDepthStencilAttachment} from '../converters/texture-formats';\n\nexport type TextureAttachment = [Texture, number?, number?];\nexport type Attachment = WebGLTexture | Renderbuffer | TextureAttachment;\n\n/** luma.gl Framebuffer, WebGL implementation */\nexport default class WEBGLFramebuffer extends Framebuffer {\n device: WebGLDevice;\n gl: WebGLRenderingContext;\n handle: WebGLFramebuffer;\n\n get texture() { return this.colorAttachments[0]; }\n readonly colorAttachments: WebGLTexture[] = [];\n readonly depthStencilAttachment: WebGLTexture | null = null; d \n protected _ownResources: (WebGLTexture | Renderbuffer)[] = [];\n\n constructor(device: WebGLDevice, props: FramebufferProps) {\n super(device, props);\n this.device = device;\n this.gl = device.gl;\n this.handle = this.props.handle !== undefined ? this.props.handle : this.gl.createFramebuffer();\n\n if (this.handle) { // default framebuffer is null...\n // @ts-expect-error Per SPECTOR docs\n this.handle.__SPECTOR_Metadata = {id: this.props.id, props: this.props};\n }\n\n this.colorAttachments = this._createColorAttachments();\n // @ts-expect-error\n this.depthStencilAttachment = this._createDepthStencilAttachment();\n\n /** Attach from a map of attachments */\n const prevHandle = this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n\n // Walk the attachments\n for (let i = 0; i < this.colorAttachments.length; ++i) {\n const attachment = this.colorAttachments[i];\n const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;\n if (attachment) {\n this._attachOne(attachmentPoint, attachment);\n }\n }\n\n if (this.props.depthStencilAttachment) {\n this._attachOne(getWebGLDepthStencilAttachment(this.depthStencilAttachment.format), this.depthStencilAttachment);\n }\n\n // @ts-expect-error\n this.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n\n // @ts-expect-error\n if (props.check !== false) {\n this._checkStatus();\n }\n }\n\n destroy() {\n if (this.handle !== null) {\n for (const resource of this._ownResources) {\n resource.destroy();\n }\n this.gl.deleteFramebuffer(this.handle);\n // this.handle = null;\n this.destroyed = true;\n }\n }\n\n // PRIVATE\n\n /** Check the status */\n protected _checkStatus(): void {\n const {gl} = this;\n const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);\n const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);\n // @ts-expect-error\n gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n if (status !== gl.FRAMEBUFFER_COMPLETE) {\n throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);\n }\n }\n\n _createColorAttachments(): WebGLTexture[] {\n return this.props.colorAttachments.map(colorAttachment => {\n if (!colorAttachment) {\n return undefined;\n }\n if (colorAttachment instanceof WebGLTexture) {\n return colorAttachment;\n }\n // if (typeof colorAttachment === 'default') {\n // return this._createColorAttachment('rgba8unorm', this.width, this.height);\n // }\n // @ts-expect-error\n return this._createColorAttachment(colorAttachment, this.width, this.height);\n });\n }\n\n /** Create a color attachment */\n protected _createColorAttachment(format: ColorTextureFormat, width: number, height: number): WebGLTexture {\n const texture = this.device._createTexture({\n id: `${this.id}-color`,\n data: null, // reserves texture memory, but texels are undefined\n format,\n // type: GL.UNSIGNED_BYTE,\n width,\n height,\n // Note: Mipmapping can be disabled by texture resource when we resize the texture\n // to a non-power-of-two dimenstion (NPOT texture) under WebGL1. To have consistant\n // behavior we always disable mipmaps.\n mipmaps: false,\n // Set MIN and MAG filtering parameters so mipmaps are not used in sampling.\n // Use LINEAR so subpixel algos like fxaa work.\n // Set WRAP modes that support NPOT textures too.\n sampler: {\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n },\n // parameters: {\n // [GL.TEXTURE_MIN_FILTER]: GL.LINEAR,\n // [GL.TEXTURE_MAG_FILTER]: GL.LINEAR,\n // [GL.TEXTURE_WRAP_S]: GL.CLAMP_TO_EDGE,\n // [GL.TEXTURE_WRAP_T]: GL.CLAMP_TO_EDGE\n // }\n }) as WebGLTexture;\n this._ownResources.push(texture);\n return texture;\n }\n\n /** Create a depth stencil attachment GL.DEPTH24_STENCIL8 */\n protected _createDepthStencilAttachment(): Renderbuffer | WebGLTexture {\n if (!this.props.depthStencilAttachment) {\n return undefined;\n }\n if (this.props.depthStencilAttachment instanceof Renderbuffer) {\n return this.props.depthStencilAttachment;\n }\n if (this.props.depthStencilAttachment instanceof Texture) {\n return this.props.depthStencilAttachment as unknown as WebGLTexture;\n }\n const format = this.props.depthStencilAttachment;\n const webglFormat = getWebGLTextureFormat(this.gl, format);\n\n const texture = new Renderbuffer(this.device, {\n id: `${this.id}-depth-stencil`, // TODO misleading if not depth and stencil?\n format: webglFormat,\n // dataFormat: GL.DEPTH_STENCIL,\n // type: GL.UNSIGNED_INT_24_8,\n width: this.width,\n height: this.height\n });\n this._ownResources.push(texture);\n return texture;\n }\n\n /** Attachment resize is expected to be a noop if size is same */\n protected _resizeAttachments(width: number, height: number): this {\n // for default framebuffer, just update the stored size\n if (this.handle === null) {\n // assert(width === undefined && height === undefined);\n this.width = this.gl.drawingBufferWidth;\n this.height = this.gl.drawingBufferHeight;\n return this;\n }\n if (width === undefined) {\n width = this.gl.drawingBufferWidth;\n }\n if (height === undefined) {\n height = this.gl.drawingBufferHeight;\n }\n\n if (width !== this.width && height !== this.height) {\n log.log(2, `Resizing framebuffer ${this.id} to ${width}x${height}`)();\n }\n\n for (const colorAttachment of this.colorAttachments) {\n colorAttachment.resize({width, height});\n }\n this.depthStencilAttachment?.resize({width, height});\n return this;\n }\n\n /** Attach one attachment */\n protected _attachOne(attachmentPoint: GL, attachment: Attachment): WebGLTexture | Renderbuffer {\n if (attachment instanceof Renderbuffer) {\n this._attachRenderbuffer(attachmentPoint, attachment);\n return attachment;\n } else if (Array.isArray(attachment)) {\n const [texture, layer = 0, level = 0] = attachment;\n this._attachTexture(attachmentPoint, texture as unknown as WebGLTexture, layer, level);\n return texture as unknown as WebGLTexture;\n } else if (attachment instanceof WebGLTexture) {\n this._attachTexture(attachmentPoint, attachment, 0, 0);\n return attachment;\n }\n }\n\n protected _attachRenderbuffer(attachment: GL, renderbuffer: Renderbuffer): void {\n this.gl.framebufferRenderbuffer(\n GL.FRAMEBUFFER,\n attachment,\n GL.RENDERBUFFER,\n renderbuffer.handle\n );\n }\n\n /**\n * @param attachment\n * @param texture\n * @param layer = 0 - index into WebGLTextureArray and Texture3D or face for `TextureCubeMap`\n * @param level = 0 - mipmapLevel (must be 0 in WebGL1)\n */\n protected _attachTexture(attachment: GL, texture: WebGLTexture, layer: number, level: number): void {\n const {gl, gl2} = this.device;\n gl.bindTexture(texture.target, texture.handle);\n\n switch (texture.target) {\n case GL.TEXTURE_2D_ARRAY:\n case GL.TEXTURE_3D:\n this.device.assertWebGL2();\n gl2?.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);\n break;\n\n case GL.TEXTURE_CUBE_MAP:\n // layer must be a cubemap face (or if index, converted to cube map face)\n const face = mapIndexToCubeMapFace(layer);\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, face, texture.handle, level);\n break;\n\n case GL.TEXTURE_2D:\n gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, texture.handle, level);\n break;\n\n default:\n assert(false, 'Illegal texture type');\n }\n\n gl.bindTexture(texture.target, null);\n }\n}\n\n// Helper functions\n\n// Map an index to a cube map face constant\nfunction mapIndexToCubeMapFace(layer) {\n // TEXTURE_CUBE_MAP_POSITIVE_X is a big value (0x8515)\n // if smaller assume layer is index, otherwise assume it is already a cube map face constant\n return layer < GL.TEXTURE_CUBE_MAP_POSITIVE_X ? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X : layer;\n}\n\n// Helper METHODS\n// Get a string describing the framebuffer error if installed\nfunction _getFrameBufferStatus(status) {\n switch (status) {\n case GL.FRAMEBUFFER_COMPLETE:\n return 'success';\n case GL.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n return 'Mismatched attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n return 'No attachments';\n case GL.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n return 'Height/width mismatch';\n case GL.FRAMEBUFFER_UNSUPPORTED:\n return 'Unsupported or split attachments';\n // WebGL2\n case GL.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:\n return 'Samples mismatch';\n // OVR_multiview2 extension\n // case GL.FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: return 'baseViewIndex mismatch';\n default:\n return `${status}`;\n }\n}\n"],"file":"webgl-framebuffer.js"}
@@ -38,6 +38,7 @@ var WEBGLRenderPass = function (_RenderPass) {
38
38
  (0, _classCallCheck2.default)(this, WEBGLRenderPass);
39
39
  _this = _super.call(this, device, props);
40
40
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "device", void 0);
41
+ _this.device = device;
41
42
  return _this;
42
43
  }
43
44
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapter/resources/webgl-render-pass.ts"],"names":["WEBGLRenderPass","device","props","groupLabel","markerLabel","RenderPass"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;IAGqBA,e;;;;;AAGnB,2BAAYC,MAAZ,EAAiCC,KAAjC,EAAyD;AAAA;;AAAA;AACvD,8BAAMD,MAAN,EAAcC,KAAd;AADuD;AAAA;AAExD;;;;WAED,mBAAgB,CAAE;;;WAElB,wBAAeC,UAAf,EAAyC,CAAE;;;WAC3C,yBAAsB,CAAE;;;WACxB,2BAAkBC,WAAlB,EAA6C,CAAE;;;EAXJC,e","sourcesContent":["import {RenderPass, RenderPassProps} from '@luma.gl/api';\nimport WebGLDevice from '../webgl-device';\n\nexport default class WEBGLRenderPass extends RenderPass {\n readonly device: WebGLDevice;\n\n constructor(device: WebGLDevice, props: RenderPassProps) {\n super(device, props);\n }\n\n endPass(): void {}\n\n pushDebugGroup(groupLabel: string): void {}\n popDebugGroup(): void {}\n insertDebugMarker(markerLabel: string): void {}\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n\n // beginOcclusionQuery(queryIndex: number): void;\n // endOcclusionQuery(): void;\n\n // executeBundles(bundles: Iterable<GPURenderBundle>): void;\n}\n"],"file":"webgl-render-pass.js"}
1
+ {"version":3,"sources":["../../../../src/adapter/resources/webgl-render-pass.ts"],"names":["WEBGLRenderPass","device","props","groupLabel","markerLabel","RenderPass"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;IAGqBA,e;;;;;AAGnB,2BAAYC,MAAZ,EAAiCC,KAAjC,EAAyD;AAAA;;AAAA;AACvD,8BAAMD,MAAN,EAAcC,KAAd;AADuD;AAEvD,UAAKD,MAAL,GAAcA,MAAd;AAFuD;AAGxD;;;;WAED,mBAAgB,CAAE;;;WAElB,wBAAeE,UAAf,EAAyC,CAAE;;;WAC3C,yBAAsB,CAAE;;;WACxB,2BAAkBC,WAAlB,EAA6C,CAAE;;;EAZJC,e","sourcesContent":["import {RenderPass, RenderPassProps} from '@luma.gl/api';\nimport WebGLDevice from '../webgl-device';\n\nexport default class WEBGLRenderPass extends RenderPass {\n readonly device: WebGLDevice;\n\n constructor(device: WebGLDevice, props: RenderPassProps) {\n super(device, props);\n this.device = device;\n }\n\n endPass(): void {}\n\n pushDebugGroup(groupLabel: string): void {}\n popDebugGroup(): void {}\n insertDebugMarker(markerLabel: string): void {}\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n\n // beginOcclusionQuery(queryIndex: number): void;\n // endOcclusionQuery(): void;\n\n // executeBundles(bundles: Iterable<GPURenderBundle>): void;\n}\n"],"file":"webgl-render-pass.js"}
@@ -47,10 +47,6 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
47
47
 
48
48
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
49
49
 
50
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
51
-
52
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
53
-
54
50
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
55
51
 
56
52
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
@@ -72,7 +68,7 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
72
68
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "vs", void 0);
73
69
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fs", void 0);
74
70
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "layout", void 0);
75
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "varyings", void 0);
71
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "varyings", null);
76
72
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "vertexArrayObject", void 0);
77
73
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "_indexBuffer", void 0);
78
74
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "uniforms", {});
@@ -80,7 +76,7 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
80
76
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "_textureUniforms", {});
81
77
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "_textureIndexCounter", 0);
82
78
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "_uniformCount", 0);
83
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "_uniformSetters", void 0);
79
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "_uniformSetters", {});
84
80
  _this.device = device;
85
81
  _this.handle = _this.props.handle || _this.device.gl.createProgram();
86
82
  _this.handle.__SPECTOR_Metadata = {
@@ -93,11 +89,12 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
93
89
  bufferMode = _props$bufferMode === void 0 ? _constants.default.SEPARATE_ATTRIBS : _props$bufferMode;
94
90
 
95
91
  if (varyings && varyings.length > 0) {
92
+ var _this$device$gl;
93
+
96
94
  _this.device.assertWebGL2();
97
95
 
98
96
  _this.varyings = varyings;
99
-
100
- _this.device.gl2.transformFeedbackVaryings(_this.handle, varyings, bufferMode);
97
+ (_this$device$gl = _this.device.gl2) === null || _this$device$gl === void 0 ? void 0 : _this$device$gl.transformFeedbackVaryings(_this.handle, varyings, bufferMode);
101
98
  }
102
99
 
103
100
  _this._compileAndLink();
@@ -112,7 +109,7 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
112
109
  value: function destroy() {
113
110
  if (this.handle) {
114
111
  this.device.gl.deleteProgram(this.handle);
115
- this.handle = null;
112
+ this.destroyed = true;
116
113
  }
117
114
  }
118
115
  }, {
@@ -174,6 +171,8 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
174
171
 
175
172
  if (!binding) {
176
173
  _api.log.warn("Unknown binding ".concat(name, " in render pipeline ").concat(_this2.id))();
174
+
175
+ return "continue";
177
176
  }
178
177
 
179
178
  if (!value) {
@@ -208,7 +207,9 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
208
207
  };
209
208
 
210
209
  for (var _i2 = 0, _Object$entries2 = Object.entries(bindings); _i2 < _Object$entries2.length; _i2++) {
211
- _loop();
210
+ var _ret = _loop();
211
+
212
+ if (_ret === "continue") continue;
212
213
  }
213
214
  }
214
215
  }, {
@@ -235,7 +236,7 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
235
236
  var drawMode = getDrawMode(this.props.topology);
236
237
  var isIndexed = Boolean(this._indexBuffer);
237
238
  var indexType = ((_this$_indexBuffer = this._indexBuffer) === null || _this$_indexBuffer === void 0 ? void 0 : _this$_indexBuffer.props.indexType) === 'uint16' ? _constants.default.UNSIGNED_SHORT : _constants.default.UNSIGNED_INT;
238
- var isInstanced = options.instanceCount > 0;
239
+ var isInstanced = Number(options.instanceCount) > 0;
239
240
 
240
241
  if (!this._areTexturesRenderable() || options.vertexCount === 0) {
241
242
  return false;
@@ -243,10 +244,6 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
243
244
 
244
245
  this.device.gl.useProgram(this.handle);
245
246
  this.vertexArrayObject.bind(function () {
246
- var parameters = _objectSpread(_objectSpread({}, _this3.props.parameters), {}, {
247
- framebuffer: renderPass.props.framebuffer
248
- });
249
-
250
247
  var primitiveMode = getGLPrimitive(_this3.props.topology);
251
248
  var transformFeedback = null;
252
249
 
@@ -258,21 +255,29 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
258
255
 
259
256
  _this3._applyUniforms();
260
257
 
261
- (0, _deviceParameters.withDeviceParameters)(_this3.device, parameters, function () {
262
- if (isIndexed && isInstanced) {
263
- _this3.device.gl2.drawElementsInstanced(drawMode, vertexCount, indexType, firstVertex, instanceCount);
264
- } else if (isIndexed) {
265
- _this3.device.gl.drawElements(drawMode, vertexCount, indexType, firstVertex);
266
- } else if (isInstanced) {
267
- _this3.device.gl2.drawArraysInstanced(drawMode, firstVertex, vertexCount, instanceCount);
268
- } else {
269
- _this3.device.gl.drawArrays(drawMode, firstVertex, vertexCount);
258
+ (0, _deviceParameters.withDeviceParameters)(_this3.device, _this3.props.parameters, function () {
259
+ (0, _deviceParameters.withGLParameters)(_this3.device, {
260
+ framebuffer: renderPass.props.framebuffer
261
+ }, function () {
262
+ if (isIndexed && isInstanced) {
263
+ var _this3$device$gl;
264
+
265
+ (_this3$device$gl = _this3.device.gl2) === null || _this3$device$gl === void 0 ? void 0 : _this3$device$gl.drawElementsInstanced(drawMode, vertexCount || 0, indexType, firstVertex, instanceCount || 0);
266
+ } else if (isIndexed) {
267
+ _this3.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex);
268
+ } else if (isInstanced) {
269
+ var _this3$device$gl2;
270
+
271
+ (_this3$device$gl2 = _this3.device.gl2) === null || _this3$device$gl2 === void 0 ? void 0 : _this3$device$gl2.drawArraysInstanced(drawMode, firstVertex, vertexCount || 0, instanceCount || 0);
272
+ } else {
273
+ _this3.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);
274
+ }
275
+ });
276
+
277
+ if (transformFeedback) {
278
+ transformFeedback.end();
270
279
  }
271
280
  });
272
-
273
- if (transformFeedback) {
274
- transformFeedback.end();
275
- }
276
281
  });
277
282
  return true;
278
283
  }
@@ -335,6 +340,11 @@ var WEBGLRenderPipeline = function (_RenderPipeline) {
335
340
  value: function _applyBindings() {
336
341
  this.device.gl.useProgram(this.handle);
337
342
  var gl2 = this.device.gl2;
343
+
344
+ if (!gl2) {
345
+ throw new Error('bindings');
346
+ }
347
+
338
348
  var textureUnit = 0;
339
349
  var uniformBufferIndex = 0;
340
350
 
@@ -479,7 +489,10 @@ function getAttributesByLocation(attributes, layout) {
479
489
  buffer = _Object$entries5$_i[1];
480
490
 
481
491
  var attribute = getAttributeLayout(layout, name);
482
- byLocation[attribute.location] = buffer;
492
+
493
+ if (attribute) {
494
+ byLocation[attribute.location] = buffer;
495
+ }
483
496
  }
484
497
 
485
498
  return byLocation;
@@ -488,7 +501,7 @@ function getAttributesByLocation(attributes, layout) {
488
501
  function getAttributeLayout(layout, name) {
489
502
  return layout.attributes.find(function (binding) {
490
503
  return binding.name === name;
491
- });
504
+ }) || null;
492
505
  }
493
506
 
494
507
  function getBindingLayout(layout, name) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapter/resources/webgl-render-pipeline.ts"],"names":["LOG_PROGRAM_PERF_PRIORITY","WEBGLRenderPipeline","device","props","handle","gl","createProgram","__SPECTOR_Metadata","id","vs","fs","varyings","bufferMode","GL","SEPARATE_ATTRIBS","length","assertWebGL2","gl2","transformFeedbackVaryings","_compileAndLink","layout","vertexArrayObject","WEBGLVertexArrayObject","deleteProgram","indexBuffer","webglBuffer","setElementBuffer","_indexBuffer","attributes","Object","entries","name","buffer","attribute","getAttributeLayout","log","warn","decoded","format","typeString","type","size","components","stride","byteLength","normalized","integer","divisor","stepMode","setBuffer","location","offset","bindings","value","binding","find","WEBGLBuffer","Error","WEBGLTexture","uniforms","assign","options","renderPass","getDefaultRenderPass","vertexCount","indexCount","instanceCount","firstVertex","firstIndex","firstInstance","baseVertex","drawMode","getDrawMode","topology","isIndexed","Boolean","indexType","UNSIGNED_SHORT","UNSIGNED_INT","isInstanced","_areTexturesRenderable","useProgram","bind","parameters","framebuffer","primitiveMode","getGLPrimitive","transformFeedback","begin","_applyBindings","_applyUniforms","drawElementsInstanced","drawElements","drawArraysInstanced","drawArrays","end","attachShader","time","linkProgram","timeEnd","debug","level","linked","getProgramParameter","LINK_STATUS","getProgramInfoLog","validateProgram","validated","VALIDATE_STATUS","texturesRenderable","_textureUniforms","texture","update","loaded","undefined","textureUnit","uniformBufferIndex","getUniformBlockIndex","INVALID_INDEX","uniformBlockBinding","bindBufferBase","UNIFORM_BUFFER","bindBufferRange","activeTexture","TEXTURE0","bindTexture","target","uniformLayout","RenderPipeline","POINTS","LINES","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","getAttributesByLocation","byLocation","getBindingLayout"],"mappings":"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","sourcesContent":["import type {\n RenderPipelineProps,\n RenderPipelineParameters,\n RenderPass,\n Buffer,\n Binding,\n ShaderLayout,\n PrimitiveTopology,\n BindingLayout,\n AttributeLayout\n} from '@luma.gl/api';\nimport {RenderPipeline, cast, log, decodeVertexFormat} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {getWebGLDataType} from '../converters/texture-formats';\nimport {getShaderLayout} from '../helpers/get-shader-layout';\nimport {withDeviceParameters} from '../converters/device-parameters';\nimport {setUniform} from '../helpers/set-uniform';\n// import {copyUniform, checkUniformValues} from '../../classes/uniforms';\n\nimport WebGLDevice from '../webgl-device';\nimport WEBGLBuffer from './webgl-buffer';\nimport WEBGLShader from './webgl-shader';\nimport WEBGLTexture from './webgl-texture';\nimport WEBGLVertexArrayObject from '../objects/webgl-vertex-array-object';\n\nconst LOG_PROGRAM_PERF_PRIORITY = 4;\n\n/** Creates a new render pipeline */\nexport default class WEBGLRenderPipeline extends RenderPipeline {\n device: WebGLDevice;\n handle: WebGLProgram;\n vs: WEBGLShader;\n fs: WEBGLShader;\n layout: ShaderLayout;\n\n // configuration: ProgramConfiguration;\n // Experimental flag to avoid deleting Program object while it is cached\n varyings: string[];\n vertexArrayObject: WEBGLVertexArrayObject;\n _indexBuffer?: Buffer;\n uniforms: Record<string, any> = {};\n bindings: Record<string, any> = {};\n _textureUniforms: Record<string, any> = {};\n _textureIndexCounter: number = 0;\n _uniformCount: number = 0;\n _uniformSetters: Record<string, Function>;\n\n constructor(device: WebGLDevice, props: RenderPipelineProps) {\n super(device, props);\n this.device = device;\n this.handle = this.props.handle || this.device.gl.createProgram();\n // @ts-expect-error\n this.handle.__SPECTOR_Metadata = {id: this.props.id};\n\n // Create shaders if needed\n this.vs = cast<WEBGLShader>(props.vs);\n this.fs = cast<WEBGLShader>(props.fs);\n // assert(this.vs.stage === 'vertex');\n // assert(this.fs.stage === 'fragment');\n\n // Setup varyings if supplied\n // @ts-expect-error WebGL only\n const {varyings, bufferMode = GL.SEPARATE_ATTRIBS} = props;\n if (varyings && varyings.length > 0) {\n this.device.assertWebGL2();\n this.varyings = varyings;\n this.device.gl2.transformFeedbackVaryings(this.handle, varyings, bufferMode);\n }\n\n this._compileAndLink();\n\n this.layout = props.layout || getShaderLayout(this.device.gl, this.handle);\n this.vertexArrayObject = new WEBGLVertexArrayObject(this.device);\n }\n\n destroy(): void {\n if (this.handle) {\n this.device.gl.deleteProgram(this.handle);\n this.handle = null;\n }\n }\n\n setIndexBuffer(indexBuffer: Buffer): void {\n const webglBuffer = cast<WEBGLBuffer>(indexBuffer);\n this.vertexArrayObject.setElementBuffer(webglBuffer);\n this._indexBuffer = indexBuffer;\n }\n\n /** @todo needed for portable model */\n setAttributes(attributes: Record<string, Buffer>): void {\n for (const [name, buffer] of Object.entries(attributes)) {\n const webglBuffer = cast<WEBGLBuffer>(buffer);\n const attribute = getAttributeLayout(this.layout, name);\n if (!attribute) {\n log.warn(`Ignoring buffer supplied for unknown attribute \"${name}\" in pipeline \"${this.id}\" (buffer \"${buffer.id}\")`)();\n continue;\n }\n const decoded = decodeVertexFormat(attribute.format);\n const {type: typeString, components: size, byteLength: stride, normalized, integer} = decoded;\n const divisor = attribute.stepMode === 'instance' ? 1 : 0;\n const type = getWebGLDataType(typeString);\n this.vertexArrayObject.setBuffer(attribute.location, webglBuffer, {\n size,\n type,\n stride,\n offset: 0,\n normalized,\n integer,\n divisor: attribute.stepMode === 'instance' ? 1 : 0\n });\n }\n }\n\n /** @todo needed for portable model */\n setBindings(bindings: Record<string, Binding>): void {\n // if (log.priority >= 2) {\n // checkUniformValues(uniforms, this.id, this._uniformSetters);\n // }\n\n for (const [name, value] of Object.entries(bindings)) {\n const binding = this.layout.bindings.find((binding) => binding.name === name);\n if (!binding) {\n log.warn(`Unknown binding ${name} in render pipeline ${this.id}`)();\n }\n if (!value) {\n log.warn(`Unsetting binding ${name} in render pipeline ${this.id}`)();\n }\n switch (binding.type) {\n case 'uniform':\n // @ts-expect-error\n if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {\n throw new Error('buffer value');\n }\n break;\n case 'texture':\n if (!(value instanceof WEBGLTexture)) {\n throw new Error('texture value');\n }\n break;\n case 'sampler':\n log.warn(`Ignoring sampler ${name}`)();\n break;\n default:\n throw new Error(binding.type);\n }\n\n this.bindings[name] = value;\n }\n }\n\n setUniforms(uniforms: Record<string, any>) {\n // TODO - check against layout\n Object.assign(this.uniforms, uniforms);\n }\n\n /** @todo needed for portable model\n * @note The WebGL API is offers many ways to draw things\n * This function unifies those ways into a single call using common parameters with sane defaults\n */\n draw(options: {\n renderPass?: RenderPass;\n vertexCount?: number;\n indexCount?: number;\n instanceCount?: number;\n firstVertex?: number;\n firstIndex?: number;\n firstInstance?: number;\n baseVertex?: number;\n }): boolean {\n const {\n renderPass = this.device.getDefaultRenderPass(),\n vertexCount,\n indexCount,\n instanceCount,\n firstVertex = 0,\n firstIndex,\n firstInstance,\n baseVertex\n } = options;\n\n const drawMode = getDrawMode(this.props.topology);\n const isIndexed: boolean = Boolean(this._indexBuffer);\n const indexType = this._indexBuffer?.props.indexType === 'uint16' ? GL.UNSIGNED_SHORT : GL.UNSIGNED_INT;\n const isInstanced: boolean = options.instanceCount > 0;\n\n // Avoid WebGL draw call when not rendering any data or values are incomplete\n // Note: async textures set as uniforms might still be loading.\n // Now that all uniforms have been updated, check if any texture\n // in the uniforms is not yet initialized, then we don't draw\n if (!this._areTexturesRenderable() || options.vertexCount === 0) {\n // (isInstanced && instanceCount === 0)\n return false;\n }\n\n this.device.gl.useProgram(this.handle);\n\n this.vertexArrayObject.bind(() => {\n const parameters = {...this.props.parameters, framebuffer: renderPass.props.framebuffer};\n\n const primitiveMode = getGLPrimitive(this.props.topology);\n const transformFeedback: any = null;\n if (transformFeedback) {\n transformFeedback.begin(primitiveMode);\n }\n\n // We have to apply bindings before every draw call since other draw calls will overwrite\n this._applyBindings();\n this._applyUniforms();\n\n // TODO - double context push/pop\n withDeviceParameters(this.device, parameters, () => {\n // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension\n if (isIndexed && isInstanced) {\n // ANGLE_instanced_arrays extension\n this.device.gl2.drawElementsInstanced(\n drawMode,\n vertexCount,\n indexType,\n firstVertex,\n instanceCount\n );\n // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {\n // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);\n } else if (isIndexed) {\n this.device.gl.drawElements(drawMode, vertexCount, indexType, firstVertex);\n } else if (isInstanced) {\n this.device.gl2.drawArraysInstanced(drawMode, firstVertex, vertexCount, instanceCount);\n } else {\n this.device.gl.drawArrays(drawMode, firstVertex, vertexCount);\n }\n });\n\n if (transformFeedback) {\n transformFeedback.end();\n }\n });\n\n return true;\n }\n\n // setAttributes(attributes: Record<string, Buffer>): void {}\n // setBindings(bindings: Record<string, Binding>): void {}\n\n protected _compileAndLink() {\n const {gl} = this.device;\n gl.attachShader(this.handle, this.vs.handle);\n gl.attachShader(this.handle, this.fs.handle);\n log.time(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n gl.linkProgram(this.handle);\n log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n\n // Avoid checking program linking error in production\n // @ts-expect-error\n if (gl.debug || log.level > 0) {\n const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);\n if (!linked) {\n throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);\n }\n\n gl.validateProgram(this.handle);\n const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);\n if (!validated) {\n throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);\n }\n }\n }\n\n // PRIVATE METHODS\n\n /**\n * Checks if all texture-values uniforms are renderable (i.e. loaded)\n * Update a texture if needed (e.g. from video)\n * Note: This is currently done before every draw call\n */\n _areTexturesRenderable() {\n let texturesRenderable = true;\n\n for (const [name, texture] of Object.entries(this._textureUniforms)) {\n texture.update();\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n\n for (const [name, texture] of Object.entries(this.bindings)) {\n // texture.update();\n if (texture.loaded !== undefined) {\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n }\n\n return texturesRenderable;\n }\n\n /** Apply any bindings */\n _applyBindings() {\n this.device.gl.useProgram(this.handle);\n\n const {gl2} = this.device;\n\n let textureUnit = 0;\n let uniformBufferIndex = 0;\n for (const binding of this.layout.bindings) {\n const value = this.bindings[binding.name];\n if (!value) {\n throw new Error(`No value for binding ${binding.name} in ${this.id}`);\n }\n switch (binding.type) {\n case 'uniform':\n // Set buffer\n const {name} = binding;\n const location = gl2.getUniformBlockIndex(this.handle, name);\n if (location === GL.INVALID_INDEX) {\n throw new Error(`Invalid uniform block name ${name}`);\n }\n gl2.uniformBlockBinding(this.handle, uniformBufferIndex, location);\n // console.debug(binding, location);\n if (value instanceof WEBGLBuffer) {\n gl2.bindBufferBase(GL.UNIFORM_BUFFER, uniformBufferIndex, value.handle);\n } else {\n gl2.bindBufferRange(\n GL.UNIFORM_BUFFER,\n uniformBufferIndex,\n value.buffer.handle,\n value.offset || 0,\n value.size || value.buffer.byteLength - value.offset\n );\n }\n uniformBufferIndex += 1;\n break;\n\n case 'texture':\n if (!(value instanceof WEBGLTexture)) {\n throw new Error('texture');\n }\n const texture: WEBGLTexture = value;\n gl2.activeTexture(GL.TEXTURE0 + textureUnit);\n gl2.bindTexture(texture.target, texture.handle);\n // gl2.bindSampler(textureUnit, sampler.handle);\n textureUnit += 1;\n break;\n\n case 'sampler':\n // ignore\n break;\n\n case 'storage':\n case 'read-only-storage':\n throw new Error(`binding type '${binding.type}' not supported in WebGL`);\n }\n }\n }\n\n _applyUniforms() {\n for (const uniformLayout of this.layout.uniforms || []) {\n const {name, location, type, textureUnit} = uniformLayout;\n const value = this.uniforms[name] || textureUnit;\n if (value !== undefined) {\n setUniform(this.device.gl, location, type, value);\n }\n }\n }\n}\n\n/** Get the primitive type for transform feedback */\nfunction getDrawMode(\n topology: PrimitiveTopology\n): GL.POINTS | GL.LINES | GL.LINE_STRIP | GL.TRIANGLES | GL.TRIANGLE_STRIP {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINE_STRIP;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLE_STRIP;\n default: throw new Error(topology);\n }\n}\n\n/** Get the primitive type for transform feedback */\nfunction getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINES;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLES;\n default: throw new Error(topology);\n }\n}\n\nfunction getAttributesByLocation(\n attributes: Record<string, Buffer>,\n layout: ShaderLayout\n): Record<number, Buffer> {\n const byLocation: Record<number, Buffer> = {};\n for (const [name, buffer] of Object.entries(attributes)) {\n const attribute = getAttributeLayout(layout, name);\n byLocation[attribute.location] = buffer;\n }\n return byLocation;\n}\n\nfunction getAttributeLayout(layout: ShaderLayout, name: string): AttributeLayout | undefined {\n return layout.attributes.find((binding) => binding.name === name);\n}\n\nfunction getBindingLayout(layout: ShaderLayout, name: string): BindingLayout {\n const binding = layout.bindings.find((binding) => binding.name === name);\n if (!binding) {\n throw new Error(`Unknown binding ${name}`);\n }\n return binding;\n}\n"],"file":"webgl-render-pipeline.js"}
1
+ {"version":3,"sources":["../../../../src/adapter/resources/webgl-render-pipeline.ts"],"names":["LOG_PROGRAM_PERF_PRIORITY","WEBGLRenderPipeline","device","props","handle","gl","createProgram","__SPECTOR_Metadata","id","vs","fs","varyings","bufferMode","GL","SEPARATE_ATTRIBS","length","assertWebGL2","gl2","transformFeedbackVaryings","_compileAndLink","layout","vertexArrayObject","WEBGLVertexArrayObject","deleteProgram","destroyed","indexBuffer","webglBuffer","setElementBuffer","_indexBuffer","attributes","Object","entries","name","buffer","attribute","getAttributeLayout","log","warn","decoded","format","typeString","type","size","components","stride","byteLength","normalized","integer","divisor","stepMode","setBuffer","location","offset","bindings","value","binding","find","WEBGLBuffer","Error","WEBGLTexture","uniforms","assign","options","renderPass","getDefaultRenderPass","vertexCount","indexCount","instanceCount","firstVertex","firstIndex","firstInstance","baseVertex","drawMode","getDrawMode","topology","isIndexed","Boolean","indexType","UNSIGNED_SHORT","UNSIGNED_INT","isInstanced","Number","_areTexturesRenderable","useProgram","bind","primitiveMode","getGLPrimitive","transformFeedback","begin","_applyBindings","_applyUniforms","parameters","framebuffer","drawElementsInstanced","drawElements","drawArraysInstanced","drawArrays","end","attachShader","time","linkProgram","timeEnd","debug","level","linked","getProgramParameter","LINK_STATUS","getProgramInfoLog","validateProgram","validated","VALIDATE_STATUS","texturesRenderable","_textureUniforms","texture","update","loaded","undefined","textureUnit","uniformBufferIndex","getUniformBlockIndex","INVALID_INDEX","uniformBlockBinding","bindBufferBase","UNIFORM_BUFFER","bindBufferRange","activeTexture","TEXTURE0","bindTexture","target","uniformLayout","RenderPipeline","POINTS","LINES","LINE_STRIP","TRIANGLES","TRIANGLE_STRIP","getAttributesByLocation","byLocation","getBindingLayout"],"mappings":"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","sourcesContent":["import type {\n RenderPipelineProps,\n RenderPass,\n Buffer,\n Binding,\n ShaderLayout,\n PrimitiveTopology,\n BindingLayout,\n AttributeLayout\n} from '@luma.gl/api';\nimport {RenderPipeline, cast, log, decodeVertexFormat} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\n\nimport type {GLParameters} from '../../types/webgl';\nimport {getWebGLDataType} from '../converters/texture-formats';\nimport {getShaderLayout} from '../helpers/get-shader-layout';\nimport {withDeviceParameters, withGLParameters} from '../converters/device-parameters';\nimport {setUniform} from '../helpers/set-uniform';\n// import {copyUniform, checkUniformValues} from '../../classes/uniforms';\n\nimport WebGLDevice from '../webgl-device';\nimport WEBGLBuffer from './webgl-buffer';\nimport WEBGLShader from './webgl-shader';\nimport WEBGLTexture from './webgl-texture';\nimport WEBGLVertexArrayObject from '../objects/webgl-vertex-array-object';\n\nconst LOG_PROGRAM_PERF_PRIORITY = 4;\n\n/** Creates a new render pipeline */\nexport default class WEBGLRenderPipeline extends RenderPipeline {\n device: WebGLDevice;\n handle: WebGLProgram;\n vs: WEBGLShader;\n fs: WEBGLShader;\n layout: ShaderLayout;\n\n // configuration: ProgramConfiguration;\n // Experimental flag to avoid deleting Program object while it is cached\n varyings: string[] | null = null;\n vertexArrayObject: WEBGLVertexArrayObject;\n _indexBuffer?: Buffer;\n uniforms: Record<string, any> = {};\n bindings: Record<string, any> = {};\n _textureUniforms: Record<string, any> = {};\n _textureIndexCounter: number = 0;\n _uniformCount: number = 0;\n _uniformSetters: Record<string, Function> = {}; // TODO are these used?\n\n constructor(device: WebGLDevice, props: RenderPipelineProps) {\n super(device, props);\n this.device = device;\n this.handle = this.props.handle || this.device.gl.createProgram();\n // @ts-expect-error\n this.handle.__SPECTOR_Metadata = {id: this.props.id};\n\n // Create shaders if needed\n this.vs = cast<WEBGLShader>(props.vs);\n this.fs = cast<WEBGLShader>(props.fs);\n // assert(this.vs.stage === 'vertex');\n // assert(this.fs.stage === 'fragment');\n\n // Setup varyings if supplied\n // @ts-expect-error WebGL only\n const {varyings, bufferMode = GL.SEPARATE_ATTRIBS} = props;\n if (varyings && varyings.length > 0) {\n this.device.assertWebGL2();\n this.varyings = varyings;\n this.device.gl2?.transformFeedbackVaryings(this.handle, varyings, bufferMode);\n }\n\n this._compileAndLink();\n\n this.layout = props.layout || getShaderLayout(this.device.gl, this.handle);\n this.vertexArrayObject = new WEBGLVertexArrayObject(this.device);\n }\n\n destroy(): void {\n if (this.handle) {\n this.device.gl.deleteProgram(this.handle);\n // this.handle = null;\n this.destroyed = true;\n }\n }\n\n setIndexBuffer(indexBuffer: Buffer): void {\n const webglBuffer = cast<WEBGLBuffer>(indexBuffer);\n this.vertexArrayObject.setElementBuffer(webglBuffer);\n this._indexBuffer = indexBuffer;\n }\n\n /** @todo needed for portable model */\n setAttributes(attributes: Record<string, Buffer>): void {\n for (const [name, buffer] of Object.entries(attributes)) {\n const webglBuffer = cast<WEBGLBuffer>(buffer);\n const attribute = getAttributeLayout(this.layout, name);\n if (!attribute) {\n log.warn(`Ignoring buffer supplied for unknown attribute \"${name}\" in pipeline \"${this.id}\" (buffer \"${buffer.id}\")`)();\n continue;\n }\n const decoded = decodeVertexFormat(attribute.format);\n const {type: typeString, components: size, byteLength: stride, normalized, integer} = decoded;\n const divisor = attribute.stepMode === 'instance' ? 1 : 0;\n const type = getWebGLDataType(typeString);\n this.vertexArrayObject.setBuffer(attribute.location, webglBuffer, {\n size,\n type,\n stride,\n offset: 0,\n normalized,\n integer,\n divisor: attribute.stepMode === 'instance' ? 1 : 0\n });\n }\n }\n\n /** @todo needed for portable model */\n setBindings(bindings: Record<string, Binding>): void {\n // if (log.priority >= 2) {\n // checkUniformValues(uniforms, this.id, this._uniformSetters);\n // }\n\n for (const [name, value] of Object.entries(bindings)) {\n const binding = this.layout.bindings.find((binding) => binding.name === name);\n if (!binding) {\n log.warn(`Unknown binding ${name} in render pipeline ${this.id}`)();\n continue;\n }\n if (!value) {\n log.warn(`Unsetting binding ${name} in render pipeline ${this.id}`)();\n }\n switch (binding.type) {\n case 'uniform':\n // @ts-expect-error\n if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {\n throw new Error('buffer value');\n }\n break;\n case 'texture':\n if (!(value instanceof WEBGLTexture)) {\n throw new Error('texture value');\n }\n break;\n case 'sampler':\n log.warn(`Ignoring sampler ${name}`)();\n break;\n default:\n throw new Error(binding.type);\n }\n\n this.bindings[name] = value;\n }\n }\n\n setUniforms(uniforms: Record<string, any>) {\n // TODO - check against layout\n Object.assign(this.uniforms, uniforms);\n }\n\n /** @todo needed for portable model\n * @note The WebGL API is offers many ways to draw things\n * This function unifies those ways into a single call using common parameters with sane defaults\n */\n draw(options: {\n renderPass?: RenderPass;\n vertexCount?: number;\n indexCount?: number;\n instanceCount?: number;\n firstVertex?: number;\n firstIndex?: number;\n firstInstance?: number;\n baseVertex?: number;\n }): boolean {\n const {\n renderPass = this.device.getDefaultRenderPass(),\n vertexCount,\n indexCount,\n instanceCount,\n firstVertex = 0,\n firstIndex,\n firstInstance,\n baseVertex\n } = options;\n\n const drawMode = getDrawMode(this.props.topology);\n const isIndexed: boolean = Boolean(this._indexBuffer);\n const indexType = this._indexBuffer?.props.indexType === 'uint16' ? GL.UNSIGNED_SHORT : GL.UNSIGNED_INT;\n const isInstanced: boolean = Number(options.instanceCount) > 0;\n\n // Avoid WebGL draw call when not rendering any data or values are incomplete\n // Note: async textures set as uniforms might still be loading.\n // Now that all uniforms have been updated, check if any texture\n // in the uniforms is not yet initialized, then we don't draw\n if (!this._areTexturesRenderable() || options.vertexCount === 0) {\n // (isInstanced && instanceCount === 0)\n return false;\n }\n\n this.device.gl.useProgram(this.handle);\n\n this.vertexArrayObject.bind(() => {\n const primitiveMode = getGLPrimitive(this.props.topology);\n const transformFeedback: any = null;\n if (transformFeedback) {\n transformFeedback.begin(primitiveMode);\n }\n\n // We have to apply bindings before every draw call since other draw calls will overwrite\n this._applyBindings();\n this._applyUniforms();\n\n // TODO - double context push/pop\n withDeviceParameters(this.device, this.props.parameters, () => {\n withGLParameters(this.device, {framebuffer: renderPass.props.framebuffer}, () => {\n // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension\n if (isIndexed && isInstanced) {\n // ANGLE_instanced_arrays extension\n this.device.gl2?.drawElementsInstanced(\n drawMode,\n vertexCount || 0, // indexCount?\n indexType,\n firstVertex,\n instanceCount || 0\n );\n // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {\n // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);\n } else if (isIndexed) {\n this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?\n } else if (isInstanced) {\n this.device.gl2?.drawArraysInstanced(drawMode, firstVertex, vertexCount || 0, instanceCount || 0);\n } else {\n this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);\n }\n });\n\n if (transformFeedback) {\n transformFeedback.end();\n }\n });\n });\n\n return true;\n }\n\n // setAttributes(attributes: Record<string, Buffer>): void {}\n // setBindings(bindings: Record<string, Binding>): void {}\n\n protected _compileAndLink() {\n const {gl} = this.device;\n gl.attachShader(this.handle, this.vs.handle);\n gl.attachShader(this.handle, this.fs.handle);\n log.time(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n gl.linkProgram(this.handle);\n log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n\n // Avoid checking program linking error in production\n // @ts-expect-error\n if (gl.debug || log.level > 0) {\n const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);\n if (!linked) {\n throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);\n }\n\n gl.validateProgram(this.handle);\n const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);\n if (!validated) {\n throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);\n }\n }\n }\n\n // PRIVATE METHODS\n\n /**\n * Checks if all texture-values uniforms are renderable (i.e. loaded)\n * Update a texture if needed (e.g. from video)\n * Note: This is currently done before every draw call\n */\n _areTexturesRenderable() {\n let texturesRenderable = true;\n\n for (const [name, texture] of Object.entries(this._textureUniforms)) {\n texture.update();\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n\n for (const [name, texture] of Object.entries(this.bindings)) {\n // texture.update();\n if (texture.loaded !== undefined) {\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n }\n\n return texturesRenderable;\n }\n\n /** Apply any bindings */\n _applyBindings() {\n this.device.gl.useProgram(this.handle);\n\n const {gl2} = this.device;\n if (!gl2) {\n throw new Error('bindings');\n }\n\n let textureUnit = 0;\n let uniformBufferIndex = 0;\n for (const binding of this.layout.bindings) {\n const value = this.bindings[binding.name];\n if (!value) {\n throw new Error(`No value for binding ${binding.name} in ${this.id}`);\n }\n switch (binding.type) {\n case 'uniform':\n // Set buffer\n const {name} = binding;\n const location = gl2.getUniformBlockIndex(this.handle, name);\n if (location === GL.INVALID_INDEX) {\n throw new Error(`Invalid uniform block name ${name}`);\n }\n gl2.uniformBlockBinding(this.handle, uniformBufferIndex, location);\n // console.debug(binding, location);\n if (value instanceof WEBGLBuffer) {\n gl2.bindBufferBase(GL.UNIFORM_BUFFER, uniformBufferIndex, value.handle);\n } else {\n gl2.bindBufferRange(\n GL.UNIFORM_BUFFER,\n uniformBufferIndex,\n value.buffer.handle,\n value.offset || 0,\n value.size || value.buffer.byteLength - value.offset\n );\n }\n uniformBufferIndex += 1;\n break;\n\n case 'texture':\n if (!(value instanceof WEBGLTexture)) {\n throw new Error('texture');\n }\n const texture: WEBGLTexture = value;\n gl2.activeTexture(GL.TEXTURE0 + textureUnit);\n gl2.bindTexture(texture.target, texture.handle);\n // gl2.bindSampler(textureUnit, sampler.handle);\n textureUnit += 1;\n break;\n\n case 'sampler':\n // ignore\n break;\n\n case 'storage':\n case 'read-only-storage':\n throw new Error(`binding type '${binding.type}' not supported in WebGL`);\n }\n }\n }\n\n _applyUniforms() {\n for (const uniformLayout of this.layout.uniforms || []) {\n const {name, location, type, textureUnit} = uniformLayout;\n const value = this.uniforms[name] || textureUnit;\n if (value !== undefined) {\n setUniform(this.device.gl, location, type, value);\n }\n }\n }\n}\n\n/** Get the primitive type for transform feedback */\nfunction getDrawMode(\n topology: PrimitiveTopology\n): GL.POINTS | GL.LINES | GL.LINE_STRIP | GL.TRIANGLES | GL.TRIANGLE_STRIP {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINE_STRIP;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLE_STRIP;\n default: throw new Error(topology);\n }\n}\n\n/** Get the primitive type for transform feedback */\nfunction getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINES;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLES;\n default: throw new Error(topology);\n }\n}\n\nfunction getAttributesByLocation(\n attributes: Record<string, Buffer>,\n layout: ShaderLayout\n): Record<number, Buffer> {\n const byLocation: Record<number, Buffer> = {};\n for (const [name, buffer] of Object.entries(attributes)) {\n const attribute = getAttributeLayout(layout, name);\n if (attribute) {\n byLocation[attribute.location] = buffer;\n }\n }\n return byLocation;\n}\n\nfunction getAttributeLayout(layout: ShaderLayout, name: string): AttributeLayout | null {\n return layout.attributes.find((binding) => binding.name === name) || null;\n}\n\nfunction getBindingLayout(layout: ShaderLayout, name: string): BindingLayout {\n const binding = layout.bindings.find((binding) => binding.name === name);\n if (!binding) {\n throw new Error(`Unknown binding ${name}`);\n }\n return binding;\n}\n"],"file":"webgl-render-pipeline.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapter/resources/webgl-sampler.ts"],"names":["WEBGLSampler","device","props","parameters","isWebGL2","handle","gl2","createSampler","_setSamplerParameters","deleteSampler","undefined","Object","entries","pname","value","param","Number","GL","TEXTURE_MIN_LOD","TEXTURE_MAX_LOD","samplerParameterf","samplerParameteri","Sampler"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;;;;;IAUqBA,Y;;;;;AAKnB,wBAAYC,MAAZ,EAAiCC,KAAjC,EAAsD;AAAA;;AAAA;AACpD,8BAAMD,MAAN,EAAcC,KAAd;AADoD;AAAA;AAAA;AAEpD,UAAKD,MAAL,GAAcA,MAAd;AACA,UAAKE,UAAL,GAAkB,wDAAgCD,KAAhC,CAAlB;;AACA,QAAI,MAAKD,MAAL,CAAYG,QAAhB,EAA0B;AACxB,YAAKC,MAAL,GAAc,MAAKA,MAAL,IAAe,MAAKJ,MAAL,CAAYK,GAAZ,CAAgBC,aAAhB,EAA7B;;AACA,YAAKC,qBAAL,CAA2B,MAAKL,UAAhC;AACD;;AAPmD;AAQrD;;;;WAED,mBAAgB;AACd,UAAI,KAAKE,MAAT,EAAiB;AACf,aAAKJ,MAAL,CAAYK,GAAZ,CAAgBG,aAAhB,CAA8B,KAAKJ,MAAnC;AAEA,aAAKA,MAAL,GAAcK,SAAd;AACD;AACF;;;WAGD,+BAA8BP,UAA9B,EAAwE;AACtE,yCAA6BQ,MAAM,CAACC,OAAP,CAAeT,UAAf,CAA7B,qCAAyD;AAApD;AAAA,YAAOU,KAAP;AAAA,YAAcC,KAAd;;AAGH,YAAMC,KAAK,GAAGC,MAAM,CAACH,KAAD,CAApB;;AACA,gBAAQE,KAAR;AACE,eAAKE,mBAAGC,eAAR;AACA,eAAKD,mBAAGE,eAAR;AACE,iBAAKlB,MAAL,CAAYK,GAAZ,CAAgBc,iBAAhB,CAAkC,KAAKf,MAAvC,EAA+CU,KAA/C,EAAsDD,KAAtD;AACA;;AACF;AACE,iBAAKb,MAAL,CAAYK,GAAZ,CAAgBe,iBAAhB,CAAkC,KAAKhB,MAAvC,EAA+CU,KAA/C,EAAsDD,KAAtD;AACA;AAPJ;AASD;AACF;;;EAvCuCQ,Y","sourcesContent":["import {Sampler, SamplerProps} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport type {WebGLSamplerParameters} from '../../types/webgl';\nimport {convertSamplerParametersToWebGL} from '../converters/sampler-parameters';\nimport type WebGLDevice from '../webgl-device';\n\n/**\n * Sampler object -\n * Under WebGL2 we create an actual WebGL sampler\n * Under WebGL1, we just store the sampler parameters\n * so that they can be set directly on the texture\n * https://github.com/WebGLSamples/WebGL2Samples/blob/master/samples/sampler_object.html\n */\nexport default class WEBGLSampler extends Sampler {\n readonly device: WebGLDevice;\n readonly handle: WebGLSampler;\n readonly parameters: WebGLSamplerParameters;\n\n constructor(device: WebGLDevice, props: SamplerProps) {\n super(device, props);\n this.device = device;\n this.parameters = convertSamplerParametersToWebGL(props);\n if (this.device.isWebGL2) {\n this.handle = this.handle || this.device.gl2.createSampler();\n this._setSamplerParameters(this.parameters);\n }\n }\n\n destroy(): void {\n if (this.handle) {\n this.device.gl2.deleteSampler(this.handle);\n // @ts-expect-error\n this.handle = undefined;\n }\n }\n\n /** Set sampler parameters on the sampler */\n private _setSamplerParameters(parameters: WebGLSamplerParameters): void {\n for (const [pname, value] of Object.entries(parameters)) {\n // Apparently there are integer/float conversion issues requires two parameter setting functions in JavaScript.\n // For now, pick the float version for parameters specified as GLfloat.\n const param = Number(pname);\n switch (param) {\n case GL.TEXTURE_MIN_LOD:\n case GL.TEXTURE_MAX_LOD:\n this.device.gl2.samplerParameterf(this.handle, param, value);\n break;\n default:\n this.device.gl2.samplerParameteri(this.handle, param, value);\n break;\n }\n }\n }\n}\n"],"file":"webgl-sampler.js"}
1
+ {"version":3,"sources":["../../../../src/adapter/resources/webgl-sampler.ts"],"names":["WEBGLSampler","device","props","parameters","isWebGL2","handle","gl2","createSampler","_setSamplerParameters","deleteSampler","undefined","Object","entries","pname","value","param","Number","GL","TEXTURE_MIN_LOD","TEXTURE_MAX_LOD","samplerParameterf","samplerParameteri","Sampler"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAEA;;AACA;;AAEA;;;;;;IAUqBA,Y;;;;;AAKnB,wBAAYC,MAAZ,EAAiCC,KAAjC,EAAsD;AAAA;;AAAA;AACpD,8BAAMD,MAAN,EAAcC,KAAd;AADoD;AAAA;AAAA;AAEpD,UAAKD,MAAL,GAAcA,MAAd;AACA,UAAKE,UAAL,GAAkB,wDAAgCD,KAAhC,CAAlB;;AACA,QAAI,MAAKD,MAAL,CAAYG,QAAhB,EAA0B;AACxB,YAAKC,MAAL,GAAc,MAAKA,MAAL,IAAe,MAAKJ,MAAL,CAAYK,GAAZ,CAAgBC,aAAhB,EAA7B;;AACA,YAAKC,qBAAL,CAA2B,MAAKL,UAAhC;AACD;;AAPmD;AAQrD;;;;WAED,mBAAgB;AACd,UAAI,KAAKE,MAAT,EAAiB;AACf,aAAKJ,MAAL,CAAYK,GAAZ,CAAgBG,aAAhB,CAA8B,KAAKJ,MAAnC;AAEA,aAAKA,MAAL,GAAcK,SAAd;AACD;AACF;;;WAGD,+BAA8BP,UAA9B,EAAqE;AACnE,yCAA6BQ,MAAM,CAACC,OAAP,CAAeT,UAAf,CAA7B,qCAAyD;AAApD;AAAA,YAAOU,KAAP;AAAA,YAAcC,KAAd;;AAGH,YAAMC,KAAK,GAAGC,MAAM,CAACH,KAAD,CAApB;;AACA,gBAAQE,KAAR;AACE,eAAKE,mBAAGC,eAAR;AACA,eAAKD,mBAAGE,eAAR;AACE,iBAAKlB,MAAL,CAAYK,GAAZ,CAAgBc,iBAAhB,CAAkC,KAAKf,MAAvC,EAA+CU,KAA/C,EAAsDD,KAAtD;AACA;;AACF;AACE,iBAAKb,MAAL,CAAYK,GAAZ,CAAgBe,iBAAhB,CAAkC,KAAKhB,MAAvC,EAA+CU,KAA/C,EAAsDD,KAAtD;AACA;AAPJ;AASD;AACF;;;EAvCuCQ,Y","sourcesContent":["// luma.gl, MIT license\n\nimport {Sampler, SamplerProps} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport type {GLSamplerParameters} from '../../types/webgl';\nimport {convertSamplerParametersToWebGL} from '../converters/sampler-parameters';\nimport type WebGLDevice from '../webgl-device';\n\n/**\n * Sampler object -\n * Under WebGL2 we create an actual WebGL sampler\n * Under WebGL1, we just store the sampler parameters\n * so that they can be set directly on the texture\n * https://github.com/WebGLSamples/WebGL2Samples/blob/master/samples/sampler_object.html\n */\nexport default class WEBGLSampler extends Sampler {\n readonly device: WebGLDevice;\n readonly handle: WebGLSampler;\n readonly parameters: GLSamplerParameters;\n\n constructor(device: WebGLDevice, props: SamplerProps) {\n super(device, props);\n this.device = device;\n this.parameters = convertSamplerParametersToWebGL(props);\n if (this.device.isWebGL2) {\n this.handle = this.handle || this.device.gl2.createSampler();\n this._setSamplerParameters(this.parameters);\n }\n }\n\n destroy(): void {\n if (this.handle) {\n this.device.gl2.deleteSampler(this.handle);\n // @ts-expect-error\n this.handle = undefined;\n }\n }\n\n /** Set sampler parameters on the sampler */\n private _setSamplerParameters(parameters: GLSamplerParameters): void {\n for (const [pname, value] of Object.entries(parameters)) {\n // Apparently there are integer/float conversion issues requires two parameter setting functions in JavaScript.\n // For now, pick the float version for parameters specified as GLfloat.\n const param = Number(pname);\n switch (param) {\n case GL.TEXTURE_MIN_LOD:\n case GL.TEXTURE_MAX_LOD:\n this.device.gl2.samplerParameterf(this.handle, param, value);\n break;\n default:\n this.device.gl2.samplerParameteri(this.handle, param, value);\n break;\n }\n }\n }\n}\n"],"file":"webgl-sampler.js"}
@@ -81,7 +81,7 @@ var WEBGLShader = function (_Shader) {
81
81
  if (this.handle) {
82
82
  this.removeStats();
83
83
  this.device.gl.deleteShader(this.handle);
84
- this.handle = null;
84
+ this.destroyed = true;
85
85
  }
86
86
  }
87
87
  }, {
@@ -94,7 +94,7 @@ var WEBGLShader = function (_Shader) {
94
94
  switch (_context.prev = _context.next) {
95
95
  case 0:
96
96
  log = this.device.gl.getShaderInfoLog(this.handle);
97
- return _context.abrupt("return", (0, _parseShaderCompilerLog.parseShaderCompilerLog)(log));
97
+ return _context.abrupt("return", log ? (0, _parseShaderCompilerLog.parseShaderCompilerLog)(log) : []);
98
98
 
99
99
  case 2:
100
100
  case "end":
@@ -125,7 +125,8 @@ var WEBGLShader = function (_Shader) {
125
125
 
126
126
  if (!compileStatus) {
127
127
  var shaderLog = gl.getShaderInfoLog(this.handle);
128
- var messages = (0, _parseShaderCompilerLog.parseShaderCompilerLog)(shaderLog).filter(function (message) {
128
+ var parsedLog = shaderLog ? (0, _parseShaderCompilerLog.parseShaderCompilerLog)(shaderLog) : [];
129
+ var messages = parsedLog.filter(function (message) {
129
130
  return message.type === 'error';
130
131
  });
131
132
  var formattedLog = (0, _shadertools.formatCompilerLog)(messages, source);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/adapter/resources/webgl-shader.ts"],"names":["WEBGLShader","device","props","id","getShaderIdFromProps","stage","handle","gl","createShader","GL","VERTEX_SHADER","FRAGMENT_SHADER","Error","_compile","source","removeStats","deleteShader","log","getShaderInfoLog","addGLSLVersion","startsWith","shaderSource","compileShader","compileStatus","getShaderParameter","COMPILE_STATUS","shaderLog","messages","filter","message","type","formattedLog","shaderName","name","shaderDescription","error","Shader"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\nimport {log, uid, Shader, ShaderProps} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {getShaderInfo, CompilerMessage, formatCompilerLog} from '@luma.gl/shadertools';\nimport {parseShaderCompilerLog} from '../helpers/parse-shader-compiler-log';\nimport WebGLDevice from '../webgl-device';\n\n/**\n * An immutable compiled shader program that execute portions of the GPU Pipeline\n */\n export default class WEBGLShader extends Shader {\n readonly device: WebGLDevice;\n readonly handle: WebGLShader;\n\n constructor(device: WebGLDevice, props: ShaderProps) {\n super(device, {id: getShaderIdFromProps(props), ...props});\n this.device = device;\n switch (this.props.stage) {\n case 'vertex':\n this.handle = this.props.handle || this.device.gl.createShader(GL.VERTEX_SHADER);\n break;\n case 'fragment':\n this.handle = this.props.handle || this.device.gl.createShader(GL.FRAGMENT_SHADER);\n break;\n default:\n throw new Error(this.props.stage);\n }\n this._compile(this.source);\n }\n\n destroy(): void {\n if (this.handle) {\n this.removeStats();\n this.device.gl.deleteShader(this.handle);\n // @ts-expect-error\n this.handle = null;\n }\n }\n\n async compilationInfo(): Promise<readonly CompilerMessage[]> {\n const log = this.device.gl.getShaderInfoLog(this.handle);\n return parseShaderCompilerLog(log);\n }\n\n // PRIVATE METHODS\n\n _compile(source: string): void {\n const addGLSLVersion = (source: string) => source.startsWith('#version ') ? source : `#version 100\\n${source}`;\n source = addGLSLVersion(source);\n\n const {gl} = this.device;\n gl.shaderSource(this.handle, source);\n gl.compileShader(this.handle);\n\n // TODO - For performance reasons, avoid checking shader compilation errors on production?\n // TODO - Load log even when no error reported, to catch warnings?\n // https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings\n const compileStatus = gl.getShaderParameter(this.handle, GL.COMPILE_STATUS);\n if (!compileStatus) {\n const shaderLog = gl.getShaderInfoLog(this.handle);\n const messages = parseShaderCompilerLog(shaderLog).filter(message => message.type === 'error');\n const formattedLog = formatCompilerLog(messages, source);\n const shaderName: string = getShaderInfo(source).name;\n const shaderDescription = `${this.stage} shader ${shaderName}`;\n log.error(`GLSL compilation errors in ${shaderDescription}\\n${formattedLog}`)();\n throw new Error(`GLSL compilation errors in ${shaderName}`);\n }\n }\n}\n\n// HELPERS\n\n/** Deduce an id, from shader source, or supplied id, or shader type */\nfunction getShaderIdFromProps(props: ShaderProps): string {\n return getShaderInfo(props.source).name ||\n props.id ||\n uid(`unnamed ${props.stage}-shader`);\n}\n"],"file":"webgl-shader.js"}
1
+ {"version":3,"sources":["../../../../src/adapter/resources/webgl-shader.ts"],"names":["WEBGLShader","device","props","id","getShaderIdFromProps","stage","handle","gl","createShader","GL","VERTEX_SHADER","FRAGMENT_SHADER","Error","_compile","source","removeStats","deleteShader","destroyed","log","getShaderInfoLog","addGLSLVersion","startsWith","shaderSource","compileShader","compileStatus","getShaderParameter","COMPILE_STATUS","shaderLog","parsedLog","messages","filter","message","type","formattedLog","shaderName","name","shaderDescription","error","Shader"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\nimport {log, uid, Shader, ShaderProps} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {getShaderInfo, CompilerMessage, formatCompilerLog} from '@luma.gl/shadertools';\nimport {parseShaderCompilerLog} from '../helpers/parse-shader-compiler-log';\nimport WebGLDevice from '../webgl-device';\n\n/**\n * An immutable compiled shader program that execute portions of the GPU Pipeline\n */\n export default class WEBGLShader extends Shader {\n readonly device: WebGLDevice;\n readonly handle: WebGLShader;\n\n constructor(device: WebGLDevice, props: ShaderProps) {\n super(device, {id: getShaderIdFromProps(props), ...props});\n this.device = device;\n switch (this.props.stage) {\n case 'vertex':\n this.handle = this.props.handle || this.device.gl.createShader(GL.VERTEX_SHADER);\n break;\n case 'fragment':\n this.handle = this.props.handle || this.device.gl.createShader(GL.FRAGMENT_SHADER);\n break;\n default:\n throw new Error(this.props.stage);\n }\n this._compile(this.source);\n }\n\n destroy(): void {\n if (this.handle) {\n this.removeStats();\n this.device.gl.deleteShader(this.handle);\n // this.handle = null;\n this.destroyed = true;\n }\n }\n\n async compilationInfo(): Promise<readonly CompilerMessage[]> {\n const log = this.device.gl.getShaderInfoLog(this.handle);\n return log ? parseShaderCompilerLog(log) : [];\n }\n\n // PRIVATE METHODS\n\n _compile(source: string): void {\n const addGLSLVersion = (source: string) => source.startsWith('#version ') ? source : `#version 100\\n${source}`;\n source = addGLSLVersion(source);\n\n const {gl} = this.device;\n gl.shaderSource(this.handle, source);\n gl.compileShader(this.handle);\n\n // TODO - For performance reasons, avoid checking shader compilation errors on production?\n // TODO - Load log even when no error reported, to catch warnings?\n // https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings\n const compileStatus = gl.getShaderParameter(this.handle, GL.COMPILE_STATUS);\n if (!compileStatus) {\n const shaderLog = gl.getShaderInfoLog(this.handle);\n const parsedLog = shaderLog ? parseShaderCompilerLog(shaderLog) : [];\n const messages = parsedLog.filter(message => message.type === 'error');\n const formattedLog = formatCompilerLog(messages, source);\n const shaderName: string = getShaderInfo(source).name;\n const shaderDescription = `${this.stage} shader ${shaderName}`;\n log.error(`GLSL compilation errors in ${shaderDescription}\\n${formattedLog}`)();\n throw new Error(`GLSL compilation errors in ${shaderName}`);\n }\n }\n}\n\n// HELPERS\n\n/** Deduce an id, from shader source, or supplied id, or shader type */\nfunction getShaderIdFromProps(props: ShaderProps): string {\n return getShaderInfo(props.source).name ||\n props.id ||\n uid(`unnamed ${props.stage}-shader`);\n}\n"],"file":"webgl-shader.js"}
@@ -118,7 +118,7 @@ var WEBGLTexture = function (_Texture) {
118
118
  this.gl.deleteTexture(this.handle);
119
119
  this.removeStats();
120
120
  this.trackDeallocatedMemory('Texture');
121
- this.handle = null;
121
+ this.destroyed = true;
122
122
  }
123
123
  }
124
124
  }, {
@@ -834,23 +834,23 @@ var WEBGLTexture = function (_Texture) {
834
834
  }
835
835
  }, {
836
836
  key: "setImageData3D",
837
- value: function setImageData3D(_ref3) {
837
+ value: function setImageData3D(options) {
838
838
  var _this9 = this;
839
839
 
840
- var _ref3$level = _ref3.level,
841
- level = _ref3$level === void 0 ? 0 : _ref3$level,
842
- dataFormat = _ref3.dataFormat,
843
- format = _ref3.format,
844
- type = _ref3.type,
845
- width = _ref3.width,
846
- height = _ref3.height,
847
- _ref3$depth = _ref3.depth,
848
- depth = _ref3$depth === void 0 ? 1 : _ref3$depth,
849
- _ref3$offset = _ref3.offset,
850
- offset = _ref3$offset === void 0 ? 0 : _ref3$offset,
851
- data = _ref3.data,
852
- _ref3$parameters = _ref3.parameters,
853
- parameters = _ref3$parameters === void 0 ? {} : _ref3$parameters;
840
+ var _options$level2 = options.level,
841
+ level = _options$level2 === void 0 ? 0 : _options$level2,
842
+ dataFormat = options.dataFormat,
843
+ format = options.format,
844
+ type = options.type,
845
+ width = options.width,
846
+ height = options.height,
847
+ _options$depth = options.depth,
848
+ depth = _options$depth === void 0 ? 1 : _options$depth,
849
+ _options$offset2 = options.offset,
850
+ offset = _options$offset2 === void 0 ? 0 : _options$offset2,
851
+ data = options.data,
852
+ _options$parameters2 = options.parameters,
853
+ parameters = _options$parameters2 === void 0 ? {} : _options$parameters2;
854
854
  this.trackDeallocatedMemory('Texture');
855
855
  this.gl.bindTexture(this.target, this.handle);
856
856
  var webglTextureFormat = (0, _textureFormats.getWebGLTextureParameters)(this.gl, format);