@next2d/webgpu 3.0.4 → 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
@@ -11,27 +11,78 @@ import { execute as filterApplyGradientBevelFilterUseCase } from "../../Filter/G
11
11
  import { execute as filterApplyGradientGlowFilterUseCase } from "../../Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase";
12
12
  import { execute as filterApplyDisplacementMapFilterUseCase } from "../../Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase";
13
13
  import { execute as blendApplyComplexBlendUseCase } from "../../Blend/usecase/BlendApplyComplexBlendUseCase";
14
+ import { $isMaskTestEnabled, $getMaskStencilReference } from "../../Mask";
15
+ /**
16
+ * @description ユニフォームデータの事前確保配列(4要素)
17
+ * Pre-allocated uniform data array (4 elements)
18
+ */
14
19
  const $uniform4 = new Float32Array(4);
20
+ /**
21
+ * @description ユニフォームデータの事前確保配列A(6要素)
22
+ * Pre-allocated uniform data array A (6 elements)
23
+ */
15
24
  const $uniform6a = new Float32Array(6);
25
+ /**
26
+ * @description ユニフォームデータの事前確保配列B(6要素)
27
+ * Pre-allocated uniform data array B (6 elements)
28
+ */
16
29
  const $uniform6b = new Float32Array(6);
30
+ /**
31
+ * @description ユニフォームデータの事前確保配列(8要素)
32
+ * Pre-allocated uniform data array (8 elements)
33
+ */
17
34
  const $uniform8 = new Float32Array(8);
35
+ /**
36
+ * @description ユニフォームデータの事前確保配列(12要素)
37
+ * Pre-allocated uniform data array (12 elements)
38
+ */
18
39
  const $uniform12 = new Float32Array(12);
40
+ /**
41
+ * @description ユニフォームデータの事前確保配列(20要素)
42
+ * Pre-allocated uniform data array (20 elements)
43
+ */
19
44
  const $uniform20 = new Float32Array(20);
20
45
  // プリアロケート BindGroup Entry 配列
46
+ /**
47
+ * @description バインドグループエントリの事前確保配列
48
+ * Pre-allocated bind group entry array
49
+ */
21
50
  const $entries3 = [
22
51
  { "binding": 0, "resource": { "buffer": null } },
23
52
  { "binding": 1, "resource": null },
24
53
  { "binding": 2, "resource": null }
25
54
  ];
