@next2d/webgpu 3.0.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 (349) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +574 -0
  3. package/package.json +30 -0
  4. package/src/AtlasManager.d.ts +23 -0
  5. package/src/AtlasManager.js +123 -0
  6. package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.d.ts +13 -0
  7. package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.js +24 -0
  8. package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.d.ts +15 -0
  9. package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.js +31 -0
  10. package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.d.ts +5 -0
  11. package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.js +42 -0
  12. package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.d.ts +16 -0
  13. package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.js +28 -0
  14. package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.d.ts +17 -0
  15. package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.js +33 -0
  16. package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.d.ts +16 -0
  17. package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.js +28 -0
  18. package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.d.ts +17 -0
  19. package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.js +27 -0
  20. package/src/AttachmentManager/service/AttachmentManagerGetTextureService.d.ts +18 -0
  21. package/src/AttachmentManager/service/AttachmentManagerGetTextureService.js +27 -0
  22. package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.d.ts +12 -0
  23. package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.js +17 -0
  24. package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.d.ts +26 -0
  25. package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.js +43 -0
  26. package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.d.ts +18 -0
  27. package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.js +33 -0
  28. package/src/AttachmentManager.d.ts +19 -0
  29. package/src/AttachmentManager.js +105 -0
  30. package/src/BezierConverter/BezierConverter.d.ts +16 -0
  31. package/src/BezierConverter/BezierConverter.js +15 -0
  32. package/src/BezierConverter/service/BezierConverterCalculateFlatnessService.d.ts +15 -0
  33. package/src/BezierConverter/service/BezierConverterCalculateFlatnessService.js +37 -0
  34. package/src/BezierConverter/service/BezierConverterSplitCubicService.d.ts +15 -0
  35. package/src/BezierConverter/service/BezierConverterSplitCubicService.js +47 -0
  36. package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.d.ts +29 -0
  37. package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.js +80 -0
  38. package/src/Blend/BlendInstancedManager.d.ts +35 -0
  39. package/src/Blend/BlendInstancedManager.js +147 -0
  40. package/src/Blend/service/BlendAddService.d.ts +1 -0
  41. package/src/Blend/service/BlendAddService.js +8 -0
  42. package/src/Blend/service/BlendAlphaService.d.ts +1 -0
  43. package/src/Blend/service/BlendAlphaService.js +8 -0
  44. package/src/Blend/service/BlendEraseService.d.ts +1 -0
  45. package/src/Blend/service/BlendEraseService.js +8 -0
  46. package/src/Blend/service/BlendGetStateService.d.ts +12 -0
  47. package/src/Blend/service/BlendGetStateService.js +13 -0
  48. package/src/Blend/service/BlendOneZeroService.d.ts +1 -0
  49. package/src/Blend/service/BlendOneZeroService.js +8 -0
  50. package/src/Blend/service/BlendResetService.d.ts +1 -0
  51. package/src/Blend/service/BlendResetService.js +8 -0
  52. package/src/Blend/service/BlendScreenService.d.ts +1 -0
  53. package/src/Blend/service/BlendScreenService.js +8 -0
  54. package/src/Blend/service/BlendSetModeService.d.ts +2 -0
  55. package/src/Blend/service/BlendSetModeService.js +4 -0
  56. package/src/Blend/usecase/BlendApplyComplexBlendUseCase.d.ts +6 -0
  57. package/src/Blend/usecase/BlendApplyComplexBlendUseCase.js +79 -0
  58. package/src/Blend/usecase/BlendOperationUseCase.d.ts +11 -0
  59. package/src/Blend/usecase/BlendOperationUseCase.js +31 -0
  60. package/src/Blend.d.ts +8 -0
  61. package/src/Blend.js +91 -0
  62. package/src/BufferManager/service/BufferManagerCreateIndirectBufferService.d.ts +15 -0
  63. package/src/BufferManager/service/BufferManagerCreateIndirectBufferService.js +37 -0
  64. package/src/BufferManager/service/BufferManagerCreateRectVerticesService.d.ts +13 -0
  65. package/src/BufferManager/service/BufferManagerCreateRectVerticesService.js +23 -0
  66. package/src/BufferManager/service/BufferManagerCreateStorageBufferService.d.ts +17 -0
  67. package/src/BufferManager/service/BufferManagerCreateStorageBufferService.js +23 -0
  68. package/src/BufferManager/service/BufferManagerReleaseUniformBufferService.d.ts +12 -0
  69. package/src/BufferManager/service/BufferManagerReleaseUniformBufferService.js +32 -0
  70. package/src/BufferManager/service/BufferManagerReleaseVertexBufferService.d.ts +12 -0
  71. package/src/BufferManager/service/BufferManagerReleaseVertexBufferService.js +32 -0
  72. package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.d.ts +12 -0
  73. package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.js +20 -0
  74. package/src/BufferManager/service/BufferManagerUpperPowerOfTwoService.d.ts +10 -0
  75. package/src/BufferManager/service/BufferManagerUpperPowerOfTwoService.js +18 -0
  76. package/src/BufferManager/usecase/BufferManagerAcquireStorageBufferUseCase.d.ts +15 -0
  77. package/src/BufferManager/usecase/BufferManagerAcquireStorageBufferUseCase.js +51 -0
  78. package/src/BufferManager/usecase/BufferManagerAcquireUniformBufferUseCase.d.ts +13 -0
  79. package/src/BufferManager/usecase/BufferManagerAcquireUniformBufferUseCase.js +26 -0
  80. package/src/BufferManager/usecase/BufferManagerAcquireVertexBufferUseCase.d.ts +14 -0
  81. package/src/BufferManager/usecase/BufferManagerAcquireVertexBufferUseCase.js +46 -0
  82. package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.d.ts +12 -0
  83. package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.js +20 -0
  84. package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.d.ts +9 -0
  85. package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.js +15 -0
  86. package/src/BufferManager.d.ts +93 -0
  87. package/src/BufferManager.js +487 -0
  88. package/src/Compute/ComputePipelineManager.d.ts +61 -0
  89. package/src/Compute/ComputePipelineManager.js +313 -0
  90. package/src/Compute/service/ComputeExecuteBlurService.d.ts +21 -0
  91. package/src/Compute/service/ComputeExecuteBlurService.js +81 -0
  92. package/src/Context/service/ContextComputeBitmapMatrixService.d.ts +1 -0
  93. package/src/Context/service/ContextComputeBitmapMatrixService.js +74 -0
  94. package/src/Context/service/ContextComputeGradientMatrixService.d.ts +4 -0
  95. package/src/Context/service/ContextComputeGradientMatrixService.js +88 -0
  96. package/src/Context/service/ContextFillSimpleService.d.ts +2 -0
  97. package/src/Context/service/ContextFillSimpleService.js +28 -0
  98. package/src/Context/service/ContextFillWithStencilMainService.d.ts +2 -0
  99. package/src/Context/service/ContextFillWithStencilMainService.js +19 -0
  100. package/src/Context/service/ContextFillWithStencilService.d.ts +2 -0
  101. package/src/Context/service/ContextFillWithStencilService.js +19 -0
  102. package/src/Context/usecase/ContextApplyFilterUseCase.d.ts +5 -0
  103. package/src/Context/usecase/ContextApplyFilterUseCase.js +668 -0
  104. package/src/Context/usecase/ContextBitmapFillUseCase.d.ts +4 -0
  105. package/src/Context/usecase/ContextBitmapFillUseCase.js +210 -0
  106. package/src/Context/usecase/ContextBitmapStrokeUseCase.d.ts +4 -0
  107. package/src/Context/usecase/ContextBitmapStrokeUseCase.js +119 -0
  108. package/src/Context/usecase/ContextClipUseCase.d.ts +5 -0
  109. package/src/Context/usecase/ContextClipUseCase.js +101 -0
  110. package/src/Context/usecase/ContextContainerEndLayerUseCase.d.ts +5 -0
  111. package/src/Context/usecase/ContextContainerEndLayerUseCase.js +476 -0
  112. package/src/Context/usecase/ContextDrawArraysInstancedUseCase.d.ts +6 -0
  113. package/src/Context/usecase/ContextDrawArraysInstancedUseCase.js +135 -0
  114. package/src/Context/usecase/ContextDrawIndirectUseCase.d.ts +6 -0
  115. package/src/Context/usecase/ContextDrawIndirectUseCase.js +154 -0
  116. package/src/Context/usecase/ContextGradientFillUseCase.d.ts +4 -0
  117. package/src/Context/usecase/ContextGradientFillUseCase.js +230 -0
  118. package/src/Context/usecase/ContextGradientStrokeUseCase.d.ts +4 -0
  119. package/src/Context/usecase/ContextGradientStrokeUseCase.js +138 -0
  120. package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.d.ts +6 -0
  121. package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.js +213 -0
  122. package/src/Context.d.ts +430 -0
  123. package/src/Context.js +2453 -0
  124. package/src/FillTexturePool.d.ts +6 -0
  125. package/src/FillTexturePool.js +72 -0
  126. package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.d.ts +10 -0
  127. package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.js +214 -0
  128. package/src/Filter/BevelFilterShader.d.ts +2 -0
  129. package/src/Filter/BevelFilterShader.js +107 -0
  130. package/src/Filter/BitmapFilterShader.d.ts +2 -0
  131. package/src/Filter/BitmapFilterShader.js +207 -0
  132. package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.d.ts +16 -0
  133. package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.js +243 -0
  134. package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.d.ts +40 -0
  135. package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.js +51 -0
  136. package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.d.ts +25 -0
  137. package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.js +180 -0
  138. package/src/Filter/BlurFilterShader.d.ts +5 -0
  139. package/src/Filter/BlurFilterShader.js +109 -0
  140. package/src/Filter/BlurFilterUseCase.d.ts +36 -0
  141. package/src/Filter/BlurFilterUseCase.js +85 -0
  142. package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.d.ts +12 -0
  143. package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.js +90 -0
  144. package/src/Filter/ColorMatrixFilterShader.d.ts +4 -0
  145. package/src/Filter/ColorMatrixFilterShader.js +51 -0
  146. package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.d.ts +6 -0
  147. package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.js +144 -0
  148. package/src/Filter/ConvolutionFilterShader.d.ts +2 -0
  149. package/src/Filter/ConvolutionFilterShader.js +115 -0
  150. package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.d.ts +6 -0
  151. package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.js +172 -0
  152. package/src/Filter/DisplacementMapFilterShader.d.ts +2 -0
  153. package/src/Filter/DisplacementMapFilterShader.js +114 -0
  154. package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.d.ts +24 -0
  155. package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.js +179 -0
  156. package/src/Filter/DropShadowFilterShader.d.ts +4 -0
  157. package/src/Filter/DropShadowFilterShader.js +93 -0
  158. package/src/Filter/FilterGradientLUTCache.d.ts +29 -0
  159. package/src/Filter/FilterGradientLUTCache.js +84 -0
  160. package/src/Filter/FilterOffset.d.ts +8 -0
  161. package/src/Filter/FilterOffset.js +10 -0
  162. package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.d.ts +24 -0
  163. package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.js +143 -0
  164. package/src/Filter/GlowFilterShader.d.ts +4 -0
  165. package/src/Filter/GlowFilterShader.js +66 -0
  166. package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.d.ts +29 -0
  167. package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.js +216 -0
  168. package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.d.ts +29 -0
  169. package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.js +164 -0
  170. package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.d.ts +4 -0
  171. package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.js +23 -0
  172. package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.d.ts +4 -0
  173. package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.js +28 -0
  174. package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.d.ts +11 -0
  175. package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.js +19 -0
  176. package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.d.ts +23 -0
  177. package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.js +125 -0
  178. package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.d.ts +14 -0
  179. package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.js +23 -0
  180. package/src/FrameBufferManager.d.ts +24 -0
  181. package/src/FrameBufferManager.js +161 -0
  182. package/src/Gradient/GradientLUTCache.d.ts +61 -0
  183. package/src/Gradient/GradientLUTCache.js +153 -0
  184. package/src/Gradient/GradientLUTGenerator.d.ts +30 -0
  185. package/src/Gradient/GradientLUTGenerator.js +202 -0
  186. package/src/Grid.d.ts +18 -0
  187. package/src/Grid.js +21 -0
  188. package/src/Mask/service/MaskBeginMaskService.d.ts +9 -0
  189. package/src/Mask/service/MaskBeginMaskService.js +22 -0
  190. package/src/Mask/service/MaskEndMaskService.d.ts +15 -0
  191. package/src/Mask/service/MaskEndMaskService.js +36 -0
  192. package/src/Mask/service/MaskSetMaskBoundsService.d.ts +13 -0
  193. package/src/Mask/service/MaskSetMaskBoundsService.js +36 -0
  194. package/src/Mask/service/MaskUnionMaskService.d.ts +4 -0
  195. package/src/Mask/service/MaskUnionMaskService.js +74 -0
  196. package/src/Mask/usecase/MaskBindUseCase.d.ts +10 -0
  197. package/src/Mask/usecase/MaskBindUseCase.js +20 -0
  198. package/src/Mask/usecase/MaskLeaveMaskUseCase.d.ts +13 -0
  199. package/src/Mask/usecase/MaskLeaveMaskUseCase.js +51 -0
  200. package/src/Mask.d.ts +12 -0
  201. package/src/Mask.js +41 -0
  202. package/src/Mesh/service/MeshFillGenerateService.d.ts +19 -0
  203. package/src/Mesh/service/MeshFillGenerateService.js +76 -0
  204. package/src/Mesh/service/MeshLerpService.d.ts +13 -0
  205. package/src/Mesh/service/MeshLerpService.js +17 -0
  206. package/src/Mesh/service/MeshStrokeFillGenerateService.d.ts +19 -0
  207. package/src/Mesh/service/MeshStrokeFillGenerateService.js +76 -0
  208. package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.d.ts +13 -0
  209. package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.js +65 -0
  210. package/src/Mesh/usecase/MeshFillGenerateUseCase.d.ts +12 -0
  211. package/src/Mesh/usecase/MeshFillGenerateUseCase.js +48 -0
  212. package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.d.ts +13 -0
  213. package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.js +65 -0
  214. package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.d.ts +14 -0
  215. package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.js +28 -0
  216. package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.d.ts +18 -0
  217. package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.js +54 -0
  218. package/src/Mesh/usecase/MeshStrokeGenerateUseCase.d.ts +25 -0
  219. package/src/Mesh/usecase/MeshStrokeGenerateUseCase.js +608 -0
  220. package/src/PathCommand.d.ts +123 -0
  221. package/src/PathCommand.js +317 -0
  222. package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.d.ts +11 -0
  223. package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.js +35 -0
  224. package/src/SamplerCache/service/SamplerCacheGenerateKeyService.d.ts +13 -0
  225. package/src/SamplerCache/service/SamplerCacheGenerateKeyService.js +15 -0
  226. package/src/SamplerCache/service/SamplerCacheGetOrCreateService.d.ts +15 -0
  227. package/src/SamplerCache/service/SamplerCacheGetOrCreateService.js +30 -0
  228. package/src/SamplerCache.d.ts +18 -0
  229. package/src/SamplerCache.js +61 -0
  230. package/src/Shader/BlendModeShader.d.ts +51 -0
  231. package/src/Shader/BlendModeShader.js +71 -0
  232. package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.d.ts +12 -0
  233. package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.js +28 -0
  234. package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.d.ts +13 -0
  235. package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.js +61 -0
  236. package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.d.ts +19 -0
  237. package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.js +37 -0
  238. package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.d.ts +11 -0
  239. package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.js +24 -0
  240. package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.d.ts +14 -0
  241. package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.js +24 -0
  242. package/src/Shader/PipelineManager.d.ts +57 -0
  243. package/src/Shader/PipelineManager.js +2868 -0
  244. package/src/Shader/ShaderInstancedManager.d.ts +8 -0
  245. package/src/Shader/ShaderInstancedManager.js +18 -0
  246. package/src/Shader/ShaderSource.d.ts +60 -0
  247. package/src/Shader/ShaderSource.js +518 -0
  248. package/src/Shader/wgsl/common/SharedWgsl.d.ts +5 -0
  249. package/src/Shader/wgsl/common/SharedWgsl.js +37 -0
  250. package/src/Shader/wgsl/fragment/BasicFragment.d.ts +2 -0
  251. package/src/Shader/wgsl/fragment/BasicFragment.js +28 -0
  252. package/src/Shader/wgsl/fragment/BitmapFragment.d.ts +1 -0
  253. package/src/Shader/wgsl/fragment/BitmapFragment.js +43 -0
  254. package/src/Shader/wgsl/fragment/BlendFragment.d.ts +8 -0
  255. package/src/Shader/wgsl/fragment/BlendFragment.js +63 -0
  256. package/src/Shader/wgsl/fragment/EffectFragment.d.ts +6 -0
  257. package/src/Shader/wgsl/fragment/EffectFragment.js +324 -0
  258. package/src/Shader/wgsl/fragment/FillFragment.d.ts +1 -0
  259. package/src/Shader/wgsl/fragment/FillFragment.js +28 -0
  260. package/src/Shader/wgsl/fragment/FilterFragment.d.ts +10 -0
  261. package/src/Shader/wgsl/fragment/FilterFragment.js +212 -0
  262. package/src/Shader/wgsl/fragment/GradientFragment.d.ts +3 -0
  263. package/src/Shader/wgsl/fragment/GradientFragment.js +118 -0
  264. package/src/Shader/wgsl/fragment/InstancedFragment.d.ts +1 -0
  265. package/src/Shader/wgsl/fragment/InstancedFragment.js +20 -0
  266. package/src/Shader/wgsl/fragment/MaskFragment.d.ts +1 -0
  267. package/src/Shader/wgsl/fragment/MaskFragment.js +17 -0
  268. package/src/Shader/wgsl/fragment/StencilFragment.d.ts +2 -0
  269. package/src/Shader/wgsl/fragment/StencilFragment.js +33 -0
  270. package/src/Shader/wgsl/vertex/BasicVertex.d.ts +1 -0
  271. package/src/Shader/wgsl/vertex/BasicVertex.js +37 -0
  272. package/src/Shader/wgsl/vertex/BitmapVertex.d.ts +1 -0
  273. package/src/Shader/wgsl/vertex/BitmapVertex.js +43 -0
  274. package/src/Shader/wgsl/vertex/FillVertex.d.ts +1 -0
  275. package/src/Shader/wgsl/vertex/FillVertex.js +35 -0
  276. package/src/Shader/wgsl/vertex/FilterVertex.d.ts +12 -0
  277. package/src/Shader/wgsl/vertex/FilterVertex.js +193 -0
  278. package/src/Shader/wgsl/vertex/GradientVertex.d.ts +1 -0
  279. package/src/Shader/wgsl/vertex/GradientVertex.js +44 -0
  280. package/src/Shader/wgsl/vertex/InstancedVertex.d.ts +1 -0
  281. package/src/Shader/wgsl/vertex/InstancedVertex.js +48 -0
  282. package/src/Shader/wgsl/vertex/MaskVertex.d.ts +1 -0
  283. package/src/Shader/wgsl/vertex/MaskVertex.js +36 -0
  284. package/src/Shader/wgsl/vertex/StencilVertex.d.ts +2 -0
  285. package/src/Shader/wgsl/vertex/StencilVertex.js +66 -0
  286. package/src/TextureManager/service/TextureManagerInitializeSamplersService.d.ts +11 -0
  287. package/src/TextureManager/service/TextureManagerInitializeSamplersService.js +48 -0
  288. package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.d.ts +13 -0
  289. package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.js +30 -0
  290. package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.d.ts +15 -0
  291. package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.js +26 -0
  292. package/src/TextureManager.d.ts +15 -0
  293. package/src/TextureManager.js +87 -0
  294. package/src/TexturePool/service/TexturePoolCleanupService.d.ts +14 -0
  295. package/src/TexturePool/service/TexturePoolCleanupService.js +28 -0
  296. package/src/TexturePool/service/TexturePoolEvictOldestService.d.ts +11 -0
  297. package/src/TexturePool/service/TexturePoolEvictOldestService.js +24 -0
  298. package/src/TexturePool/service/TexturePoolReleaseService.d.ts +13 -0
  299. package/src/TexturePool/service/TexturePoolReleaseService.js +22 -0
  300. package/src/TexturePool/usecase/TexturePoolAcquireUseCase.d.ts +19 -0
  301. package/src/TexturePool/usecase/TexturePoolAcquireUseCase.js +90 -0
  302. package/src/TexturePool.d.ts +69 -0
  303. package/src/TexturePool.js +151 -0
  304. package/src/WebGPUUtil.d.ts +102 -0
  305. package/src/WebGPUUtil.js +157 -0
  306. package/src/index.d.ts +1 -0
  307. package/src/index.js +1 -0
  308. package/src/interface/IAttachmentObject.d.ts +41 -0
  309. package/src/interface/IAttachmentObject.js +1 -0
  310. package/src/interface/IBlendMode.d.ts +1 -0
  311. package/src/interface/IBlendMode.js +1 -0
  312. package/src/interface/IBlendState.d.ts +8 -0
  313. package/src/interface/IBlendState.js +1 -0
  314. package/src/interface/IBounds.d.ts +6 -0
  315. package/src/interface/IBounds.js +1 -0
  316. package/src/interface/ICachedBindGroup.d.ts +8 -0
  317. package/src/interface/ICachedBindGroup.js +1 -0
  318. package/src/interface/IColorBufferObject.d.ts +17 -0
  319. package/src/interface/IColorBufferObject.js +1 -0
  320. package/src/interface/IComplexBlendItem.d.ts +19 -0
  321. package/src/interface/IComplexBlendItem.js +1 -0
  322. package/src/interface/IFilterConfig.d.ts +29 -0
  323. package/src/interface/IFilterConfig.js +1 -0
  324. package/src/interface/IGradientLUTData.d.ts +8 -0
  325. package/src/interface/IGradientLUTData.js +1 -0
  326. package/src/interface/IGradientStop.d.ts +11 -0
  327. package/src/interface/IGradientStop.js +1 -0
  328. package/src/interface/ILocalFilterConfig.d.ts +21 -0
  329. package/src/interface/ILocalFilterConfig.js +1 -0
  330. package/src/interface/IMeshResult.d.ts +8 -0
  331. package/src/interface/IMeshResult.js +1 -0
  332. package/src/interface/IPath.d.ts +8 -0
  333. package/src/interface/IPath.js +1 -0
  334. package/src/interface/IPoint.d.ts +4 -0
  335. package/src/interface/IPoint.js +1 -0
  336. package/src/interface/IPooledBuffer.d.ts +8 -0
  337. package/src/interface/IPooledBuffer.js +1 -0
  338. package/src/interface/IPooledTexture.d.ts +17 -0
  339. package/src/interface/IPooledTexture.js +1 -0
  340. package/src/interface/IQuadraticSegment.d.ts +9 -0
  341. package/src/interface/IQuadraticSegment.js +1 -0
  342. package/src/interface/IRectangleInfo.d.ts +13 -0
  343. package/src/interface/IRectangleInfo.js +1 -0
  344. package/src/interface/IStencilBufferObject.d.ts +16 -0
  345. package/src/interface/IStencilBufferObject.js +1 -0
  346. package/src/interface/IStorageBufferConfig.d.ts +40 -0
  347. package/src/interface/IStorageBufferConfig.js +1 -0
  348. package/src/interface/ITextureObject.d.ts +16 -0
  349. package/src/interface/ITextureObject.js +1 -0
@@ -0,0 +1,313 @@
1
+ /**
2
+ * @description Compute Pipeline Manager
3
+ * Compute Shaderパイプラインの管理
4
+ *
5
+ * Compute Shaderは並列処理に最適で、フィルター処理を高速化。
6
+ * 特に大きなブラー半径(64+)の場合、20-35%の高速化が期待できる。
7
+ *
8
+ * @class
9
+ */
10
+ export class ComputePipelineManager {
11
+ /**
12
+ * @constructor
13
+ * @param {GPUDevice} device - WebGPU device
14
+ */
15
+ constructor(device) {
16
+ Object.defineProperty(this, "device", {
17
+ enumerable: true,
18
+ configurable: true,
19
+ writable: true,
20
+ value: void 0
21
+ });
22
+ Object.defineProperty(this, "pipelines", {
23
+ enumerable: true,
24
+ configurable: true,
25
+ writable: true,
26
+ value: void 0
27
+ });
28
+ Object.defineProperty(this, "bindGroupLayouts", {
29
+ enumerable: true,
30
+ configurable: true,
31
+ writable: true,
32
+ value: void 0
33
+ });
34
+ this.device = device;
35
+ this.pipelines = new Map();
36
+ this.bindGroupLayouts = new Map();
37
+ this.initializeBlurPipelines();
38
+ }
39
+ /**
40
+ * @description ブラー用Compute Pipelineを初期化
41
+ * @private
42
+ */
43
+ initializeBlurPipelines() {
44
+ // ブラーCompute Shader用のBindGroupLayoutを作成
45
+ const blurBindGroupLayout = this.device.createBindGroupLayout({
46
+ "label": "blur_compute_bind_group_layout",
47
+ "entries": [
48
+ {
49
+ // 入力テクスチャ
50
+ "binding": 0,
51
+ "visibility": GPUShaderStage.COMPUTE,
52
+ "texture": {
53
+ "sampleType": "float"
54
+ }
55
+ },
56
+ {
57
+ // 出力テクスチャ(Storage Texture)
58
+ "binding": 1,
59
+ "visibility": GPUShaderStage.COMPUTE,
60
+ "storageTexture": {
61
+ "access": "write-only",
62
+ "format": "rgba8unorm"
63
+ }
64
+ },
65
+ {
66
+ // パラメータ(方向、ブラー半径など)
67
+ "binding": 2,
68
+ "visibility": GPUShaderStage.COMPUTE,
69
+ "buffer": {
70
+ "type": "uniform"
71
+ }
72
+ }
73
+ ]
74
+ });
75
+ this.bindGroupLayouts.set("blur_compute", blurBindGroupLayout);
76
+ // 水平/垂直ブラーパイプラインを作成
77
+ // 同じシェーダーを使用し、方向はuniformで制御
78
+ this.createBlurComputePipeline("blur_compute_horizontal");
79
+ this.createBlurComputePipeline("blur_compute_vertical");
80
+ // 共有メモリ版(大半径用)
81
+ this.createBlurComputePipeline("blur_compute_shared_horizontal", true);
82
+ this.createBlurComputePipeline("blur_compute_shared_vertical", true);
83
+ }
84
+ /**
85
+ * @description ブラーCompute Pipelineを作成
86
+ * @param {string} name - パイプライン名
87
+ * @private
88
+ */
89
+ createBlurComputePipeline(name, useSharedMemory = false) {
90
+ const shaderModule = this.device.createShaderModule({
91
+ "label": `${name}_shader`,
92
+ "code": useSharedMemory ? this.getSharedBlurComputeShaderCode() : this.getBlurComputeShaderCode()
93
+ });
94
+ const pipelineLayout = this.device.createPipelineLayout({
95
+ "label": `${name}_layout`,
96
+ "bindGroupLayouts": [this.bindGroupLayouts.get("blur_compute")]
97
+ });
98
+ const pipeline = this.device.createComputePipeline({
99
+ "label": name,
100
+ "layout": pipelineLayout,
101
+ "compute": {
102
+ "module": shaderModule,
103
+ "entryPoint": "main"
104
+ }
105
+ });
106
+ this.pipelines.set(name, pipeline);
107
+ }
108
+ /**
109
+ * @description ブラーCompute Shaderコードを生成
110
+ * ボックスブラー(均一加重平均)を使用。Fragment Shaderと同一出力。
111
+ * @return {string} WGSLシェーダーコード
112
+ * @private
113
+ */
114
+ getBlurComputeShaderCode() {
115
+ return `
116
+ struct BlurParams {
117
+ direction: vec2<f32>, // (1,0) or (0,1)
118
+ radius: f32, // ブラー半径
119
+ fraction: f32, // 端ピクセルのブレンド割合
120
+ texSize: vec2<f32>, // テクスチャサイズ
121
+ samples: f32, // サンプル数
122
+ padding: f32, // パディング(16バイトアライメント)
123
+ }
124
+
125
+ @group(0) @binding(0) var inputTexture: texture_2d<f32>;
126
+ @group(0) @binding(1) var outputTexture: texture_storage_2d<rgba8unorm, write>;
127
+ @group(0) @binding(2) var<uniform> params: BlurParams;
128
+
129
+ const WORKGROUP_SIZE: u32 = 16u;
130
+
131
+ @compute @workgroup_size(16, 16, 1)
132
+ fn main(
133
+ @builtin(global_invocation_id) globalId: vec3<u32>
134
+ ) {
135
+ let texSize = vec2<u32>(u32(params.texSize.x), u32(params.texSize.y));
136
+ let radius = i32(params.radius);
137
+
138
+ let outCoord = globalId.xy;
139
+
140
+ if (outCoord.x >= texSize.x || outCoord.y >= texSize.y) {
141
+ return;
142
+ }
143
+
144
+ let direction = vec2<i32>(i32(params.direction.x), i32(params.direction.y));
145
+ let samples = params.samples;
146
+ let fraction = params.fraction;
147
+
148
+ var color = vec4<f32>(0.0);
149
+
150
+ for (var i = -radius; i <= radius; i = i + 1) {
151
+ var sampleCoord = vec2<i32>(outCoord) + direction * i;
152
+
153
+ sampleCoord.x = clamp(sampleCoord.x, 0, i32(texSize.x) - 1);
154
+ sampleCoord.y = clamp(sampleCoord.y, 0, i32(texSize.y) - 1);
155
+
156
+ let sample = textureLoad(inputTexture, vec2<u32>(sampleCoord), 0);
157
+
158
+ // 端ピクセルにfraction重みを適用(Fragment Shaderと同じロジック)
159
+ if (i == -radius || i == radius) {
160
+ color = color + sample * fraction;
161
+ } else {
162
+ color = color + sample;
163
+ }
164
+ }
165
+
166
+ color = color / samples;
167
+
168
+ textureStore(outputTexture, outCoord, color);
169
+ }
170
+ `;
171
+ }
172
+ /**
173
+ * @description 共有メモリ版ブラーCompute Shaderコードを生成
174
+ * ワークグループ共有メモリでテクスチャ読み込みの重複を排除。
175
+ * radius >= 8 で通常版より高速。
176
+ * @return {string} WGSLシェーダーコード
177
+ * @private
178
+ */
179
+ getSharedBlurComputeShaderCode() {
180
+ return `
181
+ struct BlurParams {
182
+ direction: vec2<f32>,
183
+ radius: f32,
184
+ fraction: f32,
185
+ texSize: vec2<f32>,
186
+ samples: f32,
187
+ padding: f32,
188
+ }
189
+
190
+ @group(0) @binding(0) var inputTexture: texture_2d<f32>;
191
+ @group(0) @binding(1) var outputTexture: texture_storage_2d<rgba8unorm, write>;
192
+ @group(0) @binding(2) var<uniform> params: BlurParams;
193
+
194
+ const TILE: u32 = 16u;
195
+ const MAX_APRON: u32 = 24u;
196
+ const SHARED_W: u32 = TILE + 2u * MAX_APRON;
197
+
198
+ var<workgroup> tile: array<vec4<f32>, ${(16 + 2 * 24) * 16}>;
199
+
200
+ @compute @workgroup_size(16, 16, 1)
201
+ fn main(
202
+ @builtin(global_invocation_id) globalId: vec3<u32>,
203
+ @builtin(local_invocation_id) localId: vec3<u32>,
204
+ @builtin(workgroup_id) workgroupId: vec3<u32>
205
+ ) {
206
+ let texSize = vec2<u32>(u32(params.texSize.x), u32(params.texSize.y));
207
+ let radius = u32(params.radius);
208
+ let apron = min(radius, MAX_APRON);
209
+ let isHorizontal = params.direction.x > 0.5;
210
+ let fraction = params.fraction;
211
+ let samples = params.samples;
212
+
213
+ let threadIdx = localId.x + localId.y * TILE;
214
+ let totalThreads = TILE * TILE;
215
+
216
+ if (isHorizontal) {
217
+ let sharedWidth = TILE + 2u * apron;
218
+ let baseX = workgroupId.x * TILE;
219
+ let y = globalId.y;
220
+ let clampedY = clamp(y, 0u, max(texSize.y, 1u) - 1u);
221
+
222
+ // 全スレッドが協調ロード(範囲外スレッドもclampされた座標でロード)
223
+ var idx = threadIdx;
224
+ loop {
225
+ if (idx >= sharedWidth) { break; }
226
+ let gx = i32(baseX) + i32(idx) - i32(apron);
227
+ let cx = u32(clamp(gx, 0, i32(max(texSize.x, 1u)) - 1));
228
+ tile[localId.y * SHARED_W + idx] = textureLoad(inputTexture, vec2<u32>(cx, clampedY), 0);
229
+ idx += totalThreads;
230
+ }
231
+
232
+ // 全スレッドがバリアに到達(早期returnなし)
233
+ workgroupBarrier();
234
+
235
+ // 範囲内のスレッドのみ出力
236
+ let outX = globalId.x;
237
+ if (outX < texSize.x && y < texSize.y) {
238
+ let iRadius = i32(radius);
239
+ var color = vec4<f32>(0.0);
240
+ for (var i = -iRadius; i <= iRadius; i = i + 1) {
241
+ let tileIdx = i32(localId.x) + i32(apron) + i;
242
+ let s = tile[localId.y * SHARED_W + u32(clamp(tileIdx, 0, i32(sharedWidth) - 1))];
243
+ if (i == -iRadius || i == iRadius) {
244
+ color += s * fraction;
245
+ } else {
246
+ color += s;
247
+ }
248
+ }
249
+ textureStore(outputTexture, vec2<u32>(outX, y), color / samples);
250
+ }
251
+ } else {
252
+ let sharedHeight = TILE + 2u * apron;
253
+ let baseY = workgroupId.y * TILE;
254
+ let x = globalId.x;
255
+ let clampedX = clamp(x, 0u, max(texSize.x, 1u) - 1u);
256
+
257
+ // 全スレッドが協調ロード(範囲外スレッドもclampされた座標でロード)
258
+ var idx = threadIdx;
259
+ loop {
260
+ if (idx >= sharedHeight) { break; }
261
+ let gy = i32(baseY) + i32(idx) - i32(apron);
262
+ let cy = u32(clamp(gy, 0, i32(max(texSize.y, 1u)) - 1));
263
+ tile[idx * TILE + localId.x] = textureLoad(inputTexture, vec2<u32>(clampedX, cy), 0);
264
+ idx += totalThreads;
265
+ }
266
+
267
+ // 全スレッドがバリアに到達(早期returnなし)
268
+ workgroupBarrier();
269
+
270
+ // 範囲内のスレッドのみ出力
271
+ let outY = globalId.y;
272
+ if (x < texSize.x && outY < texSize.y) {
273
+ let iRadius = i32(radius);
274
+ var color = vec4<f32>(0.0);
275
+ for (var i = -iRadius; i <= iRadius; i = i + 1) {
276
+ let tileIdx = i32(localId.y) + i32(apron) + i;
277
+ let s = tile[u32(clamp(tileIdx, 0, i32(sharedHeight) - 1)) * TILE + localId.x];
278
+ if (i == -iRadius || i == iRadius) {
279
+ color += s * fraction;
280
+ } else {
281
+ color += s;
282
+ }
283
+ }
284
+ textureStore(outputTexture, vec2<u32>(x, outY), color / samples);
285
+ }
286
+ }
287
+ }
288
+ `;
289
+ }
290
+ /**
291
+ * @description パイプラインを取得
292
+ * @param {string} name - パイプライン名
293
+ * @return {GPUComputePipeline | undefined}
294
+ */
295
+ getPipeline(name) {
296
+ return this.pipelines.get(name);
297
+ }
298
+ /**
299
+ * @description BindGroupLayoutを取得
300
+ * @param {string} name - レイアウト名
301
+ * @return {GPUBindGroupLayout | undefined}
302
+ */
303
+ getBindGroupLayout(name) {
304
+ return this.bindGroupLayouts.get(name);
305
+ }
306
+ /**
307
+ * @description リソースを破棄
308
+ */
309
+ destroy() {
310
+ this.pipelines.clear();
311
+ this.bindGroupLayouts.clear();
312
+ }
313
+ }
@@ -0,0 +1,21 @@
1
+ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
2
+ import type { ComputePipelineManager } from "../ComputePipelineManager";
3
+ /**
4
+ * @description Compute Shaderでブラーを実行(ボックスブラー)
5
+ * Execute box blur using Compute Shader
6
+ *
7
+ * Fragment Shaderと同一のボックスブラーアルゴリズムを使用。
8
+ *
9
+ * @param {GPUDevice} device - WebGPU device
10
+ * @param {GPUCommandEncoder} commandEncoder - コマンドエンコーダー
11
+ * @param {ComputePipelineManager} computePipelineManager - Compute Pipeline Manager
12
+ * @param {IAttachmentObject} source - 入力アタッチメント
13
+ * @param {IAttachmentObject} dest - 出力アタッチメント
14
+ * @param {boolean} isHorizontal - 水平ブラーかどうか
15
+ * @param {number} blur - ブラー量(bufferBlurX/Y相当)
16
+ * @param {object} [bufferManager] - バッファマネージャー(プール化用)
17
+ * @return {void}
18
+ */
19
+ export declare const execute: (device: GPUDevice, commandEncoder: GPUCommandEncoder, computePipelineManager: ComputePipelineManager, source: IAttachmentObject, dest: IAttachmentObject, isHorizontal: boolean, blur: number, bufferManager?: {
20
+ acquireAndWriteUniformBuffer(data: Float32Array, byteLength?: number): GPUBuffer;
21
+ }) => void;
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @description プリアロケートされたFloat32Array (サイズ8)
3
+ */
4
+ const $params8 = new Float32Array(8);
5
+ /**
6
+ * @description プリアロケートされたBindGroupEntry配列 (バインディング3つ)
7
+ */
8
+ const $computeEntries3 = [
9
+ { "binding": 0, "resource": null },
10
+ { "binding": 1, "resource": null },
11
+ { "binding": 2, "resource": { "buffer": null } }
12
+ ];
13
+ /**
14
+ * @description プリアロケートされたComputePassDescriptor
15
+ */
16
+ const $labelH = { "label": "blur_compute_pass_h" };
17
+ const $labelV = { "label": "blur_compute_pass_v" };
18
+ /**
19
+ * @description Compute Shaderでブラーを実行(ボックスブラー)
20
+ * Execute box blur using Compute Shader
21
+ *
22
+ * Fragment Shaderと同一のボックスブラーアルゴリズムを使用。
23
+ *
24
+ * @param {GPUDevice} device - WebGPU device
25
+ * @param {GPUCommandEncoder} commandEncoder - コマンドエンコーダー
26
+ * @param {ComputePipelineManager} computePipelineManager - Compute Pipeline Manager
27
+ * @param {IAttachmentObject} source - 入力アタッチメント
28
+ * @param {IAttachmentObject} dest - 出力アタッチメント
29
+ * @param {boolean} isHorizontal - 水平ブラーかどうか
30
+ * @param {number} blur - ブラー量(bufferBlurX/Y相当)
31
+ * @param {object} [bufferManager] - バッファマネージャー(プール化用)
32
+ * @return {void}
33
+ */
34
+ export const execute = (device, commandEncoder, computePipelineManager, source, dest, isHorizontal, blur, bufferManager) => {
35
+ // radius 8~24 の場合は共有メモリ版を使用(MAX_APRON=24の制限)
36
+ const halfBlur = Math.ceil(blur * 0.5);
37
+ const useShared = halfBlur >= 8 && halfBlur <= 24;
38
+ const pipelineName = useShared
39
+ ? isHorizontal ? "blur_compute_shared_horizontal" : "blur_compute_shared_vertical"
40
+ : isHorizontal ? "blur_compute_horizontal" : "blur_compute_vertical";
41
+ const pipeline = computePipelineManager.getPipeline(pipelineName);
42
+ const bindGroupLayout = computePipelineManager.getBindGroupLayout("blur_compute");
43
+ if (!pipeline || !bindGroupLayout) {
44
+ return;
45
+ }
46
+ // ボックスブラーパラメータ(Fragment ShaderのcalculateDirectionalBlurParamsと同一ロジック)
47
+ const fraction = 1 - (halfBlur - blur * 0.5);
48
+ const samples = 1 + blur;
49
+ $params8[0] = isHorizontal ? 1.0 : 0.0; // direction.x
50
+ $params8[1] = isHorizontal ? 0.0 : 1.0; // direction.y
51
+ $params8[2] = halfBlur; // radius (halfBlur)
52
+ $params8[3] = fraction; // fraction
53
+ $params8[4] = source.width; // texSize.x
54
+ $params8[5] = source.height; // texSize.y
55
+ $params8[6] = samples; // samples
56
+ $params8[7] = 0.0; // padding
57
+ const paramsBuffer = bufferManager
58
+ ? bufferManager.acquireAndWriteUniformBuffer($params8)
59
+ : (() => {
60
+ const buf = device.createBuffer({
61
+ "size": $params8.byteLength,
62
+ "usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
63
+ });
64
+ device.queue.writeBuffer(buf, 0, $params8);
65
+ return buf;
66
+ })();
67
+ $computeEntries3[0].resource = source.texture.view;
68
+ $computeEntries3[1].resource = dest.texture.view;
69
+ $computeEntries3[2].resource.buffer = paramsBuffer;
70
+ const bindGroup = device.createBindGroup({
71
+ "layout": bindGroupLayout,
72
+ "entries": $computeEntries3
73
+ });
74
+ const computePass = commandEncoder.beginComputePass(isHorizontal ? $labelH : $labelV);
75
+ computePass.setPipeline(pipeline);
76
+ computePass.setBindGroup(0, bindGroup);
77
+ const workgroupsX = Math.ceil(dest.width / 16);
78
+ const workgroupsY = Math.ceil(dest.height / 16);
79
+ computePass.dispatchWorkgroups(workgroupsX, workgroupsY, 1);
80
+ computePass.end();
81
+ };
@@ -0,0 +1 @@
1
+ export declare const execute: (bitmap_matrix: Float32Array, context_matrix: Float32Array) => Float32Array;
@@ -0,0 +1,74 @@
1
+ export const execute = (bitmap_matrix, context_matrix) => {
2
+ // ビットマップ行列 [a, b, c, d, tx, ty]
3
+ const ba = bitmap_matrix[0];
4
+ const bb = bitmap_matrix[1];
5
+ const bc = bitmap_matrix[2];
6
+ const bd = bitmap_matrix[3];
7
+ const btx = bitmap_matrix[4];
8
+ const bty = bitmap_matrix[5];
9
+ // コンテキスト行列 [a, b, 0, c, d, 0, tx, ty, 1]
10
+ const ca = context_matrix[0];
11
+ const cb = context_matrix[1];
12
+ const cc = context_matrix[3];
13
+ const cd = context_matrix[4];
14
+ const ctx = context_matrix[6];
15
+ const cty = context_matrix[7];
16
+ // Step 1: コンテキスト行列 × ビットマップ行列 を計算
17
+ // WebGLの$context.transform()と同じ順序: new = context × bitmap
18
+ // Flash Matrix乗算: C × B where
19
+ // C = [ca, cb, cc, cd, ctx, cty], B = [ba, bb, bc, bd, btx, bty]
20
+ // 結果:
21
+ // ma = ca*ba + cc*bb (x'のxからの係数)
22
+ // mb = ca*bc + cc*bd (x'のyからの係数)
23
+ // mc = cb*ba + cd*bb (y'のxからの係数)
24
+ // md = cb*bc + cd*bd (y'のyからの係数)
25
+ const ma = ca * ba + cc * bb;
26
+ const mb = ca * bc + cc * bd;
27
+ const mc = cb * ba + cd * bb;
28
+ const md = cb * bc + cd * bd;
29
+ const mtx = ca * btx + cc * bty + ctx;
30
+ const mty = cb * btx + cd * bty + cty;
31
+ // Step 2: 合成行列の逆行列を計算
32
+ const det = ma * md - mb * mc;
33
+ if (Math.abs(det) < 1e-10) {
34
+ // 特異行列の場合は単位行列を返す
35
+ return new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);
36
+ }
37
+ const invDet = 1 / det;
38
+ const ia = md * invDet;
39
+ const ib = -mb * invDet;
40
+ const ic = -mc * invDet;
41
+ const id = ma * invDet;
42
+ // Flash Matrix inverse translation:
43
+ // inv_tx = (c*ty - d*tx)/det = (mb*mty - md*mtx)/det
44
+ // inv_ty = (b*tx - a*ty)/det = (mc*mtx - ma*mty)/det
45
+ const itx = (mb * mty - md * mtx) * invDet;
46
+ const ity = (mc * mtx - ma * mty) * invDet;
47
+ // Step 3: 逆行列 × コンテキスト行列 を計算
48
+ // 逆行列変換: x' = ia*x + ib*y + itx, y' = ic*x + id*y + ity
49
+ // コンテキスト変換: x' = ca*x + cc*y + ctx, y' = cb*x + cd*y + cty
50
+ // 合成結果:
51
+ // ra = ia*ca + ib*cb (x'のxからの係数)
52
+ // rb = ia*cc + ib*cd (x'のyからの係数)
53
+ // rc = ic*ca + id*cb (y'のxからの係数)
54
+ // rd = ic*cc + id*cd (y'のyからの係数)
55
+ const ra = ia * ca + ib * cb;
56
+ const rb = ia * cc + ib * cd;
57
+ const rc = ic * ca + id * cb;
58
+ const rd = ic * cc + id * cd;
59
+ const rtx = ia * ctx + ib * cty + itx;
60
+ const rty = ic * ctx + id * cty + ity;
61
+ // 結果をFlash Matrix形式に変換
62
+ // ra = x'のxからの係数 = Flash a
63
+ // rb = x'のyからの係数 = Flash c
64
+ // rc = y'のxからの係数 = Flash b
65
+ // rd = y'のyからの係数 = Flash d
66
+ // 列優先形式で出力: col0=(a,b,0), col1=(c,d,0), col2=(tx,ty,1)
67
+ // WGSLのmat3x3は列優先で、各列が連続して格納される
68
+ // Flash変換: x' = a*x + c*y + tx, y' = b*x + d*y + ty
69
+ return new Float32Array([
70
+ ra, rc, 0, // col0: (Flash_a, Flash_b, 0)
71
+ rb, rd, 0, // col1: (Flash_c, Flash_d, 0)
72
+ rtx, rty, 1 // col2: (tx, ty, 1)
73
+ ]);
74
+ };
@@ -0,0 +1,4 @@
1
+ export declare const execute: (gradientMatrix: Float32Array, _contextMatrix: Float32Array, type: number) => {
2
+ inverseMatrix: Float32Array;
3
+ linearPoints: Float32Array | null;
4
+ };
@@ -0,0 +1,88 @@
1
+ export const execute = (gradientMatrix, _contextMatrix, type) => {
2
+ // グラデーション行列
3
+ const ga = gradientMatrix[0];
4
+ const gb = gradientMatrix[1];
5
+ const gc = gradientMatrix[2];
6
+ const gd = gradientMatrix[3];
7
+ const gtx = gradientMatrix[4];
8
+ const gty = gradientMatrix[5];
9
+ if (type === 0) {
10
+ // === Linear gradient ===
11
+ // WebGL版と同じ: $linearGradientXY(matrix)で点a, bを計算
12
+ // 点を計算(グラデーション行列を使って)
13
+ // x0, y0: (-819.2, -819.2)を変換
14
+ // x1, y1: (819.2, -819.2)を変換
15
+ // x2, y2: (-819.2, 819.2)を変換
16
+ const x0 = -819.2 * ga - 819.2 * gc + gtx;
17
+ const x1 = 819.2 * ga - 819.2 * gc + gtx;
18
+ const x2 = -819.2 * ga + 819.2 * gc + gtx;
19
+ const y0 = -819.2 * gb - 819.2 * gd + gty;
20
+ const y1 = 819.2 * gb - 819.2 * gd + gty;
21
+ const y2 = -819.2 * gb + 819.2 * gd + gty;
22
+ let vx2 = x2 - x0;
23
+ let vy2 = y2 - y0;
24
+ const r1 = Math.sqrt(vx2 * vx2 + vy2 * vy2);
25
+ if (r1) {
26
+ vx2 = vx2 / r1;
27
+ vy2 = vy2 / r1;
28
+ }
29
+ else {
30
+ vx2 = 0;
31
+ vy2 = 0;
32
+ }
33
+ const r2 = (x1 - x0) * vx2 + (y1 - y0) * vy2;
34
+ // 点a, b(グラデーションの始点と終点)
35
+ // これらはグラデーション行列で変換された座標空間にある
36
+ const linearPoints = new Float32Array([
37
+ x0 + r2 * vx2, y0 + r2 * vy2, // 点a
38
+ x1, y1 // 点b
39
+ ]);
40
+ // WebGL版と同じ:
41
+ // v_uv = (inverse_matrix * uv_matrix * position).xy
42
+ // ここで inverse_matrix = inverse(context), uv_matrix = context
43
+ // つまり v_uv = inverse(context) * context * position = position (生の頂点座標)
44
+ //
45
+ // linearPointsはグラデーション行列変換後の座標空間にあり、
46
+ // フラグメントシェーダーで p = v_uv (生の頂点座標) と linearPoints を使って
47
+ // t = dot(ab, ap) / dot(ab, ab) を計算する
48
+ //
49
+ // シェーダーでは v_uv = inverseMatrix * position なので、
50
+ // inverseMatrix = 単位行列 にすることで v_uv = position になる
51
+ const inverseMatrix = new Float32Array([
52
+ 1, 0, 0,
53
+ 0, 1, 0,
54
+ 0, 0, 1
55
+ ]);
56
+ return { inverseMatrix, linearPoints };
57
+ }
58
+ // === Radial gradient ===
59
+ // WebGPU版: グラデーション行列の逆行列のみを使用
60
+ // シェーダーでは v_uv = inverse(gradient) * position
61
+ // これにより、ローカル座標をグラデーション空間(-819.2 to 819.2)に変換
62
+ //
63
+ // 注意: WebGL版とは異なり、contextMatrixにはアトラスオフセットが含まれているため、
64
+ // contextMatrixを使った合成は行わない
65
+ // グラデーション行列の行列式
66
+ const det = ga * gd - gb * gc;
67
+ if (Math.abs(det) < 1e-10) {
68
+ return {
69
+ "inverseMatrix": new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]),
70
+ "linearPoints": null
71
+ };
72
+ }
73
+ const invDet = 1 / det;
74
+ // inverse(gradient) を計算
75
+ const invA = gd * invDet;
76
+ const invB = -gb * invDet;
77
+ const invC = -gc * invDet;
78
+ const invD = ga * invDet;
79
+ const invTx = (gc * gty - gd * gtx) * invDet;
80
+ const invTy = (gb * gtx - ga * gty) * invDet;
81
+ // 逆行列(シェーダーでは v_uv = inverseMatrix * position)
82
+ const inverseMatrix = new Float32Array([
83
+ invA, invB, 0,
84
+ invC, invD, 0,
85
+ invTx, invTy, 1
86
+ ]);
87
+ return { inverseMatrix, "linearPoints": null };
88
+ };
@@ -0,0 +1,2 @@
1
+ import type { PipelineManager } from "../../Shader/PipelineManager";
2
+ export declare const execute: (render_pass_encoder: GPURenderPassEncoder, pipeline_manager: PipelineManager, vertex_buffer: GPUBuffer, vertex_count: number, bind_group: GPUBindGroup, uniform_offset: number, use_atlas_target: boolean, use_stencil_pipeline?: boolean, _clip_level?: number) => void;
@@ -0,0 +1,28 @@
1
+ import { $isMaskDrawing, $getMaskStencilReference } from "../../Mask";
2
+ export const execute = (render_pass_encoder, pipeline_manager, vertex_buffer, vertex_count, bind_group, uniform_offset, use_atlas_target, use_stencil_pipeline = false, _clip_level = 1) => {
3
+ let pipelineName;
4
+ if (use_atlas_target) {
5
+ pipelineName = "fill";
6
+ }
7
+ else if (use_stencil_pipeline) {
8
+ if ($isMaskDrawing()) {
9
+ return;
10
+ }
11
+ pipelineName = "fill_bgra_stencil";
12
+ }
13
+ else {
14
+ pipelineName = "fill_bgra";
15
+ }
16
+ const pipeline = pipeline_manager.getPipeline(pipelineName);
17
+ if (!pipeline) {
18
+ console.error(`[WebGPU] ${pipelineName} pipeline not found`);
19
+ return;
20
+ }
21
+ render_pass_encoder.setPipeline(pipeline);
22
+ render_pass_encoder.setVertexBuffer(0, vertex_buffer);
23
+ render_pass_encoder.setBindGroup(0, bind_group, [uniform_offset]);
24
+ if (use_stencil_pipeline && !use_atlas_target && !$isMaskDrawing()) {
25
+ render_pass_encoder.setStencilReference($getMaskStencilReference());
26
+ }
27
+ render_pass_encoder.draw(vertex_count, 1, 0, 0);
28
+ };
@@ -0,0 +1,2 @@
1
+ import type { PipelineManager } from "../../Shader/PipelineManager";
2
+ export declare const execute: (render_pass_encoder: GPURenderPassEncoder, pipeline_manager: PipelineManager, vertex_buffer: GPUBuffer, vertex_count: number, bind_group: GPUBindGroup, uniform_offset: number) => void;
@@ -0,0 +1,19 @@
1
+ export const execute = (render_pass_encoder, pipeline_manager, vertex_buffer, vertex_count, bind_group, uniform_offset) => {
2
+ // === Pass 1: ステンシル書き込み(両面を1回で処理) ===
3
+ const stencilWritePipeline = pipeline_manager.getPipeline("stencil_write_main");
4
+ if (stencilWritePipeline) {
5
+ render_pass_encoder.setPipeline(stencilWritePipeline);
6
+ render_pass_encoder.setStencilReference(0);
7
+ render_pass_encoder.setVertexBuffer(0, vertex_buffer);
8
+ render_pass_encoder.setBindGroup(0, bind_group, [uniform_offset]);
9
+ render_pass_encoder.draw(vertex_count, 1, 0, 0);
10
+ }
11
+ // === Pass 2: ステンシルフィル(色描画) ===
12
+ const fillPipeline = pipeline_manager.getPipeline("stencil_fill_main");
13
+ if (fillPipeline) {
14
+ render_pass_encoder.setPipeline(fillPipeline);
15
+ render_pass_encoder.setStencilReference(0);
16
+ render_pass_encoder.setBindGroup(0, bind_group, [uniform_offset]);
17
+ render_pass_encoder.draw(vertex_count, 1, 0, 0);
18
+ }
19
+ };
@@ -0,0 +1,2 @@
1
+ import type { PipelineManager } from "../../Shader/PipelineManager";
2
+ export declare const execute: (render_pass_encoder: GPURenderPassEncoder, pipeline_manager: PipelineManager, vertex_buffer: GPUBuffer, vertex_count: number, bind_group: GPUBindGroup, uniform_offset: number) => void;
@@ -0,0 +1,19 @@
1
+ export const execute = (render_pass_encoder, pipeline_manager, vertex_buffer, vertex_count, bind_group, uniform_offset) => {
2
+ // === Pass 1: ステンシル書き込み(両面を1回で処理) ===
3
+ const stencilWritePipeline = pipeline_manager.getPipeline("stencil_write_atlas");
4
+ if (stencilWritePipeline) {
5
+ render_pass_encoder.setPipeline(stencilWritePipeline);
6
+ render_pass_encoder.setStencilReference(0);
7
+ render_pass_encoder.setVertexBuffer(0, vertex_buffer);
8
+ render_pass_encoder.setBindGroup(0, bind_group, [uniform_offset]);
9
+ render_pass_encoder.draw(vertex_count, 1, 0, 0);
10
+ }
11
+ // === Pass 2: ステンシルフィル(色描画) ===
12
+ const fillPipeline = pipeline_manager.getPipeline("stencil_fill_atlas");
13
+ if (fillPipeline) {
14
+ render_pass_encoder.setPipeline(fillPipeline);
15
+ render_pass_encoder.setStencilReference(0);
16
+ render_pass_encoder.setBindGroup(0, bind_group, [uniform_offset]);
17
+ render_pass_encoder.draw(vertex_count, 1, 0, 0);
18
+ }
19
+ };
@@ -0,0 +1,5 @@
1
+ import type { Node } from "@next2d/texture-packer";
2
+ import type { IBlendMode } from "../../interface/IBlendMode";
3
+ import type { ILocalFilterConfig } from "../../interface/ILocalFilterConfig";
4
+ import type { BufferManager } from "../../BufferManager";
5
+ export declare const execute: (node: Node, width: number, height: number, is_bitmap: boolean, matrix: Float32Array, color_transform: Float32Array, blend_mode: IBlendMode, bounds: Float32Array, params: Float32Array, config: ILocalFilterConfig, main_texture_view: GPUTextureView, buffer_manager: BufferManager) => void;