@omnimedia/omnitool 1.1.0-42 → 1.1.0-44

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 (179) hide show
  1. package/package.json +17 -18
  2. package/s/demo/demo.bundle.ts +20 -40
  3. package/s/demo/routines/export-test.ts +8 -0
  4. package/s/demo/routines/playback-test.ts +21 -0
  5. package/s/demo/routines/timeline-setup.ts +24 -0
  6. package/s/demo/routines/transcode-test.ts +2 -0
  7. package/s/driver/driver-worker.ts +9 -0
  8. package/s/driver/driver.test.ts +1 -1
  9. package/s/driver/driver.ts +8 -22
  10. package/s/driver/fns/schematic.ts +6 -2
  11. package/s/driver/fns/work.ts +2 -133
  12. package/s/driver/parts/compositor.ts +178 -0
  13. package/s/driver/parts/machina.ts +19 -20
  14. package/s/index.ts +1 -0
  15. package/s/timeline/index.ts +1 -1
  16. package/s/timeline/parts/media.ts +11 -2
  17. package/s/timeline/parts/{compositor → renderers}/parts/html-tree.ts +2 -2
  18. package/s/timeline/parts/{compositor → renderers}/parts/tree-builder.ts +4 -2
  19. package/s/timeline/parts/{compositor → renderers}/playback.ts +4 -13
  20. package/s/timeline/parts/{compositor → renderers}/samplers/html.ts +19 -5
  21. package/s/timeline/parts/{compositor → renderers}/samplers/webcodecs.ts +1 -1
  22. package/s/timeline/parts/resource-pool.ts +8 -4
  23. package/s/timeline/parts/resource.ts +1 -0
  24. package/s/timeline/sugar/o.ts +10 -2
  25. package/s/timeline/sugar/omni-test.ts +14 -14
  26. package/s/timeline/sugar/omni.ts +2 -2
  27. package/s/timeline/utils/datafile.ts +14 -4
  28. package/s/timeline/utils/dummy-data.ts +3 -3
  29. package/x/demo/WebGLRenderer-Q3OV2JVE.js +2 -0
  30. package/x/demo/WebGLRenderer-Q3OV2JVE.js.map +7 -0
  31. package/x/demo/WebGPURenderer-FUFF62QA.js +2 -0
  32. package/x/demo/WebGPURenderer-FUFF62QA.js.map +7 -0
  33. package/x/demo/browserAll-PGQYU756.js +2 -0
  34. package/x/demo/browserAll-PGQYU756.js.map +7 -0
  35. package/x/demo/chunk-2RBLPWNG.js +393 -0
  36. package/x/demo/chunk-2RBLPWNG.js.map +7 -0
  37. package/x/demo/chunk-6DBMQOFE.js +42 -0
  38. package/x/demo/chunk-6DBMQOFE.js.map +7 -0
  39. package/x/demo/chunk-LAJHJD2S.js +2 -0
  40. package/x/demo/chunk-LAJHJD2S.js.map +7 -0
  41. package/x/demo/chunk-LQU5JKKZ.js +269 -0
  42. package/x/demo/chunk-LQU5JKKZ.js.map +7 -0
  43. package/x/demo/chunk-RFNLITDQ.js +327 -0
  44. package/x/demo/chunk-RFNLITDQ.js.map +7 -0
  45. package/x/demo/chunk-TBWCKYN2.js +2 -0
  46. package/x/demo/chunk-TBWCKYN2.js.map +7 -0
  47. package/x/demo/chunk-TLDBHU4V.js +15 -0
  48. package/x/demo/chunk-TLDBHU4V.js.map +7 -0
  49. package/x/demo/chunk-X2GHKWPJ.js +157 -0
  50. package/x/demo/chunk-X2GHKWPJ.js.map +7 -0
  51. package/x/demo/demo.bundle.js +18 -27
  52. package/x/demo/demo.bundle.js.map +1 -1
  53. package/x/demo/demo.bundle.min.js +2378 -534
  54. package/x/demo/demo.bundle.min.js.map +4 -4
  55. package/x/demo/routines/export-test.d.ts +2 -0
  56. package/x/demo/routines/export-test.js +7 -0
  57. package/x/demo/routines/export-test.js.map +1 -0
  58. package/x/demo/routines/playback-test.d.ts +3 -0
  59. package/x/demo/routines/playback-test.js +17 -0
  60. package/x/demo/routines/playback-test.js.map +1 -0
  61. package/x/demo/routines/timeline-setup.d.ts +6 -0
  62. package/x/demo/routines/timeline-setup.js +13 -0
  63. package/x/demo/routines/timeline-setup.js.map +1 -0
  64. package/x/demo/routines/transcode-test.js +2 -0
  65. package/x/demo/routines/transcode-test.js.map +1 -1
  66. package/x/demo/webworkerAll-3YNCLHCR.js +2 -0
  67. package/x/demo/webworkerAll-3YNCLHCR.js.map +7 -0
  68. package/x/driver/WebGLRenderer-OMRWYQIV.js +2 -0
  69. package/x/driver/WebGLRenderer-OMRWYQIV.js.map +7 -0
  70. package/x/driver/WebGPURenderer-KQJB2OJJ.js +2 -0
  71. package/x/driver/WebGPURenderer-KQJB2OJJ.js.map +7 -0
  72. package/x/driver/browserAll-YBZEJCN3.js +2 -0
  73. package/x/driver/browserAll-YBZEJCN3.js.map +7 -0
  74. package/x/driver/chunk-3L3MB5NY.js +393 -0
  75. package/x/driver/chunk-3L3MB5NY.js.map +7 -0
  76. package/x/driver/chunk-42BQ4XKE.js +269 -0
  77. package/x/driver/chunk-42BQ4XKE.js.map +7 -0
  78. package/x/driver/chunk-4HAYG3N5.js +327 -0
  79. package/x/driver/chunk-4HAYG3N5.js.map +7 -0
  80. package/x/driver/chunk-BFBY7VYB.js +42 -0
  81. package/x/driver/chunk-BFBY7VYB.js.map +7 -0
  82. package/x/driver/chunk-KM6O72WE.js +157 -0
  83. package/x/driver/chunk-KM6O72WE.js.map +7 -0
  84. package/x/driver/chunk-N6HD4WYJ.js +2 -0
  85. package/x/driver/chunk-N6HD4WYJ.js.map +7 -0
  86. package/x/driver/chunk-WCZ2O3UN.js +15 -0
  87. package/x/driver/chunk-WCZ2O3UN.js.map +7 -0
  88. package/x/driver/chunk-XWNSF3WJ.js +2 -0
  89. package/x/driver/chunk-XWNSF3WJ.js.map +7 -0
  90. package/x/driver/driver-worker.d.ts +1 -0
  91. package/x/driver/driver-worker.js +6 -0
  92. package/x/driver/driver-worker.js.map +1 -0
  93. package/x/driver/driver.d.ts +5 -4
  94. package/x/driver/driver.js +10 -20
  95. package/x/driver/driver.js.map +1 -1
  96. package/x/driver/driver.test.js +1 -1
  97. package/x/driver/driver.test.js.map +1 -1
  98. package/x/driver/driver.worker.bundle.min.js +119 -3504
  99. package/x/driver/driver.worker.bundle.min.js.map +4 -4
  100. package/x/driver/fns/host.d.ts +1 -2
  101. package/x/driver/fns/schematic.d.ts +6 -1
  102. package/x/driver/fns/work.d.ts +2 -4
  103. package/x/driver/fns/work.js +1 -100
  104. package/x/driver/fns/work.js.map +1 -1
  105. package/x/driver/parts/compositor.d.ts +15 -0
  106. package/x/driver/parts/compositor.js +152 -0
  107. package/x/driver/parts/compositor.js.map +1 -0
  108. package/x/driver/parts/machina.d.ts +0 -20
  109. package/x/driver/parts/machina.js +6 -10
  110. package/x/driver/parts/machina.js.map +1 -1
  111. package/x/driver/webworkerAll-BKJQW6P7.js +2 -0
  112. package/x/driver/webworkerAll-BKJQW6P7.js.map +7 -0
  113. package/x/features/speech/transcribe/parts/prep-audio.d.ts +1 -1
  114. package/x/features/speech/transcribe/worker.bundle.min.js +899 -899
  115. package/x/features/speech/transcribe/worker.bundle.min.js.map +4 -4
  116. package/x/index.d.ts +1 -0
  117. package/x/index.html +2 -2
  118. package/x/index.js +1 -0
  119. package/x/index.js.map +1 -1
  120. package/x/timeline/index.d.ts +1 -1
  121. package/x/timeline/index.js +1 -1
  122. package/x/timeline/index.js.map +1 -1
  123. package/x/timeline/parts/filmstrip.d.ts +1 -1
  124. package/x/timeline/parts/media.d.ts +2 -0
  125. package/x/timeline/parts/media.js +10 -2
  126. package/x/timeline/parts/media.js.map +1 -1
  127. package/x/timeline/parts/renderers/export.js.map +1 -0
  128. package/x/timeline/parts/{compositor → renderers}/parts/html-tree.js +2 -2
  129. package/x/timeline/parts/renderers/parts/html-tree.js.map +1 -0
  130. package/x/timeline/parts/renderers/parts/schedulers.js.map +1 -0
  131. package/x/timeline/parts/{compositor → renderers}/parts/tree-builder.js +4 -2
  132. package/x/timeline/parts/renderers/parts/tree-builder.js.map +1 -0
  133. package/x/timeline/parts/renderers/parts/webcodecs-tree.js.map +1 -0
  134. package/x/timeline/parts/{compositor → renderers}/playback.d.ts +2 -4
  135. package/x/timeline/parts/{compositor → renderers}/playback.js +5 -14
  136. package/x/timeline/parts/renderers/playback.js.map +1 -0
  137. package/x/timeline/parts/{compositor → renderers}/samplers/html.js +14 -5
  138. package/x/timeline/parts/renderers/samplers/html.js.map +1 -0
  139. package/x/timeline/parts/{compositor → renderers}/samplers/webcodecs.js +1 -1
  140. package/x/timeline/parts/renderers/samplers/webcodecs.js.map +1 -0
  141. package/x/timeline/parts/resource-pool.d.ts +2 -0
  142. package/x/timeline/parts/resource-pool.js +7 -4
  143. package/x/timeline/parts/resource-pool.js.map +1 -1
  144. package/x/timeline/parts/resource.d.ts +1 -0
  145. package/x/timeline/sugar/o.d.ts +4 -1
  146. package/x/timeline/sugar/o.js +4 -2
  147. package/x/timeline/sugar/o.js.map +1 -1
  148. package/x/timeline/sugar/omni-test.js +14 -7
  149. package/x/timeline/sugar/omni-test.js.map +1 -1
  150. package/x/timeline/sugar/omni.d.ts +1 -2
  151. package/x/timeline/sugar/omni.js +2 -2
  152. package/x/timeline/sugar/omni.js.map +1 -1
  153. package/x/timeline/utils/datafile.d.ts +4 -3
  154. package/x/timeline/utils/datafile.js +16 -5
  155. package/x/timeline/utils/datafile.js.map +1 -1
  156. package/x/timeline/utils/dummy-data.d.ts +1 -2
  157. package/x/timeline/utils/dummy-data.js +4 -2
  158. package/x/timeline/utils/dummy-data.js.map +1 -1
  159. package/x/timeline/parts/compositor/export.js.map +0 -1
  160. package/x/timeline/parts/compositor/parts/html-tree.js.map +0 -1
  161. package/x/timeline/parts/compositor/parts/schedulers.js.map +0 -1
  162. package/x/timeline/parts/compositor/parts/tree-builder.js.map +0 -1
  163. package/x/timeline/parts/compositor/parts/webcodecs-tree.js.map +0 -1
  164. package/x/timeline/parts/compositor/playback.js.map +0 -1
  165. package/x/timeline/parts/compositor/samplers/html.js.map +0 -1
  166. package/x/timeline/parts/compositor/samplers/webcodecs.js.map +0 -1
  167. /package/s/timeline/parts/{compositor → renderers}/export.ts +0 -0
  168. /package/s/timeline/parts/{compositor → renderers}/parts/schedulers.ts +0 -0
  169. /package/s/timeline/parts/{compositor → renderers}/parts/webcodecs-tree.ts +0 -0
  170. /package/x/timeline/parts/{compositor → renderers}/export.d.ts +0 -0
  171. /package/x/timeline/parts/{compositor → renderers}/export.js +0 -0
  172. /package/x/timeline/parts/{compositor → renderers}/parts/html-tree.d.ts +0 -0
  173. /package/x/timeline/parts/{compositor → renderers}/parts/schedulers.d.ts +0 -0
  174. /package/x/timeline/parts/{compositor → renderers}/parts/schedulers.js +0 -0
  175. /package/x/timeline/parts/{compositor → renderers}/parts/tree-builder.d.ts +0 -0
  176. /package/x/timeline/parts/{compositor → renderers}/parts/webcodecs-tree.d.ts +0 -0
  177. /package/x/timeline/parts/{compositor → renderers}/parts/webcodecs-tree.js +0 -0
  178. /package/x/timeline/parts/{compositor → renderers}/samplers/html.d.ts +0 -0
  179. /package/x/timeline/parts/{compositor → renderers}/samplers/webcodecs.d.ts +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/pixi.js/src/scene/graphics/gl/GlGraphicsAdaptor.ts", "../../node_modules/pixi.js/src/scene/mesh/gl/GlMeshAdaptor.ts", "../../node_modules/pixi.js/src/rendering/batcher/gl/GlBatchAdaptor.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/buffer/const.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/buffer/GlBuffer.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/buffer/GlBufferSystem.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/context/GlContextSystem.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/texture/const.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/geometry/utils/getGlTypeFromFormat.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/geometry/GlGeometrySystem.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/GlBackBufferSystem.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/GlColorMaskSystem.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/GlEncoderSystem.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/GlLimitsSystem.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/GlStencilSystem.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/utils/createUboElementsSTD40.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/utils/generateArraySyncSTD40.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/utils/createUboSyncSTD40.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/GlUboSystem.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/GlRenderTarget.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/renderTarget/GlRenderTargetAdaptor.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/renderTarget/GlRenderTargetSystem.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/GenerateShaderSyncCode.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/GlProgramData.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/program/compileShader.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/program/defaultValue.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/program/mapType.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/program/extractAttributesFromGlProgram.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/program/getUboData.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/program/getUniformData.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/program/logProgramError.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/program/generateProgram.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/GlShaderSystem.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/utils/generateUniformsSyncTypes.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/utils/generateUniformsSync.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/shader/GlUniformGroupSystem.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/state/mapWebGLBlendModesToPixi.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/state/GlStateSystem.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/texture/GlTexture.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/texture/uploaders/glUploadBufferImageResource.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/texture/uploaders/glUploadCompressedTextureResource.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/texture/uploaders/glUploadImageResource.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/texture/uploaders/glUploadVideoResource.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/texture/utils/pixiToGlMaps.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/texture/utils/applyStyleParams.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/texture/utils/mapFormatToGlFormat.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/texture/utils/mapFormatToGlInternalFormat.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/texture/utils/mapFormatToGlType.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/texture/GlTextureSystem.ts", "../../node_modules/pixi.js/src/rendering/renderers/gl/WebGLRenderer.ts"],
