@zephyr3d/scene 0.9.21 → 0.9.23

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 (238) hide show
  1. package/dist/animation/joint_dynamics/collision.js +1 -7
  2. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  3. package/dist/animation/joint_dynamics/constraints.js +2 -17
  4. package/dist/animation/joint_dynamics/constraints.js.map +1 -1
  5. package/dist/animation/joint_dynamics/controller.js +2 -20
  6. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  7. package/dist/animation/joint_dynamics/joint_dynamics_system.js +1 -3
  8. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  9. package/dist/animation/joint_dynamics/solver.js +14 -60
  10. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  11. package/dist/animation/joint_dynamics/types.js +3 -3
  12. package/dist/animation/joint_dynamics/types.js.map +1 -1
  13. package/dist/app/app.js +23 -0
  14. package/dist/app/app.js.map +1 -1
  15. package/dist/app/scriptregistry.js +16 -53
  16. package/dist/app/scriptregistry.js.map +1 -1
  17. package/dist/asset/assetmanager.js +2 -0
  18. package/dist/asset/assetmanager.js.map +1 -1
  19. package/dist/asset/model.js +22 -0
  20. package/dist/asset/model.js.map +1 -1
  21. package/dist/blitter/bilateralblur.js +3 -1
  22. package/dist/blitter/bilateralblur.js.map +1 -1
  23. package/dist/blitter/blitter.js +3 -3
  24. package/dist/blitter/blitter.js.map +1 -1
  25. package/dist/camera/camera.js +398 -45
  26. package/dist/camera/camera.js.map +1 -1
  27. package/dist/camera/perspectivecamera.js +69 -2
  28. package/dist/camera/perspectivecamera.js.map +1 -1
  29. package/dist/index.d.ts +9100 -8712
  30. package/dist/index.js +9 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/material/blinn.js +1 -1
  33. package/dist/material/blinn.js.map +1 -1
  34. package/dist/material/lambert.js +3 -3
  35. package/dist/material/lambert.js.map +1 -1
  36. package/dist/material/material.js +8 -5
  37. package/dist/material/material.js.map +1 -1
  38. package/dist/material/meshmaterial.js +17 -10
  39. package/dist/material/meshmaterial.js.map +1 -1
  40. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  41. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  42. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  43. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  44. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +21 -6
  45. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  46. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +1 -1
  47. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  48. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +1 -1
  49. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  50. package/dist/material/mixins/lit.js +33 -11
  51. package/dist/material/mixins/lit.js.map +1 -1
  52. package/dist/material/mixins/pbr/brdf.js +44 -12
  53. package/dist/material/mixins/pbr/brdf.js.map +1 -1
  54. package/dist/material/mixins/pbr/common.js +149 -14
  55. package/dist/material/mixins/pbr/common.js.map +1 -1
  56. package/dist/material/mtoon.js +7 -4
  57. package/dist/material/mtoon.js.map +1 -1
  58. package/dist/material/pbrblueprint.js +5 -1
  59. package/dist/material/pbrblueprint.js.map +1 -1
  60. package/dist/material/pbrmr.js +1 -1
  61. package/dist/material/pbrmr.js.map +1 -1
  62. package/dist/material/pbrsg.js +1 -1
  63. package/dist/material/pbrsg.js.map +1 -1
  64. package/dist/material/shader/helper.js +186 -11
  65. package/dist/material/shader/helper.js.map +1 -1
  66. package/dist/material/skin.js +2 -2
  67. package/dist/material/skin.js.map +1 -1
  68. package/dist/material/terrain-cm.js +5 -5
  69. package/dist/material/terrain-cm.js.map +1 -1
  70. package/dist/material/water.js +6 -4
  71. package/dist/material/water.js.map +1 -1
  72. package/dist/posteffect/bloom.js +54 -4
  73. package/dist/posteffect/bloom.js.map +1 -1
  74. package/dist/posteffect/compositor.js +41 -0
  75. package/dist/posteffect/compositor.js.map +1 -1
  76. package/dist/posteffect/posteffect.js +51 -0
  77. package/dist/posteffect/posteffect.js.map +1 -1
  78. package/dist/posteffect/sao.js +7 -6
  79. package/dist/posteffect/sao.js.map +1 -1
  80. package/dist/posteffect/skinsss.js +3 -3
  81. package/dist/posteffect/skinsss.js.map +1 -1
  82. package/dist/posteffect/ssgi.js +1196 -0
  83. package/dist/posteffect/ssgi.js.map +1 -0
  84. package/dist/posteffect/ssr.js +83 -45
  85. package/dist/posteffect/ssr.js.map +1 -1
  86. package/dist/posteffect/sss.js +137 -49
  87. package/dist/posteffect/sss.js.map +1 -1
  88. package/dist/posteffect/taa.js +5 -4
  89. package/dist/posteffect/taa.js.map +1 -1
  90. package/dist/posteffect/tonemap.js +15 -3
  91. package/dist/posteffect/tonemap.js.map +1 -1
  92. package/dist/render/abuffer_oit.js +2 -2
  93. package/dist/render/abuffer_oit.js.map +1 -1
  94. package/dist/render/cluster_light.js +12 -6
  95. package/dist/render/cluster_light.js.map +1 -1
  96. package/dist/render/drawable_mixin.js +8 -5
  97. package/dist/render/drawable_mixin.js.map +1 -1
  98. package/dist/render/dualdepthpeeling_oit.js +10 -5
  99. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  100. package/dist/render/envlight.js +298 -5
  101. package/dist/render/envlight.js.map +1 -1
  102. package/dist/render/gpu_picking.js +7 -5
  103. package/dist/render/gpu_picking.js.map +1 -1
  104. package/dist/render/hzb.js +28 -19
  105. package/dist/render/hzb.js.map +1 -1
  106. package/dist/render/lightpass.js +18 -4
  107. package/dist/render/lightpass.js.map +1 -1
  108. package/dist/render/render_queue.js +37 -4
  109. package/dist/render/render_queue.js.map +1 -1
  110. package/dist/render/renderer.js +8 -3
  111. package/dist/render/renderer.js.map +1 -1
  112. package/dist/render/rendergraph/blackboard.js +20 -48
  113. package/dist/render/rendergraph/blackboard.js.map +1 -1
  114. package/dist/render/rendergraph/device_pool_allocator.js +18 -58
  115. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  116. package/dist/render/rendergraph/executor.js +89 -115
  117. package/dist/render/rendergraph/executor.js.map +1 -1
  118. package/dist/render/rendergraph/forward_plus_builder.js +1003 -715
  119. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  120. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  121. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  122. package/dist/render/rendergraph/frame_resource_requirements.js +14 -0
  123. package/dist/render/rendergraph/frame_resource_requirements.js.map +1 -0
  124. package/dist/render/rendergraph/history_resource_manager.js +74 -140
  125. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  126. package/dist/render/rendergraph/history_resources.js +7 -5
  127. package/dist/render/rendergraph/history_resources.js.map +1 -1
  128. package/dist/render/rendergraph/render_context.js +19 -0
  129. package/dist/render/rendergraph/render_context.js.map +1 -0
  130. package/dist/render/rendergraph/render_pipeline.js +315 -0
  131. package/dist/render/rendergraph/render_pipeline.js.map +1 -0
  132. package/dist/render/rendergraph/rendergraph.js +158 -141
  133. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  134. package/dist/render/rendergraph/scene_render_context.js +267 -0
  135. package/dist/render/rendergraph/scene_render_context.js.map +1 -0
  136. package/dist/render/rendergraph/texture_affinity_cache.js +19 -0
  137. package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -0
  138. package/dist/render/rendergraph/types.js +19 -31
  139. package/dist/render/rendergraph/types.js.map +1 -1
  140. package/dist/render/renderpass.js +3 -3
  141. package/dist/render/renderpass.js.map +1 -1
  142. package/dist/render/shadow_mask_pass.js +10 -6
  143. package/dist/render/shadow_mask_pass.js.map +1 -1
  144. package/dist/render/sky.js +197 -35
  145. package/dist/render/sky.js.map +1 -1
  146. package/dist/render/weightedblended_oit.js +4 -3
  147. package/dist/render/weightedblended_oit.js.map +1 -1
  148. package/dist/scene/basesprite.js +2 -0
  149. package/dist/scene/basesprite.js.map +1 -1
  150. package/dist/scene/batchgroup.js +10 -0
  151. package/dist/scene/batchgroup.js.map +1 -1
  152. package/dist/scene/environment.js +61 -2
  153. package/dist/scene/environment.js.map +1 -1
  154. package/dist/scene/light.js +178 -10
  155. package/dist/scene/light.js.map +1 -1
  156. package/dist/scene/meshdrawable.js +89 -2
  157. package/dist/scene/meshdrawable.js.map +1 -1
  158. package/dist/scene/msdftext.js +2 -0
  159. package/dist/scene/msdftext.js.map +1 -1
  160. package/dist/scene/msdftextsprite.js +2 -0
  161. package/dist/scene/msdftextsprite.js.map +1 -1
  162. package/dist/scene/particlesys.js +2 -0
  163. package/dist/scene/particlesys.js.map +1 -1
  164. package/dist/scene/scene.js +34 -1
  165. package/dist/scene/scene.js.map +1 -1
  166. package/dist/scene/terrain-cm/grass.js +2 -1
  167. package/dist/scene/terrain-cm/grass.js.map +1 -1
  168. package/dist/scene/terrain-cm/terrain-cm.js +2 -0
  169. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  170. package/dist/scene/water.js +2 -0
  171. package/dist/scene/water.js.map +1 -1
  172. package/dist/shaders/atmosphere.js +5 -4
  173. package/dist/shaders/atmosphere.js.map +1 -1
  174. package/dist/shaders/fog.js +10 -3
  175. package/dist/shaders/fog.js.map +1 -1
  176. package/dist/shaders/shadow.js +96 -29
  177. package/dist/shaders/shadow.js.map +1 -1
  178. package/dist/shaders/ssgi.js +63 -0
  179. package/dist/shaders/ssgi.js.map +1 -0
  180. package/dist/shaders/ssgi_reprojection.js +118 -0
  181. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  182. package/dist/shaders/ssr.js +322 -154
  183. package/dist/shaders/ssr.js.map +1 -1
  184. package/dist/shadow/esm.js +13 -8
  185. package/dist/shadow/esm.js.map +1 -1
  186. package/dist/shadow/pcf_opt.js +15 -12
  187. package/dist/shadow/pcf_opt.js.map +1 -1
  188. package/dist/shadow/pcf_pd.js +15 -12
  189. package/dist/shadow/pcf_pd.js.map +1 -1
  190. package/dist/shadow/pcss.js +17 -11
  191. package/dist/shadow/pcss.js.map +1 -1
  192. package/dist/shadow/shadow_impl.js +20 -2
  193. package/dist/shadow/shadow_impl.js.map +1 -1
  194. package/dist/shadow/shadowmapper.js +10 -3
  195. package/dist/shadow/shadowmapper.js.map +1 -1
  196. package/dist/shadow/ssm.js +16 -13
  197. package/dist/shadow/ssm.js.map +1 -1
  198. package/dist/shadow/vsm.js +10 -8
  199. package/dist/shadow/vsm.js.map +1 -1
  200. package/dist/utility/physical.js +74 -0
  201. package/dist/utility/physical.js.map +1 -0
  202. package/dist/utility/rendermipmap.js +2 -2
  203. package/dist/utility/rendermipmap.js.map +1 -1
  204. package/dist/utility/serialization/manager.js +3 -1
  205. package/dist/utility/serialization/manager.js.map +1 -1
  206. package/dist/utility/serialization/scene/animation.js +3 -1
  207. package/dist/utility/serialization/scene/animation.js.map +1 -1
  208. package/dist/utility/serialization/scene/batch.js +3 -1
  209. package/dist/utility/serialization/scene/batch.js.map +1 -1
  210. package/dist/utility/serialization/scene/camera.js +598 -2
  211. package/dist/utility/serialization/scene/camera.js.map +1 -1
  212. package/dist/utility/serialization/scene/light.js +180 -9
  213. package/dist/utility/serialization/scene/light.js.map +1 -1
  214. package/dist/utility/serialization/scene/material.js +43 -3
  215. package/dist/utility/serialization/scene/material.js.map +1 -1
  216. package/dist/utility/serialization/scene/mesh.js +3 -1
  217. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  218. package/dist/utility/serialization/scene/node.js +3 -1
  219. package/dist/utility/serialization/scene/node.js.map +1 -1
  220. package/dist/utility/serialization/scene/particle.js +3 -1
  221. package/dist/utility/serialization/scene/particle.js.map +1 -1
  222. package/dist/utility/serialization/scene/primitive.js +2 -0
  223. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  224. package/dist/utility/serialization/scene/scene.js +70 -0
  225. package/dist/utility/serialization/scene/scene.js.map +1 -1
  226. package/dist/utility/serialization/scene/sprite.js +3 -1
  227. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  228. package/dist/utility/serialization/scene/terrain.js +3 -1
  229. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  230. package/dist/utility/serialization/scene/text.js +3 -0
  231. package/dist/utility/serialization/scene/text.js.map +1 -1
  232. package/dist/utility/serialization/scene/water.js +3 -1
  233. package/dist/utility/serialization/scene/water.js.map +1 -1
  234. package/dist/values.js +2 -3
  235. package/dist/values.js.map +1 -1
  236. package/package.json +3 -3
  237. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  238. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -141,7 +141,9 @@ import { fetchSampler } from '../utility/misc.js';
141
141
  super.setup(scope, type);
142
142
  const pb = scope.$builder;
143
143
  if (pb.shaderKind === 'fragment') {
144
- scope.depthTex = pb.tex2D().uniform(0);
144
+ // The bilateral depth input is linear r32f/rg32f and always uses a
145
+ // nearest sampler, so it must not require float32-filterable.
146
+ scope.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);
145
147
  if (this._blurSizeTex) {
146
148
  scope.blurSizeTex = pb.tex2D().uniform(0);
147
149
  scope.blurSizeScale = pb.float().uniform(0);
@@ -1 +1 @@
1
- {"version":3,"file":"bilateralblur.js","sources":["../../src/blitter/bilateralblur.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n PBGlobalScope,\r\n Texture2D,\r\n TextureSampler,\r\n BaseTexture\r\n} from '@zephyr3d/device';\r\nimport type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector2 } from '@zephyr3d/base';\r\nimport { fetchSampler } from '../utility/misc';\r\n\r\n/**\r\n * Bilateral blur blitter\r\n * @public\r\n */\r\nexport class BilateralBlurBlitter extends Blitter {\r\n protected _depthTex: Nullable<Texture2D>;\r\n protected _sampler: Nullable<TextureSampler>;\r\n protected _blurSizeTex: Nullable<Texture2D>;\r\n protected _blurSizeScale: number;\r\n protected _blurSizeIndex: number;\r\n protected _kernelRadius: number;\r\n protected _cameraNearFar: Vector2;\r\n protected _depthCutoff: number;\r\n protected _stepSize: number;\r\n protected _uvStep: Vector2;\r\n protected _size: Vector2;\r\n protected _stdDev: number;\r\n protected _offsetsAndWeights: Float32Array<ArrayBuffer>;\r\n protected _finalPhase: boolean;\r\n constructor(finalPhase: boolean) {\r\n super();\r\n this._depthTex = null;\r\n this._depthCutoff = 2;\r\n this._blurSizeTex = null;\r\n this._blurSizeScale = 1;\r\n this._blurSizeIndex = 0;\r\n this._sampler = null;\r\n this._blurSizeTex = null;\r\n this._kernelRadius = 8;\r\n this._cameraNearFar = Vector2.zero();\r\n this._size = Vector2.zero();\r\n this._stdDev = 2;\r\n this._offsetsAndWeights = new Float32Array(4 * (this._kernelRadius + 1));\r\n this._finalPhase = !!finalPhase;\r\n this._stepSize = 1;\r\n this._uvStep = this._finalPhase ? new Vector2(1, 0) : new Vector2(0, 1);\r\n this.calcGaussion();\r\n }\r\n get depthTex() {\r\n return this._depthTex;\r\n }\r\n set depthTex(tex) {\r\n this._depthTex = tex;\r\n }\r\n get blurSizeTex() {\r\n return this._blurSizeTex;\r\n }\r\n set blurSizeTex(tex) {\r\n this._blurSizeTex = tex;\r\n }\r\n get blurSizeIndex() {\r\n return this._blurSizeIndex;\r\n }\r\n set blurSizeIndex(val) {\r\n this._blurSizeIndex = val;\r\n }\r\n get blurSizeScale() {\r\n return this._blurSizeScale;\r\n }\r\n set blurSizeScale(val) {\r\n this._blurSizeScale = val;\r\n }\r\n get sampler() {\r\n return this._sampler;\r\n }\r\n set sampler(sampler) {\r\n this._sampler = sampler;\r\n }\r\n get cameraNearFar() {\r\n return this._cameraNearFar;\r\n }\r\n set cameraNearFar(v) {\r\n this._cameraNearFar.set(v);\r\n }\r\n get depthCutoff() {\r\n return this._depthCutoff;\r\n }\r\n set depthCutoff(val) {\r\n this._depthCutoff = val;\r\n }\r\n get size() {\r\n return this._size;\r\n }\r\n set size(val) {\r\n this._size.set(val);\r\n }\r\n get stepSize() {\r\n return this._stepSize;\r\n }\r\n set stepSize(val) {\r\n if (val !== this._stepSize) {\r\n this._stepSize = val;\r\n this.calcGaussion();\r\n }\r\n }\r\n get stdDev() {\r\n return this._stdDev;\r\n }\r\n set stdDev(val) {\r\n if (val !== this._stdDev) {\r\n this._stdDev = val;\r\n this.calcGaussion();\r\n }\r\n }\r\n get kernelRadius() {\r\n return this._kernelRadius;\r\n }\r\n set kernelRadius(val) {\r\n val = Math.max(val, 0) >> 0;\r\n if (val !== this._kernelRadius) {\r\n this._kernelRadius = val;\r\n this._offsetsAndWeights = new Float32Array(4 * (this._kernelRadius + 1));\r\n this.calcGaussion();\r\n this.invalidateHash();\r\n }\r\n }\r\n protected calcHash() {\r\n return `${Number(!!this._blurSizeTex)}:${this._blurSizeIndex}:${this._kernelRadius}:${this._finalPhase}`;\r\n }\r\n private calcGaussion() {\r\n const kernel: number[] = [];\r\n const size = this.kernelRadius * 2 + 1;\r\n let sum = 0;\r\n for (let x = 0; x < size; x++) {\r\n const value =\r\n (1 / (Math.sqrt(2 * Math.PI) * this._stdDev)) *\r\n Math.exp(-((x - this.kernelRadius) ** 2) / (2 * this._stdDev ** 2));\r\n kernel.push(value);\r\n sum += value;\r\n }\r\n for (let i = 0; i <= this.kernelRadius; i++) {\r\n this._offsetsAndWeights[i * 4] = this._uvStep.x * i;\r\n this._offsetsAndWeights[i * 4 + 1] = this._uvStep.y * i;\r\n this._offsetsAndWeights[i * 4 + 2] = kernel[this.kernelRadius - i] / sum;\r\n this._offsetsAndWeights[i * 4 + 3] = this._stepSize;\r\n }\r\n }\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n super.setup(scope, type);\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n scope.depthTex = pb.tex2D().uniform(0);\r\n if (this._blurSizeTex) {\r\n scope.blurSizeTex = pb.tex2D().uniform(0);\r\n scope.blurSizeScale = pb.float().uniform(0);\r\n }\r\n scope.depthCutoff = pb.float().uniform(0);\r\n scope.offsetsAndWeights = pb.vec4[this._kernelRadius + 1]().uniform(0);\r\n scope.cameraNearFar = pb.vec2().uniform(0);\r\n scope.size = pb.vec2().uniform(0);\r\n }\r\n }\r\n setUniforms(bindGroup: BindGroup, sourceTex: BaseTexture) {\r\n super.setUniforms(bindGroup, sourceTex);\r\n bindGroup.setTexture('depthTex', this._depthTex!, this._sampler ?? fetchSampler('clamp_nearest_nomip'));\r\n if (this._blurSizeTex) {\r\n bindGroup.setTexture('blurSizeTex', this._blurSizeTex, fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue('blurSizeScale', this._blurSizeScale);\r\n }\r\n bindGroup.setValue('depthCutoff', this._depthCutoff);\r\n bindGroup.setValue('offsetsAndWeights', this._offsetsAndWeights);\r\n bindGroup.setValue('cameraNearFar', this._cameraNearFar);\r\n bindGroup.setValue('size', this._size);\r\n }\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n pb.func('getLinearDepth', [pb.vec2('uv')], function () {\r\n this.$l.depthValue = pb.textureSample(this.depthTex, this.uv);\r\n this.$l.depth01 =\r\n pb.getDevice().type === 'webgl'\r\n ? decodeNormalizedFloatFromRGBA(this, this.depthValue)\r\n : this.depthValue.r;\r\n this.$return(pb.mul(this.depth01, this.cameraNearFar.y));\r\n });\r\n pb.func('getLogDepth', [pb.float('linearDepth')], function () {\r\n this.$return(pb.log(pb.add(this.linearDepth, 1)));\r\n });\r\n scope.centerDepth = scope.getLogDepth(scope.getLinearDepth(srcUV));\r\n scope.depthDiff = pb.div(\r\n scope.depthCutoff,\r\n pb.sub(scope.getLogDepth(scope.cameraNearFar.y), scope.getLogDepth(scope.cameraNearFar.x))\r\n );\r\n scope.weightSum = scope.offsetsAndWeights[0].z;\r\n scope.srcTexel = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n scope.colorSum = pb.mul(scope.srcTexel, scope.weightSum);\r\n if (that._blurSizeTex) {\r\n scope.blurSize = pb.textureSample(scope.blurSizeTex, srcUV)['rgba'[this._blurSizeIndex]];\r\n }\r\n scope.$for(pb.int('i'), 0, that._kernelRadius, function () {\r\n this.$l.offsetAndWeight = this.offsetsAndWeights.at(pb.add(this.i, 1));\r\n this.$l.weight = this.offsetAndWeight.z;\r\n this.$l.offset = this.offsetAndWeight.xy;\r\n if (that._blurSizeTex) {\r\n this.offset = pb.mul(this.offset, this.blurSize, this.blurSizeScale);\r\n }\r\n this.$l.offset = pb.div(this.offset, this.size);\r\n this.$l.uvRight = pb.add(srcUV, this.offset);\r\n this.$l.depthRight = this.getLogDepth(this.getLinearDepth(this.uvRight));\r\n this.$if(pb.lessThan(pb.abs(pb.sub(this.depthRight, this.centerDepth)), this.depthDiff), function () {\r\n this.$l.srcTexelRight = that.readTexel(this, type, srcTex, this.uvRight, srcLayer, sampleType);\r\n this.$l.colorWeight = pb.mul(\r\n this.weight,\r\n pb.exp(pb.neg(pb.distance(this.srcTexelRight.rgb, this.srcTexel.rgb)))\r\n );\r\n this.colorSum = pb.add(this.colorSum, pb.mul(this.srcTexelRight, this.colorWeight));\r\n this.weightSum = pb.add(this.weightSum, this.colorWeight);\r\n });\r\n this.$l.uvLeft = pb.sub(srcUV, this.offset);\r\n this.$l.depthLeft = this.getLogDepth(this.getLinearDepth(this.uvLeft));\r\n this.$if(pb.lessThan(pb.abs(pb.sub(this.depthLeft, this.centerDepth)), this.depthDiff), function () {\r\n this.$l.srcTexelLeft = that.readTexel(this, type, srcTex, this.uvLeft, srcLayer, sampleType);\r\n this.$l.colorWeight = pb.mul(\r\n this.weight,\r\n pb.exp(pb.neg(pb.distance(this.srcTexelLeft.rgb, this.srcTexel.rgb)))\r\n );\r\n this.colorSum = pb.add(this.colorSum, pb.mul(this.srcTexelLeft, this.colorWeight));\r\n this.weightSum = pb.add(this.weightSum, this.colorWeight);\r\n });\r\n });\r\n scope.colorSum = pb.div(scope.colorSum, scope.weightSum);\r\n return scope.colorSum as PBShaderExp;\r\n }\r\n}\r\n"],"names":["BilateralBlurBlitter","Blitter","_depthTex","_sampler","_blurSizeTex","_blurSizeScale","_blurSizeIndex","_kernelRadius","_cameraNearFar","_depthCutoff","_stepSize","_uvStep","_size","_stdDev","_offsetsAndWeights","_finalPhase","finalPhase","Vector2","zero","Float32Array","calcGaussion","depthTex","tex","blurSizeTex","blurSizeIndex","val","blurSizeScale","sampler","cameraNearFar","v","set","depthCutoff","size","stepSize","stdDev","kernelRadius","Math","max","invalidateHash","calcHash","Number","kernel","sum","x","value","sqrt","PI","exp","push","i","y","setup","scope","type","pb","$builder","shaderKind","tex2D","uniform","float","offsetsAndWeights","vec4","vec2","setUniforms","bindGroup","sourceTex","setTexture","fetchSampler","setValue","filter","srcTex","srcUV","srcLayer","sampleType","that","func","$l","depthValue","textureSample","uv","depth01","getDevice","decodeNormalizedFloatFromRGBA","r","$return","mul","log","add","linearDepth","centerDepth","getLogDepth","getLinearDepth","depthDiff","div","sub","weightSum","z","srcTexel","readTexel","colorSum","blurSize","$for","int","offsetAndWeight","at","weight","offset","xy","uvRight","depthRight","$if","lessThan","abs","srcTexelRight","colorWeight","neg","distance","rgb","uvLeft","depthLeft","srcTexelLeft"],"mappings":"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"}
1
+ {"version":3,"file":"bilateralblur.js","sources":["../../src/blitter/bilateralblur.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n PBGlobalScope,\r\n Texture2D,\r\n TextureSampler,\r\n BaseTexture\r\n} from '@zephyr3d/device';\r\nimport type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Vector2 } from '@zephyr3d/base';\r\nimport { fetchSampler } from '../utility/misc';\r\n\r\n/**\r\n * Bilateral blur blitter\r\n * @public\r\n */\r\nexport class BilateralBlurBlitter extends Blitter {\r\n protected _depthTex: Nullable<Texture2D>;\r\n protected _sampler: Nullable<TextureSampler>;\r\n protected _blurSizeTex: Nullable<Texture2D>;\r\n protected _blurSizeScale: number;\r\n protected _blurSizeIndex: number;\r\n protected _kernelRadius: number;\r\n protected _cameraNearFar: Vector2;\r\n protected _depthCutoff: number;\r\n protected _stepSize: number;\r\n protected _uvStep: Vector2;\r\n protected _size: Vector2;\r\n protected _stdDev: number;\r\n protected _offsetsAndWeights: Float32Array<ArrayBuffer>;\r\n protected _finalPhase: boolean;\r\n constructor(finalPhase: boolean) {\r\n super();\r\n this._depthTex = null;\r\n this._depthCutoff = 2;\r\n this._blurSizeTex = null;\r\n this._blurSizeScale = 1;\r\n this._blurSizeIndex = 0;\r\n this._sampler = null;\r\n this._blurSizeTex = null;\r\n this._kernelRadius = 8;\r\n this._cameraNearFar = Vector2.zero();\r\n this._size = Vector2.zero();\r\n this._stdDev = 2;\r\n this._offsetsAndWeights = new Float32Array(4 * (this._kernelRadius + 1));\r\n this._finalPhase = !!finalPhase;\r\n this._stepSize = 1;\r\n this._uvStep = this._finalPhase ? new Vector2(1, 0) : new Vector2(0, 1);\r\n this.calcGaussion();\r\n }\r\n get depthTex() {\r\n return this._depthTex;\r\n }\r\n set depthTex(tex) {\r\n this._depthTex = tex;\r\n }\r\n get blurSizeTex() {\r\n return this._blurSizeTex;\r\n }\r\n set blurSizeTex(tex) {\r\n this._blurSizeTex = tex;\r\n }\r\n get blurSizeIndex() {\r\n return this._blurSizeIndex;\r\n }\r\n set blurSizeIndex(val) {\r\n this._blurSizeIndex = val;\r\n }\r\n get blurSizeScale() {\r\n return this._blurSizeScale;\r\n }\r\n set blurSizeScale(val) {\r\n this._blurSizeScale = val;\r\n }\r\n get sampler() {\r\n return this._sampler;\r\n }\r\n set sampler(sampler) {\r\n this._sampler = sampler;\r\n }\r\n get cameraNearFar() {\r\n return this._cameraNearFar;\r\n }\r\n set cameraNearFar(v) {\r\n this._cameraNearFar.set(v);\r\n }\r\n get depthCutoff() {\r\n return this._depthCutoff;\r\n }\r\n set depthCutoff(val) {\r\n this._depthCutoff = val;\r\n }\r\n get size() {\r\n return this._size;\r\n }\r\n set size(val) {\r\n this._size.set(val);\r\n }\r\n get stepSize() {\r\n return this._stepSize;\r\n }\r\n set stepSize(val) {\r\n if (val !== this._stepSize) {\r\n this._stepSize = val;\r\n this.calcGaussion();\r\n }\r\n }\r\n get stdDev() {\r\n return this._stdDev;\r\n }\r\n set stdDev(val) {\r\n if (val !== this._stdDev) {\r\n this._stdDev = val;\r\n this.calcGaussion();\r\n }\r\n }\r\n get kernelRadius() {\r\n return this._kernelRadius;\r\n }\r\n set kernelRadius(val) {\r\n val = Math.max(val, 0) >> 0;\r\n if (val !== this._kernelRadius) {\r\n this._kernelRadius = val;\r\n this._offsetsAndWeights = new Float32Array(4 * (this._kernelRadius + 1));\r\n this.calcGaussion();\r\n this.invalidateHash();\r\n }\r\n }\r\n protected calcHash() {\r\n return `${Number(!!this._blurSizeTex)}:${this._blurSizeIndex}:${this._kernelRadius}:${this._finalPhase}`;\r\n }\r\n private calcGaussion() {\r\n const kernel: number[] = [];\r\n const size = this.kernelRadius * 2 + 1;\r\n let sum = 0;\r\n for (let x = 0; x < size; x++) {\r\n const value =\r\n (1 / (Math.sqrt(2 * Math.PI) * this._stdDev)) *\r\n Math.exp(-((x - this.kernelRadius) ** 2) / (2 * this._stdDev ** 2));\r\n kernel.push(value);\r\n sum += value;\r\n }\r\n for (let i = 0; i <= this.kernelRadius; i++) {\r\n this._offsetsAndWeights[i * 4] = this._uvStep.x * i;\r\n this._offsetsAndWeights[i * 4 + 1] = this._uvStep.y * i;\r\n this._offsetsAndWeights[i * 4 + 2] = kernel[this.kernelRadius - i] / sum;\r\n this._offsetsAndWeights[i * 4 + 3] = this._stepSize;\r\n }\r\n }\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n super.setup(scope, type);\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n // The bilateral depth input is linear r32f/rg32f and always uses a\r\n // nearest sampler, so it must not require float32-filterable.\r\n scope.depthTex = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n if (this._blurSizeTex) {\r\n scope.blurSizeTex = pb.tex2D().uniform(0);\r\n scope.blurSizeScale = pb.float().uniform(0);\r\n }\r\n scope.depthCutoff = pb.float().uniform(0);\r\n scope.offsetsAndWeights = pb.vec4[this._kernelRadius + 1]().uniform(0);\r\n scope.cameraNearFar = pb.vec2().uniform(0);\r\n scope.size = pb.vec2().uniform(0);\r\n }\r\n }\r\n setUniforms(bindGroup: BindGroup, sourceTex: BaseTexture) {\r\n super.setUniforms(bindGroup, sourceTex);\r\n bindGroup.setTexture('depthTex', this._depthTex!, this._sampler ?? fetchSampler('clamp_nearest_nomip'));\r\n if (this._blurSizeTex) {\r\n bindGroup.setTexture('blurSizeTex', this._blurSizeTex, fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue('blurSizeScale', this._blurSizeScale);\r\n }\r\n bindGroup.setValue('depthCutoff', this._depthCutoff);\r\n bindGroup.setValue('offsetsAndWeights', this._offsetsAndWeights);\r\n bindGroup.setValue('cameraNearFar', this._cameraNearFar);\r\n bindGroup.setValue('size', this._size);\r\n }\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ) {\r\n const that = this;\r\n const pb = scope.$builder;\r\n pb.func('getLinearDepth', [pb.vec2('uv')], function () {\r\n this.$l.depthValue = pb.textureSample(this.depthTex, this.uv);\r\n this.$l.depth01 =\r\n pb.getDevice().type === 'webgl'\r\n ? decodeNormalizedFloatFromRGBA(this, this.depthValue)\r\n : this.depthValue.r;\r\n this.$return(pb.mul(this.depth01, this.cameraNearFar.y));\r\n });\r\n pb.func('getLogDepth', [pb.float('linearDepth')], function () {\r\n this.$return(pb.log(pb.add(this.linearDepth, 1)));\r\n });\r\n scope.centerDepth = scope.getLogDepth(scope.getLinearDepth(srcUV));\r\n scope.depthDiff = pb.div(\r\n scope.depthCutoff,\r\n pb.sub(scope.getLogDepth(scope.cameraNearFar.y), scope.getLogDepth(scope.cameraNearFar.x))\r\n );\r\n scope.weightSum = scope.offsetsAndWeights[0].z;\r\n scope.srcTexel = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n scope.colorSum = pb.mul(scope.srcTexel, scope.weightSum);\r\n if (that._blurSizeTex) {\r\n scope.blurSize = pb.textureSample(scope.blurSizeTex, srcUV)['rgba'[this._blurSizeIndex]];\r\n }\r\n scope.$for(pb.int('i'), 0, that._kernelRadius, function () {\r\n this.$l.offsetAndWeight = this.offsetsAndWeights.at(pb.add(this.i, 1));\r\n this.$l.weight = this.offsetAndWeight.z;\r\n this.$l.offset = this.offsetAndWeight.xy;\r\n if (that._blurSizeTex) {\r\n this.offset = pb.mul(this.offset, this.blurSize, this.blurSizeScale);\r\n }\r\n this.$l.offset = pb.div(this.offset, this.size);\r\n this.$l.uvRight = pb.add(srcUV, this.offset);\r\n this.$l.depthRight = this.getLogDepth(this.getLinearDepth(this.uvRight));\r\n this.$if(pb.lessThan(pb.abs(pb.sub(this.depthRight, this.centerDepth)), this.depthDiff), function () {\r\n this.$l.srcTexelRight = that.readTexel(this, type, srcTex, this.uvRight, srcLayer, sampleType);\r\n this.$l.colorWeight = pb.mul(\r\n this.weight,\r\n pb.exp(pb.neg(pb.distance(this.srcTexelRight.rgb, this.srcTexel.rgb)))\r\n );\r\n this.colorSum = pb.add(this.colorSum, pb.mul(this.srcTexelRight, this.colorWeight));\r\n this.weightSum = pb.add(this.weightSum, this.colorWeight);\r\n });\r\n this.$l.uvLeft = pb.sub(srcUV, this.offset);\r\n this.$l.depthLeft = this.getLogDepth(this.getLinearDepth(this.uvLeft));\r\n this.$if(pb.lessThan(pb.abs(pb.sub(this.depthLeft, this.centerDepth)), this.depthDiff), function () {\r\n this.$l.srcTexelLeft = that.readTexel(this, type, srcTex, this.uvLeft, srcLayer, sampleType);\r\n this.$l.colorWeight = pb.mul(\r\n this.weight,\r\n pb.exp(pb.neg(pb.distance(this.srcTexelLeft.rgb, this.srcTexel.rgb)))\r\n );\r\n this.colorSum = pb.add(this.colorSum, pb.mul(this.srcTexelLeft, this.colorWeight));\r\n this.weightSum = pb.add(this.weightSum, this.colorWeight);\r\n });\r\n });\r\n scope.colorSum = pb.div(scope.colorSum, scope.weightSum);\r\n return scope.colorSum as PBShaderExp;\r\n }\r\n}\r\n"],"names":["BilateralBlurBlitter","Blitter","_depthTex","_sampler","_blurSizeTex","_blurSizeScale","_blurSizeIndex","_kernelRadius","_cameraNearFar","_depthCutoff","_stepSize","_uvStep","_size","_stdDev","_offsetsAndWeights","_finalPhase","finalPhase","Vector2","zero","Float32Array","calcGaussion","depthTex","tex","blurSizeTex","blurSizeIndex","val","blurSizeScale","sampler","cameraNearFar","v","set","depthCutoff","size","stepSize","stdDev","kernelRadius","Math","max","invalidateHash","calcHash","Number","kernel","sum","x","value","sqrt","PI","exp","push","i","y","setup","scope","type","pb","$builder","shaderKind","tex2D","sampleType","uniform","float","offsetsAndWeights","vec4","vec2","setUniforms","bindGroup","sourceTex","setTexture","fetchSampler","setValue","filter","srcTex","srcUV","srcLayer","that","func","$l","depthValue","textureSample","uv","depth01","getDevice","decodeNormalizedFloatFromRGBA","r","$return","mul","log","add","linearDepth","centerDepth","getLogDepth","getLinearDepth","depthDiff","div","sub","weightSum","z","srcTexel","readTexel","colorSum","blurSize","$for","int","offsetAndWeight","at","weight","offset","xy","uvRight","depthRight","$if","lessThan","abs","srcTexelRight","colorWeight","neg","distance","rgb","uvLeft","depthLeft","srcTexelLeft"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Vector4 } from '@zephyr3d/base';
1
+ import { Vector4, DEPTH_FARTHEST } from '@zephyr3d/base';
2
2
  import { Primitive } from '../render/primitive.js';
3
3
  import { linearToGamma } from '../shaders/misc.js';
4
4
  import { getDevice } from '../app/api.js';
@@ -296,14 +296,14 @@ function createBlitProgram(type, filter, bilinearFiltering, st, flip, scaleBias)
296
296
  }
297
297
  filter.setup(this, type);
298
298
  pb.main(function() {
299
- this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);
299
+ this.$builtins.position = pb.vec4(this.$inputs.pos, DEPTH_FARTHEST, 1);
300
300
  this.$outputs.uv = type === 'cube' ? pb.mul(pb.vec2(1, -1), this.$inputs.pos.xy) : pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));
301
301
  if (getDevice().type === 'webgpu') {
302
302
  this.$builtins.position.y = pb.neg(this.$builtins.position.y);
303
303
  }
304
304
  if (scaleBias) {
305
305
  this.$l.xy = pb.add(pb.mul(this.$builtins.position.xy, this.scaleBias.xy), this.scaleBias.zw);
306
- this.$builtins.position = pb.vec4(this.xy, 1, 1);
306
+ this.$builtins.position = pb.vec4(this.xy, DEPTH_FARTHEST, 1);
307
307
  }
308
308
  });
309
309
  },
@@ -1 +1 @@
1
- {"version":3,"file":"blitter.js","sources":["../../src/blitter/blitter.ts"],"sourcesContent":["import type { CubeFace, Nullable } from '@zephyr3d/base';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n RenderStateSet,\r\n BaseTexture,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUProgram,\r\n Texture2D,\r\n Texture2DArray,\r\n TextureCube,\r\n TextureSampler,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp\r\n} from '@zephyr3d/device';\r\nimport { Primitive } from '../render/primitive';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport { getDevice } from '../app/api';\r\n\r\n// TODO: multi-pass support for filter\r\n\r\n/**\r\n * Blit type\r\n * @public\r\n */\r\nexport type BlitType = '2d' | '2d-array' | 'cube';\r\n\r\ntype BlitProgramInfo = { program: GPUProgram; bindGroup: BindGroup };\r\n\r\n/**\r\n * Base class for any kind of blitters\r\n * @public\r\n */\r\nexport abstract class Blitter {\r\n /** @internal */\r\n protected _hash: Nullable<string>;\r\n /** @internal */\r\n protected _renderStates: Nullable<RenderStateSet>;\r\n /** @internal */\r\n protected _srgbOut: boolean;\r\n /** @internal */\r\n protected _flip: boolean;\r\n /** @internal */\r\n protected _viewport: Nullable<number[]>;\r\n /** @internal */\r\n protected _scissor: Nullable<number[]>;\r\n /** @internal */\r\n protected _destRect: Nullable<number[]>;\r\n /** @internal */\r\n protected _offsetParams: Vector4;\r\n /**\r\n * Creates an instance of Blitter\r\n */\r\n constructor() {\r\n this._hash = null;\r\n this._renderStates = null;\r\n this._srgbOut = false;\r\n this._flip = false;\r\n this._viewport = null;\r\n this._scissor = null;\r\n this._destRect = null;\r\n this._offsetParams = new Vector4();\r\n }\r\n /** Viewport */\r\n get viewport() {\r\n return this._viewport;\r\n }\r\n set viewport(val) {\r\n this._viewport = val;\r\n }\r\n /** Scissor rect */\r\n get scissor() {\r\n return this._scissor;\r\n }\r\n set scissor(val) {\r\n this._scissor = val;\r\n }\r\n /** Destination rectangle */\r\n get destRect() {\r\n return this._destRect;\r\n }\r\n set destRect(val) {\r\n if (!!this._destRect !== !!val) {\r\n this.invalidateHash();\r\n }\r\n this._destRect = val;\r\n }\r\n /**\r\n * Whether output color value in gamma color space\r\n */\r\n get srgbOut() {\r\n return this._srgbOut;\r\n }\r\n set srgbOut(val) {\r\n if (this._srgbOut !== !!val) {\r\n this._srgbOut = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n /**\r\n * Render states used to do the blitting\r\n */\r\n get renderStates() {\r\n return this._renderStates;\r\n }\r\n set renderStates(rs) {\r\n this._renderStates = rs;\r\n }\r\n /**\r\n * Program hash code\r\n */\r\n get hash() {\r\n if (!this._hash) {\r\n this._hash = `${this.constructor.name}:${this._srgbOut ? 1 : 0}:${this._flip ? 1 : 0}:${\r\n this._destRect ? 1 : 0\r\n }:${this.calcHash()}`;\r\n }\r\n return this._hash;\r\n }\r\n /**\r\n * Force the hash code to be regenerated\r\n */\r\n invalidateHash() {\r\n this._hash = null;\r\n }\r\n /**\r\n * Reads a texel from the source texture\r\n * @param scope - The shader scope\r\n * @param type - The blit type\r\n * @param srcTex - The source texture\r\n * @param uv - The texture coordinate from where the texel will be read\r\n * @param srcLayer - The layer of the source texture\r\n * @returns The read texel\r\n */\r\n readTexel(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n uv: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint' | 'depth'\r\n ) {\r\n const pb = scope.$builder;\r\n if (sampleType === 'float' || sampleType === 'depth') {\r\n switch (type) {\r\n case '2d':\r\n case 'cube':\r\n return getDevice().getDeviceCaps().shaderCaps.supportShaderTextureLod\r\n ? pb.textureSampleLevel(srcTex, uv, 0)\r\n : pb.textureSample(srcTex, uv);\r\n case '2d-array':\r\n return pb.textureArraySampleLevel(srcTex, uv, srcLayer, 0);\r\n default:\r\n throw new Error(`Invalid blit type: ${type}`);\r\n }\r\n } else {\r\n switch (type) {\r\n case '2d':\r\n return pb.textureLoad(srcTex, pb.ivec2(pb.mul(pb.vec2(pb.textureDimensions(srcTex, 0)), uv)), 0);\r\n case 'cube':\r\n throw new Error('Integer format cube texture not supported');\r\n case '2d-array':\r\n return pb.textureArrayLoad(\r\n srcTex,\r\n pb.ivec2(pb.mul(pb.vec2(pb.textureDimensions(srcTex, 0)), uv)),\r\n srcLayer,\r\n 0\r\n );\r\n default:\r\n throw new Error(`Invalid blit type: ${type}`);\r\n }\r\n }\r\n }\r\n /**\r\n * Writes a texel to destination texture\r\n * @param scope - The shader scope\r\n * @param type - The blit type\r\n * @param uv - The texture coordinate to where the texel will be written\r\n * @param texel - The texel to be written\r\n * @returns The written texel\r\n */\r\n writeTexel(scope: PBInsideFunctionScope, type: BlitType, uv: PBShaderExp, texel: PBShaderExp) {\r\n return texel;\r\n }\r\n /**\r\n * Initialize uniforms of the blit program\r\n * @param _scope - The shader scope\r\n * @param _type - The blit type\r\n */\r\n setup(_scope: PBGlobalScope, _type: BlitType) {}\r\n /**\r\n * Update uniforms of the bind group\r\n * @param bindGroup - The bind group to be updated\r\n */\r\n setUniforms(_bindGroup: BindGroup, _sourceTex: BaseTexture) {}\r\n /**\r\n * Calculates the destination texel by the source texel\r\n * @param scope - The shader scope\r\n * @param type - The blit type\r\n * @param srcTex - The source texel\r\n * @param srcUV - The texture coordinate of the source texel\r\n * @param srcLayer - The layer of the source texture\r\n * @returns the destination texel\r\n */\r\n abstract filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampeType: 'float' | 'int' | 'uint' | 'depth'\r\n ): PBShaderExp;\r\n /**\r\n * Calculates the hash code\r\n * @returns the calculated hash code\r\n */\r\n protected abstract calcHash(): string;\r\n /** @internal */\r\n protected blit2D(source: Texture2D, dest: Nullable<FrameBuffer>, sampler?: Nullable<TextureSampler>): void {\r\n const device = getDevice();\r\n const flip = !dest && device.type === 'webgpu';\r\n const bilinearFiltering = sampler\r\n ? sampler.magFilter === 'linear' || sampler.minFilter === 'linear' || sampler.mipFilter === 'linear'\r\n : source.isFilterable();\r\n const programInfo = getBlitProgram(\r\n '2d',\r\n this,\r\n bilinearFiltering,\r\n source.isIntegerFormat() ? (source.isSignedFormat() ? 'int' : 'uint') : 'float',\r\n flip\r\n );\r\n programInfo.bindGroup.setTexture('srcTex', source, sampler);\r\n if (this._destRect) {\r\n const destWidth = this._viewport?.[2] ?? dest?.getWidth() ?? device.getBackBufferWidth();\r\n const destHeight = this._viewport?.[3] ?? dest?.getHeight() ?? device.getBackBufferHeight();\r\n this._offsetParams.setXYZW(\r\n this._destRect[2] / destWidth,\r\n this._destRect[3] / destHeight,\r\n (this._destRect[2] + 2 * this._destRect[0]) / destWidth - 1,\r\n (this._destRect[3] + 2 * this._destRect[1]) / destHeight - 1\r\n );\r\n programInfo.bindGroup.setValue('scaleBias', this._offsetParams);\r\n }\r\n this.setUniforms(programInfo.bindGroup, source);\r\n device.setFramebuffer(dest ?? null);\r\n device.setViewport(this._viewport);\r\n device.setScissor(this._scissor);\r\n device.setProgram(programInfo.program);\r\n device.setBindGroup(0, programInfo.bindGroup);\r\n device.setRenderStates(this._renderStates ?? getBlitRenderStateSet());\r\n getBlitPrimitive2D().draw();\r\n }\r\n /** @internal */\r\n protected blit2DArray(\r\n source: Texture2DArray,\r\n dest: Nullable<FrameBuffer>,\r\n layer: number,\r\n sampler?: Nullable<TextureSampler>\r\n ) {\r\n const device = getDevice();\r\n const flip = !dest && device.type === 'webgpu';\r\n const bilinearFiltering = sampler\r\n ? sampler.magFilter === 'linear' || sampler.minFilter === 'linear' || sampler.mipFilter === 'linear'\r\n : source.isFilterable();\r\n const programInfo = getBlitProgram(\r\n '2d-array',\r\n this,\r\n bilinearFiltering,\r\n source.isIntegerFormat() ? (source.isSignedFormat() ? 'int' : 'uint') : 'float',\r\n flip\r\n );\r\n programInfo.bindGroup.setTexture('srcTex', source, sampler);\r\n programInfo.bindGroup.setValue('srcLayer', layer);\r\n this.setUniforms(programInfo.bindGroup, source);\r\n device.setFramebuffer(dest ?? null);\r\n device.setViewport(this._viewport);\r\n device.setScissor(this._scissor);\r\n device.setProgram(programInfo.program);\r\n device.setBindGroup(0, programInfo.bindGroup);\r\n device.setRenderStates(this._renderStates ?? getBlitRenderStateSet());\r\n getBlitPrimitive2D().draw();\r\n }\r\n /** @internal */\r\n protected blitCubeMap(\r\n source: TextureCube,\r\n dest: Nullable<FrameBuffer>,\r\n face: CubeFace,\r\n sampler?: Nullable<TextureSampler>\r\n ) {\r\n const device = getDevice();\r\n const flip = !dest && device.type === 'webgpu';\r\n const bilinearFiltering = sampler\r\n ? sampler.magFilter === 'linear' || sampler.minFilter === 'linear' || sampler.mipFilter === 'linear'\r\n : source.isFilterable();\r\n const programInfo = getBlitProgram(\r\n 'cube',\r\n this,\r\n bilinearFiltering,\r\n source.isIntegerFormat() ? (source.isSignedFormat() ? 'int' : 'uint') : 'float',\r\n flip\r\n );\r\n programInfo.bindGroup.setTexture('srcTex', source, sampler);\r\n programInfo.bindGroup.setValue('texelSize', 1 / source.width);\r\n programInfo.bindGroup.setValue('cubeFace', face);\r\n this.setUniforms(programInfo.bindGroup, source);\r\n device.setFramebuffer(dest ?? null);\r\n device.setViewport(this._viewport);\r\n device.setScissor(this._scissor);\r\n device.setProgram(programInfo.program);\r\n device.setBindGroup(0, programInfo.bindGroup);\r\n device.setRenderStates(this._renderStates ?? getBlitRenderStateSet());\r\n getBlitPrimitive2D().draw();\r\n }\r\n /**\r\n * Blits a 2D texture to a frame buffer\r\n * @param source - The source texture\r\n * @param dest - The frame buffer to blit onto\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2D, dest: Nullable<FrameBuffer>, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits a 2D texture to 2D texture or frame buffer\r\n * @param source - The source texture\r\n * @param dest - The destination texture or frame buffer\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2D, dest: Texture2D, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits a 2D texture to given layer of a 2D array texture\r\n * @param source - The source texture\r\n * @param dest - The destination texture\r\n * @param layer - The layer of the destination texture\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2D, dest: Texture2DArray, layer: number, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits a 2d array texture to another 2d array texture\r\n *\r\n * @remarks\r\n * All layers of the source texture will be copied to the destination texture\r\n *\r\n * @param source - The source texture\r\n * @param dest - The destination texture\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2DArray, dest: Texture2DArray, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits given layer of a 2d array texture to a frame buffer\r\n * @param source - The source texture\r\n * @param dest - The frame buffer to blit onto\r\n * @param layer - The layer to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(\r\n source: Texture2DArray,\r\n dest: Nullable<FrameBuffer>,\r\n layer: number,\r\n sampler?: Nullable<TextureSampler>\r\n ): void;\r\n /**\r\n * Blits given layer of a 2d array texture to a 2d texture or frame buffer\r\n * @param source - The source texture\r\n * @param dest - The destination texture or frame buffer\r\n * @param layer - The layer to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2DArray, dest: Texture2D, layer: number, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits a cube texture to another cube texture\r\n *\r\n * @remarks\r\n * All faces of the source texture will be copied to the destination texture\r\n *\r\n * @param source - The source texture\r\n * @param dest - The destination texture\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: TextureCube, dest: TextureCube, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits given face of a cube texture to a frame buffer\r\n * @param source - The source texture\r\n * @param dest - The frame buffer to blit onto\r\n * @param face - The face to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(\r\n source: TextureCube,\r\n dest: Nullable<FrameBuffer>,\r\n face: number,\r\n sampler?: Nullable<TextureSampler>\r\n ): void;\r\n /**\r\n * Blits given face of a cube texture to a 2d texture or frame buffer\r\n * @param source - The source texture\r\n * @param dest - The destination texture or frame buffer\r\n * @param face - The face to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: TextureCube, dest: Texture2D, face: number, sampler?: Nullable<TextureSampler>): void;\r\n blit(\r\n source: BaseTexture,\r\n dest: BaseTexture | Nullable<FrameBuffer>,\r\n layer?: number | Nullable<TextureSampler>,\r\n sampler?: Nullable<TextureSampler>\r\n ): void;\r\n blit(\r\n source: BaseTexture,\r\n dest: BaseTexture | Nullable<FrameBuffer>,\r\n layer?: number | Nullable<TextureSampler>,\r\n sampler?: Nullable<TextureSampler>\r\n ) {\r\n const device = getDevice();\r\n device.pushDeviceStates();\r\n if (!dest) {\r\n if (source.isTexture2D()) {\r\n this.blit2D(source, null, sampler);\r\n } else if (source.isTexture2DArray()) {\r\n this.blit2DArray(source, null, (layer as number) || 0, sampler);\r\n } else if (source.isTextureCube()) {\r\n this.blitCubeMap(source, null, (layer as number) || 0, sampler);\r\n } else {\r\n throw new Error('Blitter.blit() failed: invalid texture type');\r\n }\r\n } else {\r\n const framebuffer = dest.isFramebuffer()\r\n ? dest\r\n : device.pool.createTemporalFramebuffer(false, [dest], null);\r\n const destTexture = dest.isFramebuffer() ? dest.getColorAttachments()?.[0] : dest;\r\n if (source.isTexture2D()) {\r\n if (!destTexture?.isTexture2D() && !destTexture?.isTexture2DArray()) {\r\n throw new Error('Blitter.blit() failed: invalid destination texture type');\r\n }\r\n if (destTexture.isTexture2DArray()) {\r\n framebuffer.setColorAttachmentLayer(0, (layer as number) || 0);\r\n }\r\n this.blit2D(source, framebuffer, sampler);\r\n } else if (source.isTexture2DArray()) {\r\n if (!destTexture?.isTexture2D() && !destTexture.isTexture2DArray()) {\r\n throw new Error('Blitter.blit() failed: invalid destination texture type');\r\n }\r\n if (destTexture.isTexture2D()) {\r\n this.blit2DArray(source, framebuffer, (layer as number) || 0, sampler);\r\n } else {\r\n const n = Math.min(source.depth, destTexture.depth);\r\n for (let i = 0; i < n; i++) {\r\n framebuffer.setColorAttachmentLayer(0, i);\r\n this.blit2DArray(source, framebuffer, i, layer as TextureSampler);\r\n }\r\n }\r\n } else if (source.isTextureCube()) {\r\n if (!destTexture.isTextureCube() && !destTexture.isTexture2D()) {\r\n throw new Error('Blitter.blit() failed: invalid destination texture type');\r\n }\r\n if (destTexture.isTextureCube()) {\r\n for (let i = 0; i < 6; i++) {\r\n framebuffer.setColorAttachmentCubeFace(0, i);\r\n this.blitCubeMap(source, framebuffer, i, layer as TextureSampler);\r\n }\r\n } else {\r\n this.blitCubeMap(source, framebuffer, (layer as number) || 0, sampler);\r\n }\r\n } else {\r\n throw new Error('Blitter.blit() failed: invalid texture type');\r\n }\r\n if (framebuffer && framebuffer !== dest) {\r\n device.pool.releaseFrameBuffer(framebuffer);\r\n }\r\n }\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\nconst blitProgramCache: {\r\n [hash: string]: BlitProgramInfo;\r\n} = {};\r\n\r\nlet blitPrimitive2D: Nullable<Primitive> = null;\r\nlet blitRenderStates: Nullable<RenderStateSet> = null;\r\n\r\nfunction getBlitPrimitive2D() {\r\n if (!blitPrimitive2D) {\r\n blitPrimitive2D = new Primitive();\r\n blitPrimitive2D.createAndSetVertexBuffer(\r\n 'position_f32x2',\r\n new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1])\r\n );\r\n blitPrimitive2D.indexCount = 4;\r\n blitPrimitive2D.indexStart = 0;\r\n blitPrimitive2D.primitiveType = 'triangle-strip';\r\n }\r\n return blitPrimitive2D;\r\n}\r\n\r\nfunction getBlitRenderStateSet() {\r\n if (!blitRenderStates) {\r\n blitRenderStates = getDevice().createRenderStateSet();\r\n blitRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n blitRenderStates.useRasterizerState().setCullMode('none');\r\n }\r\n return blitRenderStates;\r\n}\r\n\r\nfunction getBlitProgram(\r\n type: BlitType,\r\n filter: Blitter,\r\n bilinearFiltering: boolean,\r\n sampleType: 'int' | 'uint' | 'float' | 'depth',\r\n flip: boolean\r\n) {\r\n const hash = `${type}:${filter.hash}:${bilinearFiltering}:${sampleType}:${flip ? 1 : 0}`;\r\n let programInfo = blitProgramCache[hash];\r\n if (programInfo === undefined) {\r\n programInfo =\r\n createBlitProgram(type, filter, bilinearFiltering, sampleType, flip, !!filter.destRect) || null;\r\n blitProgramCache[hash] = programInfo;\r\n }\r\n return programInfo;\r\n}\r\n\r\nfunction createBlitProgram(\r\n type: BlitType,\r\n filter: Blitter,\r\n bilinearFiltering: boolean,\r\n st: 'int' | 'uint' | 'float' | 'depth',\r\n flip: boolean,\r\n scaleBias: boolean\r\n) {\r\n const program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (scaleBias) {\r\n this.scaleBias = pb.vec4().uniform(0);\r\n }\r\n filter.setup(this, type);\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv =\r\n type === 'cube'\r\n ? pb.mul(pb.vec2(1, -1), this.$inputs.pos.xy)\r\n : pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (getDevice().type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n if (scaleBias) {\r\n this.$l.xy = pb.add(pb.mul(this.$builtins.position.xy, this.scaleBias.xy), this.scaleBias.zw);\r\n this.$builtins.position = pb.vec4(this.xy, 1, 1);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n switch (type) {\r\n case '2d':\r\n if (st === 'int') {\r\n this.srcTex = pb.itex2D().sampleType('sint').uniform(0);\r\n } else if (st === 'uint') {\r\n this.srcTex = pb.utex2D().sampleType('uint').uniform(0);\r\n } else if (st === 'depth') {\r\n this.srcTex = pb.tex2DShadow().uniform(0);\r\n } else {\r\n this.srcTex = pb\r\n .tex2D()\r\n .sampleType(bilinearFiltering ? 'float' : 'unfilterable-float')\r\n .uniform(0);\r\n }\r\n break;\r\n case '2d-array':\r\n if (st === 'int') {\r\n this.srcTex = pb.itex2DArray().sampleType('sint').uniform(0);\r\n } else if (st === 'uint') {\r\n this.srcTex = pb.utex2DArray().sampleType('uint').uniform(0);\r\n } else if (st === 'depth') {\r\n this.srcTex = pb.tex2DArrayShadow().uniform(0);\r\n } else {\r\n this.srcTex = pb\r\n .tex2DArray()\r\n .sampleType(bilinearFiltering ? 'float' : 'unfilterable-float')\r\n .uniform(0);\r\n }\r\n this.srcLayer = pb.int().uniform(0);\r\n break;\r\n case 'cube':\r\n if (st === 'int') {\r\n this.srcTex = pb.itexCube().sampleType('sint').uniform(0);\r\n } else if (st === 'uint') {\r\n this.srcTex = pb.utexCube().sampleType('uint').uniform(0);\r\n } else if (st === 'depth') {\r\n this.srcTex = pb.texCubeShadow().uniform(0);\r\n } else {\r\n this.srcTex = pb\r\n .texCube()\r\n .sampleType(bilinearFiltering ? 'float' : 'unfilterable-float')\r\n .uniform(0);\r\n }\r\n this.texelSize = pb.float().uniform(0);\r\n this.cubeFace = pb.int().uniform(0);\r\n break;\r\n default:\r\n throw new Error(`invalid blit type: ${type}`);\r\n }\r\n this.$outputs.outColor = pb.vec4();\r\n filter.setup(this, type);\r\n pb.main(function () {\r\n if (type === 'cube') {\r\n this.uv = pb.vec3();\r\n this.$if(pb.equal(this.cubeFace, 0), function () {\r\n this.uv = pb.vec3(1, this.$inputs.uv.y, pb.neg(this.$inputs.uv.x));\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 1), function () {\r\n this.uv = pb.vec3(-1, this.$inputs.uv.y, this.$inputs.uv.x);\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 2), function () {\r\n this.uv = pb.vec3(this.$inputs.uv.x, 1, pb.neg(this.$inputs.uv.y));\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 3), function () {\r\n this.uv = pb.vec3(this.$inputs.uv.x, -1, this.$inputs.uv.y);\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 4), function () {\r\n this.uv = pb.vec3(this.$inputs.uv.x, this.$inputs.uv.y, 1);\r\n })\r\n .$else(function () {\r\n this.uv = pb.vec3(pb.neg(this.$inputs.uv.x), this.$inputs.uv.y, -1);\r\n });\r\n } else {\r\n this.uv = this.$inputs.uv;\r\n }\r\n if (flip) {\r\n this.uv.y = pb.sub(1, this.uv.y);\r\n }\r\n this.$l.outTexel = filter.filter(\r\n this,\r\n type,\r\n this.srcTex,\r\n this.uv,\r\n type === '2d' ? null : this.srcLayer,\r\n st\r\n );\r\n this.$outputs.outColor = filter.writeTexel(this, type, this.$inputs.uv, this.outTexel);\r\n if (filter.srgbOut) {\r\n this.$outputs.outColor = pb.vec4(\r\n linearToGamma(this, this.$outputs.outColor.rgb),\r\n this.$outputs.outColor.a\r\n );\r\n }\r\n });\r\n }\r\n })!;\r\n program.name = `@Blit_${type}_${st}_${bilinearFiltering ? 'bilinear' : 'point'}_${flip ? 'flip' : 'noflip'}`;\r\n return {\r\n program,\r\n bindGroup: getDevice().createBindGroup(program.bindGroupLayouts[0])\r\n };\r\n}\r\n"],"names":["Blitter","_hash","_renderStates","_srgbOut","_flip","_viewport","_scissor","_destRect","_offsetParams","Vector4","viewport","val","scissor","destRect","invalidateHash","srgbOut","renderStates","rs","hash","name","calcHash","readTexel","scope","type","srcTex","uv","srcLayer","sampleType","pb","$builder","getDevice","getDeviceCaps","shaderCaps","supportShaderTextureLod","textureSampleLevel","textureSample","textureArraySampleLevel","Error","textureLoad","ivec2","mul","vec2","textureDimensions","textureArrayLoad","writeTexel","texel","setup","_scope","_type","setUniforms","_bindGroup","_sourceTex","source","dest","sampler","device","flip","bilinearFiltering","magFilter","minFilter","mipFilter","isFilterable","programInfo","getBlitProgram","isIntegerFormat","isSignedFormat","bindGroup","setTexture","destWidth","getWidth","getBackBufferWidth","destHeight","getHeight","getBackBufferHeight","setXYZW","setValue","setFramebuffer","setViewport","setScissor","setProgram","program","setBindGroup","setRenderStates","getBlitRenderStateSet","getBlitPrimitive2D","draw","blit2DArray","layer","blitCubeMap","face","width","blit","pushDeviceStates","isTexture2D","blit2D","isTexture2DArray","isTextureCube","framebuffer","isFramebuffer","pool","createTemporalFramebuffer","destTexture","getColorAttachments","setColorAttachmentLayer","n","Math","min","depth","i","setColorAttachmentCubeFace","releaseFrameBuffer","popDeviceStates","blitProgramCache","blitPrimitive2D","blitRenderStates","Primitive","createAndSetVertexBuffer","Float32Array","indexCount","indexStart","primitiveType","createRenderStateSet","useDepthState","enableTest","enableWrite","useRasterizerState","setCullMode","filter","undefined","createBlitProgram","st","scaleBias","buildRenderProgram","vertex","$inputs","pos","attrib","$outputs","vec4","uniform","main","$builtins","position","xy","add","y","neg","$l","zw","fragment","itex2D","utex2D","tex2DShadow","tex2D","itex2DArray","utex2DArray","tex2DArrayShadow","tex2DArray","int","itexCube","utexCube","texCubeShadow","texCube","texelSize","float","cubeFace","outColor","vec3","$if","equal","x","$elseif","$else","sub","outTexel","linearToGamma","rgb","a","createBindGroup","bindGroupLayouts"],"mappings":"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"}
1
+ {"version":3,"file":"blitter.js","sources":["../../src/blitter/blitter.ts"],"sourcesContent":["import type { CubeFace, Nullable } from '@zephyr3d/base';\r\nimport { DEPTH_FARTHEST, Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n RenderStateSet,\r\n BaseTexture,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUProgram,\r\n Texture2D,\r\n Texture2DArray,\r\n TextureCube,\r\n TextureSampler,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp\r\n} from '@zephyr3d/device';\r\nimport { Primitive } from '../render/primitive';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport { getDevice } from '../app/api';\r\n\r\n// TODO: support multi-pass filters.\r\n\r\n/**\r\n * Blit type\r\n * @public\r\n */\r\nexport type BlitType = '2d' | '2d-array' | 'cube';\r\n\r\ntype BlitProgramInfo = { program: GPUProgram; bindGroup: BindGroup };\r\n\r\n/**\r\n * Base class for any kind of blitters\r\n * @public\r\n */\r\nexport abstract class Blitter {\r\n /** @internal */\r\n protected _hash: Nullable<string>;\r\n /** @internal */\r\n protected _renderStates: Nullable<RenderStateSet>;\r\n /** @internal */\r\n protected _srgbOut: boolean;\r\n /** @internal */\r\n protected _flip: boolean;\r\n /** @internal */\r\n protected _viewport: Nullable<number[]>;\r\n /** @internal */\r\n protected _scissor: Nullable<number[]>;\r\n /** @internal */\r\n protected _destRect: Nullable<number[]>;\r\n /** @internal */\r\n protected _offsetParams: Vector4;\r\n /**\r\n * Creates an instance of Blitter\r\n */\r\n constructor() {\r\n this._hash = null;\r\n this._renderStates = null;\r\n this._srgbOut = false;\r\n this._flip = false;\r\n this._viewport = null;\r\n this._scissor = null;\r\n this._destRect = null;\r\n this._offsetParams = new Vector4();\r\n }\r\n /** Viewport */\r\n get viewport() {\r\n return this._viewport;\r\n }\r\n set viewport(val) {\r\n this._viewport = val;\r\n }\r\n /** Scissor rect */\r\n get scissor() {\r\n return this._scissor;\r\n }\r\n set scissor(val) {\r\n this._scissor = val;\r\n }\r\n /** Destination rectangle */\r\n get destRect() {\r\n return this._destRect;\r\n }\r\n set destRect(val) {\r\n if (!!this._destRect !== !!val) {\r\n this.invalidateHash();\r\n }\r\n this._destRect = val;\r\n }\r\n /**\r\n * Whether output color value in gamma color space\r\n */\r\n get srgbOut() {\r\n return this._srgbOut;\r\n }\r\n set srgbOut(val) {\r\n if (this._srgbOut !== !!val) {\r\n this._srgbOut = !!val;\r\n this.invalidateHash();\r\n }\r\n }\r\n /**\r\n * Render states used to do the blitting\r\n */\r\n get renderStates() {\r\n return this._renderStates;\r\n }\r\n set renderStates(rs) {\r\n this._renderStates = rs;\r\n }\r\n /**\r\n * Program hash code\r\n */\r\n get hash() {\r\n if (!this._hash) {\r\n this._hash = `${this.constructor.name}:${this._srgbOut ? 1 : 0}:${this._flip ? 1 : 0}:${\r\n this._destRect ? 1 : 0\r\n }:${this.calcHash()}`;\r\n }\r\n return this._hash;\r\n }\r\n /**\r\n * Force the hash code to be regenerated\r\n */\r\n invalidateHash() {\r\n this._hash = null;\r\n }\r\n /**\r\n * Reads a texel from the source texture\r\n * @param scope - The shader scope\r\n * @param type - The blit type\r\n * @param srcTex - The source texture\r\n * @param uv - The texture coordinate from where the texel will be read\r\n * @param srcLayer - The layer of the source texture\r\n * @returns The read texel\r\n */\r\n readTexel(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n uv: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint' | 'depth'\r\n ) {\r\n const pb = scope.$builder;\r\n if (sampleType === 'float' || sampleType === 'depth') {\r\n switch (type) {\r\n case '2d':\r\n case 'cube':\r\n return getDevice().getDeviceCaps().shaderCaps.supportShaderTextureLod\r\n ? pb.textureSampleLevel(srcTex, uv, 0)\r\n : pb.textureSample(srcTex, uv);\r\n case '2d-array':\r\n return pb.textureArraySampleLevel(srcTex, uv, srcLayer, 0);\r\n default:\r\n throw new Error(`Invalid blit type: ${type}`);\r\n }\r\n } else {\r\n switch (type) {\r\n case '2d':\r\n return pb.textureLoad(srcTex, pb.ivec2(pb.mul(pb.vec2(pb.textureDimensions(srcTex, 0)), uv)), 0);\r\n case 'cube':\r\n throw new Error('Integer format cube texture not supported');\r\n case '2d-array':\r\n return pb.textureArrayLoad(\r\n srcTex,\r\n pb.ivec2(pb.mul(pb.vec2(pb.textureDimensions(srcTex, 0)), uv)),\r\n srcLayer,\r\n 0\r\n );\r\n default:\r\n throw new Error(`Invalid blit type: ${type}`);\r\n }\r\n }\r\n }\r\n /**\r\n * Writes a texel to destination texture\r\n * @param scope - The shader scope\r\n * @param type - The blit type\r\n * @param uv - The texture coordinate to where the texel will be written\r\n * @param texel - The texel to be written\r\n * @returns The written texel\r\n */\r\n writeTexel(scope: PBInsideFunctionScope, type: BlitType, uv: PBShaderExp, texel: PBShaderExp) {\r\n return texel;\r\n }\r\n /**\r\n * Initialize uniforms of the blit program\r\n * @param _scope - The shader scope\r\n * @param _type - The blit type\r\n */\r\n setup(_scope: PBGlobalScope, _type: BlitType) {}\r\n /**\r\n * Update uniforms of the bind group\r\n * @param bindGroup - The bind group to be updated\r\n */\r\n setUniforms(_bindGroup: BindGroup, _sourceTex: BaseTexture) {}\r\n /**\r\n * Calculates the destination texel by the source texel\r\n * @param scope - The shader scope\r\n * @param type - The blit type\r\n * @param srcTex - The source texel\r\n * @param srcUV - The texture coordinate of the source texel\r\n * @param srcLayer - The layer of the source texture\r\n * @returns the destination texel\r\n */\r\n abstract filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampeType: 'float' | 'int' | 'uint' | 'depth'\r\n ): PBShaderExp;\r\n /**\r\n * Calculates the hash code\r\n * @returns the calculated hash code\r\n */\r\n protected abstract calcHash(): string;\r\n /** @internal */\r\n protected blit2D(source: Texture2D, dest: Nullable<FrameBuffer>, sampler?: Nullable<TextureSampler>): void {\r\n const device = getDevice();\r\n const flip = !dest && device.type === 'webgpu';\r\n const bilinearFiltering = sampler\r\n ? sampler.magFilter === 'linear' || sampler.minFilter === 'linear' || sampler.mipFilter === 'linear'\r\n : source.isFilterable();\r\n const programInfo = getBlitProgram(\r\n '2d',\r\n this,\r\n bilinearFiltering,\r\n source.isIntegerFormat() ? (source.isSignedFormat() ? 'int' : 'uint') : 'float',\r\n flip\r\n );\r\n programInfo.bindGroup.setTexture('srcTex', source, sampler);\r\n if (this._destRect) {\r\n const destWidth = this._viewport?.[2] ?? dest?.getWidth() ?? device.getBackBufferWidth();\r\n const destHeight = this._viewport?.[3] ?? dest?.getHeight() ?? device.getBackBufferHeight();\r\n this._offsetParams.setXYZW(\r\n this._destRect[2] / destWidth,\r\n this._destRect[3] / destHeight,\r\n (this._destRect[2] + 2 * this._destRect[0]) / destWidth - 1,\r\n (this._destRect[3] + 2 * this._destRect[1]) / destHeight - 1\r\n );\r\n programInfo.bindGroup.setValue('scaleBias', this._offsetParams);\r\n }\r\n this.setUniforms(programInfo.bindGroup, source);\r\n device.setFramebuffer(dest ?? null);\r\n device.setViewport(this._viewport);\r\n device.setScissor(this._scissor);\r\n device.setProgram(programInfo.program);\r\n device.setBindGroup(0, programInfo.bindGroup);\r\n device.setRenderStates(this._renderStates ?? getBlitRenderStateSet());\r\n getBlitPrimitive2D().draw();\r\n }\r\n /** @internal */\r\n protected blit2DArray(\r\n source: Texture2DArray,\r\n dest: Nullable<FrameBuffer>,\r\n layer: number,\r\n sampler?: Nullable<TextureSampler>\r\n ) {\r\n const device = getDevice();\r\n const flip = !dest && device.type === 'webgpu';\r\n const bilinearFiltering = sampler\r\n ? sampler.magFilter === 'linear' || sampler.minFilter === 'linear' || sampler.mipFilter === 'linear'\r\n : source.isFilterable();\r\n const programInfo = getBlitProgram(\r\n '2d-array',\r\n this,\r\n bilinearFiltering,\r\n source.isIntegerFormat() ? (source.isSignedFormat() ? 'int' : 'uint') : 'float',\r\n flip\r\n );\r\n programInfo.bindGroup.setTexture('srcTex', source, sampler);\r\n programInfo.bindGroup.setValue('srcLayer', layer);\r\n this.setUniforms(programInfo.bindGroup, source);\r\n device.setFramebuffer(dest ?? null);\r\n device.setViewport(this._viewport);\r\n device.setScissor(this._scissor);\r\n device.setProgram(programInfo.program);\r\n device.setBindGroup(0, programInfo.bindGroup);\r\n device.setRenderStates(this._renderStates ?? getBlitRenderStateSet());\r\n getBlitPrimitive2D().draw();\r\n }\r\n /** @internal */\r\n protected blitCubeMap(\r\n source: TextureCube,\r\n dest: Nullable<FrameBuffer>,\r\n face: CubeFace,\r\n sampler?: Nullable<TextureSampler>\r\n ) {\r\n const device = getDevice();\r\n const flip = !dest && device.type === 'webgpu';\r\n const bilinearFiltering = sampler\r\n ? sampler.magFilter === 'linear' || sampler.minFilter === 'linear' || sampler.mipFilter === 'linear'\r\n : source.isFilterable();\r\n const programInfo = getBlitProgram(\r\n 'cube',\r\n this,\r\n bilinearFiltering,\r\n source.isIntegerFormat() ? (source.isSignedFormat() ? 'int' : 'uint') : 'float',\r\n flip\r\n );\r\n programInfo.bindGroup.setTexture('srcTex', source, sampler);\r\n programInfo.bindGroup.setValue('texelSize', 1 / source.width);\r\n programInfo.bindGroup.setValue('cubeFace', face);\r\n this.setUniforms(programInfo.bindGroup, source);\r\n device.setFramebuffer(dest ?? null);\r\n device.setViewport(this._viewport);\r\n device.setScissor(this._scissor);\r\n device.setProgram(programInfo.program);\r\n device.setBindGroup(0, programInfo.bindGroup);\r\n device.setRenderStates(this._renderStates ?? getBlitRenderStateSet());\r\n getBlitPrimitive2D().draw();\r\n }\r\n /**\r\n * Blits a 2D texture to a frame buffer\r\n * @param source - The source texture\r\n * @param dest - The frame buffer to blit onto\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2D, dest: Nullable<FrameBuffer>, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits a 2D texture to 2D texture or frame buffer\r\n * @param source - The source texture\r\n * @param dest - The destination texture or frame buffer\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2D, dest: Texture2D, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits a 2D texture to given layer of a 2D array texture\r\n * @param source - The source texture\r\n * @param dest - The destination texture\r\n * @param layer - The layer of the destination texture\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2D, dest: Texture2DArray, layer: number, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits a 2d array texture to another 2d array texture\r\n *\r\n * @remarks\r\n * All layers of the source texture will be copied to the destination texture\r\n *\r\n * @param source - The source texture\r\n * @param dest - The destination texture\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2DArray, dest: Texture2DArray, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits given layer of a 2d array texture to a frame buffer\r\n * @param source - The source texture\r\n * @param dest - The frame buffer to blit onto\r\n * @param layer - The layer to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(\r\n source: Texture2DArray,\r\n dest: Nullable<FrameBuffer>,\r\n layer: number,\r\n sampler?: Nullable<TextureSampler>\r\n ): void;\r\n /**\r\n * Blits given layer of a 2d array texture to a 2d texture or frame buffer\r\n * @param source - The source texture\r\n * @param dest - The destination texture or frame buffer\r\n * @param layer - The layer to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: Texture2DArray, dest: Texture2D, layer: number, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits a cube texture to another cube texture\r\n *\r\n * @remarks\r\n * All faces of the source texture will be copied to the destination texture\r\n *\r\n * @param source - The source texture\r\n * @param dest - The destination texture\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: TextureCube, dest: TextureCube, sampler?: Nullable<TextureSampler>): void;\r\n /**\r\n * Blits given face of a cube texture to a frame buffer\r\n * @param source - The source texture\r\n * @param dest - The frame buffer to blit onto\r\n * @param face - The face to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(\r\n source: TextureCube,\r\n dest: Nullable<FrameBuffer>,\r\n face: number,\r\n sampler?: Nullable<TextureSampler>\r\n ): void;\r\n /**\r\n * Blits given face of a cube texture to a 2d texture or frame buffer\r\n * @param source - The source texture\r\n * @param dest - The destination texture or frame buffer\r\n * @param face - The face to be copied\r\n * @param sampler - Sampler for source texture\r\n */\r\n blit(source: TextureCube, dest: Texture2D, face: number, sampler?: Nullable<TextureSampler>): void;\r\n blit(\r\n source: BaseTexture,\r\n dest: BaseTexture | Nullable<FrameBuffer>,\r\n layer?: number | Nullable<TextureSampler>,\r\n sampler?: Nullable<TextureSampler>\r\n ): void;\r\n blit(\r\n source: BaseTexture,\r\n dest: BaseTexture | Nullable<FrameBuffer>,\r\n layer?: number | Nullable<TextureSampler>,\r\n sampler?: Nullable<TextureSampler>\r\n ) {\r\n const device = getDevice();\r\n device.pushDeviceStates();\r\n if (!dest) {\r\n if (source.isTexture2D()) {\r\n this.blit2D(source, null, sampler);\r\n } else if (source.isTexture2DArray()) {\r\n this.blit2DArray(source, null, (layer as number) || 0, sampler);\r\n } else if (source.isTextureCube()) {\r\n this.blitCubeMap(source, null, (layer as number) || 0, sampler);\r\n } else {\r\n throw new Error('Blitter.blit() failed: invalid texture type');\r\n }\r\n } else {\r\n const framebuffer = dest.isFramebuffer()\r\n ? dest\r\n : device.pool.createTemporalFramebuffer(false, [dest], null);\r\n const destTexture = dest.isFramebuffer() ? dest.getColorAttachments()?.[0] : dest;\r\n if (source.isTexture2D()) {\r\n if (!destTexture?.isTexture2D() && !destTexture?.isTexture2DArray()) {\r\n throw new Error('Blitter.blit() failed: invalid destination texture type');\r\n }\r\n if (destTexture.isTexture2DArray()) {\r\n framebuffer.setColorAttachmentLayer(0, (layer as number) || 0);\r\n }\r\n this.blit2D(source, framebuffer, sampler);\r\n } else if (source.isTexture2DArray()) {\r\n if (!destTexture?.isTexture2D() && !destTexture.isTexture2DArray()) {\r\n throw new Error('Blitter.blit() failed: invalid destination texture type');\r\n }\r\n if (destTexture.isTexture2D()) {\r\n this.blit2DArray(source, framebuffer, (layer as number) || 0, sampler);\r\n } else {\r\n const n = Math.min(source.depth, destTexture.depth);\r\n for (let i = 0; i < n; i++) {\r\n framebuffer.setColorAttachmentLayer(0, i);\r\n this.blit2DArray(source, framebuffer, i, layer as TextureSampler);\r\n }\r\n }\r\n } else if (source.isTextureCube()) {\r\n if (!destTexture.isTextureCube() && !destTexture.isTexture2D()) {\r\n throw new Error('Blitter.blit() failed: invalid destination texture type');\r\n }\r\n if (destTexture.isTextureCube()) {\r\n for (let i = 0; i < 6; i++) {\r\n framebuffer.setColorAttachmentCubeFace(0, i);\r\n this.blitCubeMap(source, framebuffer, i, layer as TextureSampler);\r\n }\r\n } else {\r\n this.blitCubeMap(source, framebuffer, (layer as number) || 0, sampler);\r\n }\r\n } else {\r\n throw new Error('Blitter.blit() failed: invalid texture type');\r\n }\r\n if (framebuffer && framebuffer !== dest) {\r\n device.pool.releaseFrameBuffer(framebuffer);\r\n }\r\n }\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\nconst blitProgramCache: {\r\n [hash: string]: BlitProgramInfo;\r\n} = {};\r\n\r\nlet blitPrimitive2D: Nullable<Primitive> = null;\r\nlet blitRenderStates: Nullable<RenderStateSet> = null;\r\n\r\nfunction getBlitPrimitive2D() {\r\n if (!blitPrimitive2D) {\r\n blitPrimitive2D = new Primitive();\r\n blitPrimitive2D.createAndSetVertexBuffer(\r\n 'position_f32x2',\r\n new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1])\r\n );\r\n blitPrimitive2D.indexCount = 4;\r\n blitPrimitive2D.indexStart = 0;\r\n blitPrimitive2D.primitiveType = 'triangle-strip';\r\n }\r\n return blitPrimitive2D;\r\n}\r\n\r\nfunction getBlitRenderStateSet() {\r\n if (!blitRenderStates) {\r\n blitRenderStates = getDevice().createRenderStateSet();\r\n blitRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n blitRenderStates.useRasterizerState().setCullMode('none');\r\n }\r\n return blitRenderStates;\r\n}\r\n\r\nfunction getBlitProgram(\r\n type: BlitType,\r\n filter: Blitter,\r\n bilinearFiltering: boolean,\r\n sampleType: 'int' | 'uint' | 'float' | 'depth',\r\n flip: boolean\r\n) {\r\n const hash = `${type}:${filter.hash}:${bilinearFiltering}:${sampleType}:${flip ? 1 : 0}`;\r\n let programInfo = blitProgramCache[hash];\r\n if (programInfo === undefined) {\r\n programInfo =\r\n createBlitProgram(type, filter, bilinearFiltering, sampleType, flip, !!filter.destRect) || null;\r\n blitProgramCache[hash] = programInfo;\r\n }\r\n return programInfo;\r\n}\r\n\r\nfunction createBlitProgram(\r\n type: BlitType,\r\n filter: Blitter,\r\n bilinearFiltering: boolean,\r\n st: 'int' | 'uint' | 'float' | 'depth',\r\n flip: boolean,\r\n scaleBias: boolean\r\n) {\r\n const program = getDevice().buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (scaleBias) {\r\n this.scaleBias = pb.vec4().uniform(0);\r\n }\r\n filter.setup(this, type);\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, DEPTH_FARTHEST, 1);\r\n this.$outputs.uv =\r\n type === 'cube'\r\n ? pb.mul(pb.vec2(1, -1), this.$inputs.pos.xy)\r\n : pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (getDevice().type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n if (scaleBias) {\r\n this.$l.xy = pb.add(pb.mul(this.$builtins.position.xy, this.scaleBias.xy), this.scaleBias.zw);\r\n this.$builtins.position = pb.vec4(this.xy, DEPTH_FARTHEST, 1);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n switch (type) {\r\n case '2d':\r\n if (st === 'int') {\r\n this.srcTex = pb.itex2D().sampleType('sint').uniform(0);\r\n } else if (st === 'uint') {\r\n this.srcTex = pb.utex2D().sampleType('uint').uniform(0);\r\n } else if (st === 'depth') {\r\n this.srcTex = pb.tex2DShadow().uniform(0);\r\n } else {\r\n this.srcTex = pb\r\n .tex2D()\r\n .sampleType(bilinearFiltering ? 'float' : 'unfilterable-float')\r\n .uniform(0);\r\n }\r\n break;\r\n case '2d-array':\r\n if (st === 'int') {\r\n this.srcTex = pb.itex2DArray().sampleType('sint').uniform(0);\r\n } else if (st === 'uint') {\r\n this.srcTex = pb.utex2DArray().sampleType('uint').uniform(0);\r\n } else if (st === 'depth') {\r\n this.srcTex = pb.tex2DArrayShadow().uniform(0);\r\n } else {\r\n this.srcTex = pb\r\n .tex2DArray()\r\n .sampleType(bilinearFiltering ? 'float' : 'unfilterable-float')\r\n .uniform(0);\r\n }\r\n this.srcLayer = pb.int().uniform(0);\r\n break;\r\n case 'cube':\r\n if (st === 'int') {\r\n this.srcTex = pb.itexCube().sampleType('sint').uniform(0);\r\n } else if (st === 'uint') {\r\n this.srcTex = pb.utexCube().sampleType('uint').uniform(0);\r\n } else if (st === 'depth') {\r\n this.srcTex = pb.texCubeShadow().uniform(0);\r\n } else {\r\n this.srcTex = pb\r\n .texCube()\r\n .sampleType(bilinearFiltering ? 'float' : 'unfilterable-float')\r\n .uniform(0);\r\n }\r\n this.texelSize = pb.float().uniform(0);\r\n this.cubeFace = pb.int().uniform(0);\r\n break;\r\n default:\r\n throw new Error(`invalid blit type: ${type}`);\r\n }\r\n this.$outputs.outColor = pb.vec4();\r\n filter.setup(this, type);\r\n pb.main(function () {\r\n if (type === 'cube') {\r\n this.uv = pb.vec3();\r\n this.$if(pb.equal(this.cubeFace, 0), function () {\r\n this.uv = pb.vec3(1, this.$inputs.uv.y, pb.neg(this.$inputs.uv.x));\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 1), function () {\r\n this.uv = pb.vec3(-1, this.$inputs.uv.y, this.$inputs.uv.x);\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 2), function () {\r\n this.uv = pb.vec3(this.$inputs.uv.x, 1, pb.neg(this.$inputs.uv.y));\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 3), function () {\r\n this.uv = pb.vec3(this.$inputs.uv.x, -1, this.$inputs.uv.y);\r\n })\r\n .$elseif(pb.equal(this.cubeFace, 4), function () {\r\n this.uv = pb.vec3(this.$inputs.uv.x, this.$inputs.uv.y, 1);\r\n })\r\n .$else(function () {\r\n this.uv = pb.vec3(pb.neg(this.$inputs.uv.x), this.$inputs.uv.y, -1);\r\n });\r\n } else {\r\n this.uv = this.$inputs.uv;\r\n }\r\n if (flip) {\r\n this.uv.y = pb.sub(1, this.uv.y);\r\n }\r\n this.$l.outTexel = filter.filter(\r\n this,\r\n type,\r\n this.srcTex,\r\n this.uv,\r\n type === '2d' ? null : this.srcLayer,\r\n st\r\n );\r\n this.$outputs.outColor = filter.writeTexel(this, type, this.$inputs.uv, this.outTexel);\r\n if (filter.srgbOut) {\r\n this.$outputs.outColor = pb.vec4(\r\n linearToGamma(this, this.$outputs.outColor.rgb),\r\n this.$outputs.outColor.a\r\n );\r\n }\r\n });\r\n }\r\n })!;\r\n program.name = `@Blit_${type}_${st}_${bilinearFiltering ? 'bilinear' : 'point'}_${flip ? 'flip' : 'noflip'}`;\r\n return {\r\n program,\r\n bindGroup: getDevice().createBindGroup(program.bindGroupLayouts[0])\r\n };\r\n}\r\n"],"names":["Blitter","_hash","_renderStates","_srgbOut","_flip","_viewport","_scissor","_destRect","_offsetParams","Vector4","viewport","val","scissor","destRect","invalidateHash","srgbOut","renderStates","rs","hash","name","calcHash","readTexel","scope","type","srcTex","uv","srcLayer","sampleType","pb","$builder","getDevice","getDeviceCaps","shaderCaps","supportShaderTextureLod","textureSampleLevel","textureSample","textureArraySampleLevel","Error","textureLoad","ivec2","mul","vec2","textureDimensions","textureArrayLoad","writeTexel","texel","setup","_scope","_type","setUniforms","_bindGroup","_sourceTex","source","dest","sampler","device","flip","bilinearFiltering","magFilter","minFilter","mipFilter","isFilterable","programInfo","getBlitProgram","isIntegerFormat","isSignedFormat","bindGroup","setTexture","destWidth","getWidth","getBackBufferWidth","destHeight","getHeight","getBackBufferHeight","setXYZW","setValue","setFramebuffer","setViewport","setScissor","setProgram","program","setBindGroup","setRenderStates","getBlitRenderStateSet","getBlitPrimitive2D","draw","blit2DArray","layer","blitCubeMap","face","width","blit","pushDeviceStates","isTexture2D","blit2D","isTexture2DArray","isTextureCube","framebuffer","isFramebuffer","pool","createTemporalFramebuffer","destTexture","getColorAttachments","setColorAttachmentLayer","n","Math","min","depth","i","setColorAttachmentCubeFace","releaseFrameBuffer","popDeviceStates","blitProgramCache","blitPrimitive2D","blitRenderStates","Primitive","createAndSetVertexBuffer","Float32Array","indexCount","indexStart","primitiveType","createRenderStateSet","useDepthState","enableTest","enableWrite","useRasterizerState","setCullMode","filter","undefined","createBlitProgram","st","scaleBias","buildRenderProgram","vertex","$inputs","pos","attrib","$outputs","vec4","uniform","main","$builtins","position","DEPTH_FARTHEST","xy","add","y","neg","$l","zw","fragment","itex2D","utex2D","tex2DShadow","tex2D","itex2DArray","utex2DArray","tex2DArrayShadow","tex2DArray","int","itexCube","utexCube","texCubeShadow","texCube","texelSize","float","cubeFace","outColor","vec3","$if","equal","x","$elseif","$else","sub","outTexel","linearToGamma","rgb","a","createBindGroup","bindGroupLayouts"],"mappings":"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"}