@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,6 @@
1
+ export declare const $getOrCreateView: (texture: GPUTexture) => GPUTextureView;
2
+ export declare const $acquireFillTexture: (device: GPUDevice, width: number, height: number) => GPUTexture;
3
+ export declare const $releaseFillTexture: (texture: GPUTexture) => void;
4
+ export declare const $acquireRenderTexture: (device: GPUDevice, width: number, height: number) => GPUTexture;
5
+ export declare const $releaseRenderTexture: (texture: GPUTexture) => void;
6
+ export declare const $clearFillTexturePool: () => void;
@@ -0,0 +1,72 @@
1
+ // GPUTexture → GPUTextureView キャッシュ(createView()呼び出し削減)
2
+ const $viewCache = new WeakMap();
3
+ export const $getOrCreateView = (texture) => {
4
+ let view = $viewCache.get(texture);
5
+ if (!view) {
6
+ view = texture.createView();
7
+ $viewCache.set(texture, view);
8
+ }
9
+ return view;
10
+ };
11
+ // GPUTextureUsage.TEXTURE_BINDING(0x04) | GPUTextureUsage.COPY_DST(0x02) = 0x06
12
+ const FILL_TEXTURE_USAGE = 0x06;
13
+ // GPUTextureUsage.TEXTURE_BINDING(0x04) | GPUTextureUsage.COPY_DST(0x02) | GPUTextureUsage.RENDER_ATTACHMENT(0x10) = 0x16
14
+ const RENDER_TEXTURE_USAGE = 0x16;
15
+ const $pool = new Map();
16
+ const $renderPool = new Map();
17
+ export const $acquireFillTexture = (device, width, height) => {
18
+ const key = `${width}_${height}`;
19
+ const list = $pool.get(key);
20
+ if (list && list.length > 0) {
21
+ return list.pop();
22
+ }
23
+ return device.createTexture({
24
+ "size": { width, height },
25
+ "format": "rgba8unorm",
26
+ "usage": FILL_TEXTURE_USAGE
27
+ });
28
+ };
29
+ export const $releaseFillTexture = (texture) => {
30
+ const key = `${texture.width}_${texture.height}`;
31
+ let list = $pool.get(key);
32
+ if (!list) {
33
+ list = [];
34
+ $pool.set(key, list);
35
+ }
36
+ list.push(texture);
37
+ };
38
+ export const $acquireRenderTexture = (device, width, height) => {
39
+ const key = `${width}_${height}`;
40
+ const list = $renderPool.get(key);
41
+ if (list && list.length > 0) {
42
+ return list.pop();
43
+ }
44
+ return device.createTexture({
45
+ "size": { width, height },
46
+ "format": "rgba8unorm",
47
+ "usage": RENDER_TEXTURE_USAGE
48
+ });
49
+ };
50
+ export const $releaseRenderTexture = (texture) => {
51
+ const key = `${texture.width}_${texture.height}`;
52
+ let list = $renderPool.get(key);
53
+ if (!list) {
54
+ list = [];
55
+ $renderPool.set(key, list);
56
+ }
57
+ list.push(texture);
58
+ };
59
+ export const $clearFillTexturePool = () => {
60
+ for (const [, list] of $pool) {
61
+ for (const texture of list) {
62
+ texture.destroy();
63
+ }
64
+ }
65
+ $pool.clear();
66
+ for (const [, list] of $renderPool) {
67
+ for (const texture of list) {
68
+ texture.destroy();
69
+ }
70
+ }
71
+ $renderPool.clear();
72
+ };
@@ -0,0 +1,10 @@
1
+ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
2
+ import type { IFilterConfig } from "../../interface/IFilterConfig";
3
+ /**
4
+ * @description ベベルフィルターを適用
5
+ * WebGL版と同様に、erase前処理で差分テクスチャを作成してからブラーを適用
6
+ *
7
+ * UV変換方式で元テクスチャとブラーテクスチャを直接サンプリング。
8
+ * 合成時のcopyTextureToTextureと一時テクスチャを使用しない最適化版。
9
+ */
10
+ export declare const execute: (sourceAttachment: IAttachmentObject, matrix: Float32Array, distance: number, angle: number, highlightColor: number, highlightAlpha: number, shadowColor: number, shadowAlpha: number, blurX: number, blurY: number, strength: number, quality: number, type: number, knockout: boolean, devicePixelRatio: number, config: IFilterConfig) => IAttachmentObject;
@@ -0,0 +1,214 @@
1
+ import { $offset } from "../FilterOffset";
2
+ import { execute as filterApplyBlurFilterUseCase } from "../BlurFilter/FilterApplyBlurFilterUseCase";
3
+ /**
4
+ * @description 度からラジアンへの変換係数
5
+ */
6
+ const DEG_TO_RAD = Math.PI / 180;
7
+ /**
8
+ * @description プリアロケートされたFloat32Array
9
+ */
10
+ const $uniform8 = new Float32Array(8);
11
+ const $uniform20 = new Float32Array(20);
12
+ /**
13
+ * @description プリアロケートされたBindGroupEntry配列 (バインディング3つ)
14
+ */
15
+ const $entries3 = [
16
+ { "binding": 0, "resource": { "buffer": null } },
17
+ { "binding": 1, "resource": null },
18
+ { "binding": 2, "resource": null }
19
+ ];
20
+ /**
21
+ * @description プリアロケートされたBindGroupEntry配列 (バインディング4つ)
22
+ */
23
+ const $entries4 = [
24
+ { "binding": 0, "resource": { "buffer": null } },
25
+ { "binding": 1, "resource": null },
26
+ { "binding": 2, "resource": null },
27
+ { "binding": 3, "resource": null }
28
+ ];
29
+ /**
30
+ * @description 32bit整数からRGB値を抽出(プリマルチプライドアルファ対応)
31
+ */
32
+ const intToRGBA = (color, alpha) => {
33
+ const r = (color >> 16 & 0xFF) / 255 * alpha;
34
+ const g = (color >> 8 & 0xFF) / 255 * alpha;
35
+ const b = (color & 0xFF) / 255 * alpha;
36
+ return [r, g, b, alpha];
37
+ };
38
+ /**
39
+ * @description ベベルフィルターを適用
40
+ * WebGL版と同様に、erase前処理で差分テクスチャを作成してからブラーを適用
41
+ *
42
+ * UV変換方式で元テクスチャとブラーテクスチャを直接サンプリング。
43
+ * 合成時のcopyTextureToTextureと一時テクスチャを使用しない最適化版。
44
+ */
45
+ export const execute = (sourceAttachment, matrix, distance, angle, highlightColor, highlightAlpha, shadowColor, shadowAlpha, blurX, blurY, strength, quality, type, knockout, devicePixelRatio, config) => {
46
+ const { device, commandEncoder, frameBufferManager, pipelineManager, textureManager } = config;
47
+ // 元のオフセットを保存
48
+ const baseOffsetX = $offset.x;
49
+ const baseOffsetY = $offset.y;
50
+ const baseWidth = sourceAttachment.width;
51
+ const baseHeight = sourceAttachment.height;
52
+ // スケールを計算
53
+ const xScale = Math.sqrt(matrix[0] * matrix[0] + matrix[1] * matrix[1]);
54
+ const yScale = Math.sqrt(matrix[2] * matrix[2] + matrix[3] * matrix[3]);
55
+ // オフセットを計算(WebGL版と同じ)
56
+ const radian = angle * DEG_TO_RAD;
57
+ const x = Math.cos(radian) * distance * (xScale / devicePixelRatio);
58
+ const y = Math.sin(radian) * distance * (yScale / devicePixelRatio);
59
+ // === Erase前処理:差分テクスチャを作成 ===
60
+ const eraseAttachment = frameBufferManager.createTemporaryAttachment(baseWidth, baseHeight);
61
+ // Step 1: ソーステクスチャを元の位置にコピー(erase前処理のcopyTextureToTextureは残す)
62
+ commandEncoder.copyTextureToTexture({
63
+ "texture": sourceAttachment.texture.resource,
64
+ "origin": { "x": 0, "y": 0, "z": 0 }
65
+ }, {
66
+ "texture": eraseAttachment.texture.resource,
67
+ "origin": { "x": 0, "y": 0, "z": 0 }
68
+ }, {
69
+ "width": baseWidth,
70
+ "height": baseHeight
71
+ });
72
+ // Step 2: オフセット位置からサンプルしてerase描画
73
+ const erasePipeline = pipelineManager.getPipeline("texture_erase");
74
+ const eraseBindGroupLayout = pipelineManager.getBindGroupLayout("texture_copy");
75
+ if (erasePipeline && eraseBindGroupLayout) {
76
+ const eraseSampler = textureManager.createSampler("erase_sampler", true);
77
+ const offsetX = x * 2 / baseWidth;
78
+ const offsetY = y * 2 / baseHeight;
79
+ $uniform8[0] = 1.0;
80
+ $uniform8[1] = 1.0;
81
+ $uniform8[2] = offsetX;
82
+ $uniform8[3] = offsetY;
83
+ $uniform8[4] = 0;
84
+ $uniform8[5] = 0;
85
+ $uniform8[6] = 0;
86
+ $uniform8[7] = 0;
87
+ const eraseUniformBuffer = config.bufferManager
88
+ ? config.bufferManager.acquireAndWriteUniformBuffer($uniform8)
89
+ : device.createBuffer({
90
+ "size": $uniform8.byteLength,
91
+ "usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
92
+ });
93
+ if (!config.bufferManager) {
94
+ device.queue.writeBuffer(eraseUniformBuffer, 0, $uniform8);
95
+ }
96
+ $entries3[0].resource.buffer = eraseUniformBuffer;
97
+ $entries3[1].resource = eraseSampler;
98
+ $entries3[2].resource = sourceAttachment.texture.view;
99
+ const eraseBindGroup = device.createBindGroup({
100
+ "layout": eraseBindGroupLayout,
101
+ "entries": $entries3
102
+ });
103
+ const erasePassDescriptor = frameBufferManager.createRenderPassDescriptor(eraseAttachment.texture.view, 0, 0, 0, 0, "load");
104
+ const erasePassEncoder = commandEncoder.beginRenderPass(erasePassDescriptor);
105
+ erasePassEncoder.setPipeline(erasePipeline);
106
+ erasePassEncoder.setBindGroup(0, eraseBindGroup);
107
+ erasePassEncoder.draw(6, 1, 0, 0);
108
+ erasePassEncoder.end();
109
+ }
110
+ // === 差分テクスチャにブラーを適用 ===
111
+ const blurAttachment = filterApplyBlurFilterUseCase(eraseAttachment, matrix, blurX, blurY, quality, devicePixelRatio, config);
112
+ // eraseアタッチメントを解放
113
+ frameBufferManager.releaseTemporaryAttachment(eraseAttachment);
114
+ const blurWidth = blurAttachment.width;
115
+ const blurHeight = blurAttachment.height;
116
+ // 出力サイズを計算
117
+ const absX = Math.abs(x);
118
+ const absY = Math.abs(y);
119
+ const isInner = type === 1;
120
+ const bevelWidth = Math.ceil(blurWidth + absX * 2);
121
+ const bevelHeight = Math.ceil(blurHeight + absY * 2);
122
+ const width = isInner ? baseWidth : bevelWidth;
123
+ const height = isInner ? baseHeight : bevelHeight;
124
+ // オフセット差分を計算
125
+ const blurOffsetFromBase = (blurWidth - baseWidth) / 2;
126
+ const blurOffsetFromBaseY = (blurHeight - baseHeight) / 2;
127
+ // UV変換パラメータ計算(GradientBevelFilterと同じパターン)
128
+ const baseTextureX = isInner ? 0 : Math.floor(absX + blurOffsetFromBase);
129
+ const baseTextureY = isInner ? 0 : Math.floor(absY + blurOffsetFromBaseY);
130
+ const blurTextureX = isInner ? Math.floor(-blurOffsetFromBase - x) : Math.floor(absX - x);
131
+ const blurTextureY = isInner ? Math.floor(-blurOffsetFromBaseY - y) : Math.floor(absY - y);
132
+ const baseScaleX = width / baseWidth;
133
+ const baseScaleY = height / baseHeight;
134
+ const baseOffsetUVX = baseTextureX / baseWidth;
135
+ const baseOffsetUVY = baseTextureY / baseHeight;
136
+ const blurScaleX = width / blurWidth;
137
+ const blurScaleY = height / blurHeight;
138
+ const blurOffsetUVX = blurTextureX / blurWidth;
139
+ const blurOffsetUVY = blurTextureY / blurHeight;
140
+ // 出力アタッチメントを作成
141
+ const destAttachment = frameBufferManager.createTemporaryAttachment(width, height);
142
+ const pipeline = pipelineManager.getFilterPipeline("bevel_filter", {
143
+ "BEVEL_TYPE": type,
144
+ "IS_KNOCKOUT": knockout ? 1 : 0
145
+ });
146
+ const bindGroupLayout = pipelineManager.getBindGroupLayout("bevel_filter");
147
+ if (!pipeline || !bindGroupLayout) {
148
+ console.error("[WebGPU BevelFilter] Pipeline not found");
149
+ frameBufferManager.releaseTemporaryAttachment(blurAttachment);
150
+ return sourceAttachment;
151
+ }
152
+ // サンプラーを作成
153
+ const sampler = textureManager.createSampler("bevel_sampler", true);
154
+ // ユニフォームバッファを作成
155
+ // highlightColor: vec4<f32> (16 bytes)
156
+ // shadowColor: vec4<f32> (16 bytes)
157
+ // strength, inner, knockout, bevelType (16 bytes)
158
+ // baseScale, baseOffset (16 bytes)
159
+ // blurScale, blurOffset (16 bytes)
160
+ // Total: 80 bytes → 16 floats + 4 floats = 20 floats (80 bytes)
161
+ const [hr, hg, hb, ha] = intToRGBA(highlightColor, highlightAlpha);
162
+ const [sr, sg, sb, sa] = intToRGBA(shadowColor, shadowAlpha);
163
+ $uniform20[0] = hr;
164
+ $uniform20[1] = hg;
165
+ $uniform20[2] = hb;
166
+ $uniform20[3] = ha;
167
+ $uniform20[4] = sr;
168
+ $uniform20[5] = sg;
169
+ $uniform20[6] = sb;
170
+ $uniform20[7] = sa;
171
+ $uniform20[8] = strength;
172
+ $uniform20[9] = isInner ? 1.0 : 0.0;
173
+ $uniform20[10] = knockout ? 1.0 : 0.0;
174
+ $uniform20[11] = type;
175
+ $uniform20[12] = baseScaleX;
176
+ $uniform20[13] = baseScaleY;
177
+ $uniform20[14] = baseOffsetUVX;
178
+ $uniform20[15] = baseOffsetUVY;
179
+ $uniform20[16] = blurScaleX;
180
+ $uniform20[17] = blurScaleY;
181
+ $uniform20[18] = blurOffsetUVX;
182
+ $uniform20[19] = blurOffsetUVY;
183
+ const uniformBuffer = config.bufferManager
184
+ ? config.bufferManager.acquireAndWriteUniformBuffer($uniform20)
185
+ : device.createBuffer({
186
+ "size": $uniform20.byteLength,
187
+ "usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
188
+ });
189
+ if (!config.bufferManager) {
190
+ device.queue.writeBuffer(uniformBuffer, 0, $uniform20);
191
+ }
192
+ // バインドグループを作成(元テクスチャとブラーテクスチャを直接バインド)
193
+ $entries4[0].resource.buffer = uniformBuffer;
194
+ $entries4[1].resource = sampler;
195
+ $entries4[2].resource = blurAttachment.texture.view;
196
+ $entries4[3].resource = sourceAttachment.texture.view;
197
+ const bindGroup = device.createBindGroup({
198
+ "layout": bindGroupLayout,
199
+ "entries": $entries4
200
+ });
201
+ // レンダーパスを実行
202
+ const renderPassDescriptor = frameBufferManager.createRenderPassDescriptor(destAttachment.texture.view, 0, 0, 0, 0, "clear");
203
+ const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
204
+ passEncoder.setPipeline(pipeline);
205
+ passEncoder.setBindGroup(0, bindGroup);
206
+ passEncoder.draw(6, 1, 0, 0);
207
+ passEncoder.end();
208
+ // クリーンアップ
209
+ frameBufferManager.releaseTemporaryAttachment(blurAttachment);
210
+ // オフセットを更新(WebGL版と同じ: 常にbaseOffset+baseTextureXYに設定)
211
+ $offset.x = baseOffsetX + baseTextureX;
212
+ $offset.y = baseOffsetY + baseTextureY;
213
+ return destAttachment;
214
+ };
@@ -0,0 +1,2 @@
1
+ export declare const getBevelFilterFragmentShader: (type: string, knockout: boolean, isGradient: boolean) => string;
2
+ export declare const getBevelFilterShaderKey: (type: string, knockout: boolean, isGradient: boolean) => string;
@@ -0,0 +1,107 @@
1
+ export const getBevelFilterFragmentShader = (type, knockout, isGradient) => {
2
+ const isInner = type === "inner";
3
+ const isOuter = type === "outer";
4
+ const gradientBinding = isGradient ? `
5
+ @group(0) @binding(4) var gradientTexture: texture_2d<f32>;` : "";
6
+ const colorCalculation = isGradient ? `
7
+ let gradientCoord = vec2<f32>(blurAlpha, 0.5);
8
+ var filterColor = textureSample(gradientTexture, sourceSampler, gradientCoord);
9
+ ` : `
10
+ let highlightWeight = clamp(blurAlpha * 2.0, 0.0, 1.0);
11
+ let shadowWeight = clamp((1.0 - blurAlpha) * 2.0, 0.0, 1.0);
12
+ var filterColor = uniforms.highlightColor * highlightWeight + uniforms.shadowColor * shadowWeight;
13
+ `;
14
+ let typeProcessing = "";
15
+ if (isInner) {
16
+ typeProcessing = `
17
+ let baseAlpha = textureSample(baseTexture, sourceSampler, baseTexCoord).a;
18
+ filterColor = filterColor * baseAlpha;
19
+ ${knockout ? "let finalColor = filterColor;" : "let finalColor = mix(baseColor, filterColor, filterColor.a);"}
20
+ `;
21
+ }
22
+ else if (isOuter) {
23
+ typeProcessing = `
24
+ let baseAlpha = textureSample(baseTexture, sourceSampler, baseTexCoord).a;
25
+ filterColor = filterColor * (1.0 - baseAlpha);
26
+ ${knockout ? "let finalColor = filterColor;" : "let finalColor = filterColor + baseColor * (1.0 - filterColor.a);"}
27
+ `;
28
+ }
29
+ else {
30
+ typeProcessing = knockout ? `
31
+ let finalColor = filterColor;
32
+ ` : `
33
+ let finalColor = filterColor + baseColor * (1.0 - filterColor.a);
34
+ `;
35
+ }
36
+ return `
37
+ struct BevelUniforms {
38
+ blurTexCoordScale: vec2<f32>,
39
+ blurTexCoordOffset: vec2<f32>,
40
+ baseTexCoordScale: vec2<f32>,
41
+ baseTexCoordOffset: vec2<f32>,
42
+ strength: f32,
43
+ _pad1: f32,
44
+ _pad2: f32,
45
+ _pad3: f32,
46
+ highlightColor: vec4<f32>,
47
+ shadowColor: vec4<f32>,
48
+ }
49
+
50
+ @group(0) @binding(0) var<uniform> uniforms: BevelUniforms;
51
+ @group(0) @binding(1) var sourceSampler: sampler;
52
+ @group(0) @binding(2) var blurTexture: texture_2d<f32>;
53
+ @group(0) @binding(3) var baseTexture: texture_2d<f32>;
54
+ ${gradientBinding}
55
+
56
+ struct VertexOutput {
57
+ @builtin(position) position: vec4<f32>,
58
+ @location(0) texCoord: vec2<f32>,
59
+ }
60
+
61
+ @vertex
62
+ fn vs_main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput {
63
+ var positions = array<vec2<f32>, 6>(
64
+ vec2<f32>(-1.0, -1.0),
65
+ vec2<f32>(1.0, -1.0),
66
+ vec2<f32>(-1.0, 1.0),
67
+ vec2<f32>(-1.0, 1.0),
68
+ vec2<f32>(1.0, -1.0),
69
+ vec2<f32>(1.0, 1.0)
70
+ );
71
+
72
+ var texCoords = array<vec2<f32>, 6>(
73
+ vec2<f32>(0.0, 1.0),
74
+ vec2<f32>(1.0, 1.0),
75
+ vec2<f32>(0.0, 0.0),
76
+ vec2<f32>(0.0, 0.0),
77
+ vec2<f32>(1.0, 1.0),
78
+ vec2<f32>(1.0, 0.0)
79
+ );
80
+
81
+ var output: VertexOutput;
82
+ output.position = vec4<f32>(positions[vertexIndex], 0.0, 1.0);
83
+ output.texCoord = texCoords[vertexIndex];
84
+ return output;
85
+ }
86
+
87
+ @fragment
88
+ fn fs_main(input: VertexOutput) -> @location(0) vec4<f32> {
89
+ let blurTexCoord = input.texCoord * uniforms.blurTexCoordScale + uniforms.blurTexCoordOffset;
90
+ let baseTexCoord = input.texCoord * uniforms.baseTexCoordScale + uniforms.baseTexCoordOffset;
91
+
92
+ let blurColor = textureSample(blurTexture, sourceSampler, blurTexCoord);
93
+ var blurAlpha = blurColor.a * uniforms.strength;
94
+ blurAlpha = clamp(blurAlpha, 0.0, 1.0);
95
+
96
+ let baseColor = textureSample(baseTexture, sourceSampler, baseTexCoord);
97
+
98
+ ${colorCalculation}
99
+ ${typeProcessing}
100
+
101
+ return finalColor;
102
+ }
103
+ `;
104
+ };
105
+ export const getBevelFilterShaderKey = (type, knockout, isGradient) => {
106
+ return `bevel_${type}_${knockout ? "ko" : "nko"}_${isGradient ? "g" : "ng"}`;
107
+ };
@@ -0,0 +1,2 @@
1
+ export declare const getBitmapFilterFragmentShader: (transformsBase: boolean, transformsBlur: boolean, isGlow: boolean, type: string, knockout: boolean, appliesStrength: boolean, isGradient: boolean) => string;
2
+ export declare const getBitmapFilterShaderKey: (transformsBase: boolean, transformsBlur: boolean, isGlow: boolean, type: string, knockout: boolean, appliesStrength: boolean, isGradient: boolean) => string;
@@ -0,0 +1,207 @@
1
+ export const getBitmapFilterFragmentShader = (transformsBase, transformsBlur, isGlow, type, knockout, appliesStrength, isGradient) => {
2
+ const isInner = type === "inner";
3
+ let textureBindingIndex = 2;
4
+ const blurTextureBinding = textureBindingIndex++;
5
+ const baseTextureBinding = transformsBase ? textureBindingIndex++ : -1;
6
+ const gradientTextureBinding = isGradient ? textureBindingIndex++ : -1;
7
+ let uniformsStruct = `struct BitmapFilterUniforms {
8
+ `;
9
+ if (transformsBase) {
10
+ uniformsStruct += ` baseScale: vec2<f32>,
11
+ baseOffset: vec2<f32>,
12
+ `;
13
+ }
14
+ if (transformsBlur) {
15
+ uniformsStruct += ` blurScale: vec2<f32>,
16
+ blurOffset: vec2<f32>,
17
+ `;
18
+ }
19
+ if (appliesStrength) {
20
+ uniformsStruct += ` strength: f32,
21
+ _padStrength: vec3<f32>,
22
+ `;
23
+ }
24
+ if (!isGradient) {
25
+ if (isGlow) {
26
+ uniformsStruct += ` color: vec4<f32>,
27
+ `;
28
+ }
29
+ else {
30
+ uniformsStruct += ` highlightColor: vec4<f32>,
31
+ shadowColor: vec4<f32>,
32
+ `;
33
+ }
34
+ }
35
+ uniformsStruct += "}";
36
+ let textureBindings = `
37
+ @group(0) @binding(0) var<uniform> uniforms: BitmapFilterUniforms;
38
+ @group(0) @binding(1) var sourceSampler: sampler;
39
+ @group(0) @binding(${blurTextureBinding}) var blurTexture: texture_2d<f32>;`;
40
+ if (transformsBase) {
41
+ textureBindings += `
42
+ @group(0) @binding(${baseTextureBinding}) var baseTexture: texture_2d<f32>;`;
43
+ }
44
+ if (isGradient) {
45
+ textureBindings += `
46
+ @group(0) @binding(${gradientTextureBinding}) var gradientTexture: texture_2d<f32>;`;
47
+ }
48
+ let baseStatement = "";
49
+ if (transformsBase) {
50
+ baseStatement = `
51
+ let baseScale = uniforms.baseScale;
52
+ let baseOffset = uniforms.baseOffset;
53
+ let uv = input.texCoord * baseScale - baseOffset;
54
+ let base = mix(vec4<f32>(0.0), textureSample(baseTexture, sourceSampler, uv), isInside(uv));`;
55
+ }
56
+ let blurStatement = "";
57
+ if (transformsBlur) {
58
+ blurStatement = `
59
+ let blurScale = uniforms.blurScale;
60
+ let blurOffset = uniforms.blurOffset;
61
+ let st = input.texCoord * blurScale - blurOffset;
62
+ var blur = mix(vec4<f32>(0.0), textureSample(blurTexture, sourceSampler, st), isInside(st));`;
63
+ }
64
+ else {
65
+ blurStatement = `
66
+ var blur = textureSample(blurTexture, sourceSampler, input.texCoord);`;
67
+ }
68
+ let colorStatement = "";
69
+ if (isGlow) {
70
+ if (isInner) {
71
+ colorStatement += `
72
+ blur.a = 1.0 - blur.a;`;
73
+ }
74
+ if (appliesStrength) {
75
+ colorStatement += `
76
+ let strength = uniforms.strength;
77
+ blur.a = clamp(blur.a * strength, 0.0, 1.0);`;
78
+ }
79
+ if (isGradient) {
80
+ colorStatement += `
81
+ blur = textureSample(gradientTexture, sourceSampler, vec2<f32>(blur.a, 0.5));`;
82
+ }
83
+ else {
84
+ colorStatement += `
85
+ let color = uniforms.color;
86
+ blur = color * blur.a;`;
87
+ }
88
+ }
89
+ else {
90
+ if (transformsBlur) {
91
+ colorStatement += `
92
+ let pq = (vec2<f32>(1.0) - input.texCoord) * blurScale - blurOffset;
93
+ let blur2 = mix(vec4<f32>(0.0), textureSample(blurTexture, sourceSampler, pq), isInside(pq));`;
94
+ }
95
+ else {
96
+ colorStatement += `
97
+ let blur2 = textureSample(blurTexture, sourceSampler, vec2<f32>(1.0) - input.texCoord);`;
98
+ }
99
+ colorStatement += `
100
+ var highlightAlpha = blur.a - blur2.a;
101
+ var shadowAlpha = blur2.a - blur.a;`;
102
+ if (appliesStrength) {
103
+ colorStatement += `
104
+ let strength = uniforms.strength;
105
+ highlightAlpha = highlightAlpha * strength;
106
+ shadowAlpha = shadowAlpha * strength;`;
107
+ }
108
+ colorStatement += `
109
+ highlightAlpha = clamp(highlightAlpha, 0.0, 1.0);
110
+ shadowAlpha = clamp(shadowAlpha, 0.0, 1.0);`;
111
+ if (isGradient) {
112
+ colorStatement += `
113
+ blur = textureSample(gradientTexture, sourceSampler, vec2<f32>(
114
+ 0.5019607843137255 - 0.5019607843137255 * shadowAlpha + 0.4980392156862745 * highlightAlpha,
115
+ 0.5
116
+ ));`;
117
+ }
118
+ else {
119
+ colorStatement += `
120
+ let highlightColor = uniforms.highlightColor;
121
+ let shadowColor = uniforms.shadowColor;
122
+ blur = highlightColor * highlightAlpha + shadowColor * shadowAlpha;`;
123
+ }
124
+ }
125
+ let modeExpression = "";
126
+ switch (type) {
127
+ case "outer":
128
+ modeExpression = knockout
129
+ ? "blur - blur * base.a"
130
+ : "base + blur - blur * base.a";
131
+ break;
132
+ case "full":
133
+ modeExpression = knockout
134
+ ? "blur"
135
+ : "base - base * blur.a + blur";
136
+ break;
137
+ case "inner":
138
+ default:
139
+ modeExpression = "blur";
140
+ break;
141
+ }
142
+ const needsBase = transformsBase || (type === "outer" || type === "full" && !knockout);
143
+ let baseDecl = "";
144
+ if (needsBase && !transformsBase) {
145
+ baseDecl = `
146
+ let base = vec4<f32>(0.0);`;
147
+ }
148
+ return `
149
+ ${uniformsStruct}
150
+ ${textureBindings}
151
+
152
+ struct VertexOutput {
153
+ @builtin(position) position: vec4<f32>,
154
+ @location(0) texCoord: vec2<f32>,
155
+ }
156
+
157
+ fn isInside(uv: vec2<f32>) -> f32 {
158
+ let inside = step(vec2<f32>(0.0), uv) * step(uv, vec2<f32>(1.0));
159
+ return inside.x * inside.y;
160
+ }
161
+
162
+ @vertex
163
+ fn vs_main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput {
164
+ var positions = array<vec2<f32>, 6>(
165
+ vec2<f32>(-1.0, -1.0),
166
+ vec2<f32>(1.0, -1.0),
167
+ vec2<f32>(-1.0, 1.0),
168
+ vec2<f32>(-1.0, 1.0),
169
+ vec2<f32>(1.0, -1.0),
170
+ vec2<f32>(1.0, 1.0)
171
+ );
172
+
173
+ var texCoords = array<vec2<f32>, 6>(
174
+ vec2<f32>(0.0, 1.0),
175
+ vec2<f32>(1.0, 1.0),
176
+ vec2<f32>(0.0, 0.0),
177
+ vec2<f32>(0.0, 0.0),
178
+ vec2<f32>(1.0, 1.0),
179
+ vec2<f32>(1.0, 0.0)
180
+ );
181
+
182
+ var output: VertexOutput;
183
+ output.position = vec4<f32>(positions[vertexIndex], 0.0, 1.0);
184
+ output.texCoord = texCoords[vertexIndex];
185
+ return output;
186
+ }
187
+
188
+ @fragment
189
+ fn fs_main(input: VertexOutput) -> @location(0) vec4<f32> {
190
+ ${baseDecl}
191
+ ${baseStatement}
192
+ ${blurStatement}
193
+ ${colorStatement}
194
+
195
+ return ${modeExpression};
196
+ }
197
+ `;
198
+ };
199
+ export const getBitmapFilterShaderKey = (transformsBase, transformsBlur, isGlow, type, knockout, appliesStrength, isGradient) => {
200
+ const key1 = transformsBase ? "y" : "n";
201
+ const key2 = transformsBlur ? "y" : "n";
202
+ const key3 = isGlow ? "g" : "b";
203
+ const key4 = knockout ? "k" : "n";
204
+ const key5 = appliesStrength ? "s" : "n";
205
+ const key6 = isGradient ? "gr" : "so";
206
+ return `bitmap_${key1}${key2}${key3}${type}${key4}${key5}${key6}`;
207
+ };
@@ -0,0 +1,16 @@
1
+ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
2
+ import type { IFilterConfig } from "../../interface/IFilterConfig";
3
+ /**
4
+ * @description ブラーフィルターを適用
5
+ * Apply blur filter
6
+ *
7
+ * @param {IAttachmentObject} sourceAttachment - 入力テクスチャ(アタッチメント)
8
+ * @param {Float32Array} matrix - 変換行列
9
+ * @param {number} blurX - X方向のブラー量
10
+ * @param {number} blurY - Y方向のブラー量
11
+ * @param {number} quality - クオリティ (1-15)
12
+ * @param {number} devicePixelRatio - デバイスピクセル比
13
+ * @param {IFilterConfig} config - WebGPUリソース設定
14
+ * @return {IAttachmentObject} - フィルター適用後のアタッチメント
15
+ */
16
+ export declare const execute: (sourceAttachment: IAttachmentObject, matrix: Float32Array, blurX: number, blurY: number, quality: number, devicePixelRatio: number, config: IFilterConfig) => IAttachmentObject;