4
+ "sourcesContent": ["import { ExtensionType } from '../../../extensions/Extensions';\nimport { Matrix } from '../../../maths/matrix/Matrix';\nimport { compileHighShaderGlProgram } from '../../../rendering/high-shader/compileHighShaderToProgram';\nimport { colorBitGl } from '../../../rendering/high-shader/shader-bits/colorBit';\nimport { generateTextureBatchBitGl } from '../../../rendering/high-shader/shader-bits/generateTextureBatchBit';\nimport { localUniformBitGl } from '../../../rendering/high-shader/shader-bits/localUniformBit';\nimport { roundPixelsBitGl } from '../../../rendering/high-shader/shader-bits/roundPixelsBit';\nimport { getBatchSamplersUniformGroup } from '../../../rendering/renderers/gl/shader/getBatchSamplersUniformGroup';\nimport { Shader } from '../../../rendering/renderers/shared/shader/Shader';\nimport { UniformGroup } from '../../../rendering/renderers/shared/shader/UniformGroup';\nimport { type Renderer } from '../../../rendering/renderers/types';\n\nimport type { Batch } from '../../../rendering/batcher/shared/Batcher';\nimport type { WebGLRenderer } from '../../../rendering/renderers/gl/WebGLRenderer';\nimport type { Graphics } from '../shared/Graphics';\nimport type { GraphicsAdaptor, GraphicsPipe } from '../shared/GraphicsPipe';\n\n/**\n * A GraphicsAdaptor that uses WebGL to render graphics.\n * @category rendering\n * @ignore\n */\nexport class GlGraphicsAdaptor implements GraphicsAdaptor\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLPipesAdaptor,\n ],\n name: 'graphics',\n } as const;\n\n public shader: Shader;\n\n public contextChange(renderer: Renderer): void\n {\n const uniforms = new UniformGroup({\n uColor: { value: new Float32Array([1, 1, 1, 1]), type: 'vec4<f32>' },\n uTransformMatrix: { value: new Matrix(), type: 'mat3x3<f32>' },\n uRound: { value: 0, type: 'f32' },\n });\n\n const maxTextures = renderer.limits.maxBatchableTextures;\n\n const glProgram = compileHighShaderGlProgram({\n name: 'graphics',\n bits: [\n colorBitGl,\n generateTextureBatchBitGl(maxTextures),\n localUniformBitGl,\n roundPixelsBitGl,\n ]\n });\n\n this.shader = new Shader({\n glProgram,\n resources: {\n localUniforms: uniforms,\n batchSamplers: getBatchSamplersUniformGroup(maxTextures),\n }\n });\n }\n\n public execute(graphicsPipe: GraphicsPipe, renderable: Graphics): void\n {\n const context = renderable.context;\n const shader = context.customShader || this.shader;\n const renderer = graphicsPipe.renderer as WebGLRenderer;\n const contextSystem = renderer.graphicsContext;\n\n const {\n batcher, instructions,\n } = contextSystem.getContextRenderData(context);\n\n // WebGL specific..\n shader.groups[0] = renderer.globalUniforms.bindGroup;\n\n renderer.state.set(graphicsPipe.state);\n\n renderer.shader.bind(shader);\n\n renderer.geometry.bind(batcher.geometry, shader.glProgram);\n\n const batches = instructions.instructions as Batch[];\n\n for (let i = 0; i < instructions.instructionSize; i++)\n {\n const batch = batches[i];\n\n if (batch.size)\n {\n for (let j = 0; j < batch.textures.count; j++)\n {\n renderer.texture.bind(batch.textures.textures[j], j);\n }\n\n renderer.geometry.draw(batch.topology, batch.size, batch.start);\n }\n }\n }\n\n public destroy(): void\n {\n this.shader.destroy(true);\n this.shader = null;\n }\n}\n", "import { ExtensionType } from '../../../extensions/Extensions';\nimport { Matrix } from '../../../maths/matrix/Matrix';\nimport { compileHighShaderGlProgram } from '../../../rendering/high-shader/compileHighShaderToProgram';\nimport { localUniformBitGl } from '../../../rendering/high-shader/shader-bits/localUniformBit';\nimport { roundPixelsBitGl } from '../../../rendering/high-shader/shader-bits/roundPixelsBit';\nimport { textureBitGl } from '../../../rendering/high-shader/shader-bits/textureBit';\nimport { Shader } from '../../../rendering/renderers/shared/shader/Shader';\nimport { Texture } from '../../../rendering/renderers/shared/texture/Texture';\nimport { warn } from '../../../utils/logging/warn';\n\nimport type { Mesh } from '../shared/Mesh';\nimport type { MeshAdaptor, MeshPipe } from '../shared/MeshPipe';\n\n/**\n * A MeshAdaptor that uses the WebGL to render meshes.\n * @category rendering\n * @ignore\n */\nexport class GlMeshAdaptor implements MeshAdaptor\n{\n public static extension = {\n type: [\n ExtensionType.WebGLPipesAdaptor,\n ],\n name: 'mesh',\n } as const;\n\n private _shader: Shader;\n\n public init(): void\n {\n const glProgram = compileHighShaderGlProgram({\n name: 'mesh',\n bits: [\n localUniformBitGl,\n textureBitGl,\n roundPixelsBitGl,\n ]\n });\n\n this._shader = new Shader({\n glProgram,\n resources: {\n uTexture: Texture.EMPTY.source,\n textureUniforms: {\n uTextureMatrix: { type: 'mat3x3<f32>', value: new Matrix() },\n }\n }\n });\n }\n\n public execute(meshPipe: MeshPipe, mesh: Mesh): void\n {\n const renderer = meshPipe.renderer;\n\n let shader: Shader = mesh._shader;\n\n if (!shader)\n {\n shader = this._shader;\n\n const texture = mesh.texture;\n const source = texture.source;\n\n shader.resources.uTexture = source;\n shader.resources.uSampler = source.style;\n shader.resources.textureUniforms.uniforms.uTextureMatrix = texture.textureMatrix.mapCoord;\n }\n else if (!shader.glProgram)\n {\n // #if _DEBUG\n warn('Mesh shader has no glProgram', mesh.shader);\n // #endif\n\n return;\n }\n\n // setting the groups to be high to be compatible and not\n // overlap any other groups\n shader.groups[100] = renderer.globalUniforms.bindGroup;\n shader.groups[101] = meshPipe.localUniformsBindGroup;\n\n renderer.encoder.draw({\n geometry: mesh._geometry,\n shader,\n state: mesh.state,\n });\n }\n\n public destroy(): void\n {\n this._shader.destroy(true);\n this._shader = null;\n }\n}\n", "import { ExtensionType } from '../../../extensions/Extensions';\nimport { State } from '../../renderers/shared/state/State';\n\nimport type { WebGLRenderer } from '../../renderers/gl/WebGLRenderer';\nimport type { Geometry } from '../../renderers/shared/geometry/Geometry';\nimport type { Shader } from '../../renderers/shared/shader/Shader';\nimport type { Batch } from '../shared/Batcher';\nimport type { BatcherAdaptor, BatcherPipe } from '../shared/BatcherPipe';\n\n/**\n * A BatcherAdaptor that uses WebGL to render batches.\n * @category rendering\n * @ignore\n */\nexport class GlBatchAdaptor implements BatcherAdaptor\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLPipesAdaptor,\n ],\n name: 'batch',\n } as const;\n\n private readonly _tempState = State.for2d();\n\n /**\n * We only want to sync the a batched shaders uniforms once on first use\n * this is a hash of shader uids to a boolean value. When the shader is first bound\n * we set the value to true. When the shader is bound again we check the value and\n * if it is true we know that the uniforms have already been synced and we skip it.\n */\n private _didUploadHash: Record<string, boolean> = {};\n public init(batcherPipe: BatcherPipe): void\n {\n batcherPipe.renderer.runners.contextChange.add(this);\n }\n\n public contextChange(): void\n {\n this._didUploadHash = {};\n }\n\n public start(batchPipe: BatcherPipe, geometry: Geometry, shader: Shader): void\n {\n const renderer = batchPipe.renderer as WebGLRenderer;\n\n const didUpload = this._didUploadHash[shader.uid];\n\n // only want to sync the shade ron its first bind!\n renderer.shader.bind(shader, didUpload);\n\n if (!didUpload)\n {\n this._didUploadHash[shader.uid] = true;\n }\n\n renderer.shader.updateUniformGroup(renderer.globalUniforms.uniformGroup);\n\n renderer.geometry.bind(geometry, shader.glProgram);\n }\n\n public execute(batchPipe: BatcherPipe, batch: Batch): void\n {\n const renderer = batchPipe.renderer as WebGLRenderer;\n\n this._tempState.blendMode = batch.blendMode;\n\n renderer.state.set(this._tempState);\n\n const textures = batch.textures.textures;\n\n for (let i = 0; i < batch.textures.count; i++)\n {\n renderer.texture.bind(textures[i], i);\n }\n\n renderer.geometry.draw(batch.topology, batch.size, batch.start);\n }\n}\n", "/**\n * Constants for various buffer types in Pixi\n * @category rendering\n * @advanced\n */\nexport enum BUFFER_TYPE\n{\n /** buffer type for using as an index buffer */\n ELEMENT_ARRAY_BUFFER = 34963,\n /** buffer type for using attribute data */\n ARRAY_BUFFER = 34962,\n /** the buffer type is for uniform buffer objects */\n UNIFORM_BUFFER = 35345,\n}\n\n", "import type { BUFFER_TYPE } from './const';\n\n/** @internal */\nexport class GlBuffer\n{\n public buffer: WebGLBuffer;\n public updateID: number;\n public byteLength: number;\n public type: number;\n\n public _lastBindBaseLocation: number = -1;\n public _lastBindCallId: number = -1;\n\n constructor(buffer: WebGLBuffer, type: BUFFER_TYPE)\n {\n this.buffer = buffer || null;\n this.updateID = -1;\n this.byteLength = -1;\n this.type = type;\n }\n}\n", "import { ExtensionType } from '../../../../extensions/Extensions';\nimport { BufferUsage } from '../../shared/buffer/const';\nimport { BUFFER_TYPE } from './const';\nimport { GlBuffer } from './GlBuffer';\n\nimport type { Buffer } from '../../shared/buffer/Buffer';\nimport type { System } from '../../shared/system/System';\nimport type { GlRenderingContext } from '../context/GlRenderingContext';\nimport type { WebGLRenderer } from '../WebGLRenderer';\n\n/**\n * System plugin to the renderer to manage buffers.\n *\n * WebGL uses Buffers as a way to store objects to the GPU.\n * This system makes working with them a lot easier.\n *\n * Buffers are used in three main places in WebGL\n * - geometry information\n * - Uniform information (via uniform buffer objects - a WebGL 2 only feature)\n * - Transform feedback information. (WebGL 2 only feature)\n *\n * This system will handle the binding of buffers to the GPU as well as uploading\n * them. With this system, you never need to work directly with GPU buffers, but instead work with\n * the Buffer class.\n * @class\n * @category rendering\n * @advanced\n */\nexport class GlBufferSystem implements System\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ],\n name: 'buffer',\n } as const;\n\n private _gl: GlRenderingContext;\n private _gpuBuffers: {[key: number]: GlBuffer} = Object.create(null);\n\n /** Cache keeping track of the base bound buffer bases */\n private _boundBufferBases: {[key: number]: GlBuffer} = Object.create(null);\n\n private _renderer: WebGLRenderer;\n\n private _minBaseLocation = 0;\n private _maxBindings: number;\n private _nextBindBaseIndex = this._minBaseLocation;\n private _bindCallId = 0;\n\n /**\n * @param {Renderer} renderer - The renderer this System works for.\n */\n constructor(renderer: WebGLRenderer)\n {\n this._renderer = renderer;\n\n this._renderer.renderableGC.addManagedHash(this, '_gpuBuffers');\n }\n\n /** @ignore */\n public destroy(): void\n {\n // loop through and delete all buffers\n this.destroyAll();\n this._renderer = null;\n this._gl = null;\n this._gpuBuffers = {};\n this._boundBufferBases = {};\n }\n\n /** Sets up the renderer context and necessary buffers. */\n protected contextChange(): void\n {\n this._gl = this._renderer.gl;\n\n this._gpuBuffers = Object.create(null);\n this._maxBindings = this._renderer.limits.maxUniformBindings;\n }\n\n public getGlBuffer(buffer: Buffer): GlBuffer\n {\n return this._gpuBuffers[buffer.uid] || this.createGLBuffer(buffer);\n }\n\n /**\n * This binds specified buffer. On first run, it will create the webGL buffers for the context too\n * @param buffer - the buffer to bind to the renderer\n */\n public bind(buffer: Buffer): void\n {\n const { _gl: gl } = this;\n\n const glBuffer = this.getGlBuffer(buffer);\n\n gl.bindBuffer(glBuffer.type, glBuffer.buffer);\n }\n\n /**\n * Binds an uniform buffer to at the given index.\n *\n * A cache is used so a buffer will not be bound again if already bound.\n * @param glBuffer - the buffer to bind\n * @param index - the base index to bind it to.\n */\n public bindBufferBase(glBuffer: GlBuffer, index: number): void\n {\n const { _gl: gl } = this;\n\n if (this._boundBufferBases[index] !== glBuffer)\n {\n this._boundBufferBases[index] = glBuffer;\n glBuffer._lastBindBaseLocation = index;\n\n gl.bindBufferBase(gl.UNIFORM_BUFFER, index, glBuffer.buffer);\n }\n }\n\n public nextBindBase(hasTransformFeedback: boolean)\n {\n this._bindCallId++;\n this._minBaseLocation = 0;\n if (hasTransformFeedback)\n {\n this._boundBufferBases[0] = null;\n this._minBaseLocation = 1;\n if (this._nextBindBaseIndex < 1)\n {\n this._nextBindBaseIndex = 1;\n }\n }\n }\n\n public freeLocationForBufferBase(glBuffer: GlBuffer): number\n {\n let freeIndex = this.getLastBindBaseLocation(glBuffer);\n\n // check if it is already bound..\n if (freeIndex >= this._minBaseLocation)\n {\n glBuffer._lastBindCallId = this._bindCallId;\n\n return freeIndex;\n }\n\n let loop = 0;\n let nextIndex = this._nextBindBaseIndex;\n\n while (loop < 2)\n {\n if (nextIndex >= this._maxBindings)\n {\n nextIndex = this._minBaseLocation;\n loop++;\n }\n\n const curBuf = this._boundBufferBases[nextIndex];\n\n if (curBuf && curBuf._lastBindCallId === this._bindCallId)\n {\n nextIndex++;\n continue;\n }\n break;\n }\n\n freeIndex = nextIndex;\n this._nextBindBaseIndex = nextIndex + 1;\n\n if (loop >= 2)\n {\n // TODO: error\n return -1;\n }\n\n glBuffer._lastBindCallId = this._bindCallId;\n this._boundBufferBases[freeIndex] = null;\n\n return freeIndex;\n }\n\n public getLastBindBaseLocation(glBuffer: GlBuffer): number\n {\n const index = glBuffer._lastBindBaseLocation;\n\n if (this._boundBufferBases[index] === glBuffer)\n {\n return index;\n }\n\n return -1;\n }\n\n /**\n * Binds a buffer whilst also binding its range.\n * This will make the buffer start from the offset supplied rather than 0 when it is read.\n * @param glBuffer - the buffer to bind\n * @param index - the base index to bind at, defaults to 0\n * @param offset - the offset to bind at (this is blocks of 256). 0 = 0, 1 = 256, 2 = 512 etc\n * @param size - the size to bind at (this is blocks of 256).\n */\n public bindBufferRange(glBuffer: GlBuffer, index?: number, offset?: number, size?: number): void\n {\n const { _gl: gl } = this;\n\n offset ||= 0;\n index ||= 0;\n\n this._boundBufferBases[index] = null;\n\n gl.bindBufferRange(gl.UNIFORM_BUFFER, index || 0, glBuffer.buffer, offset * 256, size || 256);\n }\n\n /**\n * Will ensure the data in the buffer is uploaded to the GPU.\n * @param {Buffer} buffer - the buffer to update\n */\n public updateBuffer(buffer: Buffer): GlBuffer\n {\n const { _gl: gl } = this;\n\n const glBuffer = this.getGlBuffer(buffer);\n\n if (buffer._updateID === glBuffer.updateID)\n {\n return glBuffer;\n }\n\n glBuffer.updateID = buffer._updateID;\n\n gl.bindBuffer(glBuffer.type, glBuffer.buffer);\n\n const data = buffer.data;\n\n const drawType = (buffer.descriptor.usage & BufferUsage.STATIC) ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW;\n\n if (data)\n {\n if (glBuffer.byteLength >= data.byteLength)\n {\n // assuming our buffers are aligned to 4 bits...\n // offset is always zero for now!\n gl.bufferSubData(glBuffer.type, 0, data, 0, buffer._updateSize / data.BYTES_PER_ELEMENT);\n }\n else\n {\n glBuffer.byteLength = data.byteLength;\n // assuming our buffers are aligned to 4 bits...\n gl.bufferData(glBuffer.type, data, drawType);\n }\n }\n else\n {\n glBuffer.byteLength = buffer.descriptor.size;\n gl.bufferData(glBuffer.type, glBuffer.byteLength, drawType);\n }\n\n return glBuffer;\n }\n\n /** dispose all WebGL resources of all managed buffers */\n public destroyAll(): void\n {\n const gl = this._gl;\n\n for (const id in this._gpuBuffers)\n {\n if (this._gpuBuffers[id]) gl.deleteBuffer(this._gpuBuffers[id].buffer);\n }\n\n this._gpuBuffers = Object.create(null);\n }\n\n /**\n * Disposes buffer\n * @param {Buffer} buffer - buffer with data\n * @param {boolean} [contextLost=false] - If context was lost, we suppress deleteVertexArray\n */\n protected onBufferDestroy(buffer: Buffer, contextLost?: boolean): void\n {\n if (!this._gpuBuffers[buffer.uid]) return;\n const glBuffer = this._gpuBuffers[buffer.uid];\n\n const gl = this._gl;\n\n if (!contextLost)\n {\n gl.deleteBuffer(glBuffer.buffer);\n }\n\n buffer.off('destroy', this.onBufferDestroy, this);\n this._gpuBuffers[buffer.uid] = null;\n }\n\n /**\n * creates and attaches a GLBuffer object tied to the current context.\n * @param buffer\n * @protected\n */\n protected createGLBuffer(buffer: Buffer): GlBuffer\n {\n const { _gl: gl } = this;\n\n let type = BUFFER_TYPE.ARRAY_BUFFER;\n\n if ((buffer.descriptor.usage & BufferUsage.INDEX))\n {\n type = BUFFER_TYPE.ELEMENT_ARRAY_BUFFER;\n }\n else if ((buffer.descriptor.usage & BufferUsage.UNIFORM))\n {\n type = BUFFER_TYPE.UNIFORM_BUFFER;\n }\n\n const glBuffer = new GlBuffer(gl.createBuffer(), type);\n\n this._gpuBuffers[buffer.uid] = glBuffer;\n\n buffer.on('destroy', this.onBufferDestroy, this);\n\n return glBuffer;\n }\n\n public resetState(): void\n {\n this._boundBufferBases = Object.create(null);\n }\n}\n", "import { DOMAdapter } from '../../../../environment/adapter';\nimport { ExtensionType } from '../../../../extensions/Extensions';\nimport { warn } from '../../../../utils/logging/warn';\nimport { type GpuPowerPreference } from '../../types';\n\nimport type { ICanvas } from '../../../../environment/canvas/ICanvas';\nimport type { System } from '../../shared/system/System';\nimport type { WebGLRenderer } from '../WebGLRenderer';\nimport type { WebGLExtensions } from './WebGLExtensions';\n\n/**\n * Options for the context system.\n * @category rendering\n * @advanced\n * @property {WebGL2RenderingContext | null} [context=null] - User-provided WebGL rendering context object.\n * @property {GpuPowerPreference} [powerPreference='default'] - An optional hint indicating what configuration\n * of GPU is suitable for the WebGL context, can be `'high-performance'` or `'low-power'`. Setting to `'high-performance'`\n * will prioritize rendering performance over power consumption, while setting to `'low-power'` will prioritize power saving\n * over rendering performance.\n * @property {boolean} [premultipliedAlpha=true] - Whether the compositor will assume the drawing buffer contains\n * colors with premultiplied alpha.\n * @property {boolean} [preserveDrawingBuffer=false] - Whether to enable drawing buffer preservation.\n * If enabled, the drawing buffer will preserve\n * its value until cleared or overwritten. Enable this if you need to call `toDataUrl` on the WebGL context.\n * @property {boolean} [antialias] - Whether to enable antialiasing.\n * @property {1 | 2} [preferWebGLVersion=2] - The preferred WebGL version to use.\n */\nexport interface ContextSystemOptions\n{\n /**\n * User-provided WebGL rendering context object.\n * @default null\n */\n context: WebGL2RenderingContext | null;\n /**\n * An optional hint indicating what configuration of GPU is suitable for the WebGL context,\n * can be `'high-performance'` or `'low-power'`.\n * Setting to `'high-performance'` will prioritize rendering performance over power consumption,\n * while setting to `'low-power'` will prioritize power saving over rendering performance.\n * @default undefined\n */\n powerPreference?: GpuPowerPreference;\n\n /**\n * Whether the compositor will assume the drawing buffer contains colors with premultiplied alpha.\n * @default true\n */\n premultipliedAlpha: boolean;\n /**\n * Whether to enable drawing buffer preservation. If enabled, the drawing buffer will preserve\n * its value until cleared or overwritten. Enable this if you need to call `toDataUrl` on the WebGL context.\n * @default false\n */\n preserveDrawingBuffer: boolean;\n\n antialias?: boolean;\n\n /**\n * The preferred WebGL version to use.\n * @default 2\n */\n preferWebGLVersion?: 1 | 2;\n\n /**\n * Whether to enable multi-view rendering. Set to true when rendering to multiple\n * canvases on the dom.\n * @default false\n */\n multiView: boolean;\n}\n\n/**\n * System plugin to the renderer to manage the context\n * @category rendering\n * @advanced\n */\nexport class GlContextSystem implements System<ContextSystemOptions>\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ],\n name: 'context',\n } as const;\n\n /** The default options for the system. */\n public static defaultOptions: ContextSystemOptions = {\n /**\n * {@link WebGLOptions.context}\n * @default null\n */\n context: null,\n /**\n * {@link WebGLOptions.premultipliedAlpha}\n * @default true\n */\n premultipliedAlpha: true,\n /**\n * {@link WebGLOptions.preserveDrawingBuffer}\n * @default false\n */\n preserveDrawingBuffer: false,\n /**\n * {@link WebGLOptions.powerPreference}\n * @default default\n */\n powerPreference: undefined,\n /**\n * {@link WebGLOptions.webGLVersion}\n * @default 2\n */\n preferWebGLVersion: 2,\n /**\n * {@link WebGLOptions.multiView}\n * @default false\n */\n multiView: false\n };\n\n protected CONTEXT_UID: number;\n protected gl: WebGL2RenderingContext;\n\n /**\n * Features supported by current renderer.\n * @type {object}\n * @readonly\n */\n public supports = {\n /** Support for 32-bit indices buffer. */\n uint32Indices: true,\n /** Support for UniformBufferObjects */\n uniformBufferObject: true,\n /** Support for VertexArrayObjects */\n vertexArrayObject: true,\n /** Support for SRGB texture format */\n srgbTextures: true,\n /** Support for wrapping modes if a texture is non-power of two */\n nonPowOf2wrapping: true,\n /** Support for MSAA (antialiasing of dynamic textures) */\n msaa: true,\n /** Support for mipmaps if a texture is non-power of two */\n nonPowOf2mipmaps: true,\n };\n\n /**\n * Extensions available.\n * @type {object}\n * @readonly\n * @property {WEBGL_draw_buffers} drawBuffers - WebGL v1 extension\n * @property {WEBGL_depth_texture} depthTexture - WebGL v1 extension\n * @property {OES_texture_float} floatTexture - WebGL v1 extension\n * @property {WEBGL_lose_context} loseContext - WebGL v1 extension\n * @property {OES_vertex_array_object} vertexArrayObject - WebGL v1 extension\n * @property {EXT_texture_filter_anisotropic} anisotropicFiltering - WebGL v1 and v2 extension\n */\n public extensions: WebGLExtensions;\n\n public webGLVersion: 1 | 2;\n\n /**\n * Whether to enable multi-view rendering. Set to true when rendering to multiple\n * canvases on the dom.\n * @default false\n */\n public multiView: boolean;\n\n /**\n * The canvas that the WebGL Context is rendering to.\n * This will be the view canvas. But if multiView is enabled, this canvas will not be attached to the DOM.\n * It will be rendered to and then copied to the target canvas.\n * @readonly\n */\n public canvas: ICanvas;\n\n private _renderer: WebGLRenderer;\n private _contextLossForced: boolean;\n\n /** @param renderer - The renderer this System works for. */\n constructor(renderer: WebGLRenderer)\n {\n this._renderer = renderer;\n\n this.extensions = Object.create(null);\n\n // Bind functions\n this.handleContextLost = this.handleContextLost.bind(this);\n this.handleContextRestored = this.handleContextRestored.bind(this);\n }\n\n /**\n * `true` if the context is lost\n * @readonly\n */\n get isLost(): boolean\n {\n return (!this.gl || this.gl.isContextLost());\n }\n\n /**\n * Handles the context change event.\n * @param {WebGLRenderingContext} gl - New WebGL context.\n */\n protected contextChange(gl: WebGL2RenderingContext): void\n {\n this.gl = gl;\n this._renderer.gl = gl;\n }\n\n public init(options: ContextSystemOptions): void\n {\n options = { ...GlContextSystem.defaultOptions, ...options };\n\n // TODO add to options\n let multiView = this.multiView = options.multiView;\n\n if (options.context && multiView)\n {\n // eslint-disable-next-line max-len\n warn('Renderer created with both a context and multiview enabled. Disabling multiView as both cannot work together.');\n\n multiView = false;\n }\n\n if (multiView)\n {\n this.canvas = DOMAdapter.get()\n .createCanvas(this._renderer.canvas.width, this._renderer.canvas.height);\n }\n else\n {\n this.canvas = this._renderer.view.canvas;\n }\n /*\n * The options passed in to create a new WebGL context.\n */\n if (options.context)\n {\n this.initFromContext(options.context);\n }\n else\n {\n const alpha = this._renderer.background.alpha < 1;\n const premultipliedAlpha = options.premultipliedAlpha ?? true;\n const antialias = options.antialias && !this._renderer.backBuffer.useBackBuffer;\n\n this.createContext(options.preferWebGLVersion, {\n alpha,\n premultipliedAlpha,\n antialias,\n stencil: true,\n preserveDrawingBuffer: options.preserveDrawingBuffer,\n powerPreference: options.powerPreference ?? 'default',\n });\n }\n }\n\n public ensureCanvasSize(targetCanvas: ICanvas): void\n {\n if (!this.multiView)\n {\n if (targetCanvas !== this.canvas)\n {\n warn('multiView is disabled, but targetCanvas is not the main canvas');\n }\n\n return;\n }\n\n const { canvas } = this;\n\n if (canvas.width < targetCanvas.width || canvas.height < targetCanvas.height)\n {\n canvas.width = Math.max(targetCanvas.width, targetCanvas.width);\n canvas.height = Math.max(targetCanvas.height, targetCanvas.height);\n }\n }\n\n /**\n * Initializes the context.\n * @protected\n * @param {WebGLRenderingContext} gl - WebGL context\n */\n protected initFromContext(gl: WebGL2RenderingContext): void\n {\n this.gl = gl;\n\n this.webGLVersion = gl instanceof DOMAdapter.get().getWebGLRenderingContext() ? 1 : 2;\n\n this.getExtensions();\n\n this.validateContext(gl);\n\n this._renderer.runners.contextChange.emit(gl);\n\n const element = this._renderer.view.canvas;\n\n (element as any).addEventListener('webglcontextlost', this.handleContextLost, false);\n element.addEventListener('webglcontextrestored', this.handleContextRestored, false);\n }\n\n /**\n * Initialize from context options\n * @protected\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext\n * @param preferWebGLVersion\n * @param {object} options - context attributes\n */\n protected createContext(preferWebGLVersion: 1 | 2, options: WebGLContextAttributes): void\n {\n let gl: WebGL2RenderingContext | WebGLRenderingContext;\n\n const canvas = this.canvas;\n\n if (preferWebGLVersion === 2)\n {\n gl = canvas.getContext('webgl2', options);\n }\n\n if (!gl)\n {\n gl = canvas.getContext('webgl', options);\n\n if (!gl)\n {\n // fail, not able to get a context\n throw new Error('This browser does not support WebGL. Try using the canvas renderer');\n }\n }\n\n this.gl = gl as WebGL2RenderingContext;\n\n this.initFromContext(this.gl);\n }\n\n /** Auto-populate the {@link GlContextSystem.extensions extensions}. */\n protected getExtensions(): void\n {\n // time to set up default extensions that Pixi uses.\n const { gl } = this;\n\n const common = {\n anisotropicFiltering: gl.getExtension('EXT_texture_filter_anisotropic'),\n floatTextureLinear: gl.getExtension('OES_texture_float_linear'),\n\n s3tc: gl.getExtension('WEBGL_compressed_texture_s3tc'),\n s3tc_sRGB: gl.getExtension('WEBGL_compressed_texture_s3tc_srgb'), // eslint-disable-line camelcase\n etc: gl.getExtension('WEBGL_compressed_texture_etc'),\n etc1: gl.getExtension('WEBGL_compressed_texture_etc1'),\n pvrtc: gl.getExtension('WEBGL_compressed_texture_pvrtc')\n || gl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc'),\n atc: gl.getExtension('WEBGL_compressed_texture_atc'),\n astc: gl.getExtension('WEBGL_compressed_texture_astc'),\n bptc: gl.getExtension('EXT_texture_compression_bptc'),\n rgtc: gl.getExtension('EXT_texture_compression_rgtc'),\n loseContext: gl.getExtension('WEBGL_lose_context'),\n };\n\n if (this.webGLVersion === 1)\n {\n this.extensions = {\n ...common,\n\n drawBuffers: gl.getExtension('WEBGL_draw_buffers'),\n depthTexture: gl.getExtension('WEBGL_depth_texture'),\n vertexArrayObject: gl.getExtension('OES_vertex_array_object')\n || gl.getExtension('MOZ_OES_vertex_array_object')\n || gl.getExtension('WEBKIT_OES_vertex_array_object'),\n uint32ElementIndex: gl.getExtension('OES_element_index_uint'),\n // Floats and half-floats\n floatTexture: gl.getExtension('OES_texture_float'),\n floatTextureLinear: gl.getExtension('OES_texture_float_linear'),\n textureHalfFloat: gl.getExtension('OES_texture_half_float'),\n textureHalfFloatLinear: gl.getExtension('OES_texture_half_float_linear'),\n vertexAttribDivisorANGLE: gl.getExtension('ANGLE_instanced_arrays'),\n srgb: gl.getExtension('EXT_sRGB'),\n };\n }\n else\n {\n this.extensions = {\n ...common,\n colorBufferFloat: gl.getExtension('EXT_color_buffer_float'),\n };\n\n const provokeExt = gl.getExtension('WEBGL_provoking_vertex');\n\n if (provokeExt)\n {\n provokeExt.provokingVertexWEBGL(provokeExt.FIRST_VERTEX_CONVENTION_WEBGL);\n }\n }\n }\n\n /**\n * Handles a lost webgl context\n * @param {WebGLContextEvent} event - The context lost event.\n */\n protected handleContextLost(event: WebGLContextEvent): void\n {\n event.preventDefault();\n\n // only restore if we purposefully nuked it\n if (this._contextLossForced)\n {\n this._contextLossForced = false;\n // Restore the context after this event has exited\n setTimeout(() =>\n {\n if (this.gl.isContextLost())\n {\n this.extensions.loseContext?.restoreContext();\n }\n }, 0);\n }\n }\n\n /** Handles a restored webgl context. */\n protected handleContextRestored(): void\n {\n this.getExtensions(); // restore extensions state\n this._renderer.runners.contextChange.emit(this.gl);\n }\n\n public destroy(): void\n {\n const element = this._renderer.view.canvas;\n\n this._renderer = null;\n\n // remove listeners\n (element as any).removeEventListener('webglcontextlost', this.handleContextLost);\n element.removeEventListener('webglcontextrestored', this.handleContextRestored);\n\n this.gl.useProgram(null);\n\n this.extensions.loseContext?.loseContext();\n }\n\n /**\n * this function can be called to force a webGL context loss\n * this will release all resources on the GPU.\n * Useful if you need to put Pixi to sleep, and save some GPU memory\n *\n * As soon as render is called - all resources will be created again.\n */\n public forceContextLoss(): void\n {\n this.extensions.loseContext?.loseContext();\n this._contextLossForced = true;\n }\n /**\n * Validate context.\n * @param {WebGLRenderingContext} gl - Render context.\n */\n protected validateContext(gl: WebGL2RenderingContext): void\n {\n const attributes = gl.getContextAttributes();\n\n // this is going to be fairly simple for now.. but at least we have room to grow!\n if (attributes && !attributes.stencil)\n {\n // #if _DEBUG\n warn('Provided WebGL context does not have a stencil buffer, masks may not render correctly');\n // #endif\n }\n\n // support\n const supports = this.supports;\n\n const isWebGl2 = this.webGLVersion === 2;\n const extensions = this.extensions;\n\n supports.uint32Indices = isWebGl2 || !!extensions.uint32ElementIndex;\n supports.uniformBufferObject = isWebGl2;\n supports.vertexArrayObject = isWebGl2 || !!extensions.vertexArrayObject;\n supports.srgbTextures = isWebGl2 || !!extensions.srgb;\n supports.nonPowOf2wrapping = isWebGl2;\n supports.nonPowOf2mipmaps = isWebGl2;\n supports.msaa = isWebGl2;\n\n if (!supports.uint32Indices)\n {\n // #if _DEBUG\n warn('Provided WebGL context does not support 32 index buffer, large scenes may not render correctly');\n // #endif\n }\n }\n}\n", "/**\n * Various GL texture/resources formats.\n * @category rendering\n * @advanced\n */\nexport enum GL_FORMATS\n{\n RGBA = 6408,\n RGB = 6407,\n RG = 33319,\n RED = 6403,\n RGBA_INTEGER = 36249,\n RGB_INTEGER = 36248,\n RG_INTEGER = 33320,\n RED_INTEGER = 36244,\n ALPHA = 6406,\n LUMINANCE = 6409,\n LUMINANCE_ALPHA = 6410,\n DEPTH_COMPONENT = 6402,\n DEPTH_STENCIL = 34041,\n}\n\n/**\n * Various GL target types.\n * @category rendering\n * @advanced\n */\nexport enum GL_TARGETS\n{\n TEXTURE_2D = 3553,\n TEXTURE_CUBE_MAP = 34067,\n TEXTURE_2D_ARRAY = 35866,\n TEXTURE_CUBE_MAP_POSITIVE_X = 34069,\n TEXTURE_CUBE_MAP_NEGATIVE_X = 34070,\n TEXTURE_CUBE_MAP_POSITIVE_Y = 34071,\n TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072,\n TEXTURE_CUBE_MAP_POSITIVE_Z = 34073,\n TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074,\n}\n\n/**\n * The wrap modes that are supported by pixi.\n *\n * The {@link WRAP_MODE} wrap mode affects the default wrapping mode of future operations.\n * It can be re-assigned to either CLAMP or REPEAT, depending upon suitability.\n * If the texture is non power of two then clamp will be used regardless as WebGL can\n * only use REPEAT if the texture is po2.\n *\n * This property only affects WebGL.\n * @category rendering\n * @advanced\n */\nexport enum GL_WRAP_MODES\n{\n /**\n * The textures uvs are clamped\n * @default 33071\n */\n CLAMP = 33071,\n /**\n * The texture uvs tile and repeat\n * @default 10497\n */\n REPEAT = 10497,\n /**\n * The texture uvs tile and repeat with mirroring\n * @default 33648\n */\n MIRRORED_REPEAT = 33648,\n}\n\n/** @internal */\nexport enum GL_TYPES\n{\n /**\n * 8 bits per channel for gl.RGBA\n * @default 5121\n */\n UNSIGNED_BYTE = 5121,\n /** @default 5123 */\n UNSIGNED_SHORT = 5123,\n /**\n * 5 red bits, 6 green bits, 5 blue bits.\n * @default 33635\n */\n UNSIGNED_SHORT_5_6_5 = 33635,\n /**\n * 4 red bits, 4 green bits, 4 blue bits, 4 alpha bits.\n * @default 32819\n */\n UNSIGNED_SHORT_4_4_4_4 = 32819,\n /**\n * 5 red bits, 5 green bits, 5 blue bits, 1 alpha bit.\n * @default 32820\n */\n UNSIGNED_SHORT_5_5_5_1 = 32820,\n /** @default 5125 */\n UNSIGNED_INT = 5125,\n /** @default 35899 */\n UNSIGNED_INT_10F_11F_11F_REV = 35899,\n /** @default 33640 */\n UNSIGNED_INT_2_10_10_10_REV = 33640,\n /** @default 34042 */\n UNSIGNED_INT_24_8 = 34042,\n /** @default 35902 */\n UNSIGNED_INT_5_9_9_9_REV = 35902,\n /** @default 5120 */\n BYTE = 5120,\n /** @default 5122 */\n SHORT = 5122,\n /** @default 5124 */\n INT = 5124,\n /** @default 5126 */\n FLOAT = 5126,\n /** @default 36269 */\n FLOAT_32_UNSIGNED_INT_24_8_REV = 36269,\n /** @default 36193 */\n HALF_FLOAT = 36193,\n}\n\n", "import { GL_TYPES } from '../../texture/const';\n\nimport type { VertexFormat } from '../../../shared/geometry/const';\n\nconst infoMap = {\n uint8x2: GL_TYPES.UNSIGNED_BYTE,\n uint8x4: GL_TYPES.UNSIGNED_BYTE,\n sint8x2: GL_TYPES.BYTE,\n sint8x4: GL_TYPES.BYTE,\n unorm8x2: GL_TYPES.UNSIGNED_BYTE,\n unorm8x4: GL_TYPES.UNSIGNED_BYTE,\n snorm8x2: GL_TYPES.BYTE,\n snorm8x4: GL_TYPES.BYTE,\n uint16x2: GL_TYPES.UNSIGNED_SHORT,\n uint16x4: GL_TYPES.UNSIGNED_SHORT,\n sint16x2: GL_TYPES.SHORT,\n sint16x4: GL_TYPES.SHORT,\n unorm16x2: GL_TYPES.UNSIGNED_SHORT,\n unorm16x4: GL_TYPES.UNSIGNED_SHORT,\n snorm16x2: GL_TYPES.SHORT,\n snorm16x4: GL_TYPES.SHORT,\n float16x2: GL_TYPES.HALF_FLOAT,\n float16x4: GL_TYPES.HALF_FLOAT,\n float32: GL_TYPES.FLOAT,\n float32x2: GL_TYPES.FLOAT,\n float32x3: GL_TYPES.FLOAT,\n float32x4: GL_TYPES.FLOAT,\n uint32: GL_TYPES.UNSIGNED_INT,\n uint32x2: GL_TYPES.UNSIGNED_INT,\n uint32x3: GL_TYPES.UNSIGNED_INT,\n uint32x4: GL_TYPES.UNSIGNED_INT,\n sint32: GL_TYPES.INT,\n sint32x2: GL_TYPES.INT,\n sint32x3: GL_TYPES.INT,\n sint32x4: GL_TYPES.INT\n};\n\n/**\n * @param format\n * @internal\n */\nexport function getGlTypeFromFormat(format: VertexFormat): number\n{\n return infoMap[format] ?? infoMap.float32;\n}\n", "import { ExtensionType } from '../../../../extensions/Extensions';\nimport { getAttributeInfoFromFormat } from '../../shared/geometry/utils/getAttributeInfoFromFormat';\nimport { ensureAttributes } from '../shader/program/ensureAttributes';\nimport { getGlTypeFromFormat } from './utils/getGlTypeFromFormat';\n\nimport type { Topology } from '../../shared/geometry/const';\nimport type { Geometry } from '../../shared/geometry/Geometry';\nimport type { System } from '../../shared/system/System';\nimport type { GlRenderingContext } from '../context/GlRenderingContext';\nimport type { GlProgram } from '../shader/GlProgram';\nimport type { WebGLRenderer } from '../WebGLRenderer';\n\nconst topologyToGlMap = {\n 'point-list': 0x0000,\n 'line-list': 0x0001,\n 'line-strip': 0x0003,\n 'triangle-list': 0x0004,\n 'triangle-strip': 0x0005\n};\n\n/**\n * System plugin to the renderer to manage geometry.\n * @category rendering\n * @advanced\n */\nexport class GlGeometrySystem implements System\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ],\n name: 'geometry',\n } as const;\n\n /**\n * `true` if we has `*_vertex_array_object` extension.\n * @readonly\n */\n public hasVao: boolean;\n\n /**\n * `true` if has `ANGLE_instanced_arrays` extension.\n * @readonly\n */\n public hasInstance: boolean;\n\n protected gl: GlRenderingContext;\n protected _activeGeometry: Geometry;\n protected _activeVao: WebGLVertexArrayObject;\n\n protected _geometryVaoHash: Record<number, Record<string, WebGLVertexArrayObject>> = Object.create(null);\n\n /** Renderer that owns this {@link GeometrySystem}. */\n private _renderer: WebGLRenderer;\n\n /** @param renderer - The renderer this System works for. */\n constructor(renderer: WebGLRenderer)\n {\n this._renderer = renderer;\n this._activeGeometry = null;\n this._activeVao = null;\n\n this.hasVao = true;\n this.hasInstance = true;\n\n this._renderer.renderableGC.addManagedHash(this, '_geometryVaoHash');\n }\n\n /** Sets up the renderer context and necessary buffers. */\n protected contextChange(): void\n {\n const gl = this.gl = this._renderer.gl;\n\n if (!this._renderer.context.supports.vertexArrayObject)\n {\n throw new Error('[PixiJS] Vertex Array Objects are not supported on this device');\n }\n\n const nativeVaoExtension = this._renderer.context.extensions.vertexArrayObject;\n\n if (nativeVaoExtension)\n {\n gl.createVertexArray = (): WebGLVertexArrayObject =>\n nativeVaoExtension.createVertexArrayOES();\n\n gl.bindVertexArray = (vao): void =>\n nativeVaoExtension.bindVertexArrayOES(vao);\n\n gl.deleteVertexArray = (vao): void =>\n nativeVaoExtension.deleteVertexArrayOES(vao);\n }\n\n const nativeInstancedExtension = this._renderer.context.extensions.vertexAttribDivisorANGLE;\n\n if (nativeInstancedExtension)\n {\n gl.drawArraysInstanced = (a, b, c, d): void =>\n {\n nativeInstancedExtension.drawArraysInstancedANGLE(a, b, c, d);\n };\n\n gl.drawElementsInstanced = (a, b, c, d, e): void =>\n {\n nativeInstancedExtension.drawElementsInstancedANGLE(a, b, c, d, e);\n };\n\n gl.vertexAttribDivisor = (a, b): void =>\n nativeInstancedExtension.vertexAttribDivisorANGLE(a, b);\n }\n\n this._activeGeometry = null;\n this._activeVao = null;\n this._geometryVaoHash = Object.create(null);\n }\n\n /**\n * Binds geometry so that is can be drawn. Creating a Vao if required\n * @param geometry - Instance of geometry to bind.\n * @param program - Instance of program to use vao for.\n */\n public bind(geometry?: Geometry, program?: GlProgram): void\n {\n // shader ||= this.renderer.shader.shader;\n\n const gl = this.gl;\n\n this._activeGeometry = geometry;\n\n const vao = this.getVao(geometry, program);\n\n if (this._activeVao !== vao)\n {\n this._activeVao = vao;\n\n gl.bindVertexArray(vao);\n }\n\n this.updateBuffers();\n }\n\n /** Reset and unbind any active VAO and geometry. */\n public resetState(): void\n {\n this.unbind();\n }\n\n /** Update buffers of the currently bound geometry. */\n public updateBuffers(): void\n {\n const geometry = this._activeGeometry;\n\n const bufferSystem = this._renderer.buffer;\n\n for (let i = 0; i < geometry.buffers.length; i++)\n {\n const buffer = geometry.buffers[i];\n\n bufferSystem.updateBuffer(buffer);\n }\n }\n\n /**\n * Check compatibility between a geometry and a program\n * @param geometry - Geometry instance.\n * @param program - Program instance.\n */\n protected checkCompatibility(geometry: Geometry, program: GlProgram): void\n {\n // geometry must have at least all the attributes that the shader requires.\n const geometryAttributes = geometry.attributes;\n const shaderAttributes = program._attributeData;\n\n for (const j in shaderAttributes)\n {\n if (!geometryAttributes[j])\n {\n throw new Error(`shader and geometry incompatible, geometry missing the \"${j}\" attribute`);\n }\n }\n }\n\n /**\n * Takes a geometry and program and generates a unique signature for them.\n * @param geometry - To get signature from.\n * @param program - To test geometry against.\n * @returns - Unique signature of the geometry and program\n */\n protected getSignature(geometry: Geometry, program: GlProgram): string\n {\n const attribs = geometry.attributes;\n const shaderAttributes = program._attributeData;\n\n const strings = ['g', geometry.uid];\n\n for (const i in attribs)\n {\n if (shaderAttributes[i])\n {\n strings.push(i, shaderAttributes[i].location);\n }\n }\n\n return strings.join('-');\n }\n\n protected getVao(geometry: Geometry, program: GlProgram): WebGLVertexArrayObject\n {\n return this._geometryVaoHash[geometry.uid]?.[program._key] || this.initGeometryVao(geometry, program);\n }\n\n /**\n * Creates or gets Vao with the same structure as the geometry and stores it on the geometry.\n * If vao is created, it is bound automatically. We use a shader to infer what and how to set up the\n * attribute locations.\n * @param geometry - Instance of geometry to to generate Vao for.\n * @param program\n * @param _incRefCount - Increment refCount of all geometry buffers.\n */\n protected initGeometryVao(geometry: Geometry, program: GlProgram, _incRefCount = true): WebGLVertexArrayObject\n {\n const gl = this._renderer.gl;\n // const CONTEXT_UID = this.CONTEXT_UID;\n const bufferSystem = this._renderer.buffer;\n\n this._renderer.shader._getProgramData(program);\n\n this.checkCompatibility(geometry, program);\n\n const signature = this.getSignature(geometry, program);\n\n if (!this._geometryVaoHash[geometry.uid])\n {\n this._geometryVaoHash[geometry.uid] = Object.create(null);\n\n geometry.on('destroy', this.onGeometryDestroy, this);\n }\n\n const vaoObjectHash = this._geometryVaoHash[geometry.uid];\n\n let vao = vaoObjectHash[signature];\n\n if (vao)\n {\n // this will give us easy access to the vao\n vaoObjectHash[program._key] = vao;\n\n return vao;\n }\n\n ensureAttributes(geometry, program._attributeData);\n\n const buffers = geometry.buffers;\n\n // @TODO: We don't know if VAO is supported.\n vao = gl.createVertexArray();\n\n gl.bindVertexArray(vao);\n\n // first update - and create the buffers!\n // only create a gl buffer if it actually gets\n for (let i = 0; i < buffers.length; i++)\n {\n const buffer = buffers[i];\n\n bufferSystem.bind(buffer);\n }\n\n // TODO - maybe make this a data object?\n // lets wait to see if we need to first!\n\n this.activateVao(geometry, program);\n\n // add it to the cache!\n vaoObjectHash[program._key] = vao;\n vaoObjectHash[signature] = vao;\n\n gl.bindVertexArray(null);\n\n return vao;\n }\n\n /**\n * Disposes geometry.\n * @param geometry - Geometry with buffers. Only VAO will be disposed\n * @param [contextLost=false] - If context was lost, we suppress deleteVertexArray\n */\n protected onGeometryDestroy(geometry: Geometry, contextLost?: boolean): void\n {\n const vaoObjectHash = this._geometryVaoHash[geometry.uid];\n\n const gl = this.gl;\n\n if (vaoObjectHash)\n {\n if (contextLost)\n {\n for (const i in vaoObjectHash)\n {\n if (this._activeVao !== vaoObjectHash[i])\n {\n this.unbind();\n }\n\n gl.deleteVertexArray(vaoObjectHash[i]);\n }\n }\n\n this._geometryVaoHash[geometry.uid] = null;\n }\n }\n\n /**\n * Dispose all WebGL resources of all managed geometries.\n * @param [contextLost=false] - If context was lost, we suppress `gl.delete` calls\n */\n public destroyAll(contextLost = false): void\n {\n const gl = this.gl;\n\n for (const i in this._geometryVaoHash)\n {\n if (contextLost)\n {\n for (const j in this._geometryVaoHash[i])\n {\n const vaoObjectHash = this._geometryVaoHash[i];\n\n if (this._activeVao !== vaoObjectHash)\n {\n this.unbind();\n }\n\n gl.deleteVertexArray(vaoObjectHash[j]);\n }\n }\n\n this._geometryVaoHash[i] = null;\n }\n }\n\n /**\n * Activate vertex array object.\n * @param geometry - Geometry instance.\n * @param program - Shader program instance.\n */\n protected activateVao(geometry: Geometry, program: GlProgram): void\n {\n const gl = this._renderer.gl;\n\n const bufferSystem = this._renderer.buffer;\n const attributes = geometry.attributes;\n\n if (geometry.indexBuffer)\n {\n // first update the index buffer if we have one..\n bufferSystem.bind(geometry.indexBuffer);\n }\n\n let lastBuffer = null;\n\n // add a new one!\n for (const j in attributes)\n {\n const attribute = attributes[j];\n const buffer = attribute.buffer;\n const glBuffer = bufferSystem.getGlBuffer(buffer);\n const programAttrib = program._attributeData[j];\n\n if (programAttrib)\n {\n if (lastBuffer !== glBuffer)\n {\n bufferSystem.bind(buffer);\n\n lastBuffer = glBuffer;\n }\n\n const location = programAttrib.location;\n\n // TODO introduce state again\n // we can optimise this for older devices that have no VAOs\n gl.enableVertexAttribArray(location);\n\n const attributeInfo = getAttributeInfoFromFormat(attribute.format);\n\n const type = getGlTypeFromFormat(attribute.format);\n\n if (programAttrib.format?.substring(1, 4) === 'int')\n {\n gl.vertexAttribIPointer(location,\n attributeInfo.size,\n type,\n attribute.stride,\n attribute.offset);\n }\n else\n {\n gl.vertexAttribPointer(location,\n attributeInfo.size,\n type,\n attributeInfo.normalised,\n attribute.stride,\n attribute.offset);\n }\n\n if (attribute.instance)\n {\n // TODO calculate instance count based of this...\n if (this.hasInstance)\n {\n // Can't use truthiness check to determine if divisor is set,\n // since 0 is a valid value for divisor\n const divisor = attribute.divisor ?? 1;\n\n gl.vertexAttribDivisor(location, divisor);\n }\n else\n {\n throw new Error('geometry error, GPU Instancing is not supported on this device');\n }\n }\n }\n }\n }\n\n /**\n * Draws the currently bound geometry.\n * @param topology - The type primitive to render.\n * @param size - The number of elements to be rendered. If not specified, all vertices after the\n * starting vertex will be drawn.\n * @param start - The starting vertex in the geometry to start drawing from. If not specified,\n * drawing will start from the first vertex.\n * @param instanceCount - The number of instances of the set of elements to execute. If not specified,\n * all instances will be drawn.\n * @returns This instance of the geometry system.\n */\n public draw(topology?: Topology, size?: number, start?: number, instanceCount?: number): this\n {\n const { gl } = this._renderer;\n const geometry = this._activeGeometry;\n\n const glTopology = topologyToGlMap[topology || geometry.topology];\n\n instanceCount ??= geometry.instanceCount;\n\n if (geometry.indexBuffer)\n {\n const byteSize = geometry.indexBuffer.data.BYTES_PER_ELEMENT;\n const glType = byteSize === 2 ? gl.UNSIGNED_SHORT : gl.UNSIGNED_INT;\n\n if (instanceCount !== 1)\n {\n /* eslint-disable max-len */\n gl.drawElementsInstanced(glTopology, size || geometry.indexBuffer.data.length, glType, (start || 0) * byteSize, instanceCount);\n /* eslint-enable max-len */\n }\n else\n {\n gl.drawElements(glTopology, size || geometry.indexBuffer.data.length, glType, (start || 0) * byteSize);\n }\n }\n else if (instanceCount !== 1)\n {\n // TODO need a better way to calculate size..\n gl.drawArraysInstanced(glTopology, start || 0, size || geometry.getSize(), instanceCount);\n }\n else\n {\n gl.drawArrays(glTopology, start || 0, size || geometry.getSize());\n }\n\n return this;\n }\n\n /** Unbind/reset everything. */\n protected unbind(): void\n {\n this.gl.bindVertexArray(null);\n this._activeVao = null;\n this._activeGeometry = null;\n }\n\n public destroy(): void\n {\n this._renderer = null;\n this.gl = null;\n this._activeVao = null;\n this._activeGeometry = null;\n this._geometryVaoHash = {};\n }\n}\n", "import { ExtensionType } from '../../../extensions/Extensions';\nimport { warn } from '../../../utils/logging/warn';\nimport { Geometry } from '../shared/geometry/Geometry';\nimport { Shader } from '../shared/shader/Shader';\nimport { State } from '../shared/state/State';\nimport { TextureSource } from '../shared/texture/sources/TextureSource';\nimport { Texture } from '../shared/texture/Texture';\nimport { GlProgram } from './shader/GlProgram';\n\nimport type { RenderOptions } from '../shared/system/AbstractRenderer';\nimport type { System } from '../shared/system/System';\nimport type { WebGLRenderer } from './WebGLRenderer';\n\nconst bigTriangleGeometry = new Geometry({\n attributes: {\n aPosition: [\n -1.0, -1.0, // Bottom left corner\n 3.0, -1.0, // Bottom right corner, extending beyond right edge\n -1.0, 3.0 // Top left corner, extending beyond top edge\n ],\n },\n});\n\n/**\n * The options for the back buffer system.\n * @category rendering\n * @property {boolean} [useBackBuffer=false] - if true will use the back buffer where required\n * @property {boolean} [antialias=false] - if true will ensure the texture is antialiased\n * @advanced\n */\nexport interface GlBackBufferOptions\n{\n /**\n * if true will use the back buffer where required\n * @default false\n */\n useBackBuffer?: boolean;\n /** if true will ensure the texture is antialiased */\n antialias?: boolean;\n}\n\n/**\n * For blend modes you need to know what pixels you are actually drawing to. For this to be possible in WebGL\n * we need to render to a texture and then present that texture to the screen. This system manages that process.\n *\n * As the main scene is rendered to a texture, it means we can sample it and copy its pixels,\n * something not possible on the main canvas.\n *\n * If antialiasing is set to to true and useBackBuffer is set to true, then the back buffer will be antialiased.\n * and the main gl context will not.\n *\n * You only need to activate this back buffer if you are using a blend mode that requires it.\n *\n * to activate is simple, you pass `useBackBuffer:true` to your render options\n * @category rendering\n * @advanced\n */\nexport class GlBackBufferSystem implements System<GlBackBufferOptions>\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ],\n name: 'backBuffer',\n priority: 1\n } as const;\n\n /** default options for the back buffer system */\n public static defaultOptions: GlBackBufferOptions = {\n /** if true will use the back buffer where required */\n useBackBuffer: false,\n };\n\n /** if true, the back buffer is used */\n public useBackBuffer = false;\n\n private _backBufferTexture: Texture;\n private readonly _renderer: WebGLRenderer;\n private _targetTexture: TextureSource;\n private _useBackBufferThisRender = false;\n private _antialias: boolean;\n private _state: State;\n private _bigTriangleShader: Shader;\n\n constructor(renderer: WebGLRenderer)\n {\n this._renderer = renderer;\n }\n\n public init(options: GlBackBufferOptions = {})\n {\n const { useBackBuffer, antialias } = { ...GlBackBufferSystem.defaultOptions, ...options };\n\n this.useBackBuffer = useBackBuffer;\n\n this._antialias = antialias;\n\n if (!this._renderer.context.supports.msaa)\n {\n warn('antialiasing, is not supported on when using the back buffer');\n\n this._antialias = false;\n }\n\n this._state = State.for2d();\n\n const bigTriangleProgram = new GlProgram({\n vertex: `\n attribute vec2 aPosition;\n out vec2 vUv;\n\n void main() {\n gl_Position = vec4(aPosition, 0.0, 1.0);\n\n vUv = (aPosition + 1.0) / 2.0;\n\n // flip dem UVs\n vUv.y = 1.0 - vUv.y;\n }`,\n fragment: `\n in vec2 vUv;\n out vec4 finalColor;\n\n uniform sampler2D uTexture;\n\n void main() {\n finalColor = texture(uTexture, vUv);\n }`,\n name: 'big-triangle',\n });\n\n this._bigTriangleShader = new Shader({\n glProgram: bigTriangleProgram,\n resources: {\n uTexture: Texture.WHITE.source,\n },\n });\n }\n\n /**\n * This is called before the RenderTargetSystem is started. This is where\n * we replace the target with the back buffer if required.\n * @param options - The options for this render.\n */\n protected renderStart(options: RenderOptions)\n {\n const renderTarget = this._renderer.renderTarget.getRenderTarget(options.target);\n\n this._useBackBufferThisRender = this.useBackBuffer && !!renderTarget.isRoot;\n\n if (this._useBackBufferThisRender)\n {\n const renderTarget = this._renderer.renderTarget.getRenderTarget(options.target);\n\n this._targetTexture = renderTarget.colorTexture;\n\n options.target = this._getBackBufferTexture(renderTarget.colorTexture);\n }\n }\n\n protected renderEnd()\n {\n this._presentBackBuffer();\n }\n\n private _presentBackBuffer()\n {\n const renderer = this._renderer;\n\n renderer.renderTarget.finishRenderPass();\n\n if (!this._useBackBufferThisRender) return;\n\n renderer.renderTarget.bind(this._targetTexture, false);\n\n this._bigTriangleShader.resources.uTexture = this._backBufferTexture.source;\n\n renderer.encoder.draw({\n geometry: bigTriangleGeometry,\n shader: this._bigTriangleShader,\n state: this._state,\n });\n }\n\n private _getBackBufferTexture(targetSourceTexture: TextureSource)\n {\n this._backBufferTexture = this._backBufferTexture || new Texture({\n source: new TextureSource({\n width: targetSourceTexture.width,\n height: targetSourceTexture.height,\n resolution: targetSourceTexture._resolution,\n antialias: this._antialias,\n }),\n });\n\n // this will not resize if its the same size already! No extra check required\n this._backBufferTexture.source.resize(\n targetSourceTexture.width,\n targetSourceTexture.height,\n targetSourceTexture._resolution,\n );\n\n return this._backBufferTexture;\n }\n\n /** destroys the back buffer */\n public destroy()\n {\n if (this._backBufferTexture)\n {\n this._backBufferTexture.destroy();\n this._backBufferTexture = null;\n }\n }\n}\n", "import { ExtensionType } from '../../../extensions/Extensions';\n\nimport type { System } from '../shared/system/System';\nimport type { WebGLRenderer } from './WebGLRenderer';\n\n/**\n * The system that handles color masking for the WebGL.\n * @category rendering\n * @advanced\n */\nexport class GlColorMaskSystem implements System\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ],\n name: 'colorMask',\n } as const;\n\n private readonly _renderer: WebGLRenderer;\n private _colorMaskCache = 0b1111;\n\n constructor(renderer: WebGLRenderer)\n {\n this._renderer = renderer;\n }\n\n public setMask(colorMask: number)\n {\n if (this._colorMaskCache === colorMask) return;\n this._colorMaskCache = colorMask;\n\n this._renderer.gl.colorMask(\n !!(colorMask & 0b1000),\n !!(colorMask & 0b0100),\n !!(colorMask & 0b0010),\n !!(colorMask & 0b0001)\n );\n }\n\n public destroy?: () => void;\n}\n", "import { ExtensionType } from '../../../extensions/Extensions';\n\nimport type { Topology } from '../shared/geometry/const';\nimport type { Geometry } from '../shared/geometry/Geometry';\nimport type { Shader } from '../shared/shader/Shader';\nimport type { State } from '../shared/state/State';\nimport type { System } from '../shared/system/System';\nimport type { WebGLRenderer } from './WebGLRenderer';\n\n/**\n * The system that handles encoding commands for the WebGL.\n * @category rendering\n * @advanced\n */\nexport class GlEncoderSystem implements System\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ],\n name: 'encoder',\n } as const;\n\n public readonly commandFinished = Promise.resolve();\n private readonly _renderer: WebGLRenderer;\n\n constructor(renderer: WebGLRenderer)\n {\n this._renderer = renderer;\n }\n\n public setGeometry(geometry: Geometry, shader?: Shader)\n {\n this._renderer.geometry.bind(geometry, shader.glProgram);\n }\n\n public finishRenderPass()\n {\n // noop\n }\n\n public draw(options: {\n geometry: Geometry,\n shader: Shader,\n state?: State,\n topology?: Topology,\n size?: number,\n start?: number,\n instanceCount?: number\n skipSync?: boolean,\n })\n {\n const renderer = this._renderer;\n const { geometry, shader, state, skipSync, topology: type, size, start, instanceCount } = options;\n\n renderer.shader.bind(shader, skipSync);\n\n renderer.geometry.bind(geometry, renderer.shader._activeProgram);\n\n if (state)\n {\n renderer.state.set(state);\n }\n\n renderer.geometry.draw(type, size, start, instanceCount ?? geometry.instanceCount);\n }\n\n public destroy()\n {\n (this._renderer as null) = null;\n }\n}\n", "import { ExtensionType } from '../../../extensions/Extensions';\nimport { checkMaxIfStatementsInShader } from '../../batcher/gl/utils/checkMaxIfStatementsInShader';\nimport { type System } from '../shared/system/System';\n\nimport type { WebGLRenderer } from './WebGLRenderer';\n/**\n * The GpuLimitsSystem provides information about the capabilities and limitations of the underlying GPU.\n * These limits, such as the maximum number of textures that can be used in a shader\n * (`maxTextures`) or the maximum number of textures that can be batched together (`maxBatchableTextures`),\n * are determined by the specific graphics hardware and driver.\n *\n * The values for these limits are not available immediately upon instantiation of the class.\n * They are populated when the GL rendering context is successfully initialized and ready,\n * which occurs after the `renderer.init()` method has completed.\n * Attempting to access these properties before the context is ready will result in undefined or default values.\n *\n * This system allows the renderer to adapt its behavior and resource allocation strategies\n * to stay within the supported boundaries of the GPU, ensuring optimal performance and stability.\n * @example\n * ```ts\n * const renderer = new WebGlRenderer();\n * await renderer.init();\n *\n * console.log(renderer.limits.maxTextures);\n * ```\n * @category rendering\n * @advanced\n */\nexport class GlLimitsSystem implements System\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ],\n name: 'limits',\n } as const;\n\n /** The maximum number of textures that can be used by a shader */\n public maxTextures: number;\n /** The maximum number of batchable textures */\n public maxBatchableTextures: number;\n\n /** The maximum number of uniform bindings */\n public maxUniformBindings: number;\n\n private readonly _renderer: WebGLRenderer;\n\n constructor(renderer: WebGLRenderer)\n {\n this._renderer = renderer;\n }\n\n public contextChange(): void\n {\n const gl = this._renderer.gl;\n\n // step 1: first check max textures the GPU can handle.\n this.maxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);\n\n // step 2: check the maximum number of if statements the shader can have too..\n this.maxBatchableTextures = checkMaxIfStatementsInShader(this.maxTextures, gl);\n\n // step 3: check the limit of uniform buffer bindings.\n // UBs are available only in WebGL2 context, requesting within WebGL1 produces a warning.\n const isWebGl2 = this._renderer.context.webGLVersion === 2;\n\n this.maxUniformBindings = isWebGl2\n ? gl.getParameter(gl.MAX_UNIFORM_BUFFER_BINDINGS)\n : 0;\n }\n\n public destroy(): void\n {\n // boom!\n }\n}\n", "import { ExtensionType } from '../../../extensions/Extensions';\nimport { GpuStencilModesToPixi } from '../gpu/state/GpuStencilModesToPixi';\nimport { STENCIL_MODES } from '../shared/state/const';\n\nimport type { RenderTarget } from '../shared/renderTarget/RenderTarget';\nimport type { System } from '../shared/system/System';\nimport type { WebGLRenderer } from './WebGLRenderer';\n\n/**\n * This manages the stencil buffer. Used primarily for masking\n * @category rendering\n * @advanced\n */\nexport class GlStencilSystem implements System\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ],\n name: 'stencil',\n } as const;\n\n private _gl: WebGLRenderingContext;\n\n private readonly _stencilCache = {\n enabled: false,\n stencilReference: 0,\n stencilMode: STENCIL_MODES.NONE,\n };\n\n private _renderTargetStencilState: Record<number, {\n stencilMode: STENCIL_MODES;\n stencilReference: number;\n }> = Object.create(null);\n\n private _stencilOpsMapping: {\n keep: number;\n zero: number;\n replace: number;\n invert: number;\n 'increment-clamp': number;\n 'decrement-clamp': number;\n 'increment-wrap': number;\n 'decrement-wrap': number;\n };\n\n private _comparisonFuncMapping: {\n always: number;\n never: number;\n equal: number;\n 'not-equal': number;\n less: number;\n 'less-equal': number;\n greater: number;\n 'greater-equal': number;\n };\n\n private _activeRenderTarget: RenderTarget;\n\n constructor(renderer: WebGLRenderer)\n {\n renderer.renderTarget.onRenderTargetChange.add(this);\n }\n\n protected contextChange(gl: WebGLRenderingContext)\n {\n // TODO - this could be declared in a gl const\n // we know the numbers don't tend to change!\n this._gl = gl;\n\n this._comparisonFuncMapping = {\n always: gl.ALWAYS,\n never: gl.NEVER,\n equal: gl.EQUAL,\n 'not-equal': gl.NOTEQUAL,\n less: gl.LESS,\n 'less-equal': gl.LEQUAL,\n greater: gl.GREATER,\n 'greater-equal': gl.GEQUAL,\n };\n\n this._stencilOpsMapping = {\n keep: gl.KEEP,\n zero: gl.ZERO,\n replace: gl.REPLACE,\n invert: gl.INVERT,\n 'increment-clamp': gl.INCR,\n 'decrement-clamp': gl.DECR,\n 'increment-wrap': gl.INCR_WRAP,\n 'decrement-wrap': gl.DECR_WRAP,\n };\n\n this.resetState();\n }\n\n protected onRenderTargetChange(renderTarget: RenderTarget)\n {\n if (this._activeRenderTarget === renderTarget) return;\n\n this._activeRenderTarget = renderTarget;\n\n let stencilState = this._renderTargetStencilState[renderTarget.uid];\n\n if (!stencilState)\n {\n stencilState = this._renderTargetStencilState[renderTarget.uid] = {\n stencilMode: STENCIL_MODES.DISABLED,\n stencilReference: 0,\n };\n }\n\n // restore the current render targets stencil state..\n this.setStencilMode(stencilState.stencilMode, stencilState.stencilReference);\n }\n\n public resetState()\n {\n // reset stencil cache\n this._stencilCache.enabled = false;\n this._stencilCache.stencilMode = STENCIL_MODES.NONE;\n this._stencilCache.stencilReference = 0;\n }\n\n public setStencilMode(stencilMode: STENCIL_MODES, stencilReference: number)\n {\n const stencilState = this._renderTargetStencilState[this._activeRenderTarget.uid];\n\n const gl = this._gl;\n const mode = GpuStencilModesToPixi[stencilMode];\n\n const _stencilCache = this._stencilCache;\n\n // store the stencil state for restoration later, if a render target changes\n stencilState.stencilMode = stencilMode;\n stencilState.stencilReference = stencilReference;\n\n if (stencilMode === STENCIL_MODES.DISABLED)\n {\n if (this._stencilCache.enabled)\n {\n this._stencilCache.enabled = false;\n\n gl.disable(gl.STENCIL_TEST);\n }\n\n return;\n }\n\n if (!this._stencilCache.enabled)\n {\n this._stencilCache.enabled = true;\n gl.enable(gl.STENCIL_TEST);\n }\n\n if (stencilMode !== _stencilCache.stencilMode || _stencilCache.stencilReference !== stencilReference)\n {\n _stencilCache.stencilMode = stencilMode;\n _stencilCache.stencilReference = stencilReference;\n\n // this is pretty simple mapping.\n // will work for pixi's simple mask cases.\n // although a true mapping of the GPU state to webGL state should be done\n gl.stencilFunc(this._comparisonFuncMapping[mode.stencilBack.compare], stencilReference, 0xFF);\n gl.stencilOp(gl.KEEP, gl.KEEP, this._stencilOpsMapping[mode.stencilBack.passOp]);\n }\n }\n\n public destroy?: () => void;\n}\n", "import type { UboElement, UboLayout, UniformData } from '../../../shared/shader/types';\n\n/** @internal */\nexport const WGSL_TO_STD40_SIZE: Record<string, number> = {\n f32: 4,\n i32: 4,\n 'vec2<f32>': 8,\n 'vec3<f32>': 12,\n 'vec4<f32>': 16,\n\n 'vec2<i32>': 8,\n 'vec3<i32>': 12,\n 'vec4<i32>': 16,\n\n 'mat2x2<f32>': 16 * 2,\n 'mat3x3<f32>': 16 * 3,\n 'mat4x4<f32>': 16 * 4,\n\n // TODO - not essential for now but support these in the future\n // int: 4,\n // ivec2: 8,\n // ivec3: 12,\n // ivec4: 16,\n\n // uint: 4,\n // uvec2: 8,\n // uvec3: 12,\n // uvec4: 16,\n\n // bool: 4,\n // bvec2: 8,\n // bvec3: 12,\n // bvec4: 16,\n\n // mat2: 16 * 2,\n // mat3: 16 * 3,\n // mat4: 16 * 4,\n};\n\n/**\n * @param uniformData\n * @internal\n */\nexport function createUboElementsSTD40(uniformData: UniformData[]): UboLayout\n{\n const uboElements: UboElement[] = uniformData.map((data: UniformData) =>\n ({\n data,\n offset: 0,\n size: 0,\n }));\n\n const chunkSize = 16;\n\n let size = 0;\n let offset = 0;\n\n for (let i = 0; i < uboElements.length; i++)\n {\n const uboElement = uboElements[i];\n\n size = WGSL_TO_STD40_SIZE[uboElement.data.type];\n\n if (!size)\n {\n throw new Error(`Unknown type ${uboElement.data.type}`);\n }\n\n if (uboElement.data.size > 1)\n {\n size = Math.max(size, chunkSize) * uboElement.data.size;\n }\n\n const boundary = size === 12 ? 16 : size;\n\n uboElement.size = size;\n\n const curOffset = offset % chunkSize;\n\n if (curOffset > 0 && chunkSize - curOffset < boundary)\n {\n offset += (chunkSize - curOffset) % 16;\n }\n else\n {\n offset += (size - (curOffset % size)) % size;\n }\n\n uboElement.offset = offset;\n offset += size;\n }\n\n offset = Math.ceil(offset / 16) * 16;\n\n return { uboElements, size: offset };\n}\n\n", "import { WGSL_TO_STD40_SIZE } from './createUboElementsSTD40';\n\nimport type { UboElement } from '../../../shared/shader/types';\n\n/**\n * This generates a function that will sync an array to the uniform buffer\n * following the std140 layout\n * @param uboElement - the element to generate the array sync for\n * @param offsetToAdd - the offset to append at the start of the code\n * @returns - the generated code\n * @internal\n */\nexport function generateArraySyncSTD40(uboElement: UboElement, offsetToAdd: number): string\n{\n const rowSize = Math.max(WGSL_TO_STD40_SIZE[uboElement.data.type] / 16, 1);\n const elementSize = (uboElement.data.value as Array<number>).length / uboElement.data.size;// size / rowSize;\n\n const remainder = (4 - (elementSize % 4)) % 4;\n const data = uboElement.data.type.indexOf('i32') >= 0 ? 'dataInt32' : 'data';\n\n return `\n v = uv.${uboElement.data.name};\n offset += ${offsetToAdd};\n\n arrayOffset = offset;\n\n t = 0;\n\n for(var i=0; i < ${uboElement.data.size * rowSize}; i++)\n {\n for(var j = 0; j < ${elementSize}; j++)\n {\n ${data}[arrayOffset++] = v[t++];\n }\n ${remainder !== 0 ? `arrayOffset += ${remainder};` : ''}\n }\n `;\n}\n", "import { createUboSyncFunction } from '../../../shared/shader/utils/createUboSyncFunction';\nimport { uboSyncFunctionsSTD40 } from '../../../shared/shader/utils/uboSyncFunctions';\nimport { generateArraySyncSTD40 } from './generateArraySyncSTD40';\n\nimport type { UboElement, UniformsSyncCallback } from '../../../shared/shader/types';\n\n/**\n * @param uboElements\n * @internal\n */\nexport function createUboSyncFunctionSTD40(\n uboElements: UboElement[],\n): UniformsSyncCallback\n{\n return createUboSyncFunction(\n uboElements,\n 'uboStd40',\n generateArraySyncSTD40,\n uboSyncFunctionsSTD40,\n );\n}\n", "import { ExtensionType } from '../../../extensions/Extensions';\nimport { UboSystem } from '../shared/shader/UboSystem';\nimport { createUboElementsSTD40 } from './shader/utils/createUboElementsSTD40';\nimport { createUboSyncFunctionSTD40 } from './shader/utils/createUboSyncSTD40';\n\n/**\n * System plugin to the renderer to manage uniform buffers. But with an WGSL adaptor.\n * @category rendering\n * @advanced\n */\nexport class GlUboSystem extends UboSystem\n{\n /** @ignore */\n public static extension = {\n type: [ExtensionType.WebGLSystem],\n name: 'ubo',\n } as const;\n\n constructor()\n {\n super({\n createUboElements: createUboElementsSTD40,\n generateUboSync: createUboSyncFunctionSTD40,\n });\n }\n}\n", "/**\n * Represents a render target.\n * @category rendering\n * @ignore\n */\nexport class GlRenderTarget\n{\n public width = -1;\n public height = -1;\n public msaa = false;\n public framebuffer: WebGLFramebuffer;\n public resolveTargetFramebuffer: WebGLFramebuffer;\n public msaaRenderBuffer: WebGLRenderbuffer[] = [];\n public depthStencilRenderBuffer: WebGLRenderbuffer;\n}\n", "import { Rectangle } from '../../../../maths/shapes/Rectangle';\nimport { warn } from '../../../../utils/logging/warn';\nimport { CanvasSource } from '../../shared/texture/sources/CanvasSource';\nimport { CLEAR } from '../const';\nimport { GlRenderTarget } from '../GlRenderTarget';\n\nimport type { RgbaArray } from '../../../../color/Color';\nimport type { RenderTarget } from '../../shared/renderTarget/RenderTarget';\nimport type { RenderTargetAdaptor, RenderTargetSystem } from '../../shared/renderTarget/RenderTargetSystem';\nimport type { Texture } from '../../shared/texture/Texture';\nimport type { CLEAR_OR_BOOL } from '../const';\nimport type { WebGLRenderer } from '../WebGLRenderer';\n\n/**\n * The WebGL adaptor for the render target system. Allows the Render Target System to be used with the WebGL renderer\n * @category rendering\n * @ignore\n */\nexport class GlRenderTargetAdaptor implements RenderTargetAdaptor<GlRenderTarget>\n{\n private _renderTargetSystem: RenderTargetSystem<GlRenderTarget>;\n private _renderer: WebGLRenderer<HTMLCanvasElement>;\n private _clearColorCache: RgbaArray = [0, 0, 0, 0];\n private _viewPortCache: Rectangle = new Rectangle();\n\n public init(renderer: WebGLRenderer, renderTargetSystem: RenderTargetSystem<GlRenderTarget>): void\n {\n this._renderer = renderer;\n this._renderTargetSystem = renderTargetSystem;\n\n renderer.runners.contextChange.add(this);\n }\n\n public contextChange(): void\n {\n this._clearColorCache = [0, 0, 0, 0];\n this._viewPortCache = new Rectangle();\n }\n\n public copyToTexture(\n sourceRenderSurfaceTexture: RenderTarget,\n destinationTexture: Texture,\n originSrc: { x: number; y: number; },\n size: { width: number; height: number; },\n originDest: { x: number; y: number; },\n )\n {\n const renderTargetSystem = this._renderTargetSystem;\n\n const renderer = this._renderer;\n const glRenderTarget = renderTargetSystem.getGpuRenderTarget(sourceRenderSurfaceTexture);\n const gl = renderer.gl;\n\n this.finishRenderPass(sourceRenderSurfaceTexture);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, glRenderTarget.resolveTargetFramebuffer);\n\n renderer.texture.bind(destinationTexture, 0);\n\n gl.copyTexSubImage2D(gl.TEXTURE_2D, 0,\n originDest.x, originDest.y,\n originSrc.x,\n originSrc.y,\n size.width,\n size.height\n );\n\n return destinationTexture;\n }\n\n public startRenderPass(\n renderTarget: RenderTarget,\n clear: CLEAR_OR_BOOL = true,\n clearColor?: RgbaArray,\n viewport?: Rectangle\n )\n {\n const renderTargetSystem = this._renderTargetSystem;\n\n const source = renderTarget.colorTexture;\n const gpuRenderTarget = renderTargetSystem.getGpuRenderTarget(renderTarget);\n\n let viewPortY = viewport.y;\n\n if (renderTarget.isRoot)\n {\n // /TODO this is the same logic?\n viewPortY = source.pixelHeight - viewport.height;\n }\n\n // unbind the current render texture..\n renderTarget.colorTextures.forEach((texture) =>\n {\n this._renderer.texture.unbind(texture);\n });\n\n const gl = this._renderer.gl;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, gpuRenderTarget.framebuffer);\n\n const viewPortCache = this._viewPortCache;\n\n if (viewPortCache.x !== viewport.x\n || viewPortCache.y !== viewPortY\n || viewPortCache.width !== viewport.width\n || viewPortCache.height !== viewport.height)\n {\n viewPortCache.x = viewport.x;\n viewPortCache.y = viewPortY;\n viewPortCache.width = viewport.width;\n viewPortCache.height = viewport.height;\n\n gl.viewport(\n viewport.x,\n viewPortY,\n viewport.width,\n viewport.height,\n );\n }\n\n // if the stencil buffer has been requested, we need to create a stencil buffer\n if (!gpuRenderTarget.depthStencilRenderBuffer && (renderTarget.stencil || renderTarget.depth))\n {\n this._initStencil(gpuRenderTarget);\n }\n\n this.clear(renderTarget, clear, clearColor);\n }\n\n public finishRenderPass(renderTarget?: RenderTarget)\n {\n const renderTargetSystem = this._renderTargetSystem;\n\n const glRenderTarget = renderTargetSystem.getGpuRenderTarget(renderTarget);\n\n if (!glRenderTarget.msaa) return;\n\n const gl = this._renderer.gl;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, glRenderTarget.resolveTargetFramebuffer);\n gl.bindFramebuffer(gl.READ_FRAMEBUFFER, glRenderTarget.framebuffer);\n\n gl.blitFramebuffer(\n 0, 0, glRenderTarget.width, glRenderTarget.height,\n 0, 0, glRenderTarget.width, glRenderTarget.height,\n gl.COLOR_BUFFER_BIT, gl.NEAREST,\n );\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, glRenderTarget.framebuffer);\n\n // dont think we need this anymore? keeping around just in case the wheels fall off\n // gl.bindFramebuffer(gl.READ_FRAMEBUFFER, null);\n }\n\n public initGpuRenderTarget(renderTarget: RenderTarget): GlRenderTarget\n {\n const renderer = this._renderer;\n\n const gl = renderer.gl;\n\n // do single...\n\n const glRenderTarget = new GlRenderTarget();\n\n // we are rendering to the main canvas..\n const colorTexture = renderTarget.colorTexture;\n\n if (colorTexture instanceof CanvasSource)\n {\n this._renderer.context.ensureCanvasSize(renderTarget.colorTexture.resource);\n\n glRenderTarget.framebuffer = null;\n\n return glRenderTarget;\n }\n\n this._initColor(renderTarget, glRenderTarget);\n\n // set up a depth texture..\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n return glRenderTarget;\n }\n\n public destroyGpuRenderTarget(gpuRenderTarget: GlRenderTarget)\n {\n const gl = this._renderer.gl;\n\n if (gpuRenderTarget.framebuffer)\n {\n gl.deleteFramebuffer(gpuRenderTarget.framebuffer);\n gpuRenderTarget.framebuffer = null;\n }\n\n if (gpuRenderTarget.resolveTargetFramebuffer)\n {\n gl.deleteFramebuffer(gpuRenderTarget.resolveTargetFramebuffer);\n gpuRenderTarget.resolveTargetFramebuffer = null;\n }\n\n if (gpuRenderTarget.depthStencilRenderBuffer)\n {\n gl.deleteRenderbuffer(gpuRenderTarget.depthStencilRenderBuffer);\n gpuRenderTarget.depthStencilRenderBuffer = null;\n }\n\n gpuRenderTarget.msaaRenderBuffer.forEach((renderBuffer) =>\n {\n gl.deleteRenderbuffer(renderBuffer);\n });\n\n gpuRenderTarget.msaaRenderBuffer = null;\n }\n\n public clear(_renderTarget: RenderTarget, clear: CLEAR_OR_BOOL, clearColor?: RgbaArray)\n {\n if (!clear) return;\n\n const renderTargetSystem = this._renderTargetSystem;\n\n // if clear is boolean..\n if (typeof clear === 'boolean')\n {\n clear = clear ? CLEAR.ALL : CLEAR.NONE;\n }\n\n const gl = this._renderer.gl;\n\n if (clear & CLEAR.COLOR)\n {\n clearColor ??= renderTargetSystem.defaultClearColor;\n\n const clearColorCache = this._clearColorCache;\n const clearColorArray = clearColor as number[];\n\n if (clearColorCache[0] !== clearColorArray[0]\n || clearColorCache[1] !== clearColorArray[1]\n || clearColorCache[2] !== clearColorArray[2]\n || clearColorCache[3] !== clearColorArray[3])\n {\n clearColorCache[0] = clearColorArray[0];\n clearColorCache[1] = clearColorArray[1];\n clearColorCache[2] = clearColorArray[2];\n clearColorCache[3] = clearColorArray[3];\n\n gl.clearColor(clearColorArray[0], clearColorArray[1], clearColorArray[2], clearColorArray[3]);\n }\n }\n\n gl.clear(clear);\n }\n\n public resizeGpuRenderTarget(renderTarget: RenderTarget)\n {\n if (renderTarget.isRoot) return;\n\n const renderTargetSystem = this._renderTargetSystem;\n\n const glRenderTarget = renderTargetSystem.getGpuRenderTarget(renderTarget);\n\n this._resizeColor(renderTarget, glRenderTarget);\n\n if (renderTarget.stencil || renderTarget.depth)\n {\n this._resizeStencil(glRenderTarget);\n }\n }\n\n private _initColor(renderTarget: RenderTarget, glRenderTarget: GlRenderTarget)\n {\n const renderer = this._renderer;\n\n const gl = renderer.gl;\n // deal with our outputs..\n const resolveTargetFramebuffer = gl.createFramebuffer();\n\n glRenderTarget.resolveTargetFramebuffer = resolveTargetFramebuffer;\n\n // set up the texture..\n gl.bindFramebuffer(gl.FRAMEBUFFER, resolveTargetFramebuffer);\n\n glRenderTarget.width = renderTarget.colorTexture.source.pixelWidth;\n glRenderTarget.height = renderTarget.colorTexture.source.pixelHeight;\n\n renderTarget.colorTextures.forEach((colorTexture, i) =>\n {\n const source = colorTexture.source;\n\n if (source.antialias)\n {\n if (renderer.context.supports.msaa)\n {\n glRenderTarget.msaa = true;\n }\n else\n {\n warn('[RenderTexture] Antialiasing on textures is not supported in WebGL1');\n }\n }\n\n // TODO bindSource could return the glTexture\n renderer.texture.bindSource(source, 0);\n const glSource = renderer.texture.getGlSource(source);\n\n const glTexture = glSource.texture;\n\n gl.framebufferTexture2D(gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0 + i,\n 3553, // texture.target,\n glTexture,\n 0);// mipLevel);\n });\n\n if (glRenderTarget.msaa)\n {\n const viewFramebuffer = gl.createFramebuffer();\n\n glRenderTarget.framebuffer = viewFramebuffer;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, viewFramebuffer);\n\n renderTarget.colorTextures.forEach((_, i) =>\n {\n const msaaRenderBuffer = gl.createRenderbuffer();\n\n glRenderTarget.msaaRenderBuffer[i] = msaaRenderBuffer;\n });\n }\n else\n {\n glRenderTarget.framebuffer = resolveTargetFramebuffer;\n }\n\n this._resizeColor(renderTarget, glRenderTarget);\n }\n\n private _resizeColor(renderTarget: RenderTarget, glRenderTarget: GlRenderTarget)\n {\n const source = renderTarget.colorTexture.source;\n\n glRenderTarget.width = source.pixelWidth;\n glRenderTarget.height = source.pixelHeight;\n\n renderTarget.colorTextures.forEach((colorTexture, i) =>\n {\n // nno need to resize the first texture..\n if (i === 0) return;\n\n colorTexture.source.resize(source.width, source.height, source._resolution);\n });\n\n if (glRenderTarget.msaa)\n {\n const renderer = this._renderer;\n const gl = renderer.gl;\n\n const viewFramebuffer = glRenderTarget.framebuffer;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, viewFramebuffer);\n\n renderTarget.colorTextures.forEach((colorTexture, i) =>\n {\n const source = colorTexture.source;\n\n renderer.texture.bindSource(source, 0);\n const glSource = renderer.texture.getGlSource(source);\n\n const glInternalFormat = glSource.internalFormat;\n\n const msaaRenderBuffer = glRenderTarget.msaaRenderBuffer[i];\n\n gl.bindRenderbuffer(\n gl.RENDERBUFFER,\n msaaRenderBuffer\n );\n\n gl.renderbufferStorageMultisample(\n gl.RENDERBUFFER,\n 4,\n glInternalFormat,\n source.pixelWidth,\n source.pixelHeight\n );\n\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0 + i,\n gl.RENDERBUFFER,\n msaaRenderBuffer\n );\n });\n }\n }\n\n private _initStencil(glRenderTarget: GlRenderTarget)\n {\n // this already exists on the default screen\n if (glRenderTarget.framebuffer === null) return;\n\n const gl = this._renderer.gl;\n\n const depthStencilRenderBuffer = gl.createRenderbuffer();\n\n glRenderTarget.depthStencilRenderBuffer = depthStencilRenderBuffer;\n\n gl.bindRenderbuffer(\n gl.RENDERBUFFER,\n depthStencilRenderBuffer\n );\n\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl.DEPTH_STENCIL_ATTACHMENT,\n gl.RENDERBUFFER,\n depthStencilRenderBuffer\n );\n\n // TDO DO>>\n this._resizeStencil(glRenderTarget);\n }\n\n private _resizeStencil(glRenderTarget: GlRenderTarget)\n {\n const gl = this._renderer.gl;\n\n gl.bindRenderbuffer(\n gl.RENDERBUFFER,\n glRenderTarget.depthStencilRenderBuffer\n );\n\n if (glRenderTarget.msaa)\n {\n gl.renderbufferStorageMultisample(\n gl.RENDERBUFFER,\n 4,\n gl.DEPTH24_STENCIL8,\n glRenderTarget.width,\n glRenderTarget.height\n );\n }\n else\n {\n gl.renderbufferStorage(\n gl.RENDERBUFFER,\n this._renderer.context.webGLVersion === 2\n ? gl.DEPTH24_STENCIL8\n : gl.DEPTH_STENCIL,\n glRenderTarget.width,\n glRenderTarget.height\n );\n }\n }\n\n public prerender(renderTarget: RenderTarget)\n {\n const resource = renderTarget.colorTexture.resource;\n\n // if the render target is a canvas, ensure its size matches the source\n if (this._renderer.context.multiView && CanvasSource.test(resource))\n {\n this._renderer.context.ensureCanvasSize(resource);\n }\n }\n\n public postrender(renderTarget: RenderTarget)\n {\n // if multiView is not enabled, we don't need to do anything\n if (!this._renderer.context.multiView) return;\n\n // if the render target is a canvas, we need to copy the pixels from the gl canvas\n // to the canvas target\n if (CanvasSource.test(renderTarget.colorTexture.resource))\n {\n const contextCanvas = this._renderer.context.canvas;\n const canvasSource = renderTarget.colorTexture as unknown as CanvasSource;\n\n canvasSource.context2D.drawImage(\n contextCanvas as CanvasImageSource,\n 0, canvasSource.pixelHeight - contextCanvas.height\n );\n }\n }\n}\n", "import { ExtensionType } from '../../../../extensions/Extensions';\nimport { RenderTargetSystem } from '../../shared/renderTarget/RenderTargetSystem';\nimport { GlRenderTargetAdaptor } from './GlRenderTargetAdaptor';\n\nimport type { GlRenderTarget } from '../GlRenderTarget';\nimport type { WebGLRenderer } from '../WebGLRenderer';\n\n/**\n * The WebGL adaptor for the render target system. Allows the Render Target System to be used with the WebGl renderer\n * @category rendering\n * @advanced\n */\nexport class GlRenderTargetSystem extends RenderTargetSystem<GlRenderTarget>\n{\n /** @ignore */\n public static extension = {\n type: [ExtensionType.WebGLSystem],\n name: 'renderTarget',\n } as const;\n\n public adaptor = new GlRenderTargetAdaptor();\n\n constructor(renderer: WebGLRenderer)\n {\n super(renderer);\n\n this.adaptor.init(renderer, this);\n }\n}\n", "import { BufferResource } from '../../shared/buffer/BufferResource';\nimport { UniformGroup } from '../../shared/shader/UniformGroup';\nimport { TextureSource } from '../../shared/texture/sources/TextureSource';\n\nimport type { Shader } from '../../shared/shader/Shader';\nimport type { GlShaderSystem, ShaderSyncFunction } from './GlShaderSystem';\n\n/**\n * Generates the a function that will efficiently sync shader resources with the GPU.\n * @param shader - The shader to generate the code for\n * @param shaderSystem - An instance of the shader system\n * @internal\n */\nexport function generateShaderSyncCode(shader: Shader, shaderSystem: GlShaderSystem): ShaderSyncFunction\n{\n const funcFragments: string[] = [];\n\n /**\n * rS = renderer.shader\n * sS = shaderSystem\n * sD = shaderData\n * g = shader.groups\n * s = shader\n * r = renderer\n * ugS = renderer.uniformGroupSystem\n */\n const headerFragments: string[] = [`\n var g = s.groups;\n var sS = r.shader;\n var p = s.glProgram;\n var ugS = r.uniformGroup;\n var resources;\n `];\n\n let addedTextreSystem = false;\n let textureCount = 0;\n\n const programData = shaderSystem._getProgramData(shader.glProgram);\n\n for (const i in shader.groups)\n {\n const group = shader.groups[i];\n\n funcFragments.push(`\n resources = g[${i}].resources;\n `);\n\n for (const j in group.resources)\n {\n const resource = group.resources[j];\n\n if (resource instanceof UniformGroup)\n {\n if (resource.ubo)\n {\n const resName = shader._uniformBindMap[i][Number(j)];\n\n funcFragments.push(`\n sS.bindUniformBlock(\n resources[${j}],\n '${resName}',\n ${shader.glProgram._uniformBlockData[resName].index}\n );\n `);\n }\n else\n {\n funcFragments.push(`\n ugS.updateUniformGroup(resources[${j}], p, sD);\n `);\n }\n }\n else if (resource instanceof BufferResource)\n {\n const resName = shader._uniformBindMap[i][Number(j)];\n\n funcFragments.push(`\n sS.bindUniformBlock(\n resources[${j}],\n '${resName}',\n ${shader.glProgram._uniformBlockData[resName].index}\n );\n `);\n }\n else if (resource instanceof TextureSource)\n {\n const uniformName = shader._uniformBindMap[i as unknown as number][j as unknown as number];\n\n const uniformData = programData.uniformData[uniformName];\n\n if (uniformData)\n {\n if (!addedTextreSystem)\n {\n addedTextreSystem = true;\n headerFragments.push(`\n var tS = r.texture;\n `);\n }\n\n shaderSystem._gl.uniform1i(uniformData.location, textureCount);\n\n funcFragments.push(`\n tS.bind(resources[${j}], ${textureCount});\n `);\n\n textureCount++;\n }\n }\n }\n }\n\n const functionSource = [...headerFragments, ...funcFragments].join('\\n');\n\n // eslint-disable-next-line no-new-func\n return new Function('r', 's', 'sD', functionSource) as ShaderSyncFunction;\n}\n", "/** @private */\nexport class IGLUniformData\n{\n public location: WebGLUniformLocation;\n public value: number | boolean | Float32Array | Int32Array | Uint32Array | boolean[];\n}\n\n/**\n * Helper class to create a WebGL Program\n * @private\n */\nexport class GlProgramData\n{\n /** The shader program. */\n public program: WebGLProgram;\n\n /**\n * Holds the uniform data which contains uniform locations\n * and current uniform values used for caching and preventing unneeded GPU commands.\n */\n public uniformData: Record<string, any>;\n\n /**\n * UniformGroups holds the various upload functions for the shader. Each uniform group\n * and program have a unique upload function generated.\n */\n public uniformGroups: Record<string, any>;\n\n /** A hash that stores where UBOs are bound to on the program. */\n public uniformBlockBindings: Record<string, any>;\n\n /** A hash for lazily-generated uniform uploading functions. */\n public uniformSync: Record<string, any>;\n\n /**\n * A place where dirty ticks are stored for groups\n * If a tick here does not match with the Higher level Programs tick, it means\n * we should re upload the data.\n */\n public uniformDirtyGroups: Record<string, any>;\n\n /**\n * Makes a new Pixi program.\n * @param program - webgl program\n * @param uniformData - uniforms\n */\n constructor(program: WebGLProgram, uniformData: {[key: string]: IGLUniformData})\n {\n this.program = program;\n this.uniformData = uniformData;\n this.uniformGroups = {};\n this.uniformDirtyGroups = {};\n this.uniformBlockBindings = {};\n }\n\n /** Destroys this program. */\n public destroy(): void\n {\n this.uniformData = null;\n this.uniformGroups = null;\n this.uniformDirtyGroups = null;\n this.uniformBlockBindings = null;\n this.program = null;\n }\n}\n", "/**\n * @private\n * @param {WebGLRenderingContext} gl - The current WebGL context {WebGLProgram}\n * @param {number} type - the type, can be either VERTEX_SHADER or FRAGMENT_SHADER\n * @param {string} src - The vertex shader source as an array of strings.\n * @returns {WebGLShader} the shader\n */\nexport function compileShader(gl: WebGLRenderingContextBase, type: number, src: string): WebGLShader\n{\n const shader = gl.createShader(type);\n\n gl.shaderSource(shader, src);\n gl.compileShader(shader);\n\n return shader;\n}\n", "function booleanArray(size: number): Array<boolean>\n{\n const array = new Array(size);\n\n for (let i = 0; i < array.length; i++)\n {\n array[i] = false;\n }\n\n return array;\n}\n\n/**\n * @param {string} type - Type of value\n * @param {number} size\n * @private\n */\nexport function defaultValue(\n type: string,\n size: number\n): number | Float32Array | Int32Array | Uint32Array | boolean | boolean[]\n{\n switch (type)\n {\n case 'float':\n return 0;\n\n case 'vec2':\n return new Float32Array(2 * size);\n\n case 'vec3':\n return new Float32Array(3 * size);\n\n case 'vec4':\n return new Float32Array(4 * size);\n\n case 'int':\n case 'uint':\n case 'sampler2D':\n case 'sampler2DArray':\n return 0;\n\n case 'ivec2':\n return new Int32Array(2 * size);\n\n case 'ivec3':\n return new Int32Array(3 * size);\n\n case 'ivec4':\n return new Int32Array(4 * size);\n\n case 'uvec2':\n return new Uint32Array(2 * size);\n\n case 'uvec3':\n return new Uint32Array(3 * size);\n\n case 'uvec4':\n return new Uint32Array(4 * size);\n\n case 'bool':\n return false;\n\n case 'bvec2':\n\n return booleanArray(2 * size);\n\n case 'bvec3':\n return booleanArray(3 * size);\n\n case 'bvec4':\n return booleanArray(4 * size);\n\n case 'mat2':\n return new Float32Array([1, 0,\n 0, 1]);\n\n case 'mat3':\n return new Float32Array([1, 0, 0,\n 0, 1, 0,\n 0, 0, 1]);\n\n case 'mat4':\n return new Float32Array([1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1]);\n }\n\n return null;\n}\n", "import type { Dict } from '../../../../../utils/types';\nimport type { VertexFormat } from '../../../shared/geometry/const';\n\nlet GL_TABLE: Dict<string> = null;\n\nconst GL_TO_GLSL_TYPES: Dict<string> = {\n FLOAT: 'float',\n FLOAT_VEC2: 'vec2',\n FLOAT_VEC3: 'vec3',\n FLOAT_VEC4: 'vec4',\n\n INT: 'int',\n INT_VEC2: 'ivec2',\n INT_VEC3: 'ivec3',\n INT_VEC4: 'ivec4',\n\n UNSIGNED_INT: 'uint',\n UNSIGNED_INT_VEC2: 'uvec2',\n UNSIGNED_INT_VEC3: 'uvec3',\n UNSIGNED_INT_VEC4: 'uvec4',\n\n BOOL: 'bool',\n BOOL_VEC2: 'bvec2',\n BOOL_VEC3: 'bvec3',\n BOOL_VEC4: 'bvec4',\n\n FLOAT_MAT2: 'mat2',\n FLOAT_MAT3: 'mat3',\n FLOAT_MAT4: 'mat4',\n\n SAMPLER_2D: 'sampler2D',\n INT_SAMPLER_2D: 'sampler2D',\n UNSIGNED_INT_SAMPLER_2D: 'sampler2D',\n SAMPLER_CUBE: 'samplerCube',\n INT_SAMPLER_CUBE: 'samplerCube',\n UNSIGNED_INT_SAMPLER_CUBE: 'samplerCube',\n SAMPLER_2D_ARRAY: 'sampler2DArray',\n INT_SAMPLER_2D_ARRAY: 'sampler2DArray',\n UNSIGNED_INT_SAMPLER_2D_ARRAY: 'sampler2DArray',\n};\n\nconst GLSL_TO_VERTEX_TYPES: Record<string, VertexFormat> = {\n\n float: 'float32',\n vec2: 'float32x2',\n vec3: 'float32x3',\n vec4: 'float32x4',\n\n int: 'sint32',\n ivec2: 'sint32x2',\n ivec3: 'sint32x3',\n ivec4: 'sint32x4',\n\n uint: 'uint32',\n uvec2: 'uint32x2',\n uvec3: 'uint32x3',\n uvec4: 'uint32x4',\n\n bool: 'uint32',\n bvec2: 'uint32x2',\n bvec3: 'uint32x3',\n bvec4: 'uint32x4',\n};\n\n/**\n * @param gl\n * @param type\n * @internal\n */\nexport function mapType(gl: any, type: number): string\n{\n if (!GL_TABLE)\n {\n const typeNames = Object.keys(GL_TO_GLSL_TYPES);\n\n GL_TABLE = {};\n\n for (let i = 0; i < typeNames.length; ++i)\n {\n const tn = typeNames[i];\n\n GL_TABLE[gl[tn]] = GL_TO_GLSL_TYPES[tn];\n }\n }\n\n return GL_TABLE[type];\n}\n\n/**\n * @param gl\n * @param type\n * @internal\n */\nexport function mapGlToVertexFormat(gl: any, type: number): VertexFormat\n{\n const typeValue = mapType(gl, type);\n\n return GLSL_TO_VERTEX_TYPES[typeValue] || 'float32';\n}\n", "import { getAttributeInfoFromFormat } from '../../../shared/geometry/utils/getAttributeInfoFromFormat';\nimport { mapGlToVertexFormat } from './mapType';\n\nimport type { Attribute } from '../../../shared/geometry/Geometry';\n\n/**\n * This interface represents the extracted attribute data from a WebGL program.\n * It extends the `Attribute` interface but omits the `buffer` property.\n * It includes an optional `location` property that indicates where the shader location is for this attribute.\n * @category rendering\n * @advanced\n */\nexport interface ExtractedAttributeData extends Omit<Attribute, 'buffer'>\n{\n /** set where the shader location is for this attribute */\n location?: number;\n}\n\n/**\n * returns the attribute data from the program\n * @private\n * @param {WebGLProgram} [program] - the WebGL program\n * @param {WebGLRenderingContext} [gl] - the WebGL context\n * @param sortAttributes\n * @returns {object} the attribute data for this program\n */\nexport function extractAttributesFromGlProgram(\n program: WebGLProgram,\n gl: WebGLRenderingContextBase,\n sortAttributes = false\n): Record<string, ExtractedAttributeData>\n{\n const attributes: {[key: string]: ExtractedAttributeData} = {};\n\n const totalAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n\n for (let i = 0; i < totalAttributes; i++)\n {\n const attribData = gl.getActiveAttrib(program, i);\n\n // ignore the default ones!\n if (attribData.name.startsWith('gl_'))\n {\n continue;\n }\n\n const format = mapGlToVertexFormat(gl, attribData.type);\n\n attributes[attribData.name] = {\n location: 0, // set further down..\n format,\n stride: getAttributeInfoFromFormat(format).stride,\n offset: 0,\n instance: false,\n start: 0,\n };\n }\n\n const keys = Object.keys(attributes);\n\n if (sortAttributes)\n {\n keys.sort((a, b) => (a > b) ? 1 : -1); // eslint-disable-line no-confusing-arrow\n\n for (let i = 0; i < keys.length; i++)\n {\n attributes[keys[i]].location = i;\n\n gl.bindAttribLocation(program, i, keys[i]);\n }\n\n gl.linkProgram(program);\n }\n else\n {\n for (let i = 0; i < keys.length; i++)\n {\n attributes[keys[i]].location = gl.getAttribLocation(program, keys[i]);\n }\n }\n\n return attributes;\n}\n", "import type { GlUniformBlockData } from '../GlProgram';\n\n/**\n * returns the uniform block data from the program\n * @private\n * @param program - the webgl program\n * @param gl - the WebGL context\n * @returns {object} the uniform data for this program\n */\nexport function getUboData(program: WebGLProgram, gl: WebGL2RenderingContext): Record<string, GlUniformBlockData>\n{\n // if uniform buffer data is not supported, early out\n if (!gl.ACTIVE_UNIFORM_BLOCKS) return {};\n\n const uniformBlocks: Record<string, GlUniformBlockData> = {};\n\n // const totalUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n\n const totalUniformsBlocks = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);\n\n for (let i = 0; i < totalUniformsBlocks; i++)\n {\n const name = gl.getActiveUniformBlockName(program, i);\n const uniformBlockIndex = gl.getUniformBlockIndex(program, name);\n\n const size = gl.getActiveUniformBlockParameter(program, i, gl.UNIFORM_BLOCK_DATA_SIZE);\n\n uniformBlocks[name] = {\n name,\n index: uniformBlockIndex,\n size,\n };\n }\n\n return uniformBlocks;\n}\n", "import { defaultValue } from './defaultValue';\nimport { mapType } from './mapType';\n\nimport type { GlUniformData } from '../GlProgram';\n\n/**\n * returns the uniform data from the program\n * @private\n * @param program - the webgl program\n * @param gl - the WebGL context\n * @returns {object} the uniform data for this program\n */\nexport function getUniformData(program: WebGLProgram, gl: WebGLRenderingContextBase): {[key: string]: GlUniformData}\n{\n const uniforms: {[key: string]: GlUniformData} = {};\n\n const totalUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n\n for (let i = 0; i < totalUniforms; i++)\n {\n const uniformData = gl.getActiveUniform(program, i);\n const name = uniformData.name.replace(/\\[.*?\\]$/, '');\n\n const isArray = !!(uniformData.name.match(/\\[.*?\\]$/));\n\n const type = mapType(gl, uniformData.type);\n\n uniforms[name] = {\n name,\n index: i,\n type,\n size: uniformData.size,\n isArray,\n value: defaultValue(type, uniformData.size),\n };\n }\n\n return uniforms;\n}\n", "/**\n * will log a shader error highlighting the lines with the error\n * also will add numbers along the side.\n * @param gl - the WebGLContext\n * @param shader - the shader to log errors for\n */\nfunction logPrettyShaderError(gl: WebGLRenderingContext, shader: WebGLShader): void\n{\n const shaderSrc = gl.getShaderSource(shader)\n .split('\\n')\n .map((line, index) => `${index}: ${line}`);\n\n const shaderLog = gl.getShaderInfoLog(shader);\n const splitShader = shaderLog.split('\\n');\n\n const dedupe: Record<number, boolean> = {};\n\n const lineNumbers = splitShader.map((line) => parseFloat(line.replace(/^ERROR\\: 0\\:([\\d]+)\\:.*$/, '$1')))\n .filter((n) =>\n {\n if (n && !dedupe[n])\n {\n dedupe[n] = true;\n\n return true;\n }\n\n return false;\n });\n\n const logArgs = [''];\n\n lineNumbers.forEach((number) =>\n {\n shaderSrc[number - 1] = `%c${shaderSrc[number - 1]}%c`;\n logArgs.push('background: #FF0000; color:#FFFFFF; font-size: 10px', 'font-size: 10px');\n });\n\n const fragmentSourceToLog = shaderSrc\n .join('\\n');\n\n logArgs[0] = fragmentSourceToLog;\n\n console.error(shaderLog);\n\n // eslint-disable-next-line no-console\n console.groupCollapsed('click to view full shader code');\n console.warn(...logArgs);\n // eslint-disable-next-line no-console\n console.groupEnd();\n}\n\n/**\n *\n * logs out any program errors\n * @param gl - The current WebGL context\n * @param program - the WebGL program to display errors for\n * @param vertexShader - the fragment WebGL shader program\n * @param fragmentShader - the vertex WebGL shader program\n * @private\n */\nexport function logProgramError(\n gl: WebGLRenderingContext,\n program: WebGLProgram,\n vertexShader: WebGLShader,\n fragmentShader: WebGLShader\n): void\n{\n // if linking fails, then log and cleanup\n if (!gl.getProgramParameter(program, gl.LINK_STATUS))\n {\n if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS))\n {\n logPrettyShaderError(gl, vertexShader);\n }\n\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS))\n {\n logPrettyShaderError(gl, fragmentShader);\n }\n\n console.error('PixiJS Error: Could not initialize shader.');\n\n // if there is a program info log, log it\n if (gl.getProgramInfoLog(program) !== '')\n {\n console.warn('PixiJS Warning: gl.getProgramInfoLog()', gl.getProgramInfoLog(program));\n }\n }\n}\n", "import { warn } from '../../../../../utils/logging/warn';\nimport { GlProgramData } from '../GlProgramData';\nimport { compileShader } from './compileShader';\nimport { defaultValue } from './defaultValue';\nimport { extractAttributesFromGlProgram } from './extractAttributesFromGlProgram';\nimport { getUboData } from './getUboData';\nimport { getUniformData } from './getUniformData';\nimport { logProgramError } from './logProgramError';\n\nimport type { GlRenderingContext } from '../../context/GlRenderingContext';\nimport type { GlProgram } from '../GlProgram';\nimport type { IGLUniformData } from '../GlProgramData';\n\n/**\n * generates a WebGL Program object from a high level Pixi Program.\n * @param gl - a rendering context on which to generate the program\n * @param program - the high level Pixi Program.\n * @private\n */\nexport function generateProgram(gl: GlRenderingContext, program: GlProgram): GlProgramData\n{\n const glVertShader = compileShader(gl, gl.VERTEX_SHADER, program.vertex);\n const glFragShader = compileShader(gl, gl.FRAGMENT_SHADER, program.fragment);\n\n const webGLProgram = gl.createProgram();\n\n gl.attachShader(webGLProgram, glVertShader);\n gl.attachShader(webGLProgram, glFragShader);\n\n const transformFeedbackVaryings = program.transformFeedbackVaryings;\n\n if (transformFeedbackVaryings)\n {\n if (typeof gl.transformFeedbackVaryings !== 'function')\n {\n // #if _DEBUG\n warn(`TransformFeedback is not supported but TransformFeedbackVaryings are given.`);\n // #endif\n }\n else\n {\n gl.transformFeedbackVaryings(\n webGLProgram,\n transformFeedbackVaryings.names,\n transformFeedbackVaryings.bufferMode === 'separate'\n ? gl.SEPARATE_ATTRIBS\n : gl.INTERLEAVED_ATTRIBS\n );\n }\n }\n\n gl.linkProgram(webGLProgram);\n\n if (!gl.getProgramParameter(webGLProgram, gl.LINK_STATUS))\n {\n logProgramError(gl, webGLProgram, glVertShader, glFragShader);\n }\n\n // GLSL 1.00: bind attributes sorted by name in ascending order\n // GLSL 3.00: don't change the attribute locations that where chosen by the compiler\n // or assigned by the layout specifier in the shader source code\n program._attributeData = extractAttributesFromGlProgram(\n webGLProgram,\n gl,\n !(/^[ \\t]*#[ \\t]*version[ \\t]+300[ \\t]+es[ \\t]*$/m).test(program.vertex)\n );\n\n program._uniformData = getUniformData(webGLProgram, gl);\n program._uniformBlockData = getUboData(webGLProgram, gl);\n\n gl.deleteShader(glVertShader);\n gl.deleteShader(glFragShader);\n\n const uniformData: {[key: string]: IGLUniformData} = {};\n\n for (const i in program._uniformData)\n {\n const data = program._uniformData[i];\n\n uniformData[i] = {\n location: gl.getUniformLocation(webGLProgram, i),\n value: defaultValue(data.type, data.size),\n };\n }\n\n const glProgram = new GlProgramData(webGLProgram, uniformData);\n\n return glProgram;\n}\n", "import { ExtensionType } from '../../../../extensions/Extensions';\nimport { generateShaderSyncCode } from './GenerateShaderSyncCode';\nimport { generateProgram } from './program/generateProgram';\n\nimport type { BufferResource } from '../../shared/buffer/BufferResource';\nimport type { Shader } from '../../shared/shader/Shader';\nimport type { UniformGroup } from '../../shared/shader/UniformGroup';\nimport type { GlRenderingContext } from '../context/GlRenderingContext';\nimport type { WebGLRenderer } from '../WebGLRenderer';\nimport type { GlProgram } from './GlProgram';\nimport type { GlProgramData } from './GlProgramData';\n\n/** @internal */\nexport interface ShaderSyncData\n{\n textureCount: number;\n blockIndex: number;\n}\n\n/** @internal */\nexport type ShaderSyncFunction = (renderer: WebGLRenderer, shader: Shader, syncData: ShaderSyncData) => void;\n\n// default sync data so we don't create a new one each time!\nconst defaultSyncData: ShaderSyncData = {\n textureCount: 0,\n blockIndex: 0,\n};\n\n/**\n * System plugin to the renderer to manage the shaders for WebGL.\n * @category rendering\n * @advanced\n */\nexport class GlShaderSystem\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ],\n name: 'shader',\n } as const;\n\n /** @internal */\n public _activeProgram: GlProgram = null;\n\n private _programDataHash: Record<string, GlProgramData> = Object.create(null);\n private readonly _renderer: WebGLRenderer;\n /** @internal */\n public _gl: WebGL2RenderingContext;\n private _shaderSyncFunctions: Record<string, ShaderSyncFunction> = Object.create(null);\n\n constructor(renderer: WebGLRenderer)\n {\n this._renderer = renderer;\n this._renderer.renderableGC.addManagedHash(this, '_programDataHash');\n }\n\n protected contextChange(gl: GlRenderingContext): void\n {\n this._gl = gl;\n\n this._programDataHash = Object.create(null);\n /**\n * these need to also be cleared as internally some uniforms are set as an optimisation as the sync\n * function is generated. Specifically the texture ints.\n */\n this._shaderSyncFunctions = Object.create(null);\n this._activeProgram = null;\n }\n\n /**\n * Changes the current shader to the one given in parameter.\n * @param shader - the new shader\n * @param skipSync - false if the shader should automatically sync its uniforms.\n * @returns the glProgram that belongs to the shader.\n */\n public bind(shader: Shader, skipSync?: boolean): void\n {\n this._setProgram(shader.glProgram);\n\n if (skipSync) return;\n\n defaultSyncData.textureCount = 0;\n defaultSyncData.blockIndex = 0;\n\n let syncFunction = this._shaderSyncFunctions[shader.glProgram._key];\n\n if (!syncFunction)\n {\n syncFunction = this._shaderSyncFunctions[shader.glProgram._key] = this._generateShaderSync(shader, this);\n }\n\n // TODO: take into account number of TF buffers. Currently works only with interleaved\n this._renderer.buffer.nextBindBase(!!shader.glProgram.transformFeedbackVaryings);\n syncFunction(this._renderer, shader, defaultSyncData);\n }\n\n /**\n * Updates the uniform group.\n * @param uniformGroup - the uniform group to update\n */\n public updateUniformGroup(uniformGroup: UniformGroup): void\n {\n this._renderer.uniformGroup.updateUniformGroup(uniformGroup, this._activeProgram, defaultSyncData);\n }\n\n /**\n * Binds a uniform block to the shader.\n * @param uniformGroup - the uniform group to bind\n * @param name - the name of the uniform block\n * @param index - the index of the uniform block\n */\n public bindUniformBlock(uniformGroup: UniformGroup | BufferResource, name: string, index = 0): void\n {\n const bufferSystem = this._renderer.buffer;\n const programData = this._getProgramData(this._activeProgram);\n\n const isBufferResource = (uniformGroup as BufferResource)._bufferResource;\n\n if (!isBufferResource)\n {\n this._renderer.ubo.updateUniformGroup(uniformGroup as UniformGroup);\n }\n\n const buffer = uniformGroup.buffer;\n\n const glBuffer = bufferSystem.updateBuffer(buffer);\n\n const boundLocation = bufferSystem.freeLocationForBufferBase(glBuffer);\n\n if (isBufferResource)\n {\n const { offset, size } = (uniformGroup as BufferResource);\n\n // trivial case of buffer resource, can be cached\n if (offset === 0 && size === buffer.data.byteLength)\n {\n bufferSystem.bindBufferBase(glBuffer, boundLocation);\n }\n else\n {\n bufferSystem.bindBufferRange(glBuffer, boundLocation, offset);\n }\n }\n else if (bufferSystem.getLastBindBaseLocation(glBuffer) !== boundLocation)\n {\n // confirmation that buffer isn't there yet\n bufferSystem.bindBufferBase(glBuffer, boundLocation);\n }\n\n const uniformBlockIndex = this._activeProgram._uniformBlockData[name].index;\n\n if (programData.uniformBlockBindings[index] === boundLocation) return;\n programData.uniformBlockBindings[index] = boundLocation;\n\n this._renderer.gl.uniformBlockBinding(programData.program, uniformBlockIndex, boundLocation);\n }\n\n private _setProgram(program: GlProgram)\n {\n if (this._activeProgram === program) return;\n\n this._activeProgram = program;\n\n const programData = this._getProgramData(program);\n\n this._gl.useProgram(programData.program);\n }\n\n /**\n * @param program - the program to get the data for\n * @internal\n */\n public _getProgramData(program: GlProgram): GlProgramData\n {\n return this._programDataHash[program._key] || this._createProgramData(program);\n }\n\n private _createProgramData(program: GlProgram): GlProgramData\n {\n const key = program._key;\n\n this._programDataHash[key] = generateProgram(this._gl, program);\n\n return this._programDataHash[key];\n }\n\n public destroy(): void\n {\n for (const key of Object.keys(this._programDataHash))\n {\n const programData = this._programDataHash[key];\n\n programData.destroy();\n this._programDataHash[key] = null;\n }\n\n this._programDataHash = null;\n this._shaderSyncFunctions = null;\n this._activeProgram = null;\n (this._renderer as null) = null;\n this._gl = null;\n }\n\n /**\n * Creates a function that can be executed that will sync the shader as efficiently as possible.\n * Overridden by the unsafe eval package if you don't want eval used in your project.\n * @param shader - the shader to generate the sync function for\n * @param shaderSystem - the shader system to use\n * @returns - the generated sync function\n * @ignore\n */\n public _generateShaderSync(shader: Shader, shaderSystem: GlShaderSystem): ShaderSyncFunction\n {\n return generateShaderSyncCode(shader, shaderSystem);\n }\n\n public resetState(): void\n {\n this._activeProgram = null;\n }\n}\n", "// cu = Cached value's uniform data field\n// cv = Cached value\n// v = value to upload\n// ud = uniformData\n// uv = uniformValue\n\nimport type { UNIFORM_TYPES } from '../../../shared/shader/types';\n\n/** @internal */\nexport const UNIFORM_TO_SINGLE_SETTERS: Record<UNIFORM_TYPES | string, string> = {\n f32: `if (cv !== v) {\n cu.value = v;\n gl.uniform1f(location, v);\n }`,\n 'vec2<f32>': `if (cv[0] !== v[0] || cv[1] !== v[1]) {\n cv[0] = v[0];\n cv[1] = v[1];\n gl.uniform2f(location, v[0], v[1]);\n }`,\n 'vec3<f32>': `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n gl.uniform3f(location, v[0], v[1], v[2]);\n }`,\n 'vec4<f32>': `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n gl.uniform4f(location, v[0], v[1], v[2], v[3]);\n }`,\n i32: `if (cv !== v) {\n cu.value = v;\n gl.uniform1i(location, v);\n }`,\n 'vec2<i32>': `if (cv[0] !== v[0] || cv[1] !== v[1]) {\n cv[0] = v[0];\n cv[1] = v[1];\n gl.uniform2i(location, v[0], v[1]);\n }`,\n 'vec3<i32>': `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n gl.uniform3i(location, v[0], v[1], v[2]);\n }`,\n 'vec4<i32>': `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n gl.uniform4i(location, v[0], v[1], v[2], v[3]);\n }`,\n u32: `if (cv !== v) {\n cu.value = v;\n gl.uniform1ui(location, v);\n }`,\n 'vec2<u32>': `if (cv[0] !== v[0] || cv[1] !== v[1]) {\n cv[0] = v[0];\n cv[1] = v[1];\n gl.uniform2ui(location, v[0], v[1]);\n }`,\n 'vec3<u32>': `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n gl.uniform3ui(location, v[0], v[1], v[2]);\n }`,\n 'vec4<u32>': `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n gl.uniform4ui(location, v[0], v[1], v[2], v[3]);\n }`,\n bool: `if (cv !== v) {\n cu.value = v;\n gl.uniform1i(location, v);\n }`,\n 'vec2<bool>': `if (cv[0] !== v[0] || cv[1] !== v[1]) {\n cv[0] = v[0];\n cv[1] = v[1];\n gl.uniform2i(location, v[0], v[1]);\n }`,\n 'vec3<bool>': `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n gl.uniform3i(location, v[0], v[1], v[2]);\n }`,\n 'vec4<bool>': `if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3]) {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n gl.uniform4i(location, v[0], v[1], v[2], v[3]);\n }`,\n 'mat2x2<f32>': `gl.uniformMatrix2fv(location, false, v);`,\n 'mat3x3<f32>': `gl.uniformMatrix3fv(location, false, v);`,\n 'mat4x4<f32>': `gl.uniformMatrix4fv(location, false, v);`,\n};\n\n/** @internal */\nexport const UNIFORM_TO_ARRAY_SETTERS: Record<UNIFORM_TYPES | string, string> = {\n f32: `gl.uniform1fv(location, v);`,\n 'vec2<f32>': `gl.uniform2fv(location, v);`,\n 'vec3<f32>': `gl.uniform3fv(location, v);`,\n 'vec4<f32>': `gl.uniform4fv(location, v);`,\n 'mat2x2<f32>': `gl.uniformMatrix2fv(location, false, v);`,\n 'mat3x3<f32>': `gl.uniformMatrix3fv(location, false, v);`,\n 'mat4x4<f32>': `gl.uniformMatrix4fv(location, false, v);`,\n i32: `gl.uniform1iv(location, v);`,\n 'vec2<i32>': `gl.uniform2iv(location, v);`,\n 'vec3<i32>': `gl.uniform3iv(location, v);`,\n 'vec4<i32>': `gl.uniform4iv(location, v);`,\n u32: `gl.uniform1iv(location, v);`,\n 'vec2<u32>': `gl.uniform2iv(location, v);`,\n 'vec3<u32>': `gl.uniform3iv(location, v);`,\n 'vec4<u32>': `gl.uniform4iv(location, v);`,\n bool: `gl.uniform1iv(location, v);`,\n 'vec2<bool>': `gl.uniform2iv(location, v);`,\n 'vec3<bool>': `gl.uniform3iv(location, v);`,\n 'vec4<bool>': `gl.uniform4iv(location, v);`,\n};\n", "// cu = Cached value's uniform data field\n// cv = Cached value\n// v = value to upload\n// ud = uniformData\n// uv = uniformValue\n\nimport { BufferResource } from '../../../shared/buffer/BufferResource';\nimport { UniformGroup } from '../../../shared/shader/UniformGroup';\nimport { uniformParsers } from '../../../shared/shader/utils/uniformParsers';\nimport { UNIFORM_TO_ARRAY_SETTERS, UNIFORM_TO_SINGLE_SETTERS } from './generateUniformsSyncTypes';\n\nimport type { UniformsSyncCallback } from '../../../shared/shader/types';\n\n/**\n * @param group\n * @param uniformData\n * @internal\n */\nexport function generateUniformsSync(group: UniformGroup, uniformData: Record<string, any>): UniformsSyncCallback\n{\n const funcFragments = [`\n var v = null;\n var cv = null;\n var cu = null;\n var t = 0;\n var gl = renderer.gl;\n var name = null;\n `];\n\n for (const i in group.uniforms)\n {\n if (!uniformData[i])\n {\n if (group.uniforms[i] instanceof UniformGroup)\n {\n if ((group.uniforms[i] as UniformGroup).ubo)\n {\n funcFragments.push(`\n renderer.shader.bindUniformBlock(uv.${i}, \"${i}\");\n `);\n }\n else\n {\n funcFragments.push(`\n renderer.shader.updateUniformGroup(uv.${i});\n `);\n }\n }\n else if (group.uniforms[i] instanceof BufferResource)\n {\n funcFragments.push(`\n renderer.shader.bindBufferResource(uv.${i}, \"${i}\");\n `);\n }\n\n continue;\n }\n\n const uniform = group.uniformStructures[i];\n\n let parsed = false;\n\n for (let j = 0; j < uniformParsers.length; j++)\n {\n const parser = uniformParsers[j];\n\n if (uniform.type === parser.type && parser.test(uniform))\n {\n funcFragments.push(`name = \"${i}\";`, uniformParsers[j].uniform);\n parsed = true;\n\n break;\n }\n }\n\n if (!parsed)\n {\n const templateType = uniform.size === 1 ? UNIFORM_TO_SINGLE_SETTERS : UNIFORM_TO_ARRAY_SETTERS;\n\n const template = templateType[uniform.type].replace('location', `ud[\"${i}\"].location`);\n\n funcFragments.push(`\n cu = ud[\"${i}\"];\n cv = cu.value;\n v = uv[\"${i}\"];\n ${template};`);\n }\n }\n\n /*\n * the introduction of syncData is to solve an issue where textures in uniform groups are not set correctly\n * the texture count was always starting from 0 in each group. This needs to increment each time a texture is used\n * no matter which group is being used\n *\n */\n // eslint-disable-next-line no-new-func\n return new Function('ud', 'uv', 'renderer', 'syncData', funcFragments.join('\\n')) as UniformsSyncCallback;\n}\n", "import { ExtensionType } from '../../../../extensions/Extensions';\nimport { generateUniformsSync } from './utils/generateUniformsSync';\n\nimport type { UniformsSyncCallback } from '../../shared/shader/types';\nimport type { UniformGroup } from '../../shared/shader/UniformGroup';\nimport type { System } from '../../shared/system/System';\nimport type { GlRenderingContext } from '../context/GlRenderingContext';\nimport type { WebGLRenderer } from '../WebGLRenderer';\nimport type { GlProgram, GlUniformData } from './GlProgram';\n\n/**\n * System plugin to the renderer to manage shaders.\n * @category rendering\n * @advanced\n */\nexport class GlUniformGroupSystem implements System\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ],\n name: 'uniformGroup',\n } as const;\n\n /**\n * The current WebGL rendering context.\n * @type {WebGLRenderingContext}\n */\n protected gl: GlRenderingContext;\n\n /** Cache to holds the generated functions. Stored against UniformObjects unique signature. */\n private _cache: Record<string, UniformsSyncCallback> = {};\n private _renderer: WebGLRenderer;\n\n private _uniformGroupSyncHash: Record<string, Record<string, UniformsSyncCallback>> = {};\n\n /** @param renderer - The renderer this System works for. */\n constructor(renderer: WebGLRenderer)\n {\n this._renderer = renderer;\n\n this.gl = null;\n this._cache = {};\n }\n\n protected contextChange(gl: GlRenderingContext): void\n {\n this.gl = gl;\n }\n\n /**\n * Uploads the uniforms values to the currently bound shader.\n * @param group - the uniforms values that be applied to the current shader\n * @param program\n * @param syncData\n * @param syncData.textureCount\n */\n public updateUniformGroup(group: UniformGroup, program: GlProgram, syncData: { textureCount: number }): void\n {\n const programData = this._renderer.shader._getProgramData(program);\n\n if (!group.isStatic || group._dirtyId !== programData.uniformDirtyGroups[group.uid])\n {\n programData.uniformDirtyGroups[group.uid] = group._dirtyId;\n\n const syncFunc = this._getUniformSyncFunction(group, program);\n\n syncFunc(programData.uniformData, group.uniforms, this._renderer, syncData);\n }\n }\n\n /**\n * Overridable by the pixi.js/unsafe-eval package to use static syncUniforms instead.\n * @param group\n * @param program\n */\n private _getUniformSyncFunction(group: UniformGroup, program: GlProgram): UniformsSyncCallback\n {\n return this._uniformGroupSyncHash[group._signature]?.[program._key]\n || this._createUniformSyncFunction(group, program);\n }\n\n private _createUniformSyncFunction(group: UniformGroup, program: GlProgram): UniformsSyncCallback\n {\n const uniformGroupSyncHash = this._uniformGroupSyncHash[group._signature]\n || (this._uniformGroupSyncHash[group._signature] = {});\n\n const id = this._getSignature(group, program._uniformData, 'u');\n\n if (!this._cache[id])\n {\n this._cache[id] = this._generateUniformsSync(group, program._uniformData);\n }\n\n uniformGroupSyncHash[program._key] = this._cache[id];\n\n return uniformGroupSyncHash[program._key];\n }\n\n private _generateUniformsSync(group: UniformGroup, uniformData: Record<string, GlUniformData>): UniformsSyncCallback\n {\n return generateUniformsSync(group, uniformData);\n }\n\n /**\n * Takes a uniform group and data and generates a unique signature for them.\n * @param group - The uniform group to get signature of\n * @param group.uniforms\n * @param uniformData - Uniform information generated by the shader\n * @param preFix\n * @returns Unique signature of the uniform group\n */\n private _getSignature(group: UniformGroup, uniformData: Record<string, any>, preFix: string): string\n {\n const uniforms = group.uniforms;\n\n const strings = [`${preFix}-`];\n\n for (const i in uniforms)\n {\n strings.push(i);\n\n if (uniformData[i])\n {\n strings.push(uniformData[i].type);\n }\n }\n\n return strings.join('-');\n }\n\n /** Destroys this System and removes all its textures. */\n public destroy(): void\n {\n this._renderer = null;\n this._cache = null;\n }\n}\n", "import { DOMAdapter } from '../../../../environment/adapter';\n\nimport type { BLEND_MODES } from '../../shared/state/const';\nimport type { GlRenderingContext } from '../context/GlRenderingContext';\n\n/**\n * Maps gl blend combinations to WebGL.\n * @param gl\n * @returns {object} Map of gl blend combinations to WebGL.\n * @internal\n */\nexport function mapWebGLBlendModesToPixi(gl: GlRenderingContext): Record<BLEND_MODES, number[]>\n{\n const blendMap: Partial<Record<BLEND_MODES, number[]>> = {};\n\n // TODO - premultiply alpha would be different.\n // add a boolean for that!\n blendMap.normal = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n blendMap.add = [gl.ONE, gl.ONE];\n blendMap.multiply = [gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n blendMap.screen = [gl.ONE, gl.ONE_MINUS_SRC_COLOR, gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n blendMap.none = [0, 0];\n\n // not-premultiplied blend modes\n blendMap['normal-npm'] = [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n blendMap['add-npm'] = [gl.SRC_ALPHA, gl.ONE, gl.ONE, gl.ONE];\n blendMap['screen-npm'] = [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_COLOR, gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n\n blendMap.erase = [gl.ZERO, gl.ONE_MINUS_SRC_ALPHA];\n\n const isWebGl2 = !(gl instanceof DOMAdapter.get().getWebGLRenderingContext());\n\n if (isWebGl2)\n {\n blendMap.min = [gl.ONE, gl.ONE, gl.ONE, gl.ONE, gl.MIN, gl.MIN];\n blendMap.max = [gl.ONE, gl.ONE, gl.ONE, gl.ONE, gl.MAX, gl.MAX];\n }\n else\n {\n const ext = gl.getExtension('EXT_blend_minmax');\n\n if (ext)\n {\n blendMap.min = [gl.ONE, gl.ONE, gl.ONE, gl.ONE, ext.MIN_EXT, ext.MIN_EXT];\n blendMap.max = [gl.ONE, gl.ONE, gl.ONE, gl.ONE, ext.MAX_EXT, ext.MAX_EXT];\n }\n }\n\n // TODO - implement if requested!\n // composite operations\n // array[BLEND_MODES.SRC_IN] = [gl.DST_ALPHA, gl.ZERO];\n // array[BLEND_MODES.SRC_OUT] = [gl.ONE_MINUS_DST_ALPHA, gl.ZERO];\n // array[BLEND_MODES.SRC_ATOP] = [gl.DST_ALPHA, gl.ONE_MINUS_SRC_ALPHA];\n // array[BLEND_MODES.DST_OVER] = [gl.ONE_MINUS_DST_ALPHA, gl.ONE];\n // array[BLEND_MODES.DST_IN] = [gl.ZERO, gl.SRC_ALPHA];\n // array[BLEND_MODES.DST_OUT] = [gl.ZERO, gl.ONE_MINUS_SRC_ALPHA];\n // array[BLEND_MODES.DST_ATOP] = [gl.ONE_MINUS_DST_ALPHA, gl.SRC_ALPHA];\n // array[BLEND_MODES.XOR] = [gl.ONE_MINUS_DST_ALPHA, gl.ONE_MINUS_SRC_ALPHA];\n // SUBTRACT from flash\n // array[BLEND_MODES.SUBTRACT] = [gl.ONE, gl.ONE, gl.ONE, gl.ONE, gl.FUNC_REVERSE_SUBTRACT, gl.FUNC_ADD];\n\n return blendMap as Record<BLEND_MODES, number[]>;\n}\n", "import { ExtensionType } from '../../../../extensions/Extensions';\nimport { type RenderTarget } from '../../shared/renderTarget/RenderTarget';\nimport { State } from '../../shared/state/State';\nimport { type WebGLRenderer } from '../WebGLRenderer';\nimport { mapWebGLBlendModesToPixi } from './mapWebGLBlendModesToPixi';\n\nimport type { BLEND_MODES } from '../../shared/state/const';\nimport type { System } from '../../shared/system/System';\nimport type { GlRenderingContext } from '../context/GlRenderingContext';\n\nconst BLEND = 0;\nconst OFFSET = 1;\nconst CULLING = 2;\nconst DEPTH_TEST = 3;\nconst WINDING = 4;\nconst DEPTH_MASK = 5;\n\n/**\n * System plugin to the renderer to manage WebGL state machines\n * @category rendering\n * @advanced\n */\nexport class GlStateSystem implements System\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ],\n name: 'state',\n } as const;\n\n /**\n * State ID\n * @readonly\n */\n public stateId: number;\n\n /**\n * Polygon offset\n * @readonly\n */\n public polygonOffset: number;\n\n /**\n * Blend mode\n * @default 'none'\n * @readonly\n */\n public blendMode: BLEND_MODES;\n\n /** Whether current blend equation is different */\n protected _blendEq: boolean;\n\n /**\n * GL context\n * @type {WebGLRenderingContext}\n * @readonly\n */\n protected gl: GlRenderingContext;\n\n protected blendModesMap: Record<BLEND_MODES, number[]>;\n\n /**\n * Collection of calls\n * @type {Function[]}\n */\n protected readonly map: ((value: boolean) => void)[];\n\n /**\n * Collection of check calls\n * @type {Function[]}\n */\n protected readonly checks: ((system: this, state: State) => void)[];\n\n /**\n * Default WebGL State\n * @readonly\n */\n protected defaultState: State;\n\n /**\n * Whether to invert the front face when rendering\n * This is used for render textures where the Y-coordinate is flipped\n * @default false\n */\n private _invertFrontFace: boolean = false;\n private _glFrontFace: boolean;\n private _cullFace: boolean;\n private _frontFaceDirty: boolean;\n private _frontFace: boolean;\n\n constructor(renderer: WebGLRenderer)\n {\n this.gl = null;\n\n this.stateId = 0;\n this.polygonOffset = 0;\n this.blendMode = 'none';\n\n this._blendEq = false;\n\n // map functions for when we set state..\n this.map = [];\n this.map[BLEND] = this.setBlend;\n this.map[OFFSET] = this.setOffset;\n this.map[CULLING] = this.setCullFace;\n this.map[DEPTH_TEST] = this.setDepthTest;\n this.map[WINDING] = this.setFrontFace;\n this.map[DEPTH_MASK] = this.setDepthMask;\n\n this.checks = [];\n\n this.defaultState = State.for2d();\n\n // listen for when the renderTarget changes\n // as rendering to textures means we need to invert the front face\n renderer.renderTarget.onRenderTargetChange.add(this);\n }\n\n protected onRenderTargetChange(renderTarget: RenderTarget)\n {\n this._invertFrontFace = !renderTarget.isRoot;\n\n // mini optimization to avoid setting the front face if culling is disabled\n if (this._cullFace)\n {\n // need to set the front face to the requested value as it matters because of the culling is active!\n this.setFrontFace(this._frontFace);\n }\n else\n {\n // if culling is disabled, we need to set the front face dirty\n this._frontFaceDirty = true;\n }\n }\n\n protected contextChange(gl: GlRenderingContext): void\n {\n this.gl = gl;\n\n this.blendModesMap = mapWebGLBlendModesToPixi(gl);\n\n // Reset face culling variables\n\n this.resetState();\n }\n\n /**\n * Sets the current state\n * @param {*} state - The state to set.\n */\n public set(state: State): void\n {\n state ||= this.defaultState;\n\n // TODO maybe to an object check? ( this.state === state )?\n if (this.stateId !== state.data)\n {\n let diff = this.stateId ^ state.data;\n let i = 0;\n\n // order from least to most common\n while (diff)\n {\n if (diff & 1)\n {\n // state change!\n this.map[i].call(this, !!(state.data & (1 << i)));\n }\n\n diff >>= 1;\n i++;\n }\n\n this.stateId = state.data;\n }\n\n // based on the above settings we check for specific modes..\n // for example if blend is active we check and set the blend modes\n // or of polygon offset is active we check the poly depth.\n for (let i = 0; i < this.checks.length; i++)\n {\n this.checks[i](this, state);\n }\n }\n\n /**\n * Sets the state, when previous state is unknown.\n * @param {*} state - The state to set\n */\n public forceState(state: State): void\n {\n state ||= this.defaultState;\n for (let i = 0; i < this.map.length; i++)\n {\n this.map[i].call(this, !!(state.data & (1 << i)));\n }\n for (let i = 0; i < this.checks.length; i++)\n {\n this.checks[i](this, state);\n }\n\n this.stateId = state.data;\n }\n\n /**\n * Sets whether to enable or disable blending.\n * @param value - Turn on or off WebGl blending.\n */\n public setBlend(value: boolean): void\n {\n this._updateCheck(GlStateSystem._checkBlendMode, value);\n\n this.gl[value ? 'enable' : 'disable'](this.gl.BLEND);\n }\n\n /**\n * Sets whether to enable or disable polygon offset fill.\n * @param value - Turn on or off webgl polygon offset testing.\n */\n public setOffset(value: boolean): void\n {\n this._updateCheck(GlStateSystem._checkPolygonOffset, value);\n\n this.gl[value ? 'enable' : 'disable'](this.gl.POLYGON_OFFSET_FILL);\n }\n\n /**\n * Sets whether to enable or disable depth test.\n * @param value - Turn on or off webgl depth testing.\n */\n public setDepthTest(value: boolean): void\n {\n this.gl[value ? 'enable' : 'disable'](this.gl.DEPTH_TEST);\n }\n\n /**\n * Sets whether to enable or disable depth mask.\n * @param value - Turn on or off webgl depth mask.\n */\n public setDepthMask(value: boolean): void\n {\n this.gl.depthMask(value);\n }\n\n /**\n * Sets whether to enable or disable cull face.\n * @param {boolean} value - Turn on or off webgl cull face.\n */\n public setCullFace(value: boolean): void\n {\n this._cullFace = value;\n this.gl[value ? 'enable' : 'disable'](this.gl.CULL_FACE);\n\n if (this._cullFace && this._frontFaceDirty)\n {\n // need to set the front face to the requested value as it matters because of the culling is active!\n this.setFrontFace(this._frontFace);\n }\n }\n\n /**\n * Sets the gl front face.\n * @param {boolean} value - true is clockwise and false is counter-clockwise\n */\n public setFrontFace(value: boolean): void\n {\n this._frontFace = value;\n this._frontFaceDirty = false;\n // If invertFrontFace is true, we invert the face direction\n const faceMode = this._invertFrontFace ? !value : value;\n\n if (this._glFrontFace !== faceMode)\n {\n this._glFrontFace = faceMode;\n this.gl.frontFace(this.gl[faceMode ? 'CW' : 'CCW']);\n }\n }\n\n /**\n * Sets the blend mode.\n * @param {number} value - The blend mode to set to.\n */\n public setBlendMode(value: BLEND_MODES): void\n {\n if (!this.blendModesMap[value])\n {\n value = 'normal';\n }\n\n if (value === this.blendMode)\n {\n return;\n }\n\n this.blendMode = value;\n\n const mode = this.blendModesMap[value];\n const gl = this.gl;\n\n if (mode.length === 2)\n {\n gl.blendFunc(mode[0], mode[1]);\n }\n else\n {\n gl.blendFuncSeparate(mode[0], mode[1], mode[2], mode[3]);\n }\n\n if (mode.length === 6)\n {\n this._blendEq = true;\n gl.blendEquationSeparate(mode[4], mode[5]);\n }\n else if (this._blendEq)\n {\n this._blendEq = false;\n gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);\n }\n }\n\n /**\n * Sets the polygon offset.\n * @param {number} value - the polygon offset\n * @param {number} scale - the polygon offset scale\n */\n public setPolygonOffset(value: number, scale: number): void\n {\n this.gl.polygonOffset(value, scale);\n }\n\n /** Resets all the logic and disables the VAOs. */\n public resetState(): void\n {\n this._glFrontFace = false;\n this._frontFace = false;\n this._cullFace = false;\n this._frontFaceDirty = false;\n this._invertFrontFace = false;\n\n this.gl.frontFace(this.gl.CCW);\n this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL, false);\n\n this.forceState(this.defaultState);\n\n this._blendEq = true;\n // setting to '' means the blend mode will be set as soon as we set the first blend mode when rendering!\n this.blendMode = '' as BLEND_MODES;\n this.setBlendMode('normal');\n }\n\n /**\n * Checks to see which updates should be checked based on which settings have been activated.\n *\n * For example, if blend is enabled then we should check the blend modes each time the state is changed\n * or if polygon fill is activated then we need to check if the polygon offset changes.\n * The idea is that we only check what we have too.\n * @param func - the checking function to add or remove\n * @param value - should the check function be added or removed.\n */\n private _updateCheck(func: (system: this, state: State) => void, value: boolean): void\n {\n const index = this.checks.indexOf(func);\n\n if (value && index === -1)\n {\n this.checks.push(func);\n }\n else if (!value && index !== -1)\n {\n this.checks.splice(index, 1);\n }\n }\n\n /**\n * A private little wrapper function that we call to check the blend mode.\n * @param system - the System to perform the state check on\n * @param state - the state that the blendMode will pulled from\n */\n private static _checkBlendMode(system: GlStateSystem, state: State): void\n {\n system.setBlendMode(state.blendMode);\n }\n\n /**\n * A private little wrapper function that we call to check the polygon offset.\n * @param system - the System to perform the state check on\n * @param state - the state that the blendMode will pulled from\n */\n private static _checkPolygonOffset(system: GlStateSystem, state: State): void\n {\n system.setPolygonOffset(1, state.polygonOffset);\n }\n\n /** @ignore */\n public destroy(): void\n {\n this.gl = null;\n this.checks.length = 0;\n }\n}\n", "import { GL_FORMATS, GL_TARGETS, GL_TYPES } from './const';\n\n/**\n * Internal texture for WebGL context\n * @category rendering\n * @ignore\n */\nexport class GlTexture\n{\n public target: GL_TARGETS = GL_TARGETS.TEXTURE_2D;\n\n /** The WebGL texture. */\n public texture: WebGLTexture;\n\n /** Width of texture that was used in texImage2D. */\n public width: number;\n\n /** Height of texture that was used in texImage2D. */\n public height: number;\n\n /** Whether mip levels has to be generated. */\n public mipmap: boolean;\n\n /** Type copied from texture source. */\n public type: number;\n\n /** Type copied from texture source. */\n public internalFormat: number;\n\n /** Type of sampler corresponding to this texture. See {@link SAMPLER_TYPES} */\n public samplerType: number;\n\n public format: GL_FORMATS;\n\n constructor(texture: WebGLTexture)\n {\n this.texture = texture;\n this.width = -1;\n this.height = -1;\n this.type = GL_TYPES.UNSIGNED_BYTE;\n this.internalFormat = GL_FORMATS.RGBA;\n this.format = GL_FORMATS.RGBA;\n this.samplerType = 0;\n }\n}\n", "import type { TextureSource } from '../../../shared/texture/sources/TextureSource';\nimport type { GlRenderingContext } from '../../context/GlRenderingContext';\nimport type { GlTexture } from '../GlTexture';\nimport type { GLTextureUploader } from './GLTextureUploader';\n\n/** @internal */\nexport const glUploadBufferImageResource = {\n\n id: 'buffer',\n\n upload(source: TextureSource, glTexture: GlTexture, gl: GlRenderingContext)\n {\n if (glTexture.width === source.width || glTexture.height === source.height)\n {\n gl.texSubImage2D(\n gl.TEXTURE_2D,\n 0,\n 0,\n 0,\n source.width,\n source.height,\n glTexture.format,\n glTexture.type,\n source.resource\n );\n }\n else\n {\n gl.texImage2D(\n glTexture.target,\n 0,\n glTexture.internalFormat,\n source.width,\n source.height,\n 0,\n glTexture.format,\n glTexture.type,\n source.resource\n );\n }\n\n glTexture.width = source.width;\n glTexture.height = source.height;\n }\n} as GLTextureUploader;\n\n", "import type { CompressedSource } from '../../../shared/texture/sources/CompressedSource';\nimport type { GlRenderingContext } from '../../context/GlRenderingContext';\nimport type { GlTexture } from '../GlTexture';\nimport type { GLTextureUploader } from './GLTextureUploader';\n\nconst compressedFormatMap: Record<string, boolean> = {\n 'bc1-rgba-unorm': true,\n 'bc1-rgba-unorm-srgb': true,\n 'bc2-rgba-unorm': true,\n 'bc2-rgba-unorm-srgb': true,\n 'bc3-rgba-unorm': true,\n 'bc3-rgba-unorm-srgb': true,\n 'bc4-r-unorm': true,\n 'bc4-r-snorm': true,\n 'bc5-rg-unorm': true,\n 'bc5-rg-snorm': true,\n 'bc6h-rgb-ufloat': true,\n 'bc6h-rgb-float': true,\n 'bc7-rgba-unorm': true,\n 'bc7-rgba-unorm-srgb': true,\n\n // ETC2 compressed formats usable if \"texture-compression-etc2\" is both\n // supported by the device/user agent and enabled in requestDevice.\n 'etc2-rgb8unorm': true,\n 'etc2-rgb8unorm-srgb': true,\n 'etc2-rgb8a1unorm': true,\n 'etc2-rgb8a1unorm-srgb': true,\n 'etc2-rgba8unorm': true,\n 'etc2-rgba8unorm-srgb': true,\n 'eac-r11unorm': true,\n 'eac-r11snorm': true,\n 'eac-rg11unorm': true,\n 'eac-rg11snorm': true,\n\n // ASTC compressed formats usable if \"texture-compression-astc\" is both\n // supported by the device/user agent and enabled in requestDevice.\n 'astc-4x4-unorm': true,\n 'astc-4x4-unorm-srgb': true,\n 'astc-5x4-unorm': true,\n 'astc-5x4-unorm-srgb': true,\n 'astc-5x5-unorm': true,\n 'astc-5x5-unorm-srgb': true,\n 'astc-6x5-unorm': true,\n 'astc-6x5-unorm-srgb': true,\n 'astc-6x6-unorm': true,\n 'astc-6x6-unorm-srgb': true,\n 'astc-8x5-unorm': true,\n 'astc-8x5-unorm-srgb': true,\n 'astc-8x6-unorm': true,\n 'astc-8x6-unorm-srgb': true,\n 'astc-8x8-unorm': true,\n 'astc-8x8-unorm-srgb': true,\n 'astc-10x5-unorm': true,\n 'astc-10x5-unorm-srgb': true,\n 'astc-10x6-unorm': true,\n 'astc-10x6-unorm-srgb': true,\n 'astc-10x8-unorm': true,\n 'astc-10x8-unorm-srgb': true,\n 'astc-10x10-unorm': true,\n 'astc-10x10-unorm-srgb': true,\n 'astc-12x10-unorm': true,\n 'astc-12x10-unorm-srgb': true,\n 'astc-12x12-unorm': true,\n 'astc-12x12-unorm-srgb': true,\n};\n\n/** @internal */\nexport const glUploadCompressedTextureResource = {\n\n id: 'compressed',\n\n upload(source: CompressedSource, glTexture: GlTexture, gl: GlRenderingContext)\n {\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 4);\n\n let mipWidth = source.pixelWidth;\n let mipHeight = source.pixelHeight;\n\n const compressed = !!compressedFormatMap[source.format];\n\n for (let i = 0; i < source.resource.length; i++)\n {\n const levelBuffer = source.resource[i];\n\n if (compressed)\n {\n gl.compressedTexImage2D(\n gl.TEXTURE_2D, i, glTexture.internalFormat,\n mipWidth, mipHeight, 0,\n levelBuffer\n );\n }\n else\n {\n gl.texImage2D(\n gl.TEXTURE_2D, i, glTexture.internalFormat,\n mipWidth, mipHeight, 0,\n glTexture.format, glTexture.type,\n levelBuffer);\n }\n\n mipWidth = Math.max(mipWidth >> 1, 1);\n mipHeight = Math.max(mipHeight >> 1, 1);\n }\n }\n} as GLTextureUploader;\n\n", "import type { CanvasSource } from '../../../shared/texture/sources/CanvasSource';\nimport type { ImageSource } from '../../../shared/texture/sources/ImageSource';\nimport type { GlRenderingContext } from '../../context/GlRenderingContext';\nimport type { GlTexture } from '../GlTexture';\nimport type { GLTextureUploader } from './GLTextureUploader';\n\n/** @internal */\nexport const glUploadImageResource = {\n\n id: 'image',\n\n upload(source: ImageSource | CanvasSource, glTexture: GlTexture, gl: GlRenderingContext, webGLVersion: number)\n {\n const glWidth = glTexture.width;\n const glHeight = glTexture.height;\n\n const textureWidth = source.pixelWidth;\n const textureHeight = source.pixelHeight;\n\n const resourceWidth = source.resourceWidth;\n const resourceHeight = source.resourceHeight;\n\n if (resourceWidth < textureWidth || resourceHeight < textureHeight)\n {\n if (glWidth !== textureWidth || glHeight !== textureHeight)\n {\n gl.texImage2D(\n glTexture.target,\n 0,\n glTexture.internalFormat,\n textureWidth,\n textureHeight,\n 0,\n glTexture.format,\n glTexture.type,\n null\n );\n }\n\n if (webGLVersion === 2)\n {\n gl.texSubImage2D(\n gl.TEXTURE_2D,\n 0,\n 0,\n 0,\n resourceWidth,\n resourceHeight,\n glTexture.format,\n glTexture.type,\n source.resource as TexImageSource\n );\n }\n else\n {\n gl.texSubImage2D(\n gl.TEXTURE_2D,\n 0,\n 0,\n 0,\n glTexture.format,\n glTexture.type,\n source.resource as TexImageSource\n );\n }\n }\n else if (glWidth === textureWidth && glHeight === textureHeight)\n {\n gl.texSubImage2D(\n gl.TEXTURE_2D,\n 0,\n 0,\n 0,\n glTexture.format,\n glTexture.type,\n source.resource as TexImageSource\n );\n }\n else if (webGLVersion === 2)\n {\n gl.texImage2D(\n glTexture.target,\n 0,\n glTexture.internalFormat,\n textureWidth,\n textureHeight,\n 0,\n glTexture.format,\n glTexture.type,\n source.resource as TexImageSource\n );\n }\n else\n {\n gl.texImage2D(\n glTexture.target,\n 0,\n glTexture.internalFormat,\n glTexture.format,\n glTexture.type,\n source.resource as TexImageSource\n );\n }\n\n glTexture.width = textureWidth;\n glTexture.height = textureHeight;\n }\n} as GLTextureUploader;\n\n", "import { glUploadImageResource } from './glUploadImageResource';\n\nimport type { VideoSource } from '../../../shared/texture/sources/VideoSource';\nimport type { GlRenderingContext } from '../../context/GlRenderingContext';\nimport type { GlTexture } from '../GlTexture';\nimport type { GLTextureUploader } from './GLTextureUploader';\n\n/** @internal */\nexport const glUploadVideoResource = {\n\n id: 'video',\n\n upload(source: VideoSource, glTexture: GlTexture, gl: GlRenderingContext, webGLVersion: number)\n {\n if (!source.isValid)\n {\n gl.texImage2D(\n glTexture.target,\n 0,\n glTexture.internalFormat,\n 1,\n 1,\n 0,\n glTexture.format,\n glTexture.type,\n null\n );\n\n return;\n }\n\n glUploadImageResource.upload(source, glTexture, gl, webGLVersion);\n }\n} as GLTextureUploader;\n\n", "/** @internal */\nexport const scaleModeToGlFilter = {\n linear: 9729,\n nearest: 9728,\n};\n\n/** @internal */\nexport const mipmapScaleModeToGlFilter = {\n linear: {\n linear: 9987,\n nearest: 9985,\n },\n nearest: {\n linear: 9986,\n nearest: 9984,\n }\n};\n\n/** @internal */\nexport const wrapModeToGlAddress = {\n 'clamp-to-edge': 33071,\n repeat: 10497,\n 'mirror-repeat': 33648,\n};\n\n/** @internal */\nexport const compareModeToGlCompare = {\n never: 512,\n less: 513,\n equal: 514,\n 'less-equal': 515,\n greater: 516,\n 'not-equal': 517,\n 'greater-equal': 518,\n always: 519,\n};\n\n", "import {\n compareModeToGlCompare,\n mipmapScaleModeToGlFilter,\n scaleModeToGlFilter,\n wrapModeToGlAddress\n} from './pixiToGlMaps';\n\nimport type { TextureStyle } from '../../../shared/texture/TextureStyle';\n\n/**\n * @param style\n * @param gl\n * @param mipmaps\n * @param anisotropicExt\n * @param glFunctionName\n * @param firstParam\n * @param forceClamp\n * @param firstCreation\n * @internal\n */\nexport function applyStyleParams(\n style: TextureStyle,\n gl: WebGL2RenderingContext,\n mipmaps: boolean,\n // eslint-disable-next-line camelcase\n anisotropicExt: EXT_texture_filter_anisotropic,\n glFunctionName: 'samplerParameteri' | 'texParameteri',\n firstParam: 3553 | WebGLSampler,\n forceClamp: boolean,\n /** if true we can skip setting certain values if the values is the same as the default gl values */\n firstCreation: boolean\n)\n{\n const castParam = firstParam as 3553;\n\n if (!firstCreation\n || style.addressModeU !== 'repeat'\n || style.addressModeV !== 'repeat'\n || style.addressModeW !== 'repeat'\n )\n {\n // 1. set the wrapping mode\n const wrapModeS = wrapModeToGlAddress[forceClamp ? 'clamp-to-edge' : style.addressModeU];\n const wrapModeT = wrapModeToGlAddress[forceClamp ? 'clamp-to-edge' : style.addressModeV];\n const wrapModeR = wrapModeToGlAddress[forceClamp ? 'clamp-to-edge' : style.addressModeW];\n\n gl[glFunctionName](castParam, gl.TEXTURE_WRAP_S, wrapModeS);\n gl[glFunctionName](castParam, gl.TEXTURE_WRAP_T, wrapModeT);\n\n // does not exist in webGL1\n if (gl.TEXTURE_WRAP_R) gl[glFunctionName](castParam, gl.TEXTURE_WRAP_R, wrapModeR);\n }\n\n if (!firstCreation || style.magFilter !== 'linear')\n {\n // 2. set the filtering mode\n gl[glFunctionName](castParam, gl.TEXTURE_MAG_FILTER, scaleModeToGlFilter[style.magFilter]);\n }\n\n // assuming the currently bound texture is the one we want to set the filter for\n // the only smelly part of this code, WebGPU is much better here :P\n if (mipmaps)\n {\n if (!firstCreation || style.mipmapFilter !== 'linear')\n {\n const glFilterMode = mipmapScaleModeToGlFilter[style.minFilter][style.mipmapFilter];\n\n gl[glFunctionName](castParam, gl.TEXTURE_MIN_FILTER, glFilterMode);\n }\n }\n\n else\n {\n gl[glFunctionName](castParam, gl.TEXTURE_MIN_FILTER, scaleModeToGlFilter[style.minFilter]);\n }\n\n // 3. set the anisotropy\n if (anisotropicExt && style.maxAnisotropy > 1)\n {\n const level = Math.min(style.maxAnisotropy, gl.getParameter(anisotropicExt.MAX_TEXTURE_MAX_ANISOTROPY_EXT));\n\n gl[glFunctionName](castParam, anisotropicExt.TEXTURE_MAX_ANISOTROPY_EXT, level);\n }\n\n // 4. set the compare mode\n if (style.compare)\n {\n gl[glFunctionName](castParam, gl.TEXTURE_COMPARE_FUNC, compareModeToGlCompare[style.compare]);\n }\n}\n", "import type { GlRenderingContext } from '../../context/GlRenderingContext';\n\n/**\n * Returns a lookup table that maps each type-format pair to a compatible internal format.\n * @function mapTypeAndFormatToInternalFormat\n * @private\n * @param {WebGLRenderingContext} gl - The rendering context.\n * @returns Lookup table.\n */\nexport function mapFormatToGlFormat(gl: GlRenderingContext): Record<string, number>\n{\n return {\n // 8-bit formats\n r8unorm: gl.RED,\n r8snorm: gl.RED,\n r8uint: gl.RED,\n r8sint: gl.RED,\n\n // 16-bit formats\n r16uint: gl.RED,\n r16sint: gl.RED,\n r16float: gl.RED,\n rg8unorm: gl.RG,\n rg8snorm: gl.RG,\n rg8uint: gl.RG,\n rg8sint: gl.RG,\n\n // 32-bit formats\n r32uint: gl.RED,\n r32sint: gl.RED,\n r32float: gl.RED,\n rg16uint: gl.RG,\n rg16sint: gl.RG,\n rg16float: gl.RG,\n rgba8unorm: gl.RGBA,\n 'rgba8unorm-srgb': gl.RGBA,\n\n // Packed 32-bit formats\n rgba8snorm: gl.RGBA,\n rgba8uint: gl.RGBA,\n rgba8sint: gl.RGBA,\n bgra8unorm: gl.RGBA,\n 'bgra8unorm-srgb': gl.RGBA,\n rgb9e5ufloat: gl.RGB,\n rgb10a2unorm: gl.RGBA,\n rg11b10ufloat: gl.RGB,\n\n // 64-bit formats\n rg32uint: gl.RG,\n rg32sint: gl.RG,\n rg32float: gl.RG,\n rgba16uint: gl.RGBA,\n rgba16sint: gl.RGBA,\n rgba16float: gl.RGBA,\n\n // 128-bit formats\n rgba32uint: gl.RGBA,\n rgba32sint: gl.RGBA,\n rgba32float: gl.RGBA,\n\n // Depth/stencil formats\n stencil8: gl.STENCIL_INDEX8,\n depth16unorm: gl.DEPTH_COMPONENT,\n depth24plus: gl.DEPTH_COMPONENT,\n 'depth24plus-stencil8': gl.DEPTH_STENCIL,\n depth32float: gl.DEPTH_COMPONENT,\n 'depth32float-stencil8': gl.DEPTH_STENCIL,\n\n };\n}\n", "import { DOMAdapter } from '../../../../../environment/adapter';\n\nimport type { GlRenderingContext } from '../../context/GlRenderingContext';\nimport type { WebGLExtensions } from '../../context/WebGLExtensions';\n\n/**\n * Returns a lookup table that maps each type-format pair to a compatible internal format.\n * @function mapTypeAndFormatToInternalFormat\n * @private\n * @param gl - The rendering context.\n * @param extensions - The WebGL extensions.\n * @returns Lookup table.\n */\nexport function mapFormatToGlInternalFormat(\n gl: GlRenderingContext,\n extensions: WebGLExtensions,\n): Record<string, number>\n{\n let srgb = {};\n let bgra8unorm: number = gl.RGBA;\n\n if (!(gl instanceof DOMAdapter.get().getWebGLRenderingContext()))\n {\n srgb = {\n 'rgba8unorm-srgb': gl.SRGB8_ALPHA8,\n 'bgra8unorm-srgb': gl.SRGB8_ALPHA8,\n };\n\n bgra8unorm = gl.RGBA8;\n }\n else if (extensions.srgb)\n {\n srgb = {\n 'rgba8unorm-srgb': extensions.srgb.SRGB8_ALPHA8_EXT,\n 'bgra8unorm-srgb': extensions.srgb.SRGB8_ALPHA8_EXT,\n };\n }\n\n return {\n // 8-bit formats\n r8unorm: gl.R8,\n r8snorm: gl.R8_SNORM,\n r8uint: gl.R8UI,\n r8sint: gl.R8I,\n\n // 16-bit formats\n r16uint: gl.R16UI,\n r16sint: gl.R16I,\n r16float: gl.R16F,\n rg8unorm: gl.RG8,\n rg8snorm: gl.RG8_SNORM,\n rg8uint: gl.RG8UI,\n rg8sint: gl.RG8I,\n\n // 32-bit formats\n r32uint: gl.R32UI,\n r32sint: gl.R32I,\n r32float: gl.R32F,\n rg16uint: gl.RG16UI,\n rg16sint: gl.RG16I,\n rg16float: gl.RG16F,\n rgba8unorm: gl.RGBA,\n\n ...srgb,\n\n // Packed 32-bit formats\n rgba8snorm: gl.RGBA8_SNORM,\n rgba8uint: gl.RGBA8UI,\n rgba8sint: gl.RGBA8I,\n bgra8unorm,\n rgb9e5ufloat: gl.RGB9_E5,\n rgb10a2unorm: gl.RGB10_A2,\n rg11b10ufloat: gl.R11F_G11F_B10F,\n\n // 64-bit formats\n rg32uint: gl.RG32UI,\n rg32sint: gl.RG32I,\n rg32float: gl.RG32F,\n rgba16uint: gl.RGBA16UI,\n rgba16sint: gl.RGBA16I,\n rgba16float: gl.RGBA16F,\n\n // 128-bit formats\n rgba32uint: gl.RGBA32UI,\n rgba32sint: gl.RGBA32I,\n rgba32float: gl.RGBA32F,\n\n // Depth/stencil formats\n stencil8: gl.STENCIL_INDEX8,\n depth16unorm: gl.DEPTH_COMPONENT16,\n depth24plus: gl.DEPTH_COMPONENT24,\n 'depth24plus-stencil8': gl.DEPTH24_STENCIL8,\n depth32float: gl.DEPTH_COMPONENT32F,\n 'depth32float-stencil8': gl.DEPTH32F_STENCIL8,\n\n // Compressed formats\n ...extensions.s3tc ? {\n 'bc1-rgba-unorm': extensions.s3tc.COMPRESSED_RGBA_S3TC_DXT1_EXT,\n 'bc2-rgba-unorm': extensions.s3tc.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n 'bc3-rgba-unorm': extensions.s3tc.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n } : {},\n ...extensions.s3tc_sRGB ? {\n 'bc1-rgba-unorm-srgb': extensions.s3tc_sRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,\n 'bc2-rgba-unorm-srgb': extensions.s3tc_sRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,\n 'bc3-rgba-unorm-srgb': extensions.s3tc_sRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,\n } : {},\n ...extensions.rgtc ? {\n 'bc4-r-unorm': extensions.rgtc.COMPRESSED_RED_RGTC1_EXT,\n 'bc4-r-snorm': extensions.rgtc.COMPRESSED_SIGNED_RED_RGTC1_EXT,\n 'bc5-rg-unorm': extensions.rgtc.COMPRESSED_RED_GREEN_RGTC2_EXT,\n 'bc5-rg-snorm': extensions.rgtc.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,\n } : {},\n ...extensions.bptc ? {\n 'bc6h-rgb-float': extensions.bptc.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT,\n 'bc6h-rgb-ufloat': extensions.bptc.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT,\n 'bc7-rgba-unorm': extensions.bptc.COMPRESSED_RGBA_BPTC_UNORM_EXT,\n 'bc7-rgba-unorm-srgb': extensions.bptc.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT,\n } : {},\n ...extensions.etc ? {\n 'etc2-rgb8unorm': extensions.etc.COMPRESSED_RGB8_ETC2,\n 'etc2-rgb8unorm-srgb': extensions.etc.COMPRESSED_SRGB8_ETC2,\n 'etc2-rgb8a1unorm': extensions.etc.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n 'etc2-rgb8a1unorm-srgb': extensions.etc.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n 'etc2-rgba8unorm': extensions.etc.COMPRESSED_RGBA8_ETC2_EAC,\n 'etc2-rgba8unorm-srgb': extensions.etc.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,\n 'eac-r11unorm': extensions.etc.COMPRESSED_R11_EAC,\n // 'eac-r11snorm'\n 'eac-rg11unorm': extensions.etc.COMPRESSED_SIGNED_RG11_EAC,\n // 'eac-rg11snorm'\n } : {},\n ...extensions.astc ? {\n 'astc-4x4-unorm': extensions.astc.COMPRESSED_RGBA_ASTC_4x4_KHR,\n 'astc-4x4-unorm-srgb': extensions.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,\n 'astc-5x4-unorm': extensions.astc.COMPRESSED_RGBA_ASTC_5x4_KHR,\n 'astc-5x4-unorm-srgb': extensions.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR,\n 'astc-5x5-unorm': extensions.astc.COMPRESSED_RGBA_ASTC_5x5_KHR,\n 'astc-5x5-unorm-srgb': extensions.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,\n 'astc-6x5-unorm': extensions.astc.COMPRESSED_RGBA_ASTC_6x5_KHR,\n 'astc-6x5-unorm-srgb': extensions.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,\n 'astc-6x6-unorm': extensions.astc.COMPRESSED_RGBA_ASTC_6x6_KHR,\n 'astc-6x6-unorm-srgb': extensions.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,\n 'astc-8x5-unorm': extensions.astc.COMPRESSED_RGBA_ASTC_8x5_KHR,\n 'astc-8x5-unorm-srgb': extensions.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,\n 'astc-8x6-unorm': extensions.astc.COMPRESSED_RGBA_ASTC_8x6_KHR,\n 'astc-8x6-unorm-srgb': extensions.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,\n 'astc-8x8-unorm': extensions.astc.COMPRESSED_RGBA_ASTC_8x8_KHR,\n 'astc-8x8-unorm-srgb': extensions.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,\n 'astc-10x5-unorm': extensions.astc.COMPRESSED_RGBA_ASTC_10x5_KHR,\n 'astc-10x5-unorm-srgb': extensions.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,\n 'astc-10x6-unorm': extensions.astc.COMPRESSED_RGBA_ASTC_10x6_KHR,\n 'astc-10x6-unorm-srgb': extensions.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,\n 'astc-10x8-unorm': extensions.astc.COMPRESSED_RGBA_ASTC_10x8_KHR,\n 'astc-10x8-unorm-srgb': extensions.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,\n 'astc-10x10-unorm': extensions.astc.COMPRESSED_RGBA_ASTC_10x10_KHR,\n 'astc-10x10-unorm-srgb': extensions.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,\n 'astc-12x10-unorm': extensions.astc.COMPRESSED_RGBA_ASTC_12x10_KHR,\n 'astc-12x10-unorm-srgb': extensions.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,\n 'astc-12x12-unorm': extensions.astc.COMPRESSED_RGBA_ASTC_12x12_KHR,\n 'astc-12x12-unorm-srgb': extensions.astc.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,\n } : {},\n };\n}\n", "import type { GlRenderingContext } from '../../context/GlRenderingContext';\n\n/**\n * Returns a lookup table that maps each type-format pair to a compatible internal format.\n * @function mapTypeAndFormatToInternalFormat\n * @private\n * @param {WebGLRenderingContext} gl - The rendering context.\n * @returns Lookup table.\n */\nexport function mapFormatToGlType(gl: GlRenderingContext): Record<string, number>\n{\n return {\n // 8-bit formats\n r8unorm: gl.UNSIGNED_BYTE,\n r8snorm: gl.BYTE,\n r8uint: gl.UNSIGNED_BYTE,\n r8sint: gl.BYTE,\n\n // 16-bit formats\n r16uint: gl.UNSIGNED_SHORT,\n r16sint: gl.SHORT,\n r16float: gl.HALF_FLOAT,\n rg8unorm: gl.UNSIGNED_BYTE,\n rg8snorm: gl.BYTE,\n rg8uint: gl.UNSIGNED_BYTE,\n rg8sint: gl.BYTE,\n\n // 32-bit formats\n r32uint: gl.UNSIGNED_INT,\n r32sint: gl.INT,\n r32float: gl.FLOAT,\n rg16uint: gl.UNSIGNED_SHORT,\n rg16sint: gl.SHORT,\n rg16float: gl.HALF_FLOAT,\n rgba8unorm: gl.UNSIGNED_BYTE,\n 'rgba8unorm-srgb': gl.UNSIGNED_BYTE,\n\n // Packed 32-bit formats\n rgba8snorm: gl.BYTE,\n rgba8uint: gl.UNSIGNED_BYTE,\n rgba8sint: gl.BYTE,\n bgra8unorm: gl.UNSIGNED_BYTE,\n 'bgra8unorm-srgb': gl.UNSIGNED_BYTE,\n rgb9e5ufloat: gl.UNSIGNED_INT_5_9_9_9_REV,\n rgb10a2unorm: gl.UNSIGNED_INT_2_10_10_10_REV,\n rg11b10ufloat: gl.UNSIGNED_INT_10F_11F_11F_REV,\n\n // 64-bit formats\n rg32uint: gl.UNSIGNED_INT,\n rg32sint: gl.INT,\n rg32float: gl.FLOAT,\n rgba16uint: gl.UNSIGNED_SHORT,\n rgba16sint: gl.SHORT,\n rgba16float: gl.HALF_FLOAT,\n\n // 128-bit formats\n rgba32uint: gl.UNSIGNED_INT,\n rgba32sint: gl.INT,\n rgba32float: gl.FLOAT,\n\n // Depth/stencil formats\n stencil8: gl.UNSIGNED_BYTE,\n depth16unorm: gl.UNSIGNED_SHORT,\n depth24plus: gl.UNSIGNED_INT,\n 'depth24plus-stencil8': gl.UNSIGNED_INT_24_8,\n depth32float: gl.FLOAT,\n 'depth32float-stencil8': gl.FLOAT_32_UNSIGNED_INT_24_8_REV,\n\n };\n}\n", "import { DOMAdapter } from '../../../../environment/adapter';\nimport { ExtensionType } from '../../../../extensions/Extensions';\nimport { Texture } from '../../shared/texture/Texture';\nimport { GlTexture } from './GlTexture';\nimport { glUploadBufferImageResource } from './uploaders/glUploadBufferImageResource';\nimport { glUploadCompressedTextureResource } from './uploaders/glUploadCompressedTextureResource';\nimport { glUploadImageResource } from './uploaders/glUploadImageResource';\nimport { glUploadVideoResource } from './uploaders/glUploadVideoResource';\nimport { applyStyleParams } from './utils/applyStyleParams';\nimport { mapFormatToGlFormat } from './utils/mapFormatToGlFormat';\nimport { mapFormatToGlInternalFormat } from './utils/mapFormatToGlInternalFormat';\nimport { mapFormatToGlType } from './utils/mapFormatToGlType';\nimport { unpremultiplyAlpha } from './utils/unpremultiplyAlpha';\n\nimport type { ICanvas } from '../../../../environment/canvas/ICanvas';\nimport type { System } from '../../shared/system/System';\nimport type { CanvasGenerator, GetPixelsOutput } from '../../shared/texture/GenerateCanvas';\nimport type { TextureSource } from '../../shared/texture/sources/TextureSource';\nimport type { BindableTexture } from '../../shared/texture/Texture';\nimport type { TextureStyle } from '../../shared/texture/TextureStyle';\nimport type { GlRenderingContext } from '../context/GlRenderingContext';\nimport type { WebGLRenderer } from '../WebGLRenderer';\nimport type { GLTextureUploader } from './uploaders/GLTextureUploader';\n\nconst BYTES_PER_PIXEL = 4;\n\n/**\n * The system for managing textures in WebGL.\n * @category rendering\n * @advanced\n */\nexport class GlTextureSystem implements System, CanvasGenerator\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ],\n name: 'texture',\n } as const;\n\n public readonly managedTextures: TextureSource[] = [];\n\n private readonly _renderer: WebGLRenderer;\n\n private _glTextures: Record<number, GlTexture> = Object.create(null);\n private _glSamplers: Record<string, WebGLSampler> = Object.create(null);\n\n private _boundTextures: TextureSource[] = [];\n private _activeTextureLocation = -1;\n\n private _boundSamplers: Record<number, WebGLSampler> = Object.create(null);\n\n private readonly _uploads: Record<string, GLTextureUploader> = {\n image: glUploadImageResource,\n buffer: glUploadBufferImageResource,\n video: glUploadVideoResource,\n compressed: glUploadCompressedTextureResource,\n };\n\n private _gl: GlRenderingContext;\n private _mapFormatToInternalFormat: Record<string, number>;\n private _mapFormatToType: Record<string, number>;\n private _mapFormatToFormat: Record<string, number>;\n\n private _premultiplyAlpha = false;\n\n // TODO - separate samplers will be a cool thing to add, but not right now!\n private readonly _useSeparateSamplers = false;\n\n constructor(renderer: WebGLRenderer)\n {\n this._renderer = renderer;\n this._renderer.renderableGC.addManagedHash(this, '_glTextures');\n this._renderer.renderableGC.addManagedHash(this, '_glSamplers');\n }\n\n protected contextChange(gl: GlRenderingContext): void\n {\n this._gl = gl;\n\n if (!this._mapFormatToInternalFormat)\n {\n this._mapFormatToInternalFormat = mapFormatToGlInternalFormat(gl, this._renderer.context.extensions);\n\n this._mapFormatToType = mapFormatToGlType(gl);\n this._mapFormatToFormat = mapFormatToGlFormat(gl);\n }\n\n this._glTextures = Object.create(null);\n this._glSamplers = Object.create(null);\n this._boundSamplers = Object.create(null);\n this._premultiplyAlpha = false;\n\n for (let i = 0; i < 16; i++)\n {\n this.bind(Texture.EMPTY, i);\n }\n }\n\n /**\n * Initializes a texture source, if it has already been initialized nothing will happen.\n * @param source - The texture source to initialize.\n * @returns The initialized texture source.\n */\n public initSource(source: TextureSource)\n {\n this.bind(source);\n }\n\n public bind(texture: BindableTexture, location = 0)\n {\n const source = texture.source;\n\n if (texture)\n {\n this.bindSource(source, location);\n\n if (this._useSeparateSamplers)\n {\n this._bindSampler(source.style, location);\n }\n }\n else\n {\n this.bindSource(null, location);\n\n if (this._useSeparateSamplers)\n {\n this._bindSampler(null, location);\n }\n }\n }\n\n public bindSource(source: TextureSource, location = 0): void\n {\n const gl = this._gl;\n\n source._touched = this._renderer.textureGC.count;\n\n if (this._boundTextures[location] !== source)\n {\n this._boundTextures[location] = source;\n this._activateLocation(location);\n\n source ||= Texture.EMPTY.source;\n\n // bind texture and source!\n const glTexture = this.getGlSource(source);\n\n gl.bindTexture(glTexture.target, glTexture.texture);\n }\n }\n\n private _bindSampler(style: TextureStyle, location = 0): void\n {\n const gl = this._gl;\n\n if (!style)\n {\n this._boundSamplers[location] = null;\n gl.bindSampler(location, null);\n\n return;\n }\n\n const sampler = this._getGlSampler(style);\n\n if (this._boundSamplers[location] !== sampler)\n {\n this._boundSamplers[location] = sampler;\n gl.bindSampler(location, sampler);\n }\n }\n\n public unbind(texture: BindableTexture): void\n {\n const source = texture.source;\n const boundTextures = this._boundTextures;\n const gl = this._gl;\n\n for (let i = 0; i < boundTextures.length; i++)\n {\n if (boundTextures[i] === source)\n {\n this._activateLocation(i);\n\n const glTexture = this.getGlSource(source);\n\n gl.bindTexture(glTexture.target, null);\n boundTextures[i] = null;\n }\n }\n }\n\n private _activateLocation(location: number): void\n {\n if (this._activeTextureLocation !== location)\n {\n this._activeTextureLocation = location;\n this._gl.activeTexture(this._gl.TEXTURE0 + location);\n }\n }\n\n private _initSource(source: TextureSource): GlTexture\n {\n const gl = this._gl;\n\n const glTexture = new GlTexture(gl.createTexture());\n\n glTexture.type = this._mapFormatToType[source.format];\n glTexture.internalFormat = this._mapFormatToInternalFormat[source.format];\n glTexture.format = this._mapFormatToFormat[source.format];\n\n if (source.autoGenerateMipmaps && (this._renderer.context.supports.nonPowOf2mipmaps || source.isPowerOfTwo))\n {\n const biggestDimension = Math.max(source.width, source.height);\n\n source.mipLevelCount = Math.floor(Math.log2(biggestDimension)) + 1;\n }\n\n this._glTextures[source.uid] = glTexture;\n\n if (!this.managedTextures.includes(source))\n {\n source.on('update', this.onSourceUpdate, this);\n source.on('resize', this.onSourceUpdate, this);\n source.on('styleChange', this.onStyleChange, this);\n source.on('destroy', this.onSourceDestroy, this);\n source.on('unload', this.onSourceUnload, this);\n source.on('updateMipmaps', this.onUpdateMipmaps, this);\n\n this.managedTextures.push(source);\n }\n\n this.onSourceUpdate(source);\n this.updateStyle(source, false);\n\n return glTexture;\n }\n\n protected onStyleChange(source: TextureSource): void\n {\n this.updateStyle(source, false);\n }\n\n protected updateStyle(source: TextureSource, firstCreation: boolean): void\n {\n const gl = this._gl;\n\n const glTexture = this.getGlSource(source);\n\n gl.bindTexture(gl.TEXTURE_2D, glTexture.texture);\n\n this._boundTextures[this._activeTextureLocation] = source;\n\n applyStyleParams(\n source.style,\n gl,\n source.mipLevelCount > 1,\n this._renderer.context.extensions.anisotropicFiltering,\n 'texParameteri',\n gl.TEXTURE_2D,\n // will force a clamp to edge if the texture is not a power of two\n !this._renderer.context.supports.nonPowOf2wrapping && !source.isPowerOfTwo,\n firstCreation,\n );\n }\n\n protected onSourceUnload(source: TextureSource): void\n {\n const glTexture = this._glTextures[source.uid];\n\n if (!glTexture) return;\n\n this.unbind(source);\n this._glTextures[source.uid] = null;\n\n this._gl.deleteTexture(glTexture.texture);\n }\n\n protected onSourceUpdate(source: TextureSource): void\n {\n const gl = this._gl;\n\n const glTexture = this.getGlSource(source);\n\n gl.bindTexture(gl.TEXTURE_2D, glTexture.texture);\n\n this._boundTextures[this._activeTextureLocation] = source;\n\n const premultipliedAlpha = source.alphaMode === 'premultiply-alpha-on-upload';\n\n if (this._premultiplyAlpha !== premultipliedAlpha)\n {\n this._premultiplyAlpha = premultipliedAlpha;\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultipliedAlpha);\n }\n\n if (this._uploads[source.uploadMethodId])\n {\n this._uploads[source.uploadMethodId].upload(source, glTexture, gl, this._renderer.context.webGLVersion);\n }\n else\n {\n // eslint-disable-next-line max-len\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, source.pixelWidth, source.pixelHeight, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n }\n\n if (source.autoGenerateMipmaps && source.mipLevelCount > 1)\n {\n this.onUpdateMipmaps(source, false);\n }\n }\n\n protected onUpdateMipmaps(source: TextureSource, bind = true): void\n {\n if (bind) this.bindSource(source, 0);\n\n const glTexture = this.getGlSource(source);\n\n this._gl.generateMipmap(glTexture.target);\n }\n\n protected onSourceDestroy(source: TextureSource): void\n {\n source.off('destroy', this.onSourceDestroy, this);\n source.off('update', this.onSourceUpdate, this);\n source.off('resize', this.onSourceUpdate, this);\n source.off('unload', this.onSourceUnload, this);\n source.off('styleChange', this.onStyleChange, this);\n source.off('updateMipmaps', this.onUpdateMipmaps, this);\n\n this.managedTextures.splice(this.managedTextures.indexOf(source), 1);\n\n this.onSourceUnload(source);\n }\n\n private _initSampler(style: TextureStyle): WebGLSampler\n {\n const gl = this._gl;\n\n const glSampler = this._gl.createSampler();\n\n this._glSamplers[style._resourceId] = glSampler;\n\n applyStyleParams(\n style,\n gl,\n this._boundTextures[this._activeTextureLocation].mipLevelCount > 1,\n this._renderer.context.extensions.anisotropicFiltering,\n 'samplerParameteri',\n glSampler,\n false,\n true,\n );\n\n return this._glSamplers[style._resourceId];\n }\n\n private _getGlSampler(sampler: TextureStyle): WebGLSampler\n {\n return this._glSamplers[sampler._resourceId] || this._initSampler(sampler);\n }\n\n public getGlSource(source: TextureSource): GlTexture\n {\n return this._glTextures[source.uid] || this._initSource(source);\n }\n\n public generateCanvas(texture: Texture): ICanvas\n {\n const { pixels, width, height } = this.getPixels(texture);\n\n const canvas = DOMAdapter.get().createCanvas();\n\n canvas.width = width;\n canvas.height = height;\n\n const ctx = canvas.getContext('2d');\n\n if (ctx)\n {\n const imageData = ctx.createImageData(width, height);\n\n imageData.data.set(pixels);\n ctx.putImageData(imageData, 0, 0);\n }\n\n return canvas;\n }\n\n public getPixels(texture: Texture): GetPixelsOutput\n {\n const resolution = texture.source.resolution;\n const frame = texture.frame;\n\n const width = Math.max(Math.round(frame.width * resolution), 1);\n const height = Math.max(Math.round(frame.height * resolution), 1);\n const pixels = new Uint8Array(BYTES_PER_PIXEL * width * height);\n\n const renderer = this._renderer;\n\n const renderTarget = renderer.renderTarget.getRenderTarget(texture);\n const glRenterTarget = renderer.renderTarget.getGpuRenderTarget(renderTarget);\n\n const gl = renderer.gl;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, glRenterTarget.resolveTargetFramebuffer);\n\n gl.readPixels(\n Math.round(frame.x * resolution),\n Math.round(frame.y * resolution),\n width,\n height,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n pixels\n );\n\n // if (texture.source.premultiplyAlpha > 0)\n // TODO - premultiplied alpha does not exist right now, need to add that back in!\n // eslint-disable-next-line no-constant-condition\n if (false)\n {\n unpremultiplyAlpha(pixels);\n }\n\n return { pixels: new Uint8ClampedArray(pixels.buffer), width, height };\n }\n\n public destroy(): void\n {\n // we copy the array as the array with a slice as onSourceDestroy\n // will remove the source from the real managedTextures array\n this.managedTextures\n .slice()\n .forEach((source) => this.onSourceDestroy(source));\n\n (this.managedTextures as null) = null;\n this._glTextures = null;\n this._glSamplers = null;\n this._boundTextures = null;\n this._boundSamplers = null;\n this._mapFormatToInternalFormat = null;\n this._mapFormatToType = null;\n this._mapFormatToFormat = null;\n (this._uploads as null) = null;\n (this._renderer as null) = null;\n }\n\n public resetState(): void\n {\n this._activeTextureLocation = -1;\n this._boundTextures.fill(Texture.EMPTY.source);\n this._boundSamplers = Object.create(null);\n\n const gl = this._gl;\n\n this._premultiplyAlpha = false;\n\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, this._premultiplyAlpha);\n }\n}\n\n", "import { extensions, ExtensionType } from '../../../extensions/Extensions';\nimport { GlGraphicsAdaptor } from '../../../scene/graphics/gl/GlGraphicsAdaptor';\nimport { GlMeshAdaptor } from '../../../scene/mesh/gl/GlMeshAdaptor';\nimport { GlBatchAdaptor } from '../../batcher/gl/GlBatchAdaptor';\nimport { AbstractRenderer } from '../shared/system/AbstractRenderer';\nimport { SharedRenderPipes, SharedSystems } from '../shared/system/SharedSystems';\nimport { RendererType } from '../types';\nimport { GlBufferSystem } from './buffer/GlBufferSystem';\nimport { GlContextSystem } from './context/GlContextSystem';\nimport { GlGeometrySystem } from './geometry/GlGeometrySystem';\nimport { GlBackBufferSystem } from './GlBackBufferSystem';\nimport { GlColorMaskSystem } from './GlColorMaskSystem';\nimport { GlEncoderSystem } from './GlEncoderSystem';\nimport { GlLimitsSystem } from './GlLimitsSystem';\nimport { GlStencilSystem } from './GlStencilSystem';\nimport { GlUboSystem } from './GlUboSystem';\nimport { GlRenderTargetSystem } from './renderTarget/GlRenderTargetSystem';\nimport { GlShaderSystem } from './shader/GlShaderSystem';\nimport { GlUniformGroupSystem } from './shader/GlUniformGroupSystem';\nimport { GlStateSystem } from './state/GlStateSystem';\nimport { GlTextureSystem } from './texture/GlTextureSystem';\n\nimport type { ICanvas } from '../../../environment/canvas/ICanvas';\nimport type { PipeConstructor } from '../shared/instructions/RenderPipe';\nimport type { SharedRendererOptions } from '../shared/system/SharedSystems';\nimport type { SystemConstructor } from '../shared/system/System';\nimport type { ExtractRendererOptions, ExtractSystemTypes } from '../shared/system/utils/typeUtils';\nimport type { GlRenderingContext } from './context/GlRenderingContext';\n\nconst DefaultWebGLSystems = [\n ...SharedSystems,\n GlUboSystem,\n GlBackBufferSystem,\n GlContextSystem,\n GlLimitsSystem,\n GlBufferSystem,\n GlTextureSystem,\n GlRenderTargetSystem,\n GlGeometrySystem,\n GlUniformGroupSystem,\n GlShaderSystem,\n GlEncoderSystem,\n GlStateSystem,\n GlStencilSystem,\n GlColorMaskSystem,\n];\nconst DefaultWebGLPipes = [...SharedRenderPipes];\nconst DefaultWebGLAdapters = [GlBatchAdaptor, GlMeshAdaptor, GlGraphicsAdaptor];\n\n// installed systems will bbe added to this array by the extensions manager..\nconst systems: { name: string; value: SystemConstructor }[] = [];\nconst renderPipes: { name: string; value: PipeConstructor }[] = [];\nconst renderPipeAdaptors: { name: string; value: any }[] = [];\n\nextensions.handleByNamedList(ExtensionType.WebGLSystem, systems);\nextensions.handleByNamedList(ExtensionType.WebGLPipes, renderPipes);\nextensions.handleByNamedList(ExtensionType.WebGLPipesAdaptor, renderPipeAdaptors);\n\n// add all the default systems as well as any user defined ones from the extensions\nextensions.add(...DefaultWebGLSystems, ...DefaultWebGLPipes, ...DefaultWebGLAdapters);\n\n/**\n * The default WebGL renderer, uses WebGL2 contexts.\n * @category rendering\n * @standard\n * @interface\n */\nexport type WebGLSystems = ExtractSystemTypes<typeof DefaultWebGLSystems>\n& PixiMixins.RendererSystems & PixiMixins.WebGLSystems;\n\n/**\n * The default WebGL renderer, uses WebGL2 contexts.\n * @internal\n */\nexport type WebGLPipes = ExtractSystemTypes<typeof DefaultWebGLPipes> & PixiMixins.RendererPipes & PixiMixins.WebGLPipes;\n\n/**\n * Options for WebGLRenderer.\n * @category rendering\n * @standard\n */\nexport interface WebGLOptions\n extends\n SharedRendererOptions,\n ExtractRendererOptions<typeof DefaultWebGLSystems>,\n PixiMixins.WebGLOptions {}\n\n// eslint-disable-next-line requireExport/require-export-jsdoc, requireMemberAPI/require-member-api-doc\nexport interface WebGLRenderer<T extends ICanvas = HTMLCanvasElement>\n extends AbstractRenderer<WebGLPipes, WebGLOptions, T>,\n WebGLSystems {}\n\n/* eslint-disable max-len */\n/**\n * The WebGL PixiJS Renderer. This renderer allows you to use the most common graphics API, WebGL (and WebGL2).\n *\n * ```ts\n * // Create a new renderer\n * const renderer = new WebGLRenderer();\n * await renderer.init();\n *\n * // Add the renderer to the stage\n * document.body.appendChild(renderer.canvas);\n *\n * // Create a new stage\n * const stage = new Container();\n *\n * // Render the stage\n * renderer.render(stage);\n * ```\n *\n * You can use {@link autoDetectRenderer} to create a renderer that will automatically detect the best\n * renderer for the environment.\n *\n *\n * ```ts\n * // Create a new renderer\n * const renderer = await rendering.autoDetectRenderer({\n * preference:'webgl',\n * });\n * ```\n *\n * The renderer is composed of systems that manage specific tasks. The following systems are added by default\n * whenever you create a WebGL renderer:\n *\n * | WebGL Core Systems | Systems that are specific to the WebGL renderer |\n * | ------------------------------------------- | ----------------------------------------------------------------------------- |\n * | {@link GlUboSystem} | This manages WebGL2 uniform buffer objects feature for shaders |\n * | {@link GlBackBufferSystem} | manages the back buffer, used so that we can pixi can pixels from the screen |\n * | {@link GlContextSystem} | This manages the WebGL context and its extensions |\n * | {@link GlBufferSystem} | This manages buffers and their GPU resources, keeps everything in sync |\n * | {@link GlTextureSystem} | This manages textures and their GPU resources, keeps everything in sync |\n * | {@link GlRenderTargetSystem} | This manages what we render too. For example the screen, or another texture |\n * | {@link GlGeometrySystem} | This manages geometry, used for drawing meshes via the GPU |\n * | {@link GlUniformGroupSystem} | This manages uniform groups. Syncing shader properties with the GPU |\n * | {@link GlShaderSystem} | This manages shaders, programs that run on the GPU to output lovely pixels |\n * | {@link GlEncoderSystem} | This manages encoders, a WebGPU Paradigm, use it to draw a mesh + shader |\n * | {@link GlStateSystem} | This manages the state of the WebGL context. eg the various flags that can be set blend modes / depthTesting etc |\n * | {@link GlStencilSystem} | This manages the stencil buffer. Used primarily for masking |\n * | {@link GlColorMaskSystem} | This manages the color mask. Used for color masking |\n *\n * The breadth of the API surface provided by the renderer is contained within these systems.\n * @category rendering\n * @property {GlUboSystem} ubo - UboSystem instance.\n * @property {GlBackBufferSystem} backBuffer - BackBufferSystem instance.\n * @property {GlContextSystem} context - ContextSystem instance.\n * @property {GlBufferSystem} buffer - BufferSystem instance.\n * @property {GlTextureSystem} texture - TextureSystem instance.\n * @property {GlRenderTargetSystem} renderTarget - RenderTargetSystem instance.\n * @property {GlGeometrySystem} geometry - GeometrySystem instance.\n * @property {GlUniformGroupSystem} uniformGroup - UniformGroupSystem instance.\n * @property {GlShaderSystem} shader - ShaderSystem instance.\n * @property {GlEncoderSystem} encoder - EncoderSystem instance.\n * @property {GlStateSystem} state - StateSystem instance.\n * @property {GlStencilSystem} stencil - StencilSystem instance.\n * @property {GlColorMaskSystem} colorMask - ColorMaskSystem instance.\n * @extends AbstractRenderer\n * @standard\n */\nexport class WebGLRenderer<T extends ICanvas = HTMLCanvasElement>\n extends AbstractRenderer<WebGLPipes, WebGLOptions, T>\n implements WebGLSystems\n{\n public gl: GlRenderingContext;\n\n constructor()\n {\n const systemConfig = {\n name: 'webgl',\n type: RendererType.WEBGL,\n systems,\n renderPipes,\n renderPipeAdaptors,\n };\n\n super(systemConfig);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["GlGraphicsAdaptor", "renderer", "uniforms", "UniformGroup", "Matrix", "maxTextures", "glProgram", "compileHighShaderGlProgram", "colorBitGl", "generateTextureBatchBitGl", "localUniformBitGl", "roundPixelsBitGl", "Shader", "getBatchSamplersUniformGroup", "graphicsPipe", "renderable", "context", "shader", "contextSystem", "batcher", "instructions", "batches", "i", "batch", "j", "ExtensionType", "GlMeshAdaptor", "glProgram", "compileHighShaderGlProgram", "localUniformBitGl", "textureBitGl", "roundPixelsBitGl", "Shader", "Texture", "Matrix", "meshPipe", "mesh", "renderer", "shader", "warn", "texture", "source", "ExtensionType", "GlBatchAdaptor", "State", "batcherPipe", "batchPipe", "geometry", "shader", "renderer", "didUpload", "batch", "textures", "i", "ExtensionType", "BUFFER_TYPE", "GlBuffer", "buffer", "type", "GlBufferSystem", "renderer", "buffer", "gl", "glBuffer", "index", "hasTransformFeedback", "freeIndex", "loop", "nextIndex", "curBuf", "offset", "size", "data", "drawType", "BufferUsage", "id", "contextLost", "type", "BUFFER_TYPE", "GlBuffer", "ExtensionType", "_GlContextSystem", "renderer", "gl", "options", "multiView", "warn", "DOMAdapter", "alpha", "premultipliedAlpha", "antialias", "targetCanvas", "canvas", "element", "preferWebGLVersion", "common", "provokeExt", "event", "attributes", "supports", "isWebGl2", "extensions", "ExtensionType", "GlContextSystem", "GL_FORMATS", "GL_TARGETS", "GL_TYPES", "infoMap", "GL_TYPES", "getGlTypeFromFormat", "format", "topologyToGlMap", "GlGeometrySystem", "renderer", "gl", "nativeVaoExtension", "vao", "nativeInstancedExtension", "a", "b", "c", "d", "e", "geometry", "program", "bufferSystem", "i", "buffer", "geometryAttributes", "shaderAttributes", "j", "attribs", "strings", "_incRefCount", "signature", "vaoObjectHash", "ensureAttributes", "buffers", "contextLost", "attributes", "lastBuffer", "attribute", "glBuffer", "programAttrib", "location", "attributeInfo", "getAttributeInfoFromFormat", "type", "getGlTypeFromFormat", "divisor", "topology", "size", "start", "instanceCount", "glTopology", "byteSize", "glType", "ExtensionType", "bigTriangleGeometry", "Geometry", "_GlBackBufferSystem", "renderer", "options", "useBackBuffer", "antialias", "warn", "State", "bigTriangleProgram", "GlProgram", "Shader", "Texture", "renderTarget", "targetSourceTexture", "TextureSource", "ExtensionType", "GlBackBufferSystem", "GlColorMaskSystem", "renderer", "colorMask", "ExtensionType", "GlEncoderSystem", "renderer", "geometry", "shader", "options", "state", "skipSync", "type", "size", "start", "instanceCount", "ExtensionType", "GlLimitsSystem", "renderer", "gl", "checkMaxIfStatementsInShader", "isWebGl2", "ExtensionType", "GlStencilSystem", "renderer", "STENCIL_MODES", "gl", "renderTarget", "stencilState", "stencilMode", "stencilReference", "mode", "GpuStencilModesToPixi", "_stencilCache", "ExtensionType", "WGSL_TO_STD40_SIZE", "createUboElementsSTD40", "uniformData", "uboElements", "data", "chunkSize", "size", "offset", "i", "uboElement", "boundary", "curOffset", "generateArraySyncSTD40", "uboElement", "offsetToAdd", "rowSize", "WGSL_TO_STD40_SIZE", "elementSize", "remainder", "data", "createUboSyncFunctionSTD40", "uboElements", "createUboSyncFunction", "generateArraySyncSTD40", "uboSyncFunctionsSTD40", "GlUboSystem", "UboSystem", "createUboElementsSTD40", "createUboSyncFunctionSTD40", "ExtensionType", "GlRenderTarget", "GlRenderTargetAdaptor", "Rectangle", "renderer", "renderTargetSystem", "sourceRenderSurfaceTexture", "destinationTexture", "originSrc", "size", "originDest", "glRenderTarget", "gl", "renderTarget", "clear", "clearColor", "viewport", "source", "gpuRenderTarget", "viewPortY", "texture", "viewPortCache", "GlRenderTarget", "CanvasSource", "renderBuffer", "_renderTarget", "CLEAR", "clearColorCache", "clearColorArray", "resolveTargetFramebuffer", "colorTexture", "i", "warn", "glTexture", "viewFramebuffer", "_", "msaaRenderBuffer", "glInternalFormat", "depthStencilRenderBuffer", "resource", "contextCanvas", "canvasSource", "GlRenderTargetSystem", "RenderTargetSystem", "renderer", "GlRenderTargetAdaptor", "ExtensionType", "generateShaderSyncCode", "shader", "shaderSystem", "funcFragments", "headerFragments", "addedTextreSystem", "textureCount", "programData", "i", "group", "j", "resource", "UniformGroup", "resName", "BufferResource", "TextureSource", "uniformName", "uniformData", "functionSource", "GlProgramData", "program", "uniformData", "compileShader", "gl", "type", "src", "shader", "booleanArray", "size", "array", "i", "defaultValue", "type", "GL_TABLE", "GL_TO_GLSL_TYPES", "GLSL_TO_VERTEX_TYPES", "mapType", "gl", "type", "typeNames", "i", "tn", "mapGlToVertexFormat", "typeValue", "extractAttributesFromGlProgram", "program", "gl", "sortAttributes", "attributes", "totalAttributes", "i", "attribData", "format", "mapGlToVertexFormat", "getAttributeInfoFromFormat", "keys", "a", "b", "getUboData", "program", "gl", "uniformBlocks", "totalUniformsBlocks", "name", "uniformBlockIndex", "size", "getUniformData", "program", "gl", "uniforms", "totalUniforms", "uniformData", "name", "isArray", "type", "mapType", "defaultValue", "logPrettyShaderError", "gl", "shader", "shaderSrc", "line", "index", "shaderLog", "splitShader", "dedupe", "lineNumbers", "n", "logArgs", "number", "fragmentSourceToLog", "logProgramError", "program", "vertexShader", "fragmentShader", "generateProgram", "gl", "program", "glVertShader", "compileShader", "glFragShader", "webGLProgram", "transformFeedbackVaryings", "warn", "logProgramError", "extractAttributesFromGlProgram", "getUniformData", "getUboData", "uniformData", "i", "data", "defaultValue", "GlProgramData", "defaultSyncData", "GlShaderSystem", "renderer", "gl", "shader", "skipSync", "syncFunction", "uniformGroup", "name", "index", "bufferSystem", "programData", "isBufferResource", "buffer", "glBuffer", "boundLocation", "offset", "size", "uniformBlockIndex", "program", "key", "generateProgram", "shaderSystem", "generateShaderSyncCode", "ExtensionType", "UNIFORM_TO_SINGLE_SETTERS", "UNIFORM_TO_ARRAY_SETTERS", "generateUniformsSync", "group", "uniformData", "funcFragments", "i", "UniformGroup", "BufferResource", "uniform", "parsed", "j", "uniformParsers", "parser", "template", "UNIFORM_TO_SINGLE_SETTERS", "UNIFORM_TO_ARRAY_SETTERS", "GlUniformGroupSystem", "renderer", "gl", "group", "program", "syncData", "programData", "uniformGroupSyncHash", "id", "uniformData", "generateUniformsSync", "preFix", "uniforms", "strings", "i", "ExtensionType", "mapWebGLBlendModesToPixi", "gl", "blendMap", "DOMAdapter", "ext", "BLEND", "OFFSET", "CULLING", "DEPTH_TEST", "WINDING", "DEPTH_MASK", "_GlStateSystem", "renderer", "State", "renderTarget", "gl", "mapWebGLBlendModesToPixi", "state", "diff", "i", "value", "faceMode", "mode", "scale", "func", "index", "system", "ExtensionType", "GlStateSystem", "GlTexture", "texture", "GL_TARGETS", "GL_TYPES", "GL_FORMATS", "glUploadBufferImageResource", "source", "glTexture", "gl", "compressedFormatMap", "glUploadCompressedTextureResource", "source", "glTexture", "gl", "mipWidth", "mipHeight", "compressed", "i", "levelBuffer", "glUploadImageResource", "source", "glTexture", "gl", "webGLVersion", "glWidth", "glHeight", "textureWidth", "textureHeight", "resourceWidth", "resourceHeight", "glUploadVideoResource", "source", "glTexture", "gl", "webGLVersion", "glUploadImageResource", "scaleModeToGlFilter", "mipmapScaleModeToGlFilter", "wrapModeToGlAddress", "compareModeToGlCompare", "applyStyleParams", "style", "gl", "mipmaps", "anisotropicExt", "glFunctionName", "firstParam", "forceClamp", "firstCreation", "castParam", "wrapModeS", "wrapModeToGlAddress", "wrapModeT", "wrapModeR", "scaleModeToGlFilter", "glFilterMode", "mipmapScaleModeToGlFilter", "level", "compareModeToGlCompare", "mapFormatToGlFormat", "gl", "mapFormatToGlInternalFormat", "gl", "extensions", "srgb", "bgra8unorm", "DOMAdapter", "mapFormatToGlType", "gl", "BYTES_PER_PIXEL", "GlTextureSystem", "renderer", "glUploadImageResource", "glUploadBufferImageResource", "glUploadVideoResource", "glUploadCompressedTextureResource", "gl", "mapFormatToGlInternalFormat", "mapFormatToGlType", "mapFormatToGlFormat", "i", "Texture", "source", "texture", "location", "glTexture", "style", "sampler", "boundTextures", "GlTexture", "biggestDimension", "firstCreation", "applyStyleParams", "premultipliedAlpha", "bind", "glSampler", "pixels", "width", "height", "canvas", "DOMAdapter", "ctx", "imageData", "resolution", "frame", "renderTarget", "glRenterTarget", "ExtensionType", "DefaultWebGLSystems", "SharedSystems", "GlUboSystem", "GlBackBufferSystem", "GlContextSystem", "GlLimitsSystem", "GlBufferSystem", "GlTextureSystem", "GlRenderTargetSystem", "GlGeometrySystem", "GlUniformGroupSystem", "GlShaderSystem", "GlEncoderSystem", "GlStateSystem", "GlStencilSystem", "GlColorMaskSystem", "DefaultWebGLPipes", "SharedRenderPipes", "DefaultWebGLAdapters", "GlBatchAdaptor", "GlMeshAdaptor", "GlGraphicsAdaptor", "systems", "renderPipes", "renderPipeAdaptors", "extensions", "ExtensionType", "WebGLRenderer", "AbstractRenderer", "systemConfig", "RendererType"]
7
+ }