@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,84 @@
1
+ /**
2
+ * @description フィルター用グラデーションLUTの共有アタッチメント
3
+ * Shared attachment for filter gradient LUT
4
+ * 注意: グラデーションLUTは共有テクスチャに描画されるため、
5
+ * キャッシュは使用しません。各フレームで再描画が必要です。
6
+ * Note: Gradient LUT is drawn to a shared texture, so caching
7
+ * is not used. Re-drawing is required each frame.
8
+ *
9
+ * @type {IAttachmentObject | null}
10
+ * @private
11
+ */
12
+ let $filterGradientAttachment = null;
13
+ /**
14
+ * @description GPUDeviceの参照
15
+ * @private
16
+ */
17
+ let $device = null;
18
+ /**
19
+ * @description GPUDeviceを設定
20
+ * Set GPUDevice
21
+ *
22
+ * @param {GPUDevice} device
23
+ * @return {void}
24
+ * @method
25
+ * @protected
26
+ */
27
+ export const $setFilterGradientLUTDevice = (device) => {
28
+ $device = device;
29
+ };
30
+ /**
31
+ * @description フィルター用グラデーションLUTのAttachmentObjectを返却
32
+ * Returns AttachmentObject for filter gradient LUT
33
+ *
34
+ * @return {IAttachmentObject}
35
+ * @method
36
+ * @protected
37
+ */
38
+ export const $getFilterGradientAttachmentObject = () => {
39
+ if (!$filterGradientAttachment && $device) {
40
+ const resolution = 256;
41
+ // 1xN テクスチャを作成
42
+ const texture = $device.createTexture({
43
+ "size": { "width": resolution, "height": 1 },
44
+ "format": "rgba8unorm",
45
+ "usage": GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT
46
+ });
47
+ $filterGradientAttachment = {
48
+ "id": -256, // フィルター用に負のIDを使用
49
+ "width": resolution,
50
+ "height": 1,
51
+ "clipLevel": 0,
52
+ "msaa": false,
53
+ "mask": false,
54
+ "color": null,
55
+ "texture": {
56
+ "id": -256,
57
+ "resource": texture,
58
+ "view": texture.createView(),
59
+ "width": resolution,
60
+ "height": 1,
61
+ "area": resolution,
62
+ "smooth": true
63
+ },
64
+ "stencil": null,
65
+ "msaaTexture": null,
66
+ "msaaStencil": null
67
+ };
68
+ }
69
+ return $filterGradientAttachment;
70
+ };
71
+ /**
72
+ * @description フィルター用グラデーションLUTの共有アタッチメントを破棄してクリア
73
+ * Destroy and clear filter gradient LUT shared attachment
74
+ *
75
+ * @return {void}
76
+ * @method
77
+ * @protected
78
+ */
79
+ export const $clearFilterGradientAttachment = () => {
80
+ if ($filterGradientAttachment?.texture?.resource) {
81
+ $filterGradientAttachment.texture.resource.destroy();
82
+ }
83
+ $filterGradientAttachment = null;
84
+ };
@@ -0,0 +1,8 @@
1
+ import type { IPoint } from "../interface/IPoint";
2
+ /**
3
+ * @description フィルター処理のオフセット値
4
+ * Offset values for filter processing
5
+ * @type {IPoint}
6
+ * @protected
7
+ */
8
+ export declare const $offset: IPoint;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @description フィルター処理のオフセット値
3
+ * Offset values for filter processing
4
+ * @type {IPoint}
5
+ * @protected
6
+ */
7
+ export const $offset = {
8
+ "x": 0,
9
+ "y": 0
10
+ };
@@ -0,0 +1,24 @@
1
+ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
2
+ import type { IFilterConfig } from "../../interface/IFilterConfig";
3
+ /**
4
+ * @description グローフィルターを適用
5
+ * Apply glow filter
6
+ *
7
+ * UV変換方式で元テクスチャとブラーテクスチャを直接サンプリング。
8
+ * copyTextureToTextureと一時テクスチャを使用しない最適化版。
9
+ *
10
+ * @param {IAttachmentObject} sourceAttachment - 入力テクスチャ
11
+ * @param {Float32Array} matrix - 変換行列
12
+ * @param {number} color - グロー色 (32bit整数)
13
+ * @param {number} alpha - アルファ
14
+ * @param {number} blurX - X方向ブラー量
15
+ * @param {number} blurY - Y方向ブラー量
16
+ * @param {number} strength - グロー強度
17
+ * @param {number} quality - クオリティ
18
+ * @param {boolean} inner - インナーグロー
19
+ * @param {boolean} knockout - ノックアウトモード
20
+ * @param {number} devicePixelRatio - デバイスピクセル比
21
+ * @param {IFilterConfig} config - WebGPUリソース設定
22
+ * @return {IAttachmentObject} - フィルター適用後のアタッチメント
23
+ */
24
+ export declare const execute: (sourceAttachment: IAttachmentObject, matrix: Float32Array, color: number, alpha: number, blurX: number, blurY: number, strength: number, quality: number, inner: boolean, knockout: boolean, devicePixelRatio: number, config: IFilterConfig) => IAttachmentObject;
@@ -0,0 +1,143 @@
1
+ import { $offset } from "../FilterOffset";
2
+ import { execute as filterApplyBlurFilterUseCase } from "../BlurFilter/FilterApplyBlurFilterUseCase";
3
+ /**
4
+ * @description プリアロケートされたFloat32Array (サイズ16)
5
+ */
6
+ const $uniform16 = new Float32Array(16);
7
+ /**
8
+ * @description プリアロケートされたBindGroupEntry配列 (バインディング4つ)
9
+ */
10
+ const $entries4 = [
11
+ { "binding": 0, "resource": { "buffer": null } },
12
+ { "binding": 1, "resource": null },
13
+ { "binding": 2, "resource": null },
14
+ { "binding": 3, "resource": null }
15
+ ];
16
+ /**
17
+ * @description 32bit整数からRGB値を抽出(プリマルチプライドアルファ対応)
18
+ */
19
+ const intToRGBA = (color, alpha) => {
20
+ const r = (color >> 16 & 0xFF) / 255 * alpha;
21
+ const g = (color >> 8 & 0xFF) / 255 * alpha;
22
+ const b = (color & 0xFF) / 255 * alpha;
23
+ return [r, g, b, alpha];
24
+ };
25
+ /**
26
+ * @description グローフィルターを適用
27
+ * Apply glow filter
28
+ *
29
+ * UV変換方式で元テクスチャとブラーテクスチャを直接サンプリング。
30
+ * copyTextureToTextureと一時テクスチャを使用しない最適化版。
31
+ *
32
+ * @param {IAttachmentObject} sourceAttachment - 入力テクスチャ
33
+ * @param {Float32Array} matrix - 変換行列
34
+ * @param {number} color - グロー色 (32bit整数)
35
+ * @param {number} alpha - アルファ
36
+ * @param {number} blurX - X方向ブラー量
37
+ * @param {number} blurY - Y方向ブラー量
38
+ * @param {number} strength - グロー強度
39
+ * @param {number} quality - クオリティ
40
+ * @param {boolean} inner - インナーグロー
41
+ * @param {boolean} knockout - ノックアウトモード
42
+ * @param {number} devicePixelRatio - デバイスピクセル比
43
+ * @param {IFilterConfig} config - WebGPUリソース設定
44
+ * @return {IAttachmentObject} - フィルター適用後のアタッチメント
45
+ */
46
+ export const execute = (sourceAttachment, matrix, color, alpha, blurX, blurY, strength, quality, inner, knockout, devicePixelRatio, config) => {
47
+ const { device, commandEncoder, frameBufferManager, pipelineManager, textureManager } = config;
48
+ // 元のオフセットを保存
49
+ const baseOffsetX = $offset.x;
50
+ const baseOffsetY = $offset.y;
51
+ const baseWidth = sourceAttachment.width;
52
+ const baseHeight = sourceAttachment.height;
53
+ // ブラーフィルターを適用(元テクスチャを保持)
54
+ const blurAttachment = filterApplyBlurFilterUseCase(sourceAttachment, matrix, blurX, blurY, quality, devicePixelRatio, config);
55
+ const blurWidth = blurAttachment.width;
56
+ const blurHeight = blurAttachment.height;
57
+ const blurOffsetX = $offset.x;
58
+ const blurOffsetY = $offset.y;
59
+ // 出力サイズを決定
60
+ const width = inner ? baseWidth : blurWidth;
61
+ const height = inner ? baseHeight : blurHeight;
62
+ // オフセット差分を計算
63
+ const offsetDiffX = blurOffsetX - baseOffsetX;
64
+ const offsetDiffY = blurOffsetY - baseOffsetY;
65
+ // UV変換パラメータ計算(GradientGlowFilterと同じパターン)
66
+ const baseTextureX = inner ? 0 : offsetDiffX;
67
+ const baseTextureY = inner ? 0 : offsetDiffY;
68
+ const blurTextureX = inner ? -offsetDiffX : 0;
69
+ const blurTextureY = inner ? -offsetDiffY : 0;
70
+ const baseScaleX = width / baseWidth;
71
+ const baseScaleY = height / baseHeight;
72
+ const baseOffsetUVX = baseTextureX / baseWidth;
73
+ const baseOffsetUVY = baseTextureY / baseHeight;
74
+ const blurScaleX = width / blurWidth;
75
+ const blurScaleY = height / blurHeight;
76
+ const blurOffsetUVX = blurTextureX / blurWidth;
77
+ const blurOffsetUVY = blurTextureY / blurHeight;
78
+ // 出力アタッチメントを作成
79
+ const destAttachment = frameBufferManager.createTemporaryAttachment(width, height);
80
+ const pipeline = pipelineManager.getFilterPipeline("glow_filter", {
81
+ "IS_INNER": inner ? 1 : 0,
82
+ "IS_KNOCKOUT": knockout ? 1 : 0
83
+ });
84
+ const bindGroupLayout = pipelineManager.getBindGroupLayout("glow_filter");
85
+ if (!pipeline || !bindGroupLayout) {
86
+ console.error("[WebGPU GlowFilter] Pipeline not found");
87
+ frameBufferManager.releaseTemporaryAttachment(blurAttachment);
88
+ return sourceAttachment;
89
+ }
90
+ // サンプラーを作成
91
+ const sampler = textureManager.createSampler("glow_sampler", true);
92
+ // ユニフォームバッファを作成
93
+ // color: vec4<f32> (16 bytes)
94
+ // baseScale: vec2<f32>, baseOffset: vec2<f32> (16 bytes)
95
+ // blurScale: vec2<f32>, blurOffset: vec2<f32> (16 bytes)
96
+ // strength: f32, inner: f32, knockout: f32, _padding: f32 (16 bytes)
97
+ // Total: 64 bytes
98
+ const [r, g, b, a] = intToRGBA(color, alpha);
99
+ $uniform16[0] = r;
100
+ $uniform16[1] = g;
101
+ $uniform16[2] = b;
102
+ $uniform16[3] = a;
103
+ $uniform16[4] = baseScaleX;
104
+ $uniform16[5] = baseScaleY;
105
+ $uniform16[6] = baseOffsetUVX;
106
+ $uniform16[7] = baseOffsetUVY;
107
+ $uniform16[8] = blurScaleX;
108
+ $uniform16[9] = blurScaleY;
109
+ $uniform16[10] = blurOffsetUVX;
110
+ $uniform16[11] = blurOffsetUVY;
111
+ $uniform16[12] = strength;
112
+ $uniform16[13] = inner ? 1.0 : 0.0;
113
+ $uniform16[14] = knockout ? 1.0 : 0.0;
114
+ $uniform16[15] = 0.0;
115
+ const uniformBuffer = config.bufferManager
116
+ ? config.bufferManager.acquireAndWriteUniformBuffer($uniform16)
117
+ : device.createBuffer({
118
+ "size": $uniform16.byteLength,
119
+ "usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
120
+ });
121
+ if (!config.bufferManager) {
122
+ device.queue.writeBuffer(uniformBuffer, 0, $uniform16);
123
+ }
124
+ // バインドグループを作成(元テクスチャとブラーテクスチャを直接バインド)
125
+ $entries4[0].resource.buffer = uniformBuffer;
126
+ $entries4[1].resource = sampler;
127
+ $entries4[2].resource = blurAttachment.texture.view;
128
+ $entries4[3].resource = sourceAttachment.texture.view;
129
+ const bindGroup = device.createBindGroup({
130
+ "layout": bindGroupLayout,
131
+ "entries": $entries4
132
+ });
133
+ // レンダーパスを実行
134
+ const renderPassDescriptor = frameBufferManager.createRenderPassDescriptor(destAttachment.texture.view, 0, 0, 0, 0, "clear");
135
+ const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
136
+ passEncoder.setPipeline(pipeline);
137
+ passEncoder.setBindGroup(0, bindGroup);
138
+ passEncoder.draw(6, 1, 0, 0);
139
+ passEncoder.end();
140
+ // クリーンアップ
141
+ frameBufferManager.releaseTemporaryAttachment(blurAttachment);
142
+ return destAttachment;
143
+ };
@@ -0,0 +1,4 @@
1
+ export declare class GlowFilterShader {
2
+ static getFragmentShader(): string;
3
+ static getVertexShader(): string;
4
+ }
@@ -0,0 +1,66 @@
1
+ export class GlowFilterShader {
2
+ static getFragmentShader() {
3
+ return /* wgsl */ `
4
+ struct VertexOutput {
5
+ @builtin(position) position: vec4<f32>,
6
+ @location(0) texCoord: vec2<f32>,
7
+ }
8
+
9
+ struct GlowUniforms {
10
+ glowColor: vec4<f32>,
11
+ strength: f32,
12
+ inner: f32,
13
+ knockout: f32,
14
+ _padding: f32,
15
+ }
16
+
17
+ @group(0) @binding(0) var<uniform> uniforms: GlowUniforms;
18
+ @group(0) @binding(1) var textureSampler: sampler;
19
+ @group(0) @binding(2) var textureData: texture_2d<f32>;
20
+
21
+ @fragment
22
+ fn main(input: VertexOutput) -> @location(0) vec4<f32> {
23
+ var originalColor = textureSample(textureData, textureSampler, input.texCoord);
24
+
25
+ let alpha = originalColor.a;
26
+
27
+ var glowColor = uniforms.glowColor * uniforms.strength * alpha;
28
+
29
+ if (uniforms.inner > 0.5) {
30
+ if (uniforms.knockout > 0.5) {
31
+ return glowColor;
32
+ } else {
33
+ return mix(originalColor, glowColor, alpha);
34
+ }
35
+ } else {
36
+ if (uniforms.knockout > 0.5) {
37
+ return vec4<f32>(glowColor.rgb, glowColor.a * (1.0 - alpha));
38
+ } else {
39
+ return originalColor + glowColor;
40
+ }
41
+ }
42
+ }
43
+ `;
44
+ }
45
+ static getVertexShader() {
46
+ return /* wgsl */ `
47
+ struct VertexInput {
48
+ @location(0) position: vec2<f32>,
49
+ @location(1) texCoord: vec2<f32>,
50
+ }
51
+
52
+ struct VertexOutput {
53
+ @builtin(position) position: vec4<f32>,
54
+ @location(0) texCoord: vec2<f32>,
55
+ }
56
+
57
+ @vertex
58
+ fn main(input: VertexInput) -> VertexOutput {
59
+ var output: VertexOutput;
60
+ output.position = vec4<f32>(input.position, 0.0, 1.0);
61
+ output.texCoord = input.texCoord;
62
+ return output;
63
+ }
64
+ `;
65
+ }
66
+ }
@@ -0,0 +1,29 @@
1
+ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
2
+ import type { IFilterConfig } from "../../interface/IFilterConfig";
3
+ /**
4
+ * @description グラデーションベベルフィルターを適用
5
+ * Apply gradient bevel filter
6
+ *
7
+ * WebGL版と同じフロー:
8
+ * 1. ベベルベーステクスチャ作成: original * (1 - shifted.a)
9
+ * 2. ベベルベースにブラー適用
10
+ * 3. UV変換方式で最終合成(isInsideでハード境界クリッピング)
11
+ *
12
+ * @param {IAttachmentObject} sourceAttachment - 入力テクスチャ
13
+ * @param {Float32Array} matrix - 変換行列
14
+ * @param {number} distance - ベベルの距離
15
+ * @param {number} angle - ベベルの角度(度)
16
+ * @param {Float32Array} colors - 色配列
17
+ * @param {Float32Array} alphas - アルファ配列
18
+ * @param {Float32Array} ratios - 比率配列
19
+ * @param {number} blurX - X方向ブラー量
20
+ * @param {number} blurY - Y方向ブラー量
21
+ * @param {number} strength - ベベル強度
22
+ * @param {number} quality - クオリティ
23
+ * @param {number} type - タイプ (0: full, 1: inner, 2: outer)
24
+ * @param {boolean} knockout - ノックアウトモード
25
+ * @param {number} devicePixelRatio - デバイスピクセル比
26
+ * @param {IGradientBevelConfig} config - WebGPUリソース設定
27
+ * @return {IAttachmentObject} - フィルター適用後のアタッチメント
28
+ */
29
+ export declare const execute: (sourceAttachment: IAttachmentObject, matrix: Float32Array, distance: number, angle: number, colors: Float32Array, alphas: Float32Array, ratios: Float32Array, blurX: number, blurY: number, strength: number, quality: number, type: number, knockout: boolean, devicePixelRatio: number, config: IFilterConfig) => IAttachmentObject;
@@ -0,0 +1,216 @@
1
+ import { $offset } from "../FilterOffset";
2
+ import { execute as filterApplyBlurFilterUseCase } from "../BlurFilter/FilterApplyBlurFilterUseCase";
3
+ import { generateFilterGradientLUT } from "../../Gradient/GradientLUTGenerator";
4
+ /**
5
+ * @description 度からラジアンへの変換係数
6
+ */
7
+ const DEG_TO_RAD = Math.PI / 180;
8
+ /**
9
+ * @description プリアロケートされたFloat32Array
10
+ */
11
+ const $uniform4 = new Float32Array(4);
12
+ const $uniform12 = new Float32Array(12);
13
+ /**
14
+ * @description プリアロケートされたBindGroupEntry配列 (バインディング3つ)
15
+ */
16
+ const $entries3 = [
17
+ { "binding": 0, "resource": { "buffer": null } },
18
+ { "binding": 1, "resource": null },
19
+ { "binding": 2, "resource": null }
20
+ ];
21
+ /**
22
+ * @description プリアロケートされたBindGroupEntry配列 (バインディング5つ)
23
+ */
24
+ const $entries5 = [
25
+ { "binding": 0, "resource": { "buffer": null } },
26
+ { "binding": 1, "resource": null },
27
+ { "binding": 2, "resource": null },
28
+ { "binding": 3, "resource": null },
29
+ { "binding": 4, "resource": null }
30
+ ];
31
+ /**
32
+ * @description グラデーションベベルフィルターを適用
33
+ * Apply gradient bevel filter
34
+ *
35
+ * WebGL版と同じフロー:
36
+ * 1. ベベルベーステクスチャ作成: original * (1 - shifted.a)
37
+ * 2. ベベルベースにブラー適用
38
+ * 3. UV変換方式で最終合成(isInsideでハード境界クリッピング)
39
+ *
40
+ * @param {IAttachmentObject} sourceAttachment - 入力テクスチャ
41
+ * @param {Float32Array} matrix - 変換行列
42
+ * @param {number} distance - ベベルの距離
43
+ * @param {number} angle - ベベルの角度(度)
44
+ * @param {Float32Array} colors - 色配列
45
+ * @param {Float32Array} alphas - アルファ配列
46
+ * @param {Float32Array} ratios - 比率配列
47
+ * @param {number} blurX - X方向ブラー量
48
+ * @param {number} blurY - Y方向ブラー量
49
+ * @param {number} strength - ベベル強度
50
+ * @param {number} quality - クオリティ
51
+ * @param {number} type - タイプ (0: full, 1: inner, 2: outer)
52
+ * @param {boolean} knockout - ノックアウトモード
53
+ * @param {number} devicePixelRatio - デバイスピクセル比
54
+ * @param {IGradientBevelConfig} config - WebGPUリソース設定
55
+ * @return {IAttachmentObject} - フィルター適用後のアタッチメント
56
+ */
57
+ export const execute = (sourceAttachment, matrix, distance, angle, colors, alphas, ratios, blurX, blurY, strength, quality, type, knockout, devicePixelRatio, config) => {
58
+ const { device, commandEncoder, frameBufferManager, pipelineManager, textureManager } = config;
59
+ // 元のオフセットを保存
60
+ const baseOffsetX = $offset.x;
61
+ const baseOffsetY = $offset.y;
62
+ const baseWidth = sourceAttachment.width;
63
+ const baseHeight = sourceAttachment.height;
64
+ // 変換行列からスケールを取得
65
+ const xScale = Math.sqrt(matrix[0] * matrix[0] + matrix[1] * matrix[1]);
66
+ const yScale = Math.sqrt(matrix[2] * matrix[2] + matrix[3] * matrix[3]);
67
+ // ベベルのオフセットを計算
68
+ const radian = angle * DEG_TO_RAD;
69
+ const x = Math.cos(radian) * distance * (xScale / devicePixelRatio);
70
+ const y = Math.sin(radian) * distance * (yScale / devicePixelRatio);
71
+ // ===== Step 1: ベベルベーステクスチャ作成 =====
72
+ // WebGL版と同じ: original * (1 - shifted_original.a)
73
+ // shifted = original を (2x, 2y) ピクセル分シフトしたもの
74
+ const bevelBasePipeline = pipelineManager.getPipeline("bevel_base");
75
+ const bevelBaseLayout = pipelineManager.getBindGroupLayout("bevel_base");
76
+ if (!bevelBasePipeline || !bevelBaseLayout) {
77
+ console.error("[WebGPU GradientBevelFilter] bevel_base pipeline not found");
78
+ return sourceAttachment;
79
+ }
80
+ const bevelBaseAttachment = frameBufferManager.createTemporaryAttachment(baseWidth, baseHeight);
81
+ const bevelBaseSampler = textureManager.createSampler("bevel_base_sampler", true);
82
+ // UV空間でのオフセット: (2x / baseWidth, 2y / baseHeight)
83
+ $uniform4[0] = 2 * x / baseWidth;
84
+ $uniform4[1] = 2 * y / baseHeight;
85
+ $uniform4[2] = 0.0;
86
+ $uniform4[3] = 0.0;
87
+ const bevelBaseUniformBuffer = config.bufferManager
88
+ ? config.bufferManager.acquireAndWriteUniformBuffer($uniform4)
89
+ : device.createBuffer({
90
+ "size": $uniform4.byteLength,
91
+ "usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
92
+ });
93
+ if (!config.bufferManager) {
94
+ device.queue.writeBuffer(bevelBaseUniformBuffer, 0, $uniform4);
95
+ }
96
+ $entries3[0].resource.buffer = bevelBaseUniformBuffer;
97
+ $entries3[1].resource = bevelBaseSampler;
98
+ $entries3[2].resource = sourceAttachment.texture.view;
99
+ const bevelBaseBindGroup = device.createBindGroup({
100
+ "layout": bevelBaseLayout,
101
+ "entries": $entries3
102
+ });
103
+ const bevelBaseRenderPass = frameBufferManager.createRenderPassDescriptor(bevelBaseAttachment.texture.view, 0, 0, 0, 0, "clear");
104
+ const bevelBaseEncoder = commandEncoder.beginRenderPass(bevelBaseRenderPass);
105
+ bevelBaseEncoder.setPipeline(bevelBasePipeline);
106
+ bevelBaseEncoder.setBindGroup(0, bevelBaseBindGroup);
107
+ bevelBaseEncoder.draw(6, 1, 0, 0);
108
+ bevelBaseEncoder.end();
109
+ // ===== Step 2: ベベルベースにブラー適用 =====
110
+ // WebGL版と同じ: bevelBaseをブラーする(元テクスチャではなく)
111
+ const blurAttachment = filterApplyBlurFilterUseCase(bevelBaseAttachment, matrix, blurX, blurY, quality, devicePixelRatio, config);
112
+ // ベベルベースは不要になったので解放
113
+ frameBufferManager.releaseTemporaryAttachment(bevelBaseAttachment);
114
+ const blurWidth = blurAttachment.width;
115
+ const blurHeight = blurAttachment.height;
116
+ // ===== Step 3: WebGL版と同じサイズ・位置計算 =====
117
+ const isInner = type === 1;
118
+ const absX = Math.abs(x);
119
+ const absY = Math.abs(y);
120
+ const blurOffsetX = (blurWidth - baseWidth) / 2;
121
+ const blurOffsetY = (blurHeight - baseHeight) / 2;
122
+ // WebGL版と同じ: bevelWidth/bevelHeight
123
+ const bevelWidth = Math.ceil(blurWidth + absX * 2);
124
+ const bevelHeight = Math.ceil(blurHeight + absY * 2);
125
+ const width = isInner ? baseWidth : bevelWidth;
126
+ const height = isInner ? baseHeight : bevelHeight;
127
+ // WebGL版と同じテクスチャ位置計算
128
+ const baseTextureX = isInner ? 0 : absX + blurOffsetX;
129
+ const baseTextureY = isInner ? 0 : absY + blurOffsetY;
130
+ const blurTextureX = isInner ? -blurOffsetX - x : absX - x;
131
+ const blurTextureY = isInner ? -blurOffsetY - y : absY - y;
132
+ // ===== Step 4: グラデーションLUT生成 =====
133
+ // 注意: 共有テクスチャ+queue.writeTextureは使用しない。
134
+ // queue.writeTextureはcommandEncoder外で即座に実行されるため、
135
+ // 同一フレーム内の複数GradientBevelFilter適用時に最後の書き込みで上書きされる。
136
+ // 各呼び出しで専用テクスチャを作成してこのタイミング問題を回避する。
137
+ const lutData = generateFilterGradientLUT(ratios, colors, alphas);
138
+ const lutTexture = device.createTexture({
139
+ "size": { "width": 256, "height": 1 },
140
+ "format": "rgba8unorm",
141
+ "usage": GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST
142
+ });
143
+ device.queue.writeTexture({ "texture": lutTexture }, lutData.buffer, { "bytesPerRow": 256 * 4, "offset": lutData.byteOffset }, { "width": 256, "height": 1 });
144
+ const lutView = lutTexture.createView();
145
+ // ===== Step 5: UV変換パラメータ計算 =====
146
+ // WebGL版と同じ: uv = v_coord * scale - offset
147
+ // WebGPU: texCoord.y=0がトップ(Y-flip補正済み)
148
+ // → offset_y = textureY / textureHeight(WebGLのY反転不要)
149
+ const baseScaleX = width / baseWidth;
150
+ const baseScaleY = height / baseHeight;
151
+ const baseOffsetUVX = baseTextureX / baseWidth;
152
+ const baseOffsetUVY = baseTextureY / baseHeight;
153
+ const blurScaleX = width / blurWidth;
154
+ const blurScaleY = height / blurHeight;
155
+ const blurOffsetUVX = blurTextureX / blurWidth;
156
+ const blurOffsetUVY = blurTextureY / blurHeight;
157
+ // ===== Step 6: 最終合成パス =====
158
+ const destAttachment = frameBufferManager.createTemporaryAttachment(width, height);
159
+ const pipeline = pipelineManager.getFilterPipeline("gradient_bevel_filter", {
160
+ "BEVEL_TYPE": type,
161
+ "IS_KNOCKOUT": knockout ? 1 : 0
162
+ });
163
+ const bindGroupLayout = pipelineManager.getBindGroupLayout("gradient_bevel_filter");
164
+ if (!pipeline || !bindGroupLayout) {
165
+ console.error("[WebGPU GradientBevelFilter] Pipeline not found");
166
+ frameBufferManager.releaseTemporaryAttachment(blurAttachment);
167
+ return sourceAttachment;
168
+ }
169
+ const sampler = textureManager.createSampler("gradient_bevel_sampler", true);
170
+ // ユニフォームバッファ: 12 floats = 48 bytes
171
+ $uniform12[0] = strength;
172
+ $uniform12[1] = isInner ? 1.0 : 0.0;
173
+ $uniform12[2] = knockout ? 1.0 : 0.0;
174
+ $uniform12[3] = type;
175
+ $uniform12[4] = baseScaleX;
176
+ $uniform12[5] = baseScaleY;
177
+ $uniform12[6] = baseOffsetUVX;
178
+ $uniform12[7] = baseOffsetUVY;
179
+ $uniform12[8] = blurScaleX;
180
+ $uniform12[9] = blurScaleY;
181
+ $uniform12[10] = blurOffsetUVX;
182
+ $uniform12[11] = blurOffsetUVY;
183
+ const uniformBuffer = config.bufferManager
184
+ ? config.bufferManager.acquireAndWriteUniformBuffer($uniform12)
185
+ : device.createBuffer({
186
+ "size": $uniform12.byteLength,
187
+ "usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
188
+ });
189
+ if (!config.bufferManager) {
190
+ device.queue.writeBuffer(uniformBuffer, 0, $uniform12);
191
+ }
192
+ // バインドグループを作成(オリジナルテクスチャを直接使用)
193
+ $entries5[0].resource.buffer = uniformBuffer;
194
+ $entries5[1].resource = sampler;
195
+ $entries5[2].resource = blurAttachment.texture.view;
196
+ $entries5[3].resource = sourceAttachment.texture.view;
197
+ $entries5[4].resource = lutView;
198
+ const bindGroup = device.createBindGroup({
199
+ "layout": bindGroupLayout,
200
+ "entries": $entries5
201
+ });
202
+ // レンダーパスを実行
203
+ const renderPassDescriptor = frameBufferManager.createRenderPassDescriptor(destAttachment.texture.view, 0, 0, 0, 0, "clear");
204
+ const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
205
+ passEncoder.setPipeline(pipeline);
206
+ passEncoder.setBindGroup(0, bindGroup);
207
+ passEncoder.draw(6, 1, 0, 0);
208
+ passEncoder.end();
209
+ // クリーンアップ(lutTextureはsubmit後に遅延破棄)
210
+ config.frameTextures.push(lutTexture);
211
+ frameBufferManager.releaseTemporaryAttachment(blurAttachment);
212
+ // WebGL版と同じオフセット更新
213
+ $offset.x = baseOffsetX + baseTextureX;
214
+ $offset.y = baseOffsetY + baseTextureY;
215
+ return destAttachment;
216
+ };
@@ -0,0 +1,29 @@
1
+ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
2
+ import type { IFilterConfig } from "../../interface/IFilterConfig";
3
+ /**
4
+ * @description グラデーショングローフィルターを適用
5
+ * Apply gradient glow filter
6
+ *
7
+ * WebGL版と同じフロー:
8
+ * 1. ブラー適用
9
+ * 2. グラデーションLUT生成(専用テクスチャ)
10
+ * 3. UV変換方式で最終合成(isInsideでハード境界クリッピング)
11
+ *
12
+ * @param {IAttachmentObject} sourceAttachment - 入力テクスチャ
13
+ * @param {Float32Array} matrix - 変換行列
14
+ * @param {number} distance - グローの距離
15
+ * @param {number} angle - グローの角度(度)
16
+ * @param {Float32Array} colors - 色配列
17
+ * @param {Float32Array} alphas - アルファ配列
18
+ * @param {Float32Array} ratios - 比率配列
19
+ * @param {number} blurX - X方向ブラー量
20
+ * @param {number} blurY - Y方向ブラー量
21
+ * @param {number} strength - グロー強度
22
+ * @param {number} quality - クオリティ
23
+ * @param {number} type - タイプ (0: full, 1: inner, 2: outer)
24
+ * @param {boolean} knockout - ノックアウトモード
25
+ * @param {number} devicePixelRatio - デバイスピクセル比
26
+ * @param {IFilterConfig} config - WebGPUリソース設定
27
+ * @return {IAttachmentObject} - フィルター適用後のアタッチメント
28
+ */
29
+ export declare const execute: (sourceAttachment: IAttachmentObject, matrix: Float32Array, distance: number, angle: number, colors: Float32Array, alphas: Float32Array, ratios: Float32Array, blurX: number, blurY: number, strength: number, quality: number, type: number, knockout: boolean, devicePixelRatio: number, config: IFilterConfig) => IAttachmentObject;