26
- const SIMPLE_BLEND_MODES = new Set([
55
+ /**
56
+ * @description シンプルなブレンドモードのセット
57
+ * Set of simple blend modes
58
+ */
59
+ const $SIMPLE_BLEND_MODES = new Set([
27
60
  "normal", "layer", "add", "screen", "alpha", "erase", "copy"
28
61
  ]);
29
- const Y_FLIP_UNIFORM = new Float32Array([1, -1, 0, 1]);
30
- const isIdentityColorTransform = (ct) => {
62
+ /**
63
+ * @description Y軸反転用ユニフォームデータ
64
+ * Uniform data for Y-axis flip
65
+ */
66
+ const $Y_FLIP_UNIFORM = new Float32Array([1, -1, 0, 1]);
67
+ /**
68
+ * @description カラートランスフォームが恒等変換かどうかを判定する
69
+ * Checks whether the color transform is an identity transform
70
+ * @param {Float32Array} ct カラートランスフォーム配列 / Color transform array
71
+ * @return {boolean} 恒等変換の場合true / True if identity transform
72
+ */
73
+ const $isIdentityColorTransform = (ct) => {
31
74
  return ct[0] === 1 && ct[1] === 1 && ct[2] === 1 && ct[3] === 1
32
75
  && ct[4] === 0 && ct[5] === 0 && ct[6] === 0 && ct[7] === 0;
33
76
  };
34
- const applyColorTransform = (config, attachment, colorTransform) => {
77
+ /**
78
+ * @description フィルター結果にカラートランスフォームを適用する
79
+ * Applies color transform to the filter result
80
+ * @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
81
+ * @param {IAttachmentObject} attachment ソースアタッチメント / Source attachment
82
+ * @param {Float32Array} color_transform カラートランスフォーム配列 / Color transform array
83
+ * @return {IAttachmentObject} カラートランスフォーム適用後のアタッチメント / Attachment with color transform applied
84
+ */
85
+ const $applyColorTransform = (config, attachment, color_transform) => {
35
86
  const ctAttachment = config.frameBufferManager.createTemporaryAttachment(attachment.width, attachment.height);
36
87
  const pipeline = config.pipelineManager.getPipeline("color_transform");
37
88
  const bindGroupLayout = config.pipelineManager.getBindGroupLayout("texture_copy");
@@ -40,13 +91,13 @@ const applyColorTransform = (config, attachment, colorTransform) => {
40
91
  }
41
92
  // uniform: mul(vec4) + add(vec4) = 32 bytes
42
93
  // add値は0-255スケールの生値をそのまま渡す(WebGLのフィルターCTパスと同じ)
43
- $uniform8[0] = colorTransform[0];
44
- $uniform8[1] = colorTransform[1];
45
- $uniform8[2] = colorTransform[2];
46
- $uniform8[3] = colorTransform[3];
47
- $uniform8[4] = colorTransform[4];
48
- $uniform8[5] = colorTransform[5];
49
- $uniform8[6] = colorTransform[6];
94
+ $uniform8[0] = color_transform[0];
95
+ $uniform8[1] = color_transform[1];
96
+ $uniform8[2] = color_transform[2];
97
+ $uniform8[3] = color_transform[3];
98
+ $uniform8[4] = color_transform[4];
99
+ $uniform8[5] = color_transform[5];
100
+ $uniform8[6] = color_transform[6];
50
101
  $uniform8[7] = 0;
51
102
  const uniformBuffer = config.bufferManager.acquireAndWriteUniformBuffer($uniform8);
52
103
  const sampler = config.textureManager.createSampler("color_transform_sampler", false);
@@ -65,7 +116,15 @@ const applyColorTransform = (config, attachment, colorTransform) => {
65
116
  passEncoder.end();
66
117
  return ctAttachment;
67
118
  };
68
- const getTextureFromNode = (node, command_encoder, frame_buffer_manager) => {
119
+ /**
120
+ * @description アトラスノードからテクスチャを取得する
121
+ * Extracts texture from an atlas node
122
+ * @param {Node} node テクスチャパッカーノード / Texture packer node
123
+ * @param {GPUCommandEncoder} command_encoder コマンドエンコーダ / Command encoder
124
+ * @param {FrameBufferManager} frame_buffer_manager フレームバッファマネージャ / Frame buffer manager
125
+ * @return {IAttachmentObject} 取得したアタッチメント / Extracted attachment
126
+ */
127
+ const $getTextureFromNode = (node, command_encoder, frame_buffer_manager) => {
69
128
  // 一時アタッチメントを作成(ノードのサイズを使用)
70
129
  const attachment = frame_buffer_manager.createTemporaryAttachment(node.w, node.h);
71
130
  // アトラステクスチャから該当部分をコピー(複数アトラス対応)
@@ -85,27 +144,44 @@ const getTextureFromNode = (node, command_encoder, frame_buffer_manager) => {
85
144
  });
86
145
  }
87
146
  else {
88
- console.error("[WebGPU Filter] getTextureFromNode: FAILED - missing atlas or textures");
147
+ console.error("[WebGPU Filter] $getTextureFromNode: FAILED - missing atlas or textures");
89
148
  }
90
149
  return attachment;
91
150
  };
92
- const isSimpleBlendMode = (blendMode) => {
93
- return SIMPLE_BLEND_MODES.has(blendMode);
151
+ /**
152
+ * @description ブレンドモードがシンプルかどうかを判定する
153
+ * Checks whether the blend mode is a simple blend mode
154
+ * @param {IBlendMode} blend_mode ブレンドモード / Blend mode
155
+ * @return {boolean} シンプルブレンドモードの場合true / True if simple blend mode
156
+ */
157
+ const $isSimpleBlendMode = (blend_mode) => {
158
+ return $SIMPLE_BLEND_MODES.has(blend_mode);
94
159
  };
95
- const copyMainAttachmentRegion = (config, mainAttachment, x, y, width, height) => {
160
+ /**
161
+ * @description メインアタッチメントの矩形領域をコピーする
162
+ * Copies a rectangular region from the main attachment
163
+ * @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
164
+ * @param {IAttachmentObject} main_attachment メインアタッチメント / Main attachment
165
+ * @param {number} x X座標 / X coordinate
166
+ * @param {number} y Y座標 / Y coordinate
167
+ * @param {number} width 幅 / Width
168
+ * @param {number} height 高さ / Height
169
+ * @return {IAttachmentObject} コピーされたアタッチメント / Copied attachment
170
+ */
171
+ const $copyMainAttachmentRegion = (config, main_attachment, x, y, width, height) => {
96
172
  // 一時アタッチメントを作成
97
173
  const dstAttachment = config.frameBufferManager.createTemporaryAttachment(width, height);
98
174
  // レンダーパスでコピー(フォーマット変換: bgra8unorm -> rgba8unorm)
99
175
  const pipeline = config.pipelineManager.getPipeline("complex_blend_copy");
100
176
  const bindGroupLayout = config.pipelineManager.getBindGroupLayout("texture_copy");
101
- if (!pipeline || !bindGroupLayout || !mainAttachment.texture || !dstAttachment.texture) {
177
+ if (!pipeline || !bindGroupLayout || !main_attachment.texture || !dstAttachment.texture) {
102
178
  return dstAttachment;
103
179
  }
104
180
  // ユニフォームバッファ: scale (vec2) + offset (vec2)
105
- const scaleX = width / mainAttachment.width;
106
- const scaleY = height / mainAttachment.height;
107
- const offsetX = x / mainAttachment.width;
108
- const offsetY = y / mainAttachment.height;
181
+ const scaleX = width / main_attachment.width;
182
+ const scaleY = height / main_attachment.height;
183
+ const offsetX = x / main_attachment.width;
184
+ const offsetY = y / main_attachment.height;
109
185
  $uniform4[0] = scaleX;
110
186
  $uniform4[1] = scaleY;
111
187
  $uniform4[2] = offsetX;
@@ -114,7 +190,7 @@ const copyMainAttachmentRegion = (config, mainAttachment, x, y, width, height) =
114
190
  const sampler = config.textureManager.createSampler("filter_copy_sampler", false);
115
191
  $entries3[0].resource.buffer = uniformBuffer;
116
192
  $entries3[1].resource = sampler;
117
- $entries3[2].resource = mainAttachment.texture.view;
193
+ $entries3[2].resource = main_attachment.texture.view;
118
194
  const bindGroup = config.device.createBindGroup({
119
195
  "layout": bindGroupLayout,
120
196
  "entries": $entries3
@@ -127,38 +203,48 @@ const copyMainAttachmentRegion = (config, mainAttachment, x, y, width, height) =
127
203
  passEncoder.end();
128
204
  return dstAttachment;
129
205
  };
130
- const drawBlendResultToMain = (config, srcAttachment, mainAttachment, x, y) => {
206
+ /**
207
+ * @description ブレンド結果をメインアタッチメントに描画する
208
+ * Draws blend result to the main attachment
209
+ * @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
210
+ * @param {IAttachmentObject} src_attachment ソースアタッチメント / Source attachment
211
+ * @param {IAttachmentObject} main_attachment メインアタッチメント / Main attachment
212
+ * @param {number} x X座標 / X coordinate
213
+ * @param {number} y Y座標 / Y coordinate
214
+ * @return {void}
215
+ */
216
+ const $drawBlendResultToMain = (config, src_attachment, main_attachment, x, y) => {
131
217
  // フィルター+複雑なブレンド用のパイプライン(Y軸反転あり)を使用
132
218
  // MSAA有効時はMSAA版パイプラインを使用してmsaaTextureに描画→texture.viewにresolve
133
- const useMsaa = mainAttachment.msaa && mainAttachment.msaaTexture?.view;
219
+ const useMsaa = main_attachment.msaa && main_attachment.msaaTexture?.view;
134
220
  const pipelineName = useMsaa ? "filter_complex_blend_output_msaa" : "filter_complex_blend_output";
135
221
  const pipeline = config.pipelineManager.getPipeline(pipelineName);
136
222
  const bindGroupLayout = config.pipelineManager.getBindGroupLayout("positioned_texture");
137
- if (!pipeline || !bindGroupLayout || !srcAttachment.texture || !mainAttachment.texture) {
223
+ if (!pipeline || !bindGroupLayout || !src_attachment.texture || !main_attachment.texture) {
138
224
  return;
139
225
  }
140
226
  // ユニフォームデータ: offset, size, viewport, padding
141
227
  $uniform8[0] = x;
142
228
  $uniform8[1] = y;
143
- $uniform8[2] = srcAttachment.width;
144
- $uniform8[3] = srcAttachment.height;
145
- $uniform8[4] = mainAttachment.width;
146
- $uniform8[5] = mainAttachment.height;
229
+ $uniform8[2] = src_attachment.width;
230
+ $uniform8[3] = src_attachment.height;
231
+ $uniform8[4] = main_attachment.width;
232
+ $uniform8[5] = main_attachment.height;
147
233
  $uniform8[6] = 0;
148
234
  $uniform8[7] = 0;
149
235
  const uniformBuffer = config.bufferManager.acquireAndWriteUniformBuffer($uniform8);
150
236
  const sampler = config.textureManager.createSampler("filter_blend_output_sampler", false);
151
237
  $entries3[0].resource.buffer = uniformBuffer;
152
238
  $entries3[1].resource = sampler;
153
- $entries3[2].resource = srcAttachment.texture.view;
239
+ $entries3[2].resource = src_attachment.texture.view;
154
240
  const bindGroup = config.device.createBindGroup({
155
241
  "layout": bindGroupLayout,
156
242
  "entries": $entries3
157
243
  });
158
244
  // メインアタッチメントへの描画(loadで既存内容を保持)
159
245
  // MSAA有効時はmsaaTextureに描画してtexture.viewにresolve
160
- const colorView = useMsaa ? mainAttachment.msaaTexture.view : mainAttachment.texture.view;
161
- const resolveTarget = useMsaa ? mainAttachment.texture.view : null;
246
+ const colorView = useMsaa ? main_attachment.msaaTexture.view : main_attachment.texture.view;
247
+ const resolveTarget = useMsaa ? main_attachment.texture.view : null;
162
248
  const renderPassDescriptor = config.frameBufferManager.createRenderPassDescriptor(colorView, 0, 0, 0, 0, "load", resolveTarget);
163
249
  const passEncoder = config.commandEncoder.beginRenderPass(renderPassDescriptor);
164
250
  passEncoder.setPipeline(pipeline);
@@ -166,7 +252,20 @@ const drawBlendResultToMain = (config, srcAttachment, mainAttachment, x, y) => {
166
252
  passEncoder.draw(6, 1, 0, 0);
167
253
  passEncoder.end();
168
254
  };
169
- const drawFilterToMain = (config, filter_attachment, color_transform, blend_mode, x, y, _main_texture_view, _buffer_manager) => {
255
+ /**
256
+ * @description フィルター適用結果をメインキャンバスに描画する
257
+ * Draws filter result to the main canvas
258
+ * @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
259
+ * @param {IAttachmentObject} filter_attachment フィルターアタッチメント / Filter attachment
260
+ * @param {Float32Array} color_transform カラートランスフォーム配列 / Color transform array
261
+ * @param {IBlendMode} blend_mode ブレンドモード / Blend mode
262
+ * @param {number} x X座標 / X coordinate
263
+ * @param {number} y Y座標 / Y coordinate
264
+ * @param {GPUTextureView} _main_texture_view メインテクスチャビュー(未使用) / Main texture view (unused)
265
+ * @param {BufferManager} _buffer_manager バッファマネージャ(未使用) / Buffer manager (unused)
266
+ * @return {void}
267
+ */
268
+ const $drawFilterToMain = (config, filter_attachment, color_transform, blend_mode, x, y, _main_texture_view, _buffer_manager) => {
170
269
  // メインアタッチメントに描画
171
270
  // コンテナレイヤー内ではconfig.mainAttachmentがコンテナのテンポラリアタッチメントを指す
172
271
  const mainAttachment = config.mainAttachment || config.frameBufferManager.getAttachment("main");
@@ -207,31 +306,41 @@ const drawFilterToMain = (config, filter_attachment, color_transform, blend_mode
207
306
  drawHeight = mainHeight - drawY;
208
307
  }
209
308
  // シンプルなブレンドモードの場合
210
- if (isSimpleBlendMode(blend_mode)) {
309
+ if ($isSimpleBlendMode(blend_mode)) {
211
310
  // MSAA有効時はMSAA版パイプラインを使用してmsaaTextureに描画→texture.viewにresolve
212
311
  const useMsaa = mainAttachment.msaa && mainAttachment.msaaTexture?.view;
312
+ // マスクが有効かチェック
313
+ const isMasked = $isMaskTestEnabled();
314
+ const useStencil = isMasked
315
+ && (mainAttachment.msaaStencil?.view || mainAttachment.stencil?.view);
213
316
  // ブレンドモードに応じたパイプラインを選択
214
317
  let pipelineName;
215
- switch (blend_mode) {
216
- case "add":
217
- pipelineName = useMsaa ? "filter_output_add_msaa" : "filter_output_add";
218
- break;
219
- case "screen":
220
- pipelineName = useMsaa ? "filter_output_screen_msaa" : "filter_output_screen";
221
- break;
222
- case "alpha":
223
- pipelineName = useMsaa ? "filter_output_alpha_msaa" : "filter_output_alpha";
224
- break;
225
- case "erase":
226
- pipelineName = useMsaa ? "filter_output_erase_msaa" : "filter_output_erase";
227
- break;
228
- case "copy":
229
- pipelineName = useMsaa ? "texture_copy_bgra_msaa" : "texture_copy_bgra";
230
- break;
231
- default:
232
- // normal, layer
233
- pipelineName = useMsaa ? "filter_output_msaa" : "filter_output";
234
- break;
318
+ if (useStencil) {
319
+ // マスク有効時はステンシルテスト付きパイプラインを使用
320
+ pipelineName = useMsaa ? "filter_output_masked_msaa" : "filter_output_masked";
321
+ }
322
+ else {
323
+ switch (blend_mode) {
324
+ case "add":
325
+ pipelineName = useMsaa ? "filter_output_add_msaa" : "filter_output_add";
326
+ break;
327
+ case "screen":
328
+ pipelineName = useMsaa ? "filter_output_screen_msaa" : "filter_output_screen";
329
+ break;
330
+ case "alpha":
331
+ pipelineName = useMsaa ? "filter_output_alpha_msaa" : "filter_output_alpha";
332
+ break;
333
+ case "erase":
334
+ pipelineName = useMsaa ? "filter_output_erase_msaa" : "filter_output_erase";
335
+ break;
336
+ case "copy":
337
+ pipelineName = useMsaa ? "texture_copy_bgra_msaa" : "texture_copy_bgra";
338
+ break;
339
+ default:
340
+ // normal, layer
341
+ pipelineName = useMsaa ? "filter_output_msaa" : "filter_output";
342
+ break;
343
+ }
235
344
  }
236
345
  let pipeline = config.pipelineManager.getPipeline(pipelineName);
237
346
  let bindGroupLayout = config.pipelineManager.getBindGroupLayout("texture_copy");
@@ -265,7 +374,16 @@ const drawFilterToMain = (config, filter_attachment, color_transform, blend_mode
265
374
  // MSAA有効時はmsaaTextureに描画してtexture.viewにresolve
266
375
  const colorView = useMsaa ? mainAttachment.msaaTexture.view : mainAttachment.texture.view;
267
376
  const resolveTarget = useMsaa ? mainAttachment.texture.view : null;
268
- const renderPassDescriptor = config.frameBufferManager.createRenderPassDescriptor(colorView, 0, 0, 0, 0, "load", resolveTarget);
377
+ let renderPassDescriptor;
378
+ if (useStencil) {
379
+ // マスク有効時はステンシル付きレンダーパスを使用
380
+ const stencilView = useMsaa && mainAttachment.msaaStencil?.view
381
+ ? mainAttachment.msaaStencil.view : mainAttachment.stencil.view;
382
+ renderPassDescriptor = config.frameBufferManager.createStencilRenderPassDescriptor(colorView, stencilView, "load", "load", resolveTarget);
383
+ }
384
+ else {
385
+ renderPassDescriptor = config.frameBufferManager.createRenderPassDescriptor(colorView, 0, 0, 0, 0, "load", resolveTarget);
386
+ }
269
387
  // Viewportはfloat値でサブピクセル精度を維持(WebGLのsetTransform相当)
270
388
  // ScissorはGPUIntegerCoordinate必須のため整数化し、viewport領域を包含する
271
389
  const vpX = Math.max(0, drawX);
@@ -283,6 +401,10 @@ const drawFilterToMain = (config, filter_attachment, color_transform, blend_mode
283
401
  const passEncoder = config.commandEncoder.beginRenderPass(renderPassDescriptor);
284
402
  passEncoder.setPipeline(pipeline);
285
403
  passEncoder.setBindGroup(0, bindGroup);
404
+ // マスク有効時はステンシル参照値を設定
405
+ if (useStencil) {
406
+ passEncoder.setStencilReference($getMaskStencilReference());
407
+ }
286
408
  passEncoder.setViewport(vpX, vpY, vpW, vpH, 0, 1);
287
409
  passEncoder.setScissorRect(scissorX, scissorY, scissorW, scissorH);
288
410
  passEncoder.draw(6, 1, 0, 0);
@@ -291,7 +413,7 @@ const drawFilterToMain = (config, filter_attachment, color_transform, blend_mode
291
413
  else {
292
414
  // 複雑なブレンドモード(multiply, overlay, darken, lighten, hardlight等)
293
415
  // 1. メインアタッチメントから描画先の矩形をコピー
294
- const dstAttachment = copyMainAttachmentRegion(config, mainAttachment, drawX, drawY, drawWidth, drawHeight);
416
+ const dstAttachment = $copyMainAttachmentRegion(config, mainAttachment, drawX, drawY, drawWidth, drawHeight);
295
417
  // 2. カラートランスフォームを準備(WebGL版と同じ:add値は生値)
296
418
  $uniform8[0] = color_transform[0]; // mulR
297
419
  $uniform8[1] = color_transform[1]; // mulG
@@ -312,18 +434,35 @@ const drawFilterToMain = (config, filter_attachment, color_transform, blend_mode
312
434
  "frameTextures": config.frameTextures
313
435
  });
314
436
  // 4. 結果をメインアタッチメントに描画
315
- drawBlendResultToMain(config, blendedAttachment, mainAttachment, drawX, drawY);
437
+ $drawBlendResultToMain(config, blendedAttachment, mainAttachment, drawX, drawY);
316
438
  // 5. 一時テクスチャを解放
317
439
  config.frameBufferManager.releaseTemporaryAttachment(dstAttachment);
318
440
  config.frameBufferManager.releaseTemporaryAttachment(blendedAttachment);
319
441
  }
320
442
  };
443
+ /**
444
+ * @description フィルターを適用してメインキャンバスに描画する
445
+ * Applies filters and draws the result to the main canvas
446
+ * @param {Node} node テクスチャパッカーノード / Texture packer node
447
+ * @param {number} width 幅 / Width
448
+ * @param {number} height 高さ / Height
449
+ * @param {boolean} is_bitmap ビットマップフラグ / Whether the source is a bitmap
450
+ * @param {Float32Array} matrix 変換行列 / Transformation matrix
451
+ * @param {Float32Array} color_transform カラートランスフォーム配列 / Color transform array
452
+ * @param {IBlendMode} blend_mode ブレンドモード / Blend mode
453
+ * @param {Float32Array} bounds バウンディングボックス / Bounding box
454
+ * @param {Float32Array} params フィルターパラメータ配列 / Filter parameters array
455
+ * @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
456
+ * @param {GPUTextureView} main_texture_view メインテクスチャビュー / Main texture view
457
+ * @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
458
+ * @return {void}
459
+ */
321
460
  export const execute = (node, width, height, is_bitmap, matrix, color_transform, blend_mode, bounds, params, config, main_texture_view, buffer_manager) => {
322
461
  // オフセットを初期化
323
462
  $offset.x = 0;
324
463
  $offset.y = 0;
325
464
  // ノードからテクスチャを取得
326
- let filterAttachment = getTextureFromNode(node, config.commandEncoder, config.frameBufferManager);
465
+ let filterAttachment = $getTextureFromNode(node, config.commandEncoder, config.frameBufferManager);
327
466
  // アトラスのY反転を補正
328
467
  // WebGPUではアトラスに描画する際にY軸が反転して格納される:
329
468
  // - Shape: FillVertexがndc.yを反転なしで使用するため、WebGPUのNDC→ピクセル変換でY反転
@@ -336,7 +475,7 @@ export const execute = (node, width, height, is_bitmap, matrix, color_transform,
336
475
  if (flipPipeline && flipBindGroupLayout && flippedAttachment.texture) {
337
476
  const sampler = config.textureManager.createSampler("filter_flip_sampler", false);
338
477
  // scale=(1, -1), offset=(0, 1) で UV.y = texCoord.y * (-1) + 1 = 1 - texCoord.y
339
- const uniformBuffer = config.bufferManager.acquireAndWriteUniformBuffer(Y_FLIP_UNIFORM);
478
+ const uniformBuffer = config.bufferManager.acquireAndWriteUniformBuffer($Y_FLIP_UNIFORM);
340
479
  $entries3[0].resource.buffer = uniformBuffer;
341
480
  $entries3[1].resource = sampler;
342
481
  $entries3[2].resource = filterAttachment.texture.view;
@@ -650,8 +789,8 @@ export const execute = (node, width, height, is_bitmap, matrix, color_transform,
650
789
  }
651
790
  // ColorTransformが恒等変換でない場合、フィルター結果に適用
652
791
  // WebGL版と同じ: フィルターチェーン適用後、メイン描画前にColorTransformを適用
653
- if (!isIdentityColorTransform(color_transform)) {
654
- const ctAttachment = applyColorTransform(config, filterAttachment, color_transform);
792
+ if (!$isIdentityColorTransform(color_transform)) {
793
+ const ctAttachment = $applyColorTransform(config, filterAttachment, color_transform);
655
794
  config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
656
795
  filterAttachment = ctAttachment;
657
796
  }
@@ -662,7 +801,7 @@ export const execute = (node, width, height, is_bitmap, matrix, color_transform,
662
801
  // WebGL版と同じ: スケール変換のオフセットを考慮($offsetはフィルターチェーン内部用で最終位置には不要)
663
802
  const drawX = -offsetX + xMin + matrix[4];
664
803
  const drawY = -offsetY + yMin + matrix[5];
665
- drawFilterToMain(config, filterAttachment, color_transform, blend_mode, drawX, drawY, main_texture_view, buffer_manager);
804
+ $drawFilterToMain(config, filterAttachment, color_transform, blend_mode, drawX, drawY, main_texture_view, buffer_manager);
666
805
  // フィルター用アタッチメントを解放
667
806
  config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
668
807
  };
@@ -1,4 +1,27 @@
1
1
  import type { IPath } from "../../interface/IPath";
2
2
  import type { BufferManager } from "../../BufferManager";
3
3
  import type { PipelineManager } from "../../Shader/PipelineManager";
4
+ /**
5
+ * @description ビットマップフィル描画を実行する
6
+ * Executes bitmap fill rendering
7
+ * @param {GPUDevice} device GPUデバイス / GPU device
8
+ * @param {GPURenderPassEncoder} render_pass_encoder レンダーパスエンコーダ / Render pass encoder
9
+ * @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
10
+ * @param {PipelineManager} pipeline_manager パイプラインマネージャ / Pipeline manager
11
+ * @param {IPath[]} path_vertices パス頂点配列 / Path vertices array
12
+ * @param {Float32Array} context_matrix コンテキスト変換行列 / Context transformation matrix
13
+ * @param {Float32Array} fill_style フィルスタイル(RGBA) / Fill style (RGBA)
14
+ * @param {Uint8Array} pixels ピクセルデータ / Pixel data
15
+ * @param {Float32Array} bitmap_matrix ビットマップ変換行列 / Bitmap transformation matrix
16
+ * @param {number} width テクスチャ幅 / Texture width
17
+ * @param {number} height テクスチャ高さ / Texture height
18
+ * @param {boolean} repeat リピート有無 / Whether to repeat
19
+ * @param {boolean} smooth スムーズフィルタ有無 / Whether to use smooth filtering
20
+ * @param {number} viewport_width ビューポート幅 / Viewport width
21
+ * @param {number} viewport_height ビューポート高さ / Viewport height
22
+ * @param {boolean} use_atlas_target アトラスターゲット使用フラグ / Whether to use atlas target
23
+ * @param {boolean} use_stencil_pipeline ステンシルパイプライン使用フラグ / Whether to use stencil pipeline
24
+ * @param {number} _clip_level クリップレベル(未使用) / Clip level (unused)
25
+ * @return {GPUTexture | null} ビットマップテクスチャまたはnull / Bitmap texture or null
26
+ */
4
27
  export declare const execute: (device: GPUDevice, render_pass_encoder: GPURenderPassEncoder, buffer_manager: BufferManager, pipeline_manager: PipelineManager, path_vertices: IPath[], context_matrix: Float32Array, fill_style: Float32Array, pixels: Uint8Array, bitmap_matrix: Float32Array, width: number, height: number, repeat: boolean, smooth: boolean, viewport_width: number, viewport_height: number, use_atlas_target: boolean, use_stencil_pipeline?: boolean, _clip_level?: number) => GPUTexture | null;
@@ -2,16 +2,63 @@ import { execute as meshFillGenerateUseCase } from "../../Mesh/usecase/MeshFillG
2
2
  import { execute as contextComputeBitmapMatrixService } from "../service/ContextComputeBitmapMatrixService";
3
3
  import { $acquireFillTexture, $releaseFillTexture } from "../../FillTexturePool";
4
4
  import { $isMaskDrawing, $getMaskStencilReference } from "../../Mask";
5
+ /**
6
+ * @description ビットマップサンプラーのキャッシュ
7
+ * Cache for bitmap samplers
8
+ */
5
9
  const $bitmapSamplerCache = new Map();
10
+ /**
11
+ * @description ユニフォームデータの事前確保配列(32要素)
12
+ * Pre-allocated uniform data array (32 elements)
13
+ */
6
14
  const $uniformData32 = new Float32Array(32);
15
+ /**
16
+ * @description ステンシルデータの事前確保配列(16要素)
17
+ * Pre-allocated stencil data array (16 elements)
18
+ */
7
19
  const $stencilData16 = new Float32Array(16);
20
+ /**
21
+ * @description ステンシル用動的バインドグループのキャッシュ
22
+ * Cached dynamic bind group for stencil operations
23
+ */
8
24
  let $stencilDynamicBindGroup = null;
25
+ /**
26
+ * @description ステンシル用動的バッファのキャッシュ
27
+ * Cached dynamic buffer for stencil operations
28
+ */
9
29
  let $stencilDynamicBuffer = null;
30
+ /**
31
+ * @description バインドグループエントリの事前確保配列
32
+ * Pre-allocated bind group entry array
33
+ */
10
34
  const $entries3 = [
11
35
  { "binding": 0, "resource": { "buffer": null } },
12
36
  { "binding": 1, "resource": null },
13
37
  { "binding": 2, "resource": null }
14
38
  ];
39
+ /**
40
+ * @description ビットマップフィル描画を実行する
41
+ * Executes bitmap fill rendering
42
+ * @param {GPUDevice} device GPUデバイス / GPU device
43
+ * @param {GPURenderPassEncoder} render_pass_encoder レンダーパスエンコーダ / Render pass encoder
44
+ * @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
45
+ * @param {PipelineManager} pipeline_manager パイプラインマネージャ / Pipeline manager
46
+ * @param {IPath[]} path_vertices パス頂点配列 / Path vertices array
47
+ * @param {Float32Array} context_matrix コンテキスト変換行列 / Context transformation matrix
48
+ * @param {Float32Array} fill_style フィルスタイル(RGBA) / Fill style (RGBA)
49
+ * @param {Uint8Array} pixels ピクセルデータ / Pixel data
50
+ * @param {Float32Array} bitmap_matrix ビットマップ変換行列 / Bitmap transformation matrix
51
+ * @param {number} width テクスチャ幅 / Texture width
52
+ * @param {number} height テクスチャ高さ / Texture height
53
+ * @param {boolean} repeat リピート有無 / Whether to repeat
54
+ * @param {boolean} smooth スムーズフィルタ有無 / Whether to use smooth filtering
55
+ * @param {number} viewport_width ビューポート幅 / Viewport width
56
+ * @param {number} viewport_height ビューポート高さ / Viewport height
57
+ * @param {boolean} use_atlas_target アトラスターゲット使用フラグ / Whether to use atlas target
58
+ * @param {boolean} use_stencil_pipeline ステンシルパイプライン使用フラグ / Whether to use stencil pipeline
59
+ * @param {number} _clip_level クリップレベル(未使用) / Clip level (unused)
60
+ * @return {GPUTexture | null} ビットマップテクスチャまたはnull / Bitmap texture or null
61
+ */
15
62
  export const execute = (device, render_pass_encoder, buffer_manager, pipeline_manager, path_vertices, context_matrix, fill_style, pixels, bitmap_matrix, width, height, repeat, smooth, viewport_width, viewport_height, use_atlas_target, use_stencil_pipeline = false, _clip_level = 1) => {
16
63
  // MeshFillGenerateUseCaseで頂点データを生成(4 floats/vertex: position + bezier)
17
64
  const mesh = meshFillGenerateUseCase(path_vertices);
@@ -1,4 +1,27 @@
1
1
  import type { IPath } from "../../interface/IPath";
2
2
  import type { BufferManager } from "../../BufferManager";
3
3
  import type { PipelineManager } from "../../Shader/PipelineManager";
4
+ /**
5
+ * @description ビットマップストローク描画を実行する
6
+ * Executes bitmap stroke rendering
7
+ * @param {GPUDevice} device GPUデバイス / GPU device
8
+ * @param {GPURenderPassEncoder} render_pass_encoder レンダーパスエンコーダ / Render pass encoder
9
+ * @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
10
+ * @param {PipelineManager} pipeline_manager パイプラインマネージャ / Pipeline manager
11
+ * @param {IPath[]} vertices パス頂点配列 / Path vertices array
12
+ * @param {number} thickness ストローク太さ / Stroke thickness
13
+ * @param {Float32Array} context_matrix コンテキスト変換行列 / Context transformation matrix
14
+ * @param {Float32Array} stroke_style ストロークスタイル(RGBA) / Stroke style (RGBA)
15
+ * @param {Uint8Array} pixels ピクセルデータ / Pixel data
16
+ * @param {Float32Array} bitmap_matrix ビットマップ変換行列 / Bitmap transformation matrix
17
+ * @param {number} width テクスチャ幅 / Texture width
18
+ * @param {number} height テクスチャ高さ / Texture height
19
+ * @param {boolean} repeat リピート有無 / Whether to repeat
20
+ * @param {boolean} smooth スムーズフィルタ有無 / Whether to use smooth filtering
21
+ * @param {number} viewport_width ビューポート幅 / Viewport width
22
+ * @param {number} viewport_height ビューポート高さ / Viewport height
23
+ * @param {boolean} use_atlas_target アトラスターゲット使用フラグ / Whether to use atlas target
24
+ * @param {boolean} use_stencil_pipeline ステンシルパイプライン使用フラグ / Whether to use stencil pipeline
25
+ * @return {GPUTexture | null} ビットマップテクスチャまたはnull / Bitmap texture or null
26
+ */
4
27
  export declare const execute: (device: GPUDevice, render_pass_encoder: GPURenderPassEncoder, buffer_manager: BufferManager, pipeline_manager: PipelineManager, vertices: IPath[], thickness: number, context_matrix: Float32Array, stroke_style: Float32Array, pixels: Uint8Array, bitmap_matrix: Float32Array, width: number, height: number, repeat: boolean, smooth: boolean, viewport_width: number, viewport_height: number, use_atlas_target: boolean, use_stencil_pipeline: boolean) => GPUTexture | null;
@@ -1,13 +1,48 @@
1
1
  import { execute as meshBitmapStrokeGenerateUseCase } from "../../Mesh/usecase/MeshBitmapStrokeGenerateUseCase";
2
2
  import { execute as contextComputeBitmapMatrixService } from "../service/ContextComputeBitmapMatrixService";
3
3
  import { $acquireFillTexture, $releaseFillTexture } from "../../FillTexturePool";
4
+ /**
5
+ * @description ビットマップサンプラーのキャッシュ
6
+ * Cache for bitmap samplers
7
+ */
4
8
  const $bitmapSamplerCache = new Map();
9
+ /**
10
+ * @description ユニフォームデータの事前確保配列(32要素)
11
+ * Pre-allocated uniform data array (32 elements)
12
+ */
5
13
  const $uniformData32 = new Float32Array(32);
14
+ /**
15
+ * @description バインドグループエントリの事前確保配列
16
+ * Pre-allocated bind group entry array
17
+ */
6
18
  const $entries3 = [
7
19
  { "binding": 0, "resource": { "buffer": null } },
8
20
  { "binding": 1, "resource": null },
9
21
  { "binding": 2, "resource": null }
10
22
  ];
23
+ /**
24
+ * @description ビットマップストローク描画を実行する
25
+ * Executes bitmap stroke rendering
26
+ * @param {GPUDevice} device GPUデバイス / GPU device
27
+ * @param {GPURenderPassEncoder} render_pass_encoder レンダーパスエンコーダ / Render pass encoder
28
+ * @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
29
+ * @param {PipelineManager} pipeline_manager パイプラインマネージャ / Pipeline manager
30
+ * @param {IPath[]} vertices パス頂点配列 / Path vertices array
31
+ * @param {number} thickness ストローク太さ / Stroke thickness
32
+ * @param {Float32Array} context_matrix コンテキスト変換行列 / Context transformation matrix
33
+ * @param {Float32Array} stroke_style ストロークスタイル(RGBA) / Stroke style (RGBA)
34
+ * @param {Uint8Array} pixels ピクセルデータ / Pixel data
35
+ * @param {Float32Array} bitmap_matrix ビットマップ変換行列 / Bitmap transformation matrix
36
+ * @param {number} width テクスチャ幅 / Texture width
37
+ * @param {number} height テクスチャ高さ / Texture height
38
+ * @param {boolean} repeat リピート有無 / Whether to repeat
39
+ * @param {boolean} smooth スムーズフィルタ有無 / Whether to use smooth filtering
40
+ * @param {number} viewport_width ビューポート幅 / Viewport width
41
+ * @param {number} viewport_height ビューポート高さ / Viewport height
42
+ * @param {boolean} use_atlas_target アトラスターゲット使用フラグ / Whether to use atlas target
43
+ * @param {boolean} use_stencil_pipeline ステンシルパイプライン使用フラグ / Whether to use stencil pipeline
44
+ * @return {GPUTexture | null} ビットマップテクスチャまたはnull / Bitmap texture or null
45
+ */
11
46
  export const execute = (device, render_pass_encoder, buffer_manager, pipeline_manager, vertices, thickness, context_matrix, stroke_style, pixels, bitmap_matrix, width, height, repeat, smooth, viewport_width, viewport_height, use_atlas_target, use_stencil_pipeline) => {
12
47
  // ビットマップストローク用メッシュを生成(4 floats/vertex: position + bezier)
13
48
  const mesh = meshBitmapStrokeGenerateUseCase(vertices, thickness);
@@ -2,4 +2,19 @@ import type { IPath } from "../../interface/IPath";
2
2
  import type { IAttachmentObject } from "../../interface/IAttachmentObject";
3
3
  import type { BufferManager } from "../../BufferManager";
4
4
  import type { PipelineManager } from "../../Shader/PipelineManager";
5
+ /**
6
+ * @description クリップ(マスク)描画を実行する
7
+ * Executes clip (mask) rendering
8
+ * @param {GPUDevice} device GPUデバイス / GPU device
9
+ * @param {GPURenderPassEncoder} render_pass_encoder レンダーパスエンコーダ / Render pass encoder
10
+ * @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
11
+ * @param {PipelineManager} pipeline_manager パイプラインマネージャ / Pipeline manager
12
+ * @param {IAttachmentObject} current_attachment 現在のアタッチメント / Current attachment
13
+ * @param {IPath[]} path_vertices パス頂点配列 / Path vertices array
14
+ * @param {Float32Array} context_matrix コンテキスト変換行列 / Context transformation matrix
15
+ * @param {Float32Array} fill_style フィルスタイル(RGBA) / Fill style (RGBA)
16
+ * @param {number} global_alpha グローバルアルファ値 / Global alpha value
17
+ * @param {boolean} is_main_attachment メインアタッチメントフラグ / Whether this is the main attachment
18
+ * @return {void}
19
+ */
5
20
  export declare const execute: (device: GPUDevice, render_pass_encoder: GPURenderPassEncoder, buffer_manager: BufferManager, pipeline_manager: PipelineManager, current_attachment: IAttachmentObject, path_vertices: IPath[], context_matrix: Float32Array, fill_style: Float32Array, global_alpha: number, is_main_attachment?: boolean) => void;