@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,4 @@
1
+ import type { IPath } from "../../interface/IPath";
2
+ import type { BufferManager } from "../../BufferManager";
3
+ import type { PipelineManager } from "../../Shader/PipelineManager";
4
+ 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;
@@ -0,0 +1,210 @@
1
+ import { execute as meshFillGenerateUseCase } from "../../Mesh/usecase/MeshFillGenerateUseCase";
2
+ import { execute as contextComputeBitmapMatrixService } from "../service/ContextComputeBitmapMatrixService";
3
+ import { $acquireFillTexture, $releaseFillTexture } from "../../FillTexturePool";
4
+ import { $isMaskDrawing, $getMaskStencilReference } from "../../Mask";
5
+ const $bitmapSamplerCache = new Map();
6
+ const $uniformData32 = new Float32Array(32);
7
+ const $stencilData16 = new Float32Array(16);
8
+ let $stencilDynamicBindGroup = null;
9
+ let $stencilDynamicBuffer = null;
10
+ const $entries3 = [
11
+ { "binding": 0, "resource": { "buffer": null } },
12
+ { "binding": 1, "resource": null },
13
+ { "binding": 2, "resource": null }
14
+ ];
15
+ 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
+ // MeshFillGenerateUseCaseで頂点データを生成(4 floats/vertex: position + bezier)
17
+ const mesh = meshFillGenerateUseCase(path_vertices);
18
+ if (mesh.indexCount === 0) {
19
+ return null;
20
+ }
21
+ // 頂点バッファを取得(プールから再利用)
22
+ const vertexBuffer = buffer_manager.acquireVertexBuffer(mesh.buffer.byteLength, mesh.buffer);
23
+ // ビットマップテクスチャをプールから取得
24
+ const bitmapTexture = $acquireFillTexture(device, width, height);
25
+ // ピクセルデータをテクスチャに転送
26
+ device.queue.writeTexture({ "texture": bitmapTexture }, pixels.buffer, { "bytesPerRow": width * 4, "rowsPerImage": height, "offset": pixels.byteOffset }, { width, height });
27
+ // ビットマップ変換行列を計算(コンテキスト行列と合成して逆行列)
28
+ const computedBitmapMatrix = contextComputeBitmapMatrixService(bitmap_matrix, context_matrix);
29
+ // 色とmatrix
30
+ const red = fill_style[0];
31
+ const green = fill_style[1];
32
+ const blue = fill_style[2];
33
+ const alpha = fill_style[3];
34
+ const a = context_matrix[0];
35
+ const b = context_matrix[1];
36
+ const c = context_matrix[3];
37
+ const d = context_matrix[4];
38
+ const tx = context_matrix[6];
39
+ const ty = context_matrix[7];
40
+ // Uniformバッファを作成(BitmapUniforms: 28 floats = 112 bytes)
41
+ // bitmapMatrix: mat3x3<f32> (48 bytes)
42
+ $uniformData32[0] = computedBitmapMatrix[0]; // col0.x = a
43
+ $uniformData32[1] = computedBitmapMatrix[1]; // col0.y = c
44
+ $uniformData32[2] = computedBitmapMatrix[2]; // col0.z = 0
45
+ $uniformData32[3] = 0; // padding
46
+ $uniformData32[4] = computedBitmapMatrix[3]; // col1.x = b
47
+ $uniformData32[5] = computedBitmapMatrix[4]; // col1.y = d
48
+ $uniformData32[6] = computedBitmapMatrix[5]; // col1.z = 0
49
+ $uniformData32[7] = 0; // padding
50
+ $uniformData32[8] = computedBitmapMatrix[6]; // col2.x = tx
51
+ $uniformData32[9] = computedBitmapMatrix[7]; // col2.y = ty
52
+ $uniformData32[10] = computedBitmapMatrix[8]; // col2.z = 1
53
+ $uniformData32[11] = 0; // padding
54
+ // ビットマップパラメータ
55
+ $uniformData32[12] = width;
56
+ $uniformData32[13] = height;
57
+ $uniformData32[14] = repeat ? 1.0 : 0.0;
58
+ $uniformData32[15] = 0; // padding
59
+ // color
60
+ $uniformData32[16] = red;
61
+ $uniformData32[17] = green;
62
+ $uniformData32[18] = blue;
63
+ $uniformData32[19] = alpha;
64
+ // contextMatrix(viewport正規化済み)
65
+ $uniformData32[20] = a / viewport_width;
66
+ $uniformData32[21] = b / viewport_height;
67
+ $uniformData32[22] = 0;
68
+ $uniformData32[23] = 0;
69
+ $uniformData32[24] = c / viewport_width;
70
+ $uniformData32[25] = d / viewport_height;
71
+ $uniformData32[26] = 0;
72
+ $uniformData32[27] = 0;
73
+ // contextMatrix2
74
+ $uniformData32[28] = tx / viewport_width;
75
+ $uniformData32[29] = ty / viewport_height;
76
+ $uniformData32[30] = 1;
77
+ $uniformData32[31] = 0;
78
+ const uniformBuffer = buffer_manager.acquireAndWriteUniformBuffer($uniformData32);
79
+ // サンプラーを取得(キャッシュ済み)
80
+ const samplerKey = `bitmap_${smooth ? "s" : "n"}_${repeat ? "r" : "c"}`;
81
+ let sampler = $bitmapSamplerCache.get(samplerKey);
82
+ if (!sampler) {
83
+ sampler = device.createSampler({
84
+ "magFilter": smooth ? "linear" : "nearest",
85
+ "minFilter": smooth ? "linear" : "nearest",
86
+ "addressModeU": repeat ? "repeat" : "clamp-to-edge",
87
+ "addressModeV": repeat ? "repeat" : "clamp-to-edge"
88
+ });
89
+ $bitmapSamplerCache.set(samplerKey, sampler);
90
+ }
91
+ // バインドグループを作成
92
+ const bindGroupLayout = pipeline_manager.getBindGroupLayout("bitmap_fill");
93
+ if (!bindGroupLayout) {
94
+ console.error("[WebGPU] bitmap_fill bind group layout not found");
95
+ $releaseFillTexture(bitmapTexture);
96
+ return null;
97
+ }
98
+ $entries3[0].resource.buffer = uniformBuffer;
99
+ $entries3[1].resource = sampler;
100
+ $entries3[2].resource = bitmapTexture.createView();
101
+ const bindGroup = device.createBindGroup({
102
+ "layout": bindGroupLayout,
103
+ "entries": $entries3
104
+ });
105
+ // ステンシル書き込みパス用のDynamic BindGroup + offset作成ヘルパー
106
+ const createStencilDynamic = () => {
107
+ const dynamicLayout = pipeline_manager.getBindGroupLayout("fill_dynamic");
108
+ if (!dynamicLayout) {
109
+ return null;
110
+ }
111
+ // FillUniforms: color(16) + matrix0(16) + matrix1(16) + matrix2(16) = 64 bytes
112
+ $stencilData16[0] = red;
113
+ $stencilData16[1] = green;
114
+ $stencilData16[2] = blue;
115
+ $stencilData16[3] = alpha;
116
+ $stencilData16[4] = a / viewport_width;
117
+ $stencilData16[5] = b / viewport_height;
118
+ $stencilData16[6] = 0;
119
+ $stencilData16[7] = 0;
120
+ $stencilData16[8] = c / viewport_width;
121
+ $stencilData16[9] = d / viewport_height;
122
+ $stencilData16[10] = 0;
123
+ $stencilData16[11] = 0;
124
+ $stencilData16[12] = tx / viewport_width;
125
+ $stencilData16[13] = ty / viewport_height;
126
+ $stencilData16[14] = 1;
127
+ $stencilData16[15] = 0;
128
+ const offset = buffer_manager.dynamicUniform.allocate($stencilData16);
129
+ const currentBuffer = buffer_manager.dynamicUniform.getBuffer();
130
+ if (!$stencilDynamicBindGroup || $stencilDynamicBuffer !== currentBuffer) {
131
+ $stencilDynamicBindGroup = device.createBindGroup({
132
+ "layout": dynamicLayout,
133
+ "entries": [{
134
+ "binding": 0,
135
+ "resource": {
136
+ "buffer": currentBuffer,
137
+ "size": 256
138
+ }
139
+ }]
140
+ });
141
+ $stencilDynamicBuffer = currentBuffer;
142
+ }
143
+ return { "bindGroup": $stencilDynamicBindGroup, "offset": offset };
144
+ };
145
+ // アトラス描画時は2パスステンシル処理を使用(WebGL版と同じ)
146
+ if (use_atlas_target && use_stencil_pipeline) {
147
+ // === Pass 1: ステンシル書き込み(カラー書き込みなし) ===
148
+ const stencilWritePipeline = pipeline_manager.getPipeline("stencil_write");
149
+ if (stencilWritePipeline) {
150
+ const stencilDynamic = createStencilDynamic();
151
+ if (stencilDynamic) {
152
+ render_pass_encoder.setPipeline(stencilWritePipeline);
153
+ render_pass_encoder.setStencilReference(0);
154
+ render_pass_encoder.setVertexBuffer(0, vertexBuffer);
155
+ render_pass_encoder.setBindGroup(0, stencilDynamic.bindGroup, [stencilDynamic.offset]);
156
+ render_pass_encoder.draw(mesh.indexCount, 1, 0, 0);
157
+ }
158
+ }
159
+ // === Pass 2: ビットマップ描画(NOT_EQUAL 0) ===
160
+ const bitmapPipeline = pipeline_manager.getPipeline("bitmap_fill_stencil");
161
+ if (bitmapPipeline) {
162
+ render_pass_encoder.setPipeline(bitmapPipeline);
163
+ render_pass_encoder.setStencilReference(0);
164
+ render_pass_encoder.setBindGroup(0, bindGroup);
165
+ render_pass_encoder.draw(mesh.indexCount, 1, 0, 0);
166
+ }
167
+ }
168
+ else {
169
+ // パイプラインを取得
170
+ // - アトラス用: "bitmap_fill" (rgba8unorm, ステンシルなし)
171
+ // - キャンバス用: "bitmap_fill_bgra" (bgra8unorm, ステンシルなし)
172
+ // - マスク描画モード時: 何もしない(clip()でステンシル書き込み)
173
+ // - マスクテストモード時: "bitmap_fill_bgra_stencil" (bgra8unorm, ステンシルテストあり)
174
+ let pipelineName;
175
+ if (use_atlas_target) {
176
+ pipelineName = "bitmap_fill";
177
+ }
178
+ else if (use_stencil_pipeline) {
179
+ if ($isMaskDrawing()) {
180
+ // マスク描画モード: ステンシルへの書き込みはclip()で行うため、ここでは何もしない
181
+ // clip()がINVERTでステンシルを書き込み、重複書き込みによるINVERT打ち消しを防止
182
+ // ビットマップテクスチャは解放してnullを返す
183
+ $releaseFillTexture(bitmapTexture);
184
+ return null;
185
+ }
186
+ // マスクテストモード: ステンシル値をテストしてビットマップを描画
187
+ pipelineName = "bitmap_fill_bgra_stencil";
188
+ }
189
+ else {
190
+ pipelineName = "bitmap_fill_bgra";
191
+ }
192
+ const pipeline = pipeline_manager.getPipeline(pipelineName);
193
+ if (!pipeline) {
194
+ console.error(`[WebGPU] ${pipelineName} pipeline not found`);
195
+ $releaseFillTexture(bitmapTexture);
196
+ return null;
197
+ }
198
+ // 描画
199
+ render_pass_encoder.setPipeline(pipeline);
200
+ render_pass_encoder.setVertexBuffer(0, vertexBuffer);
201
+ render_pass_encoder.setBindGroup(0, bindGroup);
202
+ // マスクテストモード時はステンシル参照値を設定
203
+ if (use_stencil_pipeline && !use_atlas_target && !$isMaskDrawing()) {
204
+ render_pass_encoder.setStencilReference($getMaskStencilReference());
205
+ }
206
+ render_pass_encoder.draw(mesh.indexCount, 1, 0, 0);
207
+ }
208
+ // ビットマップテクスチャを返す(Context.tsでフレーム終了時に解放)
209
+ return bitmapTexture;
210
+ };
@@ -0,0 +1,4 @@
1
+ import type { IPath } from "../../interface/IPath";
2
+ import type { BufferManager } from "../../BufferManager";
3
+ import type { PipelineManager } from "../../Shader/PipelineManager";
4
+ 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;
@@ -0,0 +1,119 @@
1
+ import { execute as meshBitmapStrokeGenerateUseCase } from "../../Mesh/usecase/MeshBitmapStrokeGenerateUseCase";
2
+ import { execute as contextComputeBitmapMatrixService } from "../service/ContextComputeBitmapMatrixService";
3
+ import { $acquireFillTexture, $releaseFillTexture } from "../../FillTexturePool";
4
+ const $bitmapSamplerCache = new Map();
5
+ const $uniformData32 = new Float32Array(32);
6
+ const $entries3 = [
7
+ { "binding": 0, "resource": { "buffer": null } },
8
+ { "binding": 1, "resource": null },
9
+ { "binding": 2, "resource": null }
10
+ ];
11
+ 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
+ // ビットマップストローク用メッシュを生成(4 floats/vertex: position + bezier)
13
+ const mesh = meshBitmapStrokeGenerateUseCase(vertices, thickness);
14
+ if (mesh.indexCount === 0) {
15
+ return null;
16
+ }
17
+ // 頂点バッファを取得(プールから再利用)
18
+ const vertexBuffer = buffer_manager.acquireVertexBuffer(mesh.buffer.byteLength, mesh.buffer);
19
+ // ビットマップテクスチャをプールから取得
20
+ const bitmapTexture = $acquireFillTexture(device, width, height);
21
+ // ピクセルデータをテクスチャに転送
22
+ device.queue.writeTexture({ "texture": bitmapTexture }, pixels.buffer, { "bytesPerRow": width * 4, "rowsPerImage": height, "offset": pixels.byteOffset }, { width, height });
23
+ // ビットマップ変換行列を計算(コンテキスト行列と合成して逆行列)
24
+ const computedBitmapMatrix = contextComputeBitmapMatrixService(bitmap_matrix, context_matrix);
25
+ // 色とmatrix
26
+ const red = 1;
27
+ const green = 1;
28
+ const blue = 1;
29
+ const alpha = stroke_style[3] > 0 ? stroke_style[3] : 1;
30
+ const a = context_matrix[0];
31
+ const b = context_matrix[1];
32
+ const c = context_matrix[3];
33
+ const d = context_matrix[4];
34
+ const tx = context_matrix[6];
35
+ const ty = context_matrix[7];
36
+ // Uniformバッファを作成(BitmapUniforms: 32 floats = 128 bytes)
37
+ $uniformData32[0] = computedBitmapMatrix[0]; // col0.x = a
38
+ $uniformData32[1] = computedBitmapMatrix[1]; // col0.y = c
39
+ $uniformData32[2] = computedBitmapMatrix[2]; // col0.z = 0
40
+ $uniformData32[3] = 0; // padding
41
+ $uniformData32[4] = computedBitmapMatrix[3]; // col1.x = b
42
+ $uniformData32[5] = computedBitmapMatrix[4]; // col1.y = d
43
+ $uniformData32[6] = computedBitmapMatrix[5]; // col1.z = 0
44
+ $uniformData32[7] = 0; // padding
45
+ $uniformData32[8] = computedBitmapMatrix[6]; // col2.x = tx
46
+ $uniformData32[9] = computedBitmapMatrix[7]; // col2.y = ty
47
+ $uniformData32[10] = computedBitmapMatrix[8]; // col2.z = 1
48
+ $uniformData32[11] = 0; // padding
49
+ // ビットマップパラメータ
50
+ $uniformData32[12] = width;
51
+ $uniformData32[13] = height;
52
+ $uniformData32[14] = repeat ? 1.0 : 0.0;
53
+ $uniformData32[15] = 0; // padding
54
+ // color
55
+ $uniformData32[16] = red;
56
+ $uniformData32[17] = green;
57
+ $uniformData32[18] = blue;
58
+ $uniformData32[19] = alpha;
59
+ // contextMatrix(viewport正規化済み)
60
+ $uniformData32[20] = a / viewport_width;
61
+ $uniformData32[21] = b / viewport_height;
62
+ $uniformData32[22] = 0;
63
+ $uniformData32[23] = 0;
64
+ $uniformData32[24] = c / viewport_width;
65
+ $uniformData32[25] = d / viewport_height;
66
+ $uniformData32[26] = 0;
67
+ $uniformData32[27] = 0;
68
+ $uniformData32[28] = tx / viewport_width;
69
+ $uniformData32[29] = ty / viewport_height;
70
+ $uniformData32[30] = 1;
71
+ $uniformData32[31] = 0;
72
+ const uniformBuffer = buffer_manager.acquireAndWriteUniformBuffer($uniformData32);
73
+ // サンプラーを取得(キャッシュ済み)
74
+ const samplerKey = `bitmap_${smooth ? "s" : "n"}_${repeat ? "r" : "c"}`;
75
+ let sampler = $bitmapSamplerCache.get(samplerKey);
76
+ if (!sampler) {
77
+ sampler = device.createSampler({
78
+ "magFilter": smooth ? "linear" : "nearest",
79
+ "minFilter": smooth ? "linear" : "nearest",
80
+ "addressModeU": repeat ? "repeat" : "clamp-to-edge",
81
+ "addressModeV": repeat ? "repeat" : "clamp-to-edge"
82
+ });
83
+ $bitmapSamplerCache.set(samplerKey, sampler);
84
+ }
85
+ // バインドグループを作成
86
+ const bindGroupLayout = pipeline_manager.getBindGroupLayout("bitmap_fill");
87
+ if (!bindGroupLayout) {
88
+ console.error("[WebGPU] bitmap_fill bind group layout not found");
89
+ $releaseFillTexture(bitmapTexture);
90
+ return null;
91
+ }
92
+ $entries3[0].resource.buffer = uniformBuffer;
93
+ $entries3[1].resource = sampler;
94
+ $entries3[2].resource = bitmapTexture.createView();
95
+ const bindGroup = device.createBindGroup({
96
+ "layout": bindGroupLayout,
97
+ "entries": $entries3
98
+ });
99
+ // パイプラインを取得
100
+ // ストロークのメッシュは各セグメントが独立した凸多角形のため、
101
+ // フィルのような2パスステンシル描画は不要で、直接描画で正しく描画される。
102
+ // ステンシル付きレンダーパスの場合はステンシル互換パイプライン(compare: always)を使用する。
103
+ const pipelineName = use_stencil_pipeline
104
+ ? use_atlas_target ? "bitmap_stroke_atlas" : "bitmap_stroke_bgra"
105
+ : use_atlas_target ? "bitmap_fill" : "bitmap_fill_bgra";
106
+ const pipeline = pipeline_manager.getPipeline(pipelineName);
107
+ if (!pipeline) {
108
+ console.error(`[WebGPU] ${pipelineName} pipeline not found`);
109
+ $releaseFillTexture(bitmapTexture);
110
+ return null;
111
+ }
112
+ // 描画
113
+ render_pass_encoder.setPipeline(pipeline);
114
+ render_pass_encoder.setVertexBuffer(0, vertexBuffer);
115
+ render_pass_encoder.setBindGroup(0, bindGroup);
116
+ render_pass_encoder.draw(mesh.indexCount, 1, 0, 0);
117
+ // ビットマップテクスチャを返す(Context.tsでフレーム終了時に解放)
118
+ return bitmapTexture;
119
+ };
@@ -0,0 +1,5 @@
1
+ import type { IPath } from "../../interface/IPath";
2
+ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
3
+ import type { BufferManager } from "../../BufferManager";
4
+ import type { PipelineManager } from "../../Shader/PipelineManager";
5
+ 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;
@@ -0,0 +1,101 @@
1
+ import { execute as meshFillGenerateUseCase } from "../../Mesh/usecase/MeshFillGenerateUseCase";
2
+ import { execute as maskUnionMaskService } from "../../Mask/service/MaskUnionMaskService";
3
+ import { $clipLevels } from "../../Mask";
4
+ const $clipUniform16 = new Float32Array(16);
5
+ export const execute = (device, render_pass_encoder, buffer_manager, pipeline_manager, current_attachment, path_vertices, context_matrix, fill_style, global_alpha, is_main_attachment = false) => {
6
+ // クリップ境界を取得
7
+ const clipLevel = current_attachment.clipLevel;
8
+ // メッシュを生成
9
+ const viewportWidth = current_attachment.width;
10
+ const viewportHeight = current_attachment.height;
11
+ const red = fill_style[0];
12
+ const green = fill_style[1];
13
+ const blue = fill_style[2];
14
+ const alpha = fill_style[3] * global_alpha;
15
+ if (path_vertices.length === 0) {
16
+ return;
17
+ }
18
+ const mesh = meshFillGenerateUseCase(path_vertices);
19
+ if (mesh.indexCount === 0) {
20
+ return;
21
+ }
22
+ // 頂点バッファを取得(プールから再利用)
23
+ const vertexBuffer = buffer_manager.acquireVertexBuffer(mesh.buffer.byteLength, mesh.buffer);
24
+ // Uniform bufferにcolor/matrixを書き込み
25
+ const a = context_matrix[0];
26
+ const b = context_matrix[1];
27
+ const c = context_matrix[3];
28
+ const d = context_matrix[4];
29
+ const tx = context_matrix[6];
30
+ const ty = context_matrix[7];
31
+ $clipUniform16[0] = red;
32
+ $clipUniform16[1] = green;
33
+ $clipUniform16[2] = blue;
34
+ $clipUniform16[3] = alpha;
35
+ $clipUniform16[4] = a / viewportWidth;
36
+ $clipUniform16[5] = b / viewportHeight;
37
+ $clipUniform16[6] = 0;
38
+ $clipUniform16[7] = 0;
39
+ $clipUniform16[8] = c / viewportWidth;
40
+ $clipUniform16[9] = d / viewportHeight;
41
+ $clipUniform16[10] = 0;
42
+ $clipUniform16[11] = 0;
43
+ $clipUniform16[12] = tx / viewportWidth;
44
+ $clipUniform16[13] = ty / viewportHeight;
45
+ $clipUniform16[14] = 1;
46
+ $clipUniform16[15] = 0;
47
+ // Dynamic Uniform Bufferにデータを書き込み
48
+ const uniformOffset = buffer_manager.dynamicUniform.allocate($clipUniform16);
49
+ // 現在のマスクレベルを取得(WebGL版: $clipLevels.get(clipLevel))
50
+ // レベルは1から始まり、各パスごとにインクリメントされる
51
+ let level = $clipLevels.get(clipLevel) ?? clipLevel;
52
+ // ステンシルパイプラインを取得
53
+ // メインアタッチメント: レベルに対応するパイプライン(stencilWriteMask = 1 << (level - 1))
54
+ // アトラス: 通常のクリップパイプライン
55
+ let pipelineName;
56
+ if (is_main_attachment) {
57
+ // レベルを1-8の範囲にクランプ(8レベルまでサポート)
58
+ const clampedLevel = Math.min(8, Math.max(1, level));
59
+ pipelineName = `clip_write_main_${clampedLevel}`;
60
+ }
61
+ else {
62
+ pipelineName = "clip_write";
63
+ }
64
+ const pipeline = pipeline_manager.getPipeline(pipelineName);
65
+ if (!pipeline) {
66
+ console.error(`[WebGPU] ${pipelineName} pipeline not found`);
67
+ return;
68
+ }
69
+ // Dynamic BindGroupを取得
70
+ const layout = pipeline_manager.getBindGroupLayout("fill_dynamic");
71
+ if (!layout) {
72
+ return;
73
+ }
74
+ const bindGroup = device.createBindGroup({
75
+ "layout": layout,
76
+ "entries": [{
77
+ "binding": 0,
78
+ "resource": {
79
+ "buffer": buffer_manager.dynamicUniform.getBuffer(),
80
+ "size": 256
81
+ }
82
+ }]
83
+ });
84
+ // INVERT操作でマスク形状を描画
85
+ // カバーされたピクセルのステンシル値が反転される(ビット単位)
86
+ // 奇数回カバーされたピクセルのみがマスク領域となる
87
+ render_pass_encoder.setPipeline(pipeline);
88
+ render_pass_encoder.setStencilReference(0); // INVERT操作では参照値は使用されないが、設定は必要
89
+ render_pass_encoder.setVertexBuffer(0, vertexBuffer);
90
+ render_pass_encoder.setBindGroup(0, bindGroup, [uniformOffset]);
91
+ render_pass_encoder.draw(mesh.indexCount, 1, 0, 0);
92
+ // レベルをインクリメント(WebGL版: ++level)
93
+ level++;
94
+ // レベルが8を超えた場合、ステンシルビットをマージして再利用
95
+ // WebGL版: if (level > 7) { maskUnionMaskService(); level = clipLevel + 1; }
96
+ if (level > 8) {
97
+ maskUnionMaskService(device, render_pass_encoder, buffer_manager, pipeline_manager, current_attachment);
98
+ level = clipLevel + 1;
99
+ }
100
+ $clipLevels.set(clipLevel, level);
101
+ };
@@ -0,0 +1,5 @@
1
+ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
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: (tempAttachment: IAttachmentObject, mainAttachment: IAttachmentObject, _tempName: string, blendMode: IBlendMode, matrix: Float32Array, colorTransform: Float32Array | null, useFilter: boolean, filterBounds: Float32Array | null, params: Float32Array | null, uniqueKey: string, filterKey: string, _contentWidth: number, _contentHeight: number, config: ILocalFilterConfig, bufferManager: BufferManager) => void;