@next2d/webgpu 3.0.5 → 3.1.0

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 (296) hide show
  1. package/package.json +3 -3
  2. package/src/AtlasManager.d.ts +75 -6
  3. package/src/AtlasManager.js +106 -30
  4. package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.d.ts +2 -2
  5. package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.js +3 -3
  6. package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.d.ts +4 -4
  7. package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.js +4 -4
  8. package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.d.ts +5 -5
  9. package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.js +6 -6
  10. package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.d.ts +6 -6
  11. package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.js +7 -7
  12. package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.d.ts +6 -6
  13. package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.js +9 -9
  14. package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.d.ts +6 -6
  15. package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.js +10 -10
  16. package/src/AttachmentManager/service/AttachmentManagerGetTextureService.d.ts +7 -7
  17. package/src/AttachmentManager/service/AttachmentManagerGetTextureService.js +10 -10
  18. package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.d.ts +3 -3
  19. package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.js +7 -7
  20. package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.d.ts +10 -10
  21. package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.js +16 -16
  22. package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.d.ts +6 -6
  23. package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.js +10 -10
  24. package/src/AttachmentManager.d.ts +28 -6
  25. package/src/AttachmentManager.js +28 -23
  26. package/src/BezierConverter/BezierConverter.d.ts +9 -3
  27. package/src/BezierConverter/BezierConverter.js +5 -3
  28. package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.d.ts +2 -13
  29. package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.js +13 -25
  30. package/src/Blend/BlendInstancedManager.d.ts +19 -15
  31. package/src/Blend/BlendInstancedManager.js +35 -22
  32. package/src/Blend/usecase/BlendApplyComplexBlendUseCase.d.ts +9 -2
  33. package/src/Blend/usecase/BlendApplyComplexBlendUseCase.js +28 -17
  34. package/src/Blend.d.ts +20 -2
  35. package/src/Blend.js +20 -4
  36. package/src/BufferManager/service/BufferManagerReleaseUniformBufferService.js +2 -2
  37. package/src/BufferManager/service/BufferManagerReleaseVertexBufferService.js +2 -2
  38. package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.d.ts +1 -0
  39. package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.js +1 -0
  40. package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.d.ts +1 -0
  41. package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.js +1 -0
  42. package/src/BufferManager.d.ts +108 -43
  43. package/src/BufferManager.js +113 -153
  44. package/src/Context/service/ContextComputeBitmapMatrixService.d.ts +7 -0
  45. package/src/Context/service/ContextComputeBitmapMatrixService.js +7 -0
  46. package/src/Context/service/ContextComputeGradientMatrixService.d.ts +9 -1
  47. package/src/Context/service/ContextComputeGradientMatrixService.js +15 -7
  48. package/src/Context/service/ContextFillSimpleService.d.ts +14 -0
  49. package/src/Context/service/ContextFillSimpleService.js +14 -0
  50. package/src/Context/service/ContextFillWithStencilMainService.d.ts +11 -0
  51. package/src/Context/service/ContextFillWithStencilMainService.js +11 -0
  52. package/src/Context/service/ContextFillWithStencilService.d.ts +11 -0
  53. package/src/Context/service/ContextFillWithStencilService.js +11 -0
  54. package/src/Context/usecase/ContextApplyFilterUseCase.d.ts +17 -0
  55. package/src/Context/usecase/ContextApplyFilterUseCase.js +201 -62
  56. package/src/Context/usecase/ContextBitmapFillUseCase.d.ts +23 -0
  57. package/src/Context/usecase/ContextBitmapFillUseCase.js +47 -0
  58. package/src/Context/usecase/ContextBitmapStrokeUseCase.d.ts +23 -0
  59. package/src/Context/usecase/ContextBitmapStrokeUseCase.js +35 -0
  60. package/src/Context/usecase/ContextClipUseCase.d.ts +15 -0
  61. package/src/Context/usecase/ContextClipUseCase.js +19 -0
  62. package/src/Context/usecase/ContextContainerEndLayerUseCase.d.ts +21 -1
  63. package/src/Context/usecase/ContextContainerEndLayerUseCase.js +195 -104
  64. package/src/Context/usecase/ContextDrawArraysInstancedUseCase.d.ts +13 -0
  65. package/src/Context/usecase/ContextDrawArraysInstancedUseCase.js +41 -20
  66. package/src/Context/usecase/ContextDrawIndirectUseCase.d.ts +16 -1
  67. package/src/Context/usecase/ContextDrawIndirectUseCase.js +53 -30
  68. package/src/Context/usecase/ContextGradientFillUseCase.d.ts +23 -0
  69. package/src/Context/usecase/ContextGradientFillUseCase.js +47 -0
  70. package/src/Context/usecase/ContextGradientStrokeUseCase.d.ts +23 -0
  71. package/src/Context/usecase/ContextGradientStrokeUseCase.js +35 -0
  72. package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.d.ts +13 -1
  73. package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.js +126 -60
  74. package/src/Context.d.ts +445 -63
  75. package/src/Context.js +566 -144
  76. package/src/FillTexturePool.d.ts +39 -0
  77. package/src/FillTexturePool.js +70 -7
  78. package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.d.ts +21 -2
  79. package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.js +33 -26
  80. package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.d.ts +5 -5
  81. package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.js +81 -64
  82. package/src/Filter/BlurFilterUseCase.d.ts +15 -11
  83. package/src/Filter/BlurFilterUseCase.js +22 -17
  84. package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.d.ts +2 -2
  85. package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.js +5 -5
  86. package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.d.ts +15 -1
  87. package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.js +23 -17
  88. package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.d.ts +20 -1
  89. package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.js +37 -26
  90. package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.d.ts +7 -7
  91. package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.js +19 -31
  92. package/src/Filter/FilterGradientLUTCache.js +2 -0
  93. package/src/Filter/FilterUtil.d.ts +23 -0
  94. package/src/Filter/FilterUtil.js +33 -0
  95. package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.d.ts +5 -5
  96. package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.js +12 -21
  97. package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.d.ts +6 -6
  98. package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.js +16 -19
  99. package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.d.ts +5 -5
  100. package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.js +13 -16
  101. package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.d.ts +13 -1
  102. package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.js +30 -3
  103. package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.d.ts +11 -1
  104. package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.js +36 -6
  105. package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.d.ts +10 -10
  106. package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.js +15 -15
  107. package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.d.ts +4 -4
  108. package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.js +5 -5
  109. package/src/FrameBufferManager.d.ts +95 -3
  110. package/src/FrameBufferManager.js +97 -8
  111. package/src/Gradient/GradientLUTCache.d.ts +36 -4
  112. package/src/Gradient/GradientLUTCache.js +61 -5
  113. package/src/Gradient/GradientLUTGenerator.d.ts +26 -14
  114. package/src/Gradient/GradientLUTGenerator.js +74 -43
  115. package/src/Mask/service/MaskUnionMaskService.d.ts +16 -1
  116. package/src/Mask/service/MaskUnionMaskService.js +45 -31
  117. package/src/Mask.d.ts +57 -3
  118. package/src/Mask.js +75 -11
  119. package/src/Mesh/service/MeshFillGenerateService.d.ts +4 -4
  120. package/src/Mesh/service/MeshFillGenerateService.js +4 -4
  121. package/src/Mesh/service/MeshStrokeFillGenerateService.d.ts +4 -4
  122. package/src/Mesh/service/MeshStrokeFillGenerateService.js +4 -4
  123. package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.d.ts +3 -3
  124. package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.js +10 -3
  125. package/src/Mesh/usecase/MeshFillGenerateUseCase.d.ts +2 -2
  126. package/src/Mesh/usecase/MeshFillGenerateUseCase.js +9 -2
  127. package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.d.ts +3 -3
  128. package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.js +10 -3
  129. package/src/Mesh/usecase/MeshStrokeGenerateUseCase.d.ts +8 -14
  130. package/src/Mesh/usecase/MeshStrokeGenerateUseCase.js +214 -129
  131. package/src/PathCommand.d.ts +24 -23
  132. package/src/PathCommand.js +25 -79
  133. package/src/Shader/PipelineManager.d.ts +223 -6
  134. package/src/Shader/PipelineManager.js +308 -66
  135. package/src/Shader/ShaderInstancedManager.d.ts +17 -0
  136. package/src/Shader/ShaderInstancedManager.js +17 -0
  137. package/src/Shader/ShaderSource.d.ts +317 -12
  138. package/src/Shader/ShaderSource.js +328 -39
  139. package/src/Shader/wgsl/common/SharedWgsl.d.ts +28 -1
  140. package/src/Shader/wgsl/common/SharedWgsl.js +28 -9
  141. package/src/Shader/wgsl/fragment/BasicFragment.d.ts +14 -0
  142. package/src/Shader/wgsl/fragment/BasicFragment.js +14 -0
  143. package/src/Shader/wgsl/fragment/BitmapFragment.d.ts +7 -0
  144. package/src/Shader/wgsl/fragment/BitmapFragment.js +7 -0
  145. package/src/Shader/wgsl/fragment/EffectFragment.d.ts +42 -0
  146. package/src/Shader/wgsl/fragment/EffectFragment.js +42 -0
  147. package/src/Shader/wgsl/fragment/FillFragment.d.ts +7 -0
  148. package/src/Shader/wgsl/fragment/FillFragment.js +7 -0
  149. package/src/Shader/wgsl/fragment/FilterFragment.d.ts +70 -0
  150. package/src/Shader/wgsl/fragment/FilterFragment.js +70 -0
  151. package/src/Shader/wgsl/fragment/GradientFragment.d.ts +21 -0
  152. package/src/Shader/wgsl/fragment/GradientFragment.js +43 -8
  153. package/src/Shader/wgsl/fragment/InstancedFragment.d.ts +7 -0
  154. package/src/Shader/wgsl/fragment/InstancedFragment.js +7 -0
  155. package/src/Shader/wgsl/fragment/MaskFragment.d.ts +7 -0
  156. package/src/Shader/wgsl/fragment/MaskFragment.js +7 -0
  157. package/src/Shader/wgsl/fragment/StencilFragment.d.ts +14 -0
  158. package/src/Shader/wgsl/fragment/StencilFragment.js +14 -0
  159. package/src/Shader/wgsl/vertex/BasicVertex.d.ts +7 -0
  160. package/src/Shader/wgsl/vertex/BasicVertex.js +7 -0
  161. package/src/Shader/wgsl/vertex/BitmapVertex.d.ts +7 -0
  162. package/src/Shader/wgsl/vertex/BitmapVertex.js +7 -0
  163. package/src/Shader/wgsl/vertex/FillVertex.d.ts +7 -0
  164. package/src/Shader/wgsl/vertex/FillVertex.js +7 -0
  165. package/src/Shader/wgsl/vertex/FilterVertex.d.ts +77 -1
  166. package/src/Shader/wgsl/vertex/FilterVertex.js +135 -42
  167. package/src/Shader/wgsl/vertex/GradientVertex.d.ts +7 -0
  168. package/src/Shader/wgsl/vertex/GradientVertex.js +7 -0
  169. package/src/Shader/wgsl/vertex/InstancedVertex.d.ts +7 -0
  170. package/src/Shader/wgsl/vertex/InstancedVertex.js +7 -0
  171. package/src/Shader/wgsl/vertex/MaskVertex.d.ts +7 -0
  172. package/src/Shader/wgsl/vertex/MaskVertex.js +7 -0
  173. package/src/Shader/wgsl/vertex/StencilVertex.d.ts +14 -0
  174. package/src/Shader/wgsl/vertex/StencilVertex.js +14 -0
  175. package/src/TextureManager/service/TextureManagerInitializeSamplersService.d.ts +2 -2
  176. package/src/TextureManager/service/TextureManagerInitializeSamplersService.js +2 -2
  177. package/src/TextureManager.d.ts +36 -5
  178. package/src/TextureManager.js +36 -24
  179. package/src/TexturePool/service/TexturePoolCleanupService.d.ts +4 -4
  180. package/src/TexturePool/service/TexturePoolCleanupService.js +6 -6
  181. package/src/TexturePool/service/TexturePoolReleaseService.d.ts +4 -4
  182. package/src/TexturePool/service/TexturePoolReleaseService.js +5 -5
  183. package/src/TexturePool/usecase/TexturePoolAcquireUseCase.d.ts +10 -10
  184. package/src/TexturePool/usecase/TexturePoolAcquireUseCase.js +19 -18
  185. package/src/TexturePool.d.ts +36 -35
  186. package/src/TexturePool.js +44 -65
  187. package/src/WebGPUUtil.d.ts +79 -34
  188. package/src/WebGPUUtil.js +79 -36
  189. package/src/interface/IAttachmentObject.d.ts +36 -0
  190. package/src/interface/IBlendMode.d.ts +7 -0
  191. package/src/interface/IBlendState.d.ts +8 -0
  192. package/src/interface/IBounds.d.ts +23 -0
  193. package/src/interface/IColorBufferObject.d.ts +28 -0
  194. package/src/interface/IComplexBlendItem.d.ts +48 -0
  195. package/src/interface/IFilterConfig.d.ts +28 -2
  196. package/src/interface/IGradientStop.d.ts +20 -0
  197. package/src/interface/ILocalFilterConfig.d.ts +32 -2
  198. package/src/interface/IMeshResult.d.ts +8 -0
  199. package/src/interface/IPoint.d.ts +12 -0
  200. package/src/interface/IPooledTexture.d.ts +24 -0
  201. package/src/interface/IQuadraticSegment.d.ts +8 -0
  202. package/src/interface/IStencilBufferObject.d.ts +28 -0
  203. package/src/interface/IStorageBufferConfig.d.ts +8 -1
  204. package/src/interface/ITextureObject.d.ts +28 -0
  205. package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.d.ts +0 -5
  206. package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.js +0 -42
  207. package/src/Blend/service/BlendAddService.d.ts +0 -1
  208. package/src/Blend/service/BlendAddService.js +0 -8
  209. package/src/Blend/service/BlendAlphaService.d.ts +0 -1
  210. package/src/Blend/service/BlendAlphaService.js +0 -8
  211. package/src/Blend/service/BlendEraseService.d.ts +0 -1
  212. package/src/Blend/service/BlendEraseService.js +0 -8
  213. package/src/Blend/service/BlendGetStateService.d.ts +0 -12
  214. package/src/Blend/service/BlendGetStateService.js +0 -13
  215. package/src/Blend/service/BlendOneZeroService.d.ts +0 -1
  216. package/src/Blend/service/BlendOneZeroService.js +0 -8
  217. package/src/Blend/service/BlendResetService.d.ts +0 -1
  218. package/src/Blend/service/BlendResetService.js +0 -8
  219. package/src/Blend/service/BlendScreenService.d.ts +0 -1
  220. package/src/Blend/service/BlendScreenService.js +0 -8
  221. package/src/Blend/service/BlendSetModeService.d.ts +0 -2
  222. package/src/Blend/service/BlendSetModeService.js +0 -4
  223. package/src/Blend/usecase/BlendOperationUseCase.d.ts +0 -11
  224. package/src/Blend/usecase/BlendOperationUseCase.js +0 -31
  225. package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.d.ts +0 -9
  226. package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.js +0 -15
  227. package/src/Compute/ComputePipelineManager.d.ts +0 -61
  228. package/src/Compute/ComputePipelineManager.js +0 -313
  229. package/src/Compute/service/ComputeExecuteBlurService.d.ts +0 -21
  230. package/src/Compute/service/ComputeExecuteBlurService.js +0 -81
  231. package/src/Filter/BevelFilterShader.d.ts +0 -2
  232. package/src/Filter/BevelFilterShader.js +0 -107
  233. package/src/Filter/BitmapFilterShader.d.ts +0 -2
  234. package/src/Filter/BitmapFilterShader.js +0 -207
  235. package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.d.ts +0 -40
  236. package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.js +0 -51
  237. package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.d.ts +0 -25
  238. package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.js +0 -180
  239. package/src/Filter/BlurFilterShader.d.ts +0 -5
  240. package/src/Filter/BlurFilterShader.js +0 -109
  241. package/src/Filter/ColorMatrixFilterShader.d.ts +0 -4
  242. package/src/Filter/ColorMatrixFilterShader.js +0 -51
  243. package/src/Filter/ConvolutionFilterShader.d.ts +0 -2
  244. package/src/Filter/ConvolutionFilterShader.js +0 -115
  245. package/src/Filter/DisplacementMapFilterShader.d.ts +0 -2
  246. package/src/Filter/DisplacementMapFilterShader.js +0 -114
  247. package/src/Filter/DropShadowFilterShader.d.ts +0 -4
  248. package/src/Filter/DropShadowFilterShader.js +0 -93
  249. package/src/Filter/GlowFilterShader.d.ts +0 -4
  250. package/src/Filter/GlowFilterShader.js +0 -66
  251. package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.d.ts +0 -11
  252. package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.js +0 -19
  253. package/src/Mask/usecase/MaskBindUseCase.d.ts +0 -10
  254. package/src/Mask/usecase/MaskBindUseCase.js +0 -20
  255. package/src/Mesh/service/MeshLerpService.d.ts +0 -13
  256. package/src/Mesh/service/MeshLerpService.js +0 -17
  257. package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.d.ts +0 -14
  258. package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.js +0 -28
  259. package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.d.ts +0 -18
  260. package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.js +0 -54
  261. package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.d.ts +0 -11
  262. package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.js +0 -35
  263. package/src/SamplerCache/service/SamplerCacheGenerateKeyService.d.ts +0 -13
  264. package/src/SamplerCache/service/SamplerCacheGenerateKeyService.js +0 -15
  265. package/src/SamplerCache/service/SamplerCacheGetOrCreateService.d.ts +0 -15
  266. package/src/SamplerCache/service/SamplerCacheGetOrCreateService.js +0 -30
  267. package/src/SamplerCache.d.ts +0 -18
  268. package/src/SamplerCache.js +0 -61
  269. package/src/Shader/BlendModeShader.d.ts +0 -51
  270. package/src/Shader/BlendModeShader.js +0 -71
  271. package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.d.ts +0 -12
  272. package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.js +0 -28
  273. package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.d.ts +0 -13
  274. package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.js +0 -61
  275. package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.d.ts +0 -19
  276. package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.js +0 -37
  277. package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.d.ts +0 -11
  278. package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.js +0 -24
  279. package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.d.ts +0 -14
  280. package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.js +0 -24
  281. package/src/Shader/wgsl/fragment/BlendFragment.d.ts +0 -8
  282. package/src/Shader/wgsl/fragment/BlendFragment.js +0 -63
  283. package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.d.ts +0 -13
  284. package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.js +0 -30
  285. package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.d.ts +0 -15
  286. package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.js +0 -26
  287. package/src/TexturePool/service/TexturePoolEvictOldestService.d.ts +0 -11
  288. package/src/TexturePool/service/TexturePoolEvictOldestService.js +0 -24
  289. package/src/interface/ICachedBindGroup.d.ts +0 -8
  290. package/src/interface/ICachedBindGroup.js +0 -1
  291. package/src/interface/IGradientLUTData.d.ts +0 -8
  292. package/src/interface/IGradientLUTData.js +0 -1
  293. package/src/interface/IPooledBuffer.d.ts +0 -8
  294. package/src/interface/IPooledBuffer.js +0 -1
  295. package/src/interface/IRectangleInfo.d.ts +0 -13
  296. package/src/interface/IRectangleInfo.js +0 -1
@@ -1,13 +1,21 @@
1
1
  import { ShaderSource } from "./ShaderSource";
2
2
  import { $samples } from "../WebGPUUtil";
3
- const VERTEX_BUFFER_LAYOUT_4F = {
3
+ /**
4
+ * @description 4フロートストライドの頂点バッファレイアウト(position: float32x2, uv: float32x2)
5
+ * Vertex buffer layout with 4-float stride (position: float32x2, uv: float32x2)
6
+ */
7
+ const $VERTEX_BUFFER_LAYOUT_4F = {
4
8
  "arrayStride": 4 * 4,
5
9
  "attributes": [
6
10
  { "shaderLocation": 0, "offset": 0, "format": "float32x2" },
7
11
  { "shaderLocation": 1, "offset": 2 * 4, "format": "float32x2" }
8
12
  ]
9
13
  };
10
- const BLEND_PREMULTIPLIED_ALPHA = {
14
+ /**
15
+ * @description プリマルチプライドアルファのブレンドステート
16
+ * Premultiplied alpha blend state for standard compositing
17
+ */
18
+ const $BLEND_PREMULTIPLIED_ALPHA = {
11
19
  "color": {
12
20
  "srcFactor": "one",
13
21
  "dstFactor": "one-minus-src-alpha",
@@ -19,56 +27,102 @@ const BLEND_PREMULTIPLIED_ALPHA = {
19
27
  "operation": "add"
20
28
  }
21
29
  };
30
+ /**
31
+ * @description WebGPUレンダーパイプラインの管理クラス。パイプラインとバインドグループレイアウトの生成・キャッシュを行う
32
+ * Manager class for WebGPU render pipelines. Creates, caches, and manages pipelines and bind group layouts
33
+ */
22
34
  export class PipelineManager {
35
+ /**
36
+ * @description PipelineManagerのコンストラクタ。GPUデバイスとフォーマットを設定し、パイプラインを初期化する
37
+ * Construct PipelineManager. Sets GPU device, format, and initializes pipelines
38
+ * @param {GPUDevice} device - GPUデバイス / GPU device instance
39
+ * @param {GPUTextureFormat} format - テクスチャフォーマット / Texture format for output
40
+ */
23
41
  constructor(device, format) {
42
+ /**
43
+ * @description GPUデバイスの参照
44
+ * Reference to the GPU device
45
+ */
24
46
  Object.defineProperty(this, "device", {
25
47
  enumerable: true,
26
48
  configurable: true,
27
49
  writable: true,
28
50
  value: void 0
29
51
  });
52
+ /**
53
+ * @description 出力テクスチャフォーマット
54
+ * Output texture format
55
+ */
30
56
  Object.defineProperty(this, "format", {
31
57
  enumerable: true,
32
58
  configurable: true,
33
59
  writable: true,
34
60
  value: void 0
35
61
  });
62
+ /**
63
+ * @description パイプライン名からGPURenderPipelineへのキャッシュマップ
64
+ * Cache map from pipeline name to GPURenderPipeline
65
+ */
36
66
  Object.defineProperty(this, "pipelines", {
37
67
  enumerable: true,
38
68
  configurable: true,
39
69
  writable: true,
40
70
  value: void 0
41
71
  });
72
+ /**
73
+ * @description バインドグループレイアウト名からGPUBindGroupLayoutへのキャッシュマップ
74
+ * Cache map from layout name to GPUBindGroupLayout
75
+ */
42
76
  Object.defineProperty(this, "bindGroupLayouts", {
43
77
  enumerable: true,
44
78
  configurable: true,
45
79
  writable: true,
46
80
  value: void 0
47
81
  });
82
+ /**
83
+ * @description MSAAサンプル数
84
+ * MSAA sample count
85
+ */
48
86
  Object.defineProperty(this, "sampleCount", {
49
87
  enumerable: true,
50
88
  configurable: true,
51
89
  writable: true,
52
90
  value: void 0
53
91
  });
92
+ /**
93
+ * @description シェーダーモジュールのキャッシュ
94
+ * Shader module cache by key
95
+ */
54
96
  Object.defineProperty(this, "shaderModuleCache", {
55
97
  enumerable: true,
56
98
  configurable: true,
57
99
  writable: true,
58
100
  value: new Map()
59
101
  });
102
+ /**
103
+ * @description フィルター用バインドグループレイアウトキャッシュ(テクスチャ数別)
104
+ * Filter bind group layout cache indexed by texture count
105
+ */
60
106
  Object.defineProperty(this, "filterBindGroupLayouts", {
61
107
  enumerable: true,
62
108
  configurable: true,
63
109
  writable: true,
64
110
  value: new Map()
65
111
  });
112
+ /**
113
+ * @description 初期化済みの遅延グループ名セット
114
+ * Set of initialized lazy group names
115
+ */
66
116
  Object.defineProperty(this, "lazyInitGroups", {
67
117
  enumerable: true,
68
118
  configurable: true,
69
119
  writable: true,
70
120
  value: new Set()
71
121
  });
122
+ /**
123
+ * @description パイプライン名から遅延初期化グループ名への読み取り専用マップ
124
+ * Read-only map from pipeline name to lazy initialization group name
125
+ */
72
126
  Object.defineProperty(this, "lazyGroupMap", {
73
127
  enumerable: true,
74
128
  configurable: true,
@@ -76,7 +130,7 @@ export class PipelineManager {
76
130
  value: new Map([
77
131
  ...Array.from({ "length": 16 }, (_, i) => [`blur_filter_${i + 1}`, "blur_filter"]),
78
132
  ["blur_filter", "blur_filter"],
79
- ["texture_copy", "texture_copy"], ["texture_copy_rgba8", "texture_copy"], ["color_transform", "texture_copy"], ["y_flip_color_transform", "texture_copy"],
133
+ ["texture_copy", "texture_copy"], ["texture_copy_rgba8", "texture_copy"], ["texture_copy_rgba8_msaa", "texture_copy"], ["color_transform", "texture_copy"], ["y_flip_color_transform", "texture_copy"],
80
134
  ["texture_erase", "texture_copy"], ["blur_texture_copy", "texture_copy"],
81
135
  ["filter_blend", "texture_copy"], ["texture_copy_bgra", "texture_copy"],
82
136
  ["filter_output", "texture_copy"], ["filter_output_add", "texture_copy"],
@@ -85,6 +139,7 @@ export class PipelineManager {
85
139
  ["filter_output_msaa", "texture_copy"], ["filter_output_add_msaa", "texture_copy"],
86
140
  ["filter_output_screen_msaa", "texture_copy"], ["filter_output_alpha_msaa", "texture_copy"],
87
141
  ["filter_output_erase_msaa", "texture_copy"],
142
+ ["filter_output_masked", "texture_copy"], ["filter_output_masked_msaa", "texture_copy"],
88
143
  ["positioned_texture", "texture_copy"], ["positioned_texture_rgba", "texture_copy"],
89
144
  ["bitmap_render_msaa", "texture_copy"], ["bitmap_render", "texture_copy"],
90
145
  ["texture_scale", "texture_copy"], ["texture_scale_blend", "texture_copy"],
@@ -101,24 +156,40 @@ export class PipelineManager {
101
156
  ["filter_complex_blend_output_msaa", "complex_blend"]
102
157
  ])
103
158
  });
159
+ /**
160
+ * @description グラデーション用パイプラインレイアウト
161
+ * Pipeline layout for gradient pipelines
162
+ */
104
163
  Object.defineProperty(this, "gradientPipelineLayout", {
105
164
  enumerable: true,
106
165
  configurable: true,
107
166
  writable: true,
108
167
  value: null
109
168
  });
169
+ /**
170
+ * @description グラデーション用頂点シェーダーモジュール
171
+ * Vertex shader module for gradient pipelines
172
+ */
110
173
  Object.defineProperty(this, "gradientVertexShaderModule", {
111
174
  enumerable: true,
112
175
  configurable: true,
113
176
  writable: true,
114
177
  value: null
115
178
  });
179
+ /**
180
+ * @description グラデーション用フラグメントシェーダーモジュール
181
+ * Fragment shader module for gradient pipelines
182
+ */
116
183
  Object.defineProperty(this, "gradientFragmentShaderModule", {
117
184
  enumerable: true,
118
185
  configurable: true,
119
186
  writable: true,
120
187
  value: null
121
188
  });
189
+ /**
190
+ * @description グラデーション用ステンシルフラグメントシェーダーモジュール
191
+ * Stencil fragment shader module for gradient pipelines
192
+ */
122
193
  Object.defineProperty(this, "gradientStencilFragmentShaderModule", {
123
194
  enumerable: true,
124
195
  configurable: true,
@@ -132,6 +203,13 @@ export class PipelineManager {
132
203
  this.sampleCount = $samples;
133
204
  this.initialize();
134
205
  }
206
+ /**
207
+ * @description シェーダーモジュールをキャッシュから取得、または新規作成する
208
+ * Get a shader module from cache, or create and cache a new one
209
+ * @param {string} key - キャッシュキー / Cache key
210
+ * @param {string} code - WGSLシェーダーコード / WGSL shader source code
211
+ * @return {GPUShaderModule} シェーダーモジュール / The shader module
212
+ */
135
213
  getOrCreateShaderModule(key, code) {
136
214
  let module = this.shaderModuleCache.get(key);
137
215
  if (!module) {
@@ -140,6 +218,10 @@ export class PipelineManager {
140
218
  }
141
219
  return module;
142
220
  }
221
+ /**
222
+ * @description 初期パイプライン群を一括作成する
223
+ * Create all initial render pipelines
224
+ */
143
225
  initialize() {
144
226
  this.createFillPipeline();
145
227
  this.createStencilFillPipelines();
@@ -154,6 +236,11 @@ export class PipelineManager {
154
236
  this.createBlendPipeline();
155
237
  this.createNodeClearPipeline();
156
238
  }
239
+ /**
240
+ * @description 指定された名前に対応する遅延初期化グループをまだ初期化されていなければ初期化する
241
+ * Ensure the lazy initialization group for the given name is initialized
242
+ * @param {string} name - パイプライン名 / Pipeline name to look up its lazy group
243
+ */
157
244
  ensureLazyGroup(name) {
158
245
  const group = this.lazyGroupMap.get(name);
159
246
  if (!group || this.lazyInitGroups.has(group)) {
@@ -178,12 +265,20 @@ export class PipelineManager {
178
265
  break;
179
266
  }
180
267
  }
268
+ /**
269
+ * @description すべての遅延初期化グループを事前にロードする
270
+ * Preload all lazy initialization groups eagerly
271
+ */
181
272
  preloadLazyGroups() {
182
273
  const groups = ["blur_filter", "texture_copy", "bitmap_sync", "filter", "complex_blend"];
183
274
  for (const group of groups) {
184
275
  this.ensureLazyGroup(group);
185
276
  }
186
277
  }
278
+ /**
279
+ * @description 塗りつぶし描画用パイプラインを作成する(RGBA/BGRA/ステンシル対応)
280
+ * Create fill render pipelines (RGBA, BGRA, and stencil variants)
281
+ */
187
282
  createFillPipeline() {
188
283
  // Dynamic Offset対応のBindGroupLayout(fill + stencil共有)
189
284
  const dynamicBindGroupLayout = this.device.createBindGroupLayout({
@@ -201,8 +296,8 @@ export class PipelineManager {
201
296
  });
202
297
  const vertexShaderModule = this.getOrCreateShaderModule("fillVertex", ShaderSource.getFillVertexShader());
203
298
  const fragmentShaderModule = this.getOrCreateShaderModule("fillFragment", ShaderSource.getFillFragmentShader());
204
- const vertexBufferLayout = VERTEX_BUFFER_LAYOUT_4F;
205
- const blendState = BLEND_PREMULTIPLIED_ALPHA;
299
+ const vertexBufferLayout = $VERTEX_BUFFER_LAYOUT_4F;
300
+ const blendState = $BLEND_PREMULTIPLIED_ALPHA;
206
301
  const pipelineRGBA = this.device.createRenderPipeline({
207
302
  "layout": pipelineLayout,
208
303
  "vertex": {
@@ -315,8 +410,12 @@ export class PipelineManager {
315
410
  });
316
411
  this.pipelines.set("fill_bgra_stencil", pipelineBGRAStencil);
317
412
  }
413
+ /**
414
+ * @description ステンシル塗りつぶし用パイプラインを作成する(書き込み・塗りつぶし・アトラス・メイン・マスク対応)
415
+ * Create stencil fill pipelines (write, fill, atlas, main, and masked variants)
416
+ */
318
417
  createStencilFillPipelines() {
319
- const vertexBufferLayout = VERTEX_BUFFER_LAYOUT_4F;
418
+ const vertexBufferLayout = $VERTEX_BUFFER_LAYOUT_4F;
320
419
  // fill_dynamicレイアウトを共有(hasDynamicOffset: true)
321
420
  const dynamicLayout = this.bindGroupLayouts.get("fill_dynamic");
322
421
  const stencilPipelineLayout = this.device.createPipelineLayout({
@@ -662,8 +761,12 @@ export class PipelineManager {
662
761
  });
663
762
  this.pipelines.set("stencil_fill_masked", stencilFillMaskedPipeline);
664
763
  }
764
+ /**
765
+ * @description クリッピング用パイプラインを作成する(レベル別の書き込み・クリア)
766
+ * Create clip pipelines (level-based write and clear variants)
767
+ */
665
768
  createClipPipeline() {
666
- const vertexBufferLayout = VERTEX_BUFFER_LAYOUT_4F;
769
+ const vertexBufferLayout = $VERTEX_BUFFER_LAYOUT_4F;
667
770
  const dynamicLayout = this.bindGroupLayouts.get("fill_dynamic");
668
771
  const clipPipelineLayout = this.device.createPipelineLayout({
669
772
  "bindGroupLayouts": [dynamicLayout]
@@ -804,8 +907,12 @@ export class PipelineManager {
804
907
  this.pipelines.set(`clip_clear_main_${level}`, clipClearMainPipeline);
805
908
  }
806
909
  }
910
+ /**
911
+ * @description マスク合成用パイプラインを作成する(レベル別のマージ・クリア)
912
+ * Create mask union pipelines (level-based merge and clear variants)
913
+ */
807
914
  createMaskUnionPipelines() {
808
- const vertexBufferLayout = VERTEX_BUFFER_LAYOUT_4F;
915
+ const vertexBufferLayout = $VERTEX_BUFFER_LAYOUT_4F;
809
916
  const dynamicLayout = this.bindGroupLayouts.get("fill_dynamic");
810
917
  const maskUnionPipelineLayout = this.device.createPipelineLayout({
811
918
  "bindGroupLayouts": [dynamicLayout]
@@ -895,6 +1002,10 @@ export class PipelineManager {
895
1002
  this.pipelines.set(`mask_union_clear_${level}`, clearPipeline);
896
1003
  }
897
1004
  }
1005
+ /**
1006
+ * @description マスク描画用パイプラインを作成する
1007
+ * Create mask render pipeline
1008
+ */
898
1009
  createMaskPipeline() {
899
1010
  const bindGroupLayout = this.device.createBindGroupLayout({
900
1011
  "entries": [
@@ -958,6 +1069,10 @@ export class PipelineManager {
958
1069
  });
959
1070
  this.pipelines.set("mask", pipeline);
960
1071
  }
1072
+ /**
1073
+ * @description 基本描画パイプラインを作成する(RGBA/BGRA)
1074
+ * Create basic render pipelines (RGBA and BGRA variants)
1075
+ */
961
1076
  createBasicPipeline() {
962
1077
  const bindGroupLayout = this.device.createBindGroupLayout({
963
1078
  "entries": [{
@@ -987,7 +1102,7 @@ export class PipelineManager {
987
1102
  }
988
1103
  ]
989
1104
  };
990
- const blendState = BLEND_PREMULTIPLIED_ALPHA;
1105
+ const blendState = $BLEND_PREMULTIPLIED_ALPHA;
991
1106
  const pipelineRGBA = this.device.createRenderPipeline({
992
1107
  "layout": pipelineLayout,
993
1108
  "vertex": {
@@ -1035,6 +1150,10 @@ export class PipelineManager {
1035
1150
  this.pipelines.set("basic", pipelineRGBA);
1036
1151
  this.pipelines.set("basic_bgra", pipelineBGRA);
1037
1152
  }
1153
+ /**
1154
+ * @description テクスチャ描画用パイプラインを作成する
1155
+ * Create texture render pipeline
1156
+ */
1038
1157
  createTexturePipeline() {
1039
1158
  const bindGroupLayout = this.device.createBindGroupLayout({
1040
1159
  "entries": [
@@ -1108,6 +1227,10 @@ export class PipelineManager {
1108
1227
  });
1109
1228
  this.pipelines.set("texture", pipeline);
1110
1229
  }
1230
+ /**
1231
+ * @description インスタンス描画用パイプラインを作成する(ブレンドバリアント・マスク対応)
1232
+ * Create instanced render pipelines (blend variants and masked)
1233
+ */
1111
1234
  createInstancedPipeline() {
1112
1235
  const bindGroupLayout = this.device.createBindGroupLayout({
1113
1236
  "entries": [
@@ -1276,18 +1399,7 @@ export class PipelineManager {
1276
1399
  "entryPoint": "main",
1277
1400
  "targets": [{
1278
1401
  "format": this.format,
1279
- "blend": {
1280
- "color": {
1281
- "srcFactor": "one",
1282
- "dstFactor": "one-minus-src-alpha",
1283
- "operation": "add"
1284
- },
1285
- "alpha": {
1286
- "srcFactor": "one",
1287
- "dstFactor": "one-minus-src-alpha",
1288
- "operation": "add"
1289
- }
1290
- }
1402
+ "blend": $BLEND_PREMULTIPLIED_ALPHA
1291
1403
  }]
1292
1404
  },
1293
1405
  "primitive": {
@@ -1317,6 +1429,10 @@ export class PipelineManager {
1317
1429
  });
1318
1430
  this.pipelines.set("instanced_masked", maskedPipeline);
1319
1431
  }
1432
+ /**
1433
+ * @description グラデーション塗りつぶし用パイプラインを作成する(RGBA/BGRA/ステンシル対応)
1434
+ * Create gradient fill pipelines (RGBA, BGRA, stencil, and stroke variants)
1435
+ */
1320
1436
  createGradientPipeline() {
1321
1437
  const bindGroupLayout = this.device.createBindGroupLayout({
1322
1438
  "entries": [
@@ -1348,8 +1464,8 @@ export class PipelineManager {
1348
1464
  this.gradientFragmentShaderModule = fragmentShaderModule;
1349
1465
  const stencilFragmentShaderModule = this.getOrCreateShaderModule("gradientFillStencilFragment", ShaderSource.getGradientFillStencilFragmentShader());
1350
1466
  this.gradientStencilFragmentShaderModule = stencilFragmentShaderModule;
1351
- const vertexBufferLayout = VERTEX_BUFFER_LAYOUT_4F;
1352
- const blendState = BLEND_PREMULTIPLIED_ALPHA;
1467
+ const vertexBufferLayout = $VERTEX_BUFFER_LAYOUT_4F;
1468
+ const blendState = $BLEND_PREMULTIPLIED_ALPHA;
1353
1469
  const pipelineRGBA = this.device.createRenderPipeline({
1354
1470
  "label": "gradient_fill_no_stencil_pipeline",
1355
1471
  "layout": pipelineLayout,
@@ -1663,6 +1779,10 @@ export class PipelineManager {
1663
1779
  });
1664
1780
  this.pipelines.set("gradient_fill_bgra_stencil", pipelineBGRAStencil);
1665
1781
  }
1782
+ /**
1783
+ * @description ビットマップ塗りつぶし用パイプラインを作成する(RGBA/BGRA/ステンシル・ストローク対応)
1784
+ * Create bitmap fill pipelines (RGBA, BGRA, stencil, and stroke variants)
1785
+ */
1666
1786
  createBitmapFillPipeline() {
1667
1787
  const bindGroupLayout = this.device.createBindGroupLayout({
1668
1788
  "entries": [
@@ -1689,8 +1809,8 @@ export class PipelineManager {
1689
1809
  });
1690
1810
  const vertexShaderModule = this.getOrCreateShaderModule("bitmapFillVertex", ShaderSource.getBitmapFillVertexShader());
1691
1811
  const fragmentShaderModule = this.getOrCreateShaderModule("bitmapFillFragment", ShaderSource.getBitmapFillFragmentShader());
1692
- const vertexBufferLayout = VERTEX_BUFFER_LAYOUT_4F;
1693
- const blendState = BLEND_PREMULTIPLIED_ALPHA;
1812
+ const vertexBufferLayout = $VERTEX_BUFFER_LAYOUT_4F;
1813
+ const blendState = $BLEND_PREMULTIPLIED_ALPHA;
1694
1814
  const pipelineRGBA = this.device.createRenderPipeline({
1695
1815
  "layout": pipelineLayout,
1696
1816
  "vertex": {
@@ -1888,6 +2008,10 @@ export class PipelineManager {
1888
2008
  });
1889
2009
  this.pipelines.set("bitmap_fill_bgra_stencil", pipelineBGRAStencil);
1890
2010
  }
2011
+ /**
2012
+ * @description ブレンド描画用パイプラインを作成する(デュアルテクスチャブレンド)
2013
+ * Create blend render pipeline for dual-texture blending
2014
+ */
1891
2015
  createBlendPipeline() {
1892
2016
  const bindGroupLayout = this.device.createBindGroupLayout({
1893
2017
  "entries": [
@@ -1976,6 +2100,10 @@ export class PipelineManager {
1976
2100
  });
1977
2101
  this.pipelines.set("blend", pipeline);
1978
2102
  }
2103
+ /**
2104
+ * @description ブラーフィルター用パイプラインを作成する(halfBlur 1〜16のバリアント)
2105
+ * Create blur filter pipelines (halfBlur 1-16 variants)
2106
+ */
1979
2107
  createBlurFilterPipeline() {
1980
2108
  const bindGroupLayout = this.device.createBindGroupLayout({
1981
2109
  "entries": [
@@ -2037,6 +2165,10 @@ export class PipelineManager {
2037
2165
  this.pipelines.set(`blur_filter_${halfBlur}`, pipeline);
2038
2166
  }
2039
2167
  }
2168
+ /**
2169
+ * @description テクスチャコピー用パイプラインを作成する(各種ブレンド・フィルター出力・MSAA対応)
2170
+ * Create texture copy pipelines (various blend modes, filter output, MSAA variants)
2171
+ */
2040
2172
  createTextureCopyPipeline() {
2041
2173
  const bindGroupLayout = this.device.createBindGroupLayout({
2042
2174
  "entries": [
@@ -2077,6 +2209,10 @@ export class PipelineManager {
2077
2209
  };
2078
2210
  this.pipelines.set("texture_copy", this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, fragmentShaderModule, this.format, BLEND_REPLACE));
2079
2211
  this.pipelines.set("texture_copy_rgba8", this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, fragmentShaderModule, "rgba8unorm", BLEND_REPLACE));
2212
+ if (this.sampleCount > 1) {
2213
+ const copyBlendRgba8 = { "color": { "srcFactor": "one", "dstFactor": "zero", "operation": "add" }, "alpha": { "srcFactor": "one", "dstFactor": "zero", "operation": "add" } };
2214
+ this.pipelines.set("texture_copy_rgba8_msaa", this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, fragmentShaderModule, "rgba8unorm", copyBlendRgba8, this.sampleCount));
2215
+ }
2080
2216
  const colorTransformFragmentModule = this.getOrCreateShaderModule("colorTransformFragment", ShaderSource.getColorTransformFragmentShader());
2081
2217
  this.pipelines.set("color_transform", this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, colorTransformFragmentModule, "rgba8unorm", BLEND_REPLACE));
2082
2218
  const yFlipCTFragmentModule = this.getOrCreateShaderModule("yFlipColorTransformFragment", ShaderSource.getYFlipColorTransformFragmentShader());
@@ -2097,6 +2233,29 @@ export class PipelineManager {
2097
2233
  for (const [name, blend] of filterOutputBlendVariants) {
2098
2234
  this.pipelines.set(name, this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, filterOutputShaderModule, this.format, blend));
2099
2235
  }
2236
+ // マスク付きフィルター出力パイプライン(ステンシルテスト付き)
2237
+ const filterMaskedStencil = {
2238
+ "format": "stencil8",
2239
+ "stencilFront": {
2240
+ "compare": "equal",
2241
+ "failOp": "keep",
2242
+ "depthFailOp": "keep",
2243
+ "passOp": "keep"
2244
+ },
2245
+ "stencilBack": {
2246
+ "compare": "equal",
2247
+ "failOp": "keep",
2248
+ "depthFailOp": "keep",
2249
+ "passOp": "keep"
2250
+ },
2251
+ "stencilReadMask": 0xFF,
2252
+ "stencilWriteMask": 0x00
2253
+ };
2254
+ this.pipelines.set("filter_output_masked", this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, filterOutputShaderModule, this.format, BLEND_ALPHA, undefined, filterMaskedStencil));
2255
+ if (this.sampleCount > 1) {
2256
+ const normalBlendForMask = { "color": { "srcFactor": "one", "dstFactor": "one-minus-src-alpha", "operation": "add" }, "alpha": { "srcFactor": "one", "dstFactor": "one-minus-src-alpha", "operation": "add" } };
2257
+ this.pipelines.set("filter_output_masked_msaa", this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, filterOutputShaderModule, this.format, normalBlendForMask, this.sampleCount, filterMaskedStencil));
2258
+ }
2100
2259
  if (this.sampleCount > 1) {
2101
2260
  const copyBlend = { "color": { "srcFactor": "one", "dstFactor": "zero", "operation": "add" }, "alpha": { "srcFactor": "one", "dstFactor": "zero", "operation": "add" } };
2102
2261
  this.pipelines.set("texture_copy_bgra_msaa", this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, fragmentShaderModule, this.format, copyBlend, this.sampleCount));
@@ -2109,6 +2268,10 @@ export class PipelineManager {
2109
2268
  this.createPositionedTexturePipeline();
2110
2269
  this.createTextureScalePipeline();
2111
2270
  }
2271
+ /**
2272
+ * @description 位置指定テクスチャ描画用パイプラインを作成する(RGBA/ビットマップレンダー対応)
2273
+ * Create positioned texture pipelines (RGBA, bitmap render, MSAA variants)
2274
+ */
2112
2275
  createPositionedTexturePipeline() {
2113
2276
  const bindGroupLayout = this.device.createBindGroupLayout({
2114
2277
  "entries": [
@@ -2297,6 +2460,10 @@ export class PipelineManager {
2297
2460
  });
2298
2461
  this.pipelines.set("bitmap_render", pipelineNonMsaa);
2299
2462
  }
2463
+ /**
2464
+ * @description テクスチャスケーリング用パイプラインを作成する
2465
+ * Create texture scale pipelines
2466
+ */
2300
2467
  createTextureScalePipeline() {
2301
2468
  const bindGroupLayout = this.device.createBindGroupLayout({
2302
2469
  "entries": [
@@ -2389,6 +2556,10 @@ export class PipelineManager {
2389
2556
  });
2390
2557
  this.pipelines.set("texture_scale_blend", blendPipeline);
2391
2558
  }
2559
+ /**
2560
+ * @description ビットマップ同期描画用パイプラインを作成する(MSAA 4x)
2561
+ * Create bitmap sync render pipeline (MSAA 4x)
2562
+ */
2392
2563
  createBitmapSyncPipeline() {
2393
2564
  const bindGroupLayout = this.device.createBindGroupLayout({
2394
2565
  "entries": [
@@ -2451,6 +2622,10 @@ export class PipelineManager {
2451
2622
  });
2452
2623
  this.pipelines.set("bitmap_sync", pipeline);
2453
2624
  }
2625
+ /**
2626
+ * @description カラーマトリクスフィルター・ベベル・グロー・ドロップシャドウ等のフィルターパイプラインを作成する
2627
+ * Create filter pipelines (color matrix, bevel, glow, drop shadow, gradient glow/bevel)
2628
+ */
2454
2629
  createColorMatrixFilterPipeline() {
2455
2630
  const BLEND_REPLACE = {
2456
2631
  "color": { "srcFactor": "one", "dstFactor": "zero", "operation": "add" },
@@ -2468,6 +2643,10 @@ export class PipelineManager {
2468
2643
  this.createFilterPipelineWithLayout("gradient_glow_filter", ShaderSource.getGradientGlowFilterFragmentShader(), 3, BLEND_ALPHA);
2469
2644
  this.createFilterPipelineWithLayout("gradient_bevel_filter", ShaderSource.getGradientBevelFilterFragmentShader(), 3, BLEND_ALPHA);
2470
2645
  }
2646
+ /**
2647
+ * @description 複合ブレンド用パイプラインを作成する
2648
+ * Create complex blend pipelines
2649
+ */
2471
2650
  createComplexBlendPipelines() {
2472
2651
  const bindGroupLayout = this.device.createBindGroupLayout({
2473
2652
  "entries": [
@@ -2534,6 +2713,10 @@ export class PipelineManager {
2534
2713
  this.createComplexBlendCopyPipeline();
2535
2714
  this.createComplexBlendOutputPipeline();
2536
2715
  }
2716
+ /**
2717
+ * @description 複合ブレンドのコピー・スケール用パイプラインを作成する
2718
+ * Create complex blend copy and scale pipelines
2719
+ */
2537
2720
  createComplexBlendCopyPipeline() {
2538
2721
  const BLEND_REPLACE = {
2539
2722
  "color": { "srcFactor": "one", "dstFactor": "zero", "operation": "add" },
@@ -2554,6 +2737,10 @@ export class PipelineManager {
2554
2737
  this.pipelines.set("complex_blend_scale", this.createFullscreenQuadPipeline(scalePipelineLayout, scaleVS, scaleFS, "rgba8unorm", BLEND_REPLACE));
2555
2738
  }
2556
2739
  }
2740
+ /**
2741
+ * @description 複合ブレンドの出力用パイプラインを作成する(MSAA対応含む)
2742
+ * Create complex blend output pipelines (including MSAA variants)
2743
+ */
2557
2744
  createComplexBlendOutputPipeline() {
2558
2745
  const bindGroupLayout = this.bindGroupLayouts.get("positioned_texture");
2559
2746
  if (!bindGroupLayout) {
@@ -2576,35 +2763,55 @@ export class PipelineManager {
2576
2763
  this.pipelines.set("filter_complex_blend_output_msaa", this.createFullscreenQuadPipeline(pipelineLayout, filterBlendOutputVS, fragmentShaderModule, this.format, blend, this.sampleCount));
2577
2764
  }
2578
2765
  }
2579
- createFilterPipelineWithLayout(name, fragmentShaderCode, textureCount, blend) {
2580
- let bindGroupLayout = this.filterBindGroupLayouts.get(textureCount);
2766
+ /**
2767
+ * @description 指定されたフラグメントシェーダーとテクスチャ数でフィルターパイプラインを作成する
2768
+ * Create a filter pipeline with the specified fragment shader and texture count
2769
+ * @param {string} name - パイプライン名 / Pipeline name
2770
+ * @param {string} fragment_shader_code - フラグメントシェーダーコード / Fragment shader WGSL source code
2771
+ * @param {number} texture_count - テクスチャバインディング数 / Number of texture bindings
2772
+ * @param {GPUBlendState} blend - ブレンドステート / Blend state configuration
2773
+ */
2774
+ createFilterPipelineWithLayout(name, fragment_shader_code, texture_count, blend) {
2775
+ let bindGroupLayout = this.filterBindGroupLayouts.get(texture_count);
2581
2776
  if (!bindGroupLayout) {
2582
2777
  const entries = [
2583
2778
  { "binding": 0, "visibility": GPUShaderStage.FRAGMENT, "buffer": { "type": "uniform" } },
2584
2779
  { "binding": 1, "visibility": GPUShaderStage.FRAGMENT, "sampler": {} }
2585
2780
  ];
2586
- for (let i = 0; i < textureCount; i++) {
2781
+ for (let i = 0; i < texture_count; i++) {
2587
2782
  entries.push({ "binding": 2 + i, "visibility": GPUShaderStage.FRAGMENT, "texture": {} });
2588
2783
  }
2589
2784
  bindGroupLayout = this.device.createBindGroupLayout({ "entries": entries });
2590
- this.filterBindGroupLayouts.set(textureCount, bindGroupLayout);
2785
+ this.filterBindGroupLayouts.set(texture_count, bindGroupLayout);
2591
2786
  }
2592
2787
  this.bindGroupLayouts.set(name, bindGroupLayout);
2593
2788
  const pipelineLayout = this.device.createPipelineLayout({ "bindGroupLayouts": [bindGroupLayout] });
2594
2789
  const vertexShaderModule = this.getOrCreateShaderModule("blurFilterVertex", ShaderSource.getBlurFilterVertexShader());
2595
- const fragmentShaderModule = this.getOrCreateShaderModule(`filter_${name}`, fragmentShaderCode);
2790
+ const fragmentShaderModule = this.getOrCreateShaderModule(`filter_${name}`, fragment_shader_code);
2596
2791
  this.pipelines.set(name, this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, fragmentShaderModule, "rgba8unorm", blend));
2597
2792
  }
2598
- createFullscreenQuadPipeline(pipelineLayout, vertexModule, fragmentModule, format, blend, multisampleCount, depthStencil) {
2793
+ /**
2794
+ * @description フルスクリーンクアッド描画用の汎用パイプラインを作成する
2795
+ * Create a generic fullscreen quad render pipeline
2796
+ * @param {GPUPipelineLayout} pipeline_layout - パイプラインレイアウト / Pipeline layout
2797
+ * @param {GPUShaderModule} vertex_module - 頂点シェーダーモジュール / Vertex shader module
2798
+ * @param {GPUShaderModule} fragment_module - フラグメントシェーダーモジュール / Fragment shader module
2799
+ * @param {GPUTextureFormat} format - テクスチャフォーマット / Target texture format
2800
+ * @param {GPUBlendState} blend - ブレンドステート / Blend state configuration
2801
+ * @param {number} multisample_count - MSAAサンプル数(任意) / Optional MSAA sample count
2802
+ * @param {GPUDepthStencilState} depth_stencil - 深度ステンシルステート(任意) / Optional depth-stencil state
2803
+ * @return {GPURenderPipeline} レンダーパイプライン / The created render pipeline
2804
+ */
2805
+ createFullscreenQuadPipeline(pipeline_layout, vertex_module, fragment_module, format, blend, multisample_count, depth_stencil) {
2599
2806
  const descriptor = {
2600
- "layout": pipelineLayout,
2807
+ "layout": pipeline_layout,
2601
2808
  "vertex": {
2602
- "module": vertexModule,
2809
+ "module": vertex_module,
2603
2810
  "entryPoint": "main",
2604
2811
  "buffers": []
2605
2812
  },
2606
2813
  "fragment": {
2607
- "module": fragmentModule,
2814
+ "module": fragment_module,
2608
2815
  "entryPoint": "main",
2609
2816
  "targets": [{ "format": format, "blend": blend }]
2610
2817
  },
@@ -2613,14 +2820,20 @@ export class PipelineManager {
2613
2820
  "cullMode": "none"
2614
2821
  }
2615
2822
  };
2616
- if (multisampleCount && multisampleCount > 1) {
2617
- descriptor.multisample = { "count": multisampleCount };
2823
+ if (multisample_count && multisample_count > 1) {
2824
+ descriptor.multisample = { "count": multisample_count };
2618
2825
  }
2619
- if (depthStencil) {
2620
- descriptor.depthStencil = depthStencil;
2826
+ if (depth_stencil) {
2827
+ descriptor.depthStencil = depth_stencil;
2621
2828
  }
2622
2829
  return this.device.createRenderPipeline(descriptor);
2623
2830
  }
2831
+ /**
2832
+ * @description 名前からレンダーパイプラインを取得する(遅延初期化を含む)
2833
+ * Get a render pipeline by name, initializing lazy groups if needed
2834
+ * @param {string} name - パイプライン名 / Pipeline name
2835
+ * @return {GPURenderPipeline | undefined} パイプラインまたはundefined / The pipeline or undefined
2836
+ */
2624
2837
  getPipeline(name) {
2625
2838
  let pipeline = this.pipelines.get(name);
2626
2839
  if (!pipeline) {
@@ -2630,25 +2843,28 @@ export class PipelineManager {
2630
2843
  return pipeline;
2631
2844
  }
2632
2845
  /**
2633
- * @description フィルターパイプラインのoverride定数バリアントを取得
2634
- * GPU warp divergenceを排除するコンパイル時分岐特殊化
2846
+ * @description フィルターパイプラインのoverride定数バリアントを取得する。GPU warp divergenceを排除するコンパイル時分岐特殊化
2847
+ * Get a filter pipeline variant with override constants. Compile-time branch specialization to eliminate GPU warp divergence
2848
+ * @param {string} base_name - ベースパイプライン名 / Base pipeline name
2849
+ * @param {Record<string, number>} constants - オーバーライド定数 / Override constant values
2850
+ * @return {GPURenderPipeline | undefined} パイプラインまたはundefined / The pipeline or undefined
2635
2851
  */
2636
- getFilterPipeline(baseName, constants) {
2852
+ getFilterPipeline(base_name, constants) {
2637
2853
  // キャッシュキーを生成
2638
2854
  const keys = Object.keys(constants).sort();
2639
2855
  const suffix = keys.map((k) => `${k}${constants[k]}`).join("_");
2640
- const cacheKey = `${baseName}_${suffix}`;
2856
+ const cacheKey = `${base_name}_${suffix}`;
2641
2857
  let pipeline = this.pipelines.get(cacheKey);
2642
2858
  if (pipeline) {
2643
2859
  return pipeline;
2644
2860
  }
2645
2861
  // ベースグループのロードを確保
2646
- this.ensureLazyGroup(baseName);
2647
- const fragmentModule = this.shaderModuleCache.get(`filter_${baseName}`);
2862
+ this.ensureLazyGroup(base_name);
2863
+ const fragmentModule = this.shaderModuleCache.get(`filter_${base_name}`);
2648
2864
  const vertexModule = this.shaderModuleCache.get("blurFilterVertex");
2649
- const bindGroupLayout = this.bindGroupLayouts.get(baseName);
2865
+ const bindGroupLayout = this.bindGroupLayouts.get(base_name);
2650
2866
  if (!fragmentModule || !vertexModule || !bindGroupLayout) {
2651
- return this.pipelines.get(baseName);
2867
+ return this.pipelines.get(base_name);
2652
2868
  }
2653
2869
  const pipelineLayout = this.device.createPipelineLayout({
2654
2870
  "bindGroupLayouts": [bindGroupLayout]
@@ -2681,50 +2897,62 @@ export class PipelineManager {
2681
2897
  return pipeline;
2682
2898
  }
2683
2899
  /**
2684
- * @description グラデーションタイプとスプレッドモードに応じた特殊化パイプラインを取得
2685
- * override定数でGPU warp divergenceを排除
2900
+ * @description グラデーションタイプとスプレッドモードに応じた特殊化パイプラインを取得する。override定数でGPU warp divergenceを排除
2901
+ * Get a gradient pipeline specialized by gradient type and spread mode. Uses override constants to eliminate GPU warp divergence
2902
+ * @param {string} base_name - ベースパイプライン名 / Base pipeline name
2903
+ * @param {number} gradient_type - グラデーションタイプ / Gradient type identifier
2904
+ * @param {number} spread_mode - スプレッドモード / Spread mode identifier
2905
+ * @return {GPURenderPipeline | undefined} パイプラインまたはundefined / The pipeline or undefined
2686
2906
  */
2687
- getGradientPipeline(baseName, gradientType, spreadMode) {
2688
- const key = `${baseName}_t${gradientType}s${spreadMode}`;
2907
+ getGradientPipeline(base_name, gradient_type, spread_mode) {
2908
+ const key = `${base_name}_t${gradient_type}s${spread_mode}`;
2689
2909
  let pipeline = this.pipelines.get(key);
2690
2910
  if (pipeline) {
2691
2911
  return pipeline;
2692
2912
  }
2693
2913
  if (!this.gradientPipelineLayout) {
2694
- return this.getPipeline(baseName);
2914
+ return this.getPipeline(base_name);
2695
2915
  }
2696
2916
  // ベースパイプラインと同じ構成でoverride定数を変えて作成
2697
- pipeline = this.createGradientVariant(baseName, gradientType, spreadMode);
2917
+ pipeline = this.createGradientVariant(base_name, gradient_type, spread_mode);
2698
2918
  if (pipeline) {
2699
2919
  this.pipelines.set(key, pipeline);
2700
2920
  return pipeline;
2701
2921
  }
2702
2922
  // フォールバック: デフォルト定数のベースパイプラインを使用
2703
- return this.getPipeline(baseName);
2923
+ return this.getPipeline(base_name);
2704
2924
  }
2705
- createGradientVariant(baseName, gradientType, spreadMode) {
2925
+ /**
2926
+ * @description グラデーションバリアントパイプラインを作成する(override定数による特殊化)
2927
+ * Create a gradient variant pipeline with override constants for specialization
2928
+ * @param {string} base_name - ベースパイプライン名 / Base pipeline name
2929
+ * @param {number} gradient_type - グラデーションタイプ / Gradient type identifier
2930
+ * @param {number} spread_mode - スプレッドモード / Spread mode identifier
2931
+ * @return {GPURenderPipeline | undefined} パイプラインまたはundefined / The pipeline or undefined
2932
+ */
2933
+ createGradientVariant(base_name, gradient_type, spread_mode) {
2706
2934
  if (!this.gradientPipelineLayout) {
2707
2935
  return undefined;
2708
2936
  }
2709
2937
  const constants = {
2710
- "GRADIENT_TYPE": gradientType,
2711
- "SPREAD_MODE": spreadMode
2938
+ "GRADIENT_TYPE": gradient_type,
2939
+ "SPREAD_MODE": spread_mode
2712
2940
  };
2713
- const vertexBufferLayout = VERTEX_BUFFER_LAYOUT_4F;
2714
- const blendState = BLEND_PREMULTIPLIED_ALPHA;
2941
+ const vertexBufferLayout = $VERTEX_BUFFER_LAYOUT_4F;
2942
+ const blendState = $BLEND_PREMULTIPLIED_ALPHA;
2715
2943
  // ベース名からパイプライン構成を決定
2716
- const isStencilFragment = baseName.includes("stencil_atlas") || baseName === "gradient_fill_stencil_main";
2944
+ const isStencilFragment = base_name.includes("stencil_atlas") || base_name === "gradient_fill_stencil_main";
2717
2945
  const fragModule = isStencilFragment ? this.gradientStencilFragmentShaderModule : this.gradientFragmentShaderModule;
2718
- const isBGRA = baseName.includes("bgra") || baseName === "gradient_fill_stencil_main";
2946
+ const isBGRA = base_name.includes("bgra") || base_name === "gradient_fill_stencil_main";
2719
2947
  const format = isBGRA ? this.format : "rgba8unorm";
2720
- const needsYFlip = baseName.includes("bgra") || baseName === "gradient_fill_stencil_main";
2948
+ const needsYFlip = base_name.includes("bgra") || base_name === "gradient_fill_stencil_main";
2721
2949
  const vertexConstants = {};
2722
2950
  if (needsYFlip) {
2723
2951
  vertexConstants.yFlipSign = -1.0;
2724
2952
  }
2725
2953
  let depthStencil;
2726
2954
  let sampleCount = this.sampleCount;
2727
- if (baseName.includes("stroke")) {
2955
+ if (base_name.includes("stroke")) {
2728
2956
  depthStencil = {
2729
2957
  "format": "stencil8",
2730
2958
  "stencilFront": { "compare": "always", "failOp": "keep", "depthFailOp": "keep", "passOp": "keep" },
@@ -2733,7 +2961,7 @@ export class PipelineManager {
2733
2961
  "stencilWriteMask": 0x00
2734
2962
  };
2735
2963
  }
2736
- else if (baseName === "gradient_fill_stencil" || baseName === "gradient_fill_stencil_atlas") {
2964
+ else if (base_name === "gradient_fill_stencil" || base_name === "gradient_fill_stencil_atlas") {
2737
2965
  depthStencil = {
2738
2966
  "format": "stencil8",
2739
2967
  "stencilFront": { "compare": "not-equal", "failOp": "keep", "depthFailOp": "zero", "passOp": "zero" },
@@ -2742,7 +2970,7 @@ export class PipelineManager {
2742
2970
  "stencilWriteMask": 0xFF
2743
2971
  };
2744
2972
  }
2745
- else if (baseName === "gradient_fill_stencil_main") {
2973
+ else if (base_name === "gradient_fill_stencil_main") {
2746
2974
  depthStencil = {
2747
2975
  "format": "stencil8",
2748
2976
  "stencilFront": { "compare": "not-equal", "failOp": "keep", "depthFailOp": "zero", "passOp": "zero" },
@@ -2752,7 +2980,7 @@ export class PipelineManager {
2752
2980
  };
2753
2981
  sampleCount = 1;
2754
2982
  }
2755
- else if (baseName === "gradient_fill_bgra_stencil") {
2983
+ else if (base_name === "gradient_fill_bgra_stencil") {
2756
2984
  depthStencil = {
2757
2985
  "format": "stencil8",
2758
2986
  "stencilFront": { "compare": "equal", "failOp": "keep", "depthFailOp": "keep", "passOp": "keep" },
@@ -2761,7 +2989,7 @@ export class PipelineManager {
2761
2989
  "stencilWriteMask": 0x00
2762
2990
  };
2763
2991
  }
2764
- else if (baseName === "gradient_fill_bgra_no_msaa") {
2992
+ else if (base_name === "gradient_fill_bgra_no_msaa") {
2765
2993
  sampleCount = 1;
2766
2994
  }
2767
2995
  const descriptor = {
@@ -2786,6 +3014,12 @@ export class PipelineManager {
2786
3014
  }
2787
3015
  return this.device.createRenderPipeline(descriptor);
2788
3016
  }
3017
+ /**
3018
+ * @description 名前からバインドグループレイアウトを取得する(遅延初期化を含む)
3019
+ * Get a bind group layout by name, initializing lazy groups if needed
3020
+ * @param {string} name - バインドグループレイアウト名 / Bind group layout name
3021
+ * @return {GPUBindGroupLayout | undefined} レイアウトまたはundefined / The layout or undefined
3022
+ */
2789
3023
  getBindGroupLayout(name) {
2790
3024
  let layout = this.bindGroupLayouts.get(name);
2791
3025
  if (!layout) {
@@ -2794,6 +3028,10 @@ export class PipelineManager {
2794
3028
  }
2795
3029
  return layout;
2796
3030
  }
3031
+ /**
3032
+ * @description ノードクリア用パイプラインを作成する(カラーとステンシルの同時クリア)
3033
+ * Create node clear pipeline for simultaneous color and stencil clear
3034
+ */
2797
3035
  createNodeClearPipeline() {
2798
3036
  const vertexBufferLayout = {
2799
3037
  "arrayStride": 2 * 4,
@@ -2859,6 +3097,10 @@ export class PipelineManager {
2859
3097
  });
2860
3098
  this.pipelines.set("node_clear_atlas", nodeClearPipeline);
2861
3099
  }
3100
+ /**
3101
+ * @description すべてのパイプライン・レイアウト・シェーダーモジュールを解放する
3102
+ * Dispose all pipelines, layouts, and shader module caches
3103
+ */
2862
3104
  dispose() {
2863
3105
  this.pipelines.clear();
2864
3106
  this.bindGroupLayouts.clear();