@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,172 @@
1
+ import { ShaderSource } from "../../Shader/ShaderSource";
2
+ /**
3
+ * @description プリアロケートされたFloat32Array (サイズ12: 最大48バイト)
4
+ */
5
+ const $uniform12 = new Float32Array(12);
6
+ /**
7
+ * @description プリアロケートされたBindGroupEntry配列 (バインディング4つ)
8
+ */
9
+ const $entries4 = [
10
+ { "binding": 0, "resource": { "buffer": null } },
11
+ { "binding": 1, "resource": null },
12
+ { "binding": 2, "resource": null },
13
+ { "binding": 3, "resource": null }
14
+ ];
15
+ /**
16
+ * @description 32bit整数からRGB値を抽出(プリマルチプライドアルファ)
17
+ */
18
+ const intToRGBA = (color, alpha) => {
19
+ const r = (color >> 16 & 0xFF) / 255 * alpha;
20
+ const g = (color >> 8 & 0xFF) / 255 * alpha;
21
+ const b = (color & 0xFF) / 255 * alpha;
22
+ return [r, g, b, alpha];
23
+ };
24
+ /**
25
+ * @description パイプラインキャッシュ(キー: componentX,componentY,mode)
26
+ */
27
+ const $pipelineCache = new Map();
28
+ /**
29
+ * @description ディスプレイスメントマップフィルターを適用
30
+ */
31
+ export const execute = (sourceAttachment, _matrix, bitmapBuffer, bitmapWidth, bitmapHeight, mapPointX, mapPointY, componentX, componentY, scaleX, scaleY, mode, color, alpha, _devicePixelRatio, config) => {
32
+ const { device, commandEncoder, frameBufferManager, textureManager } = config;
33
+ const width = sourceAttachment.width;
34
+ const height = sourceAttachment.height;
35
+ // WebGL版と同じ: baseWidth/baseHeightはビットマップサイズを使用
36
+ const baseWidth = bitmapWidth;
37
+ const baseHeight = bitmapHeight;
38
+ // 出力アタッチメントを作成
39
+ const destAttachment = frameBufferManager.createTemporaryAttachment(width, height);
40
+ // マップテクスチャを作成
41
+ const mapTexture = device.createTexture({
42
+ "size": { "width": bitmapWidth, "height": bitmapHeight },
43
+ "format": "rgba8unorm",
44
+ "usage": GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST
45
+ });
46
+ device.queue.writeTexture({ "texture": mapTexture }, bitmapBuffer.buffer, { "bytesPerRow": bitmapWidth * 4, "offset": bitmapBuffer.byteOffset }, { "width": bitmapWidth, "height": bitmapHeight });
47
+ // パイプラインをキャッシュから取得または作成
48
+ const cacheKey = `${componentX},${componentY},${mode}`;
49
+ let cached = $pipelineCache.get(cacheKey);
50
+ if (!cached) {
51
+ const fragmentShaderCode = ShaderSource.getDisplacementMapFilterFragmentShader(componentX, componentY, mode);
52
+ const vertexShaderModule = device.createShaderModule({
53
+ "code": ShaderSource.getBlurFilterVertexShader()
54
+ });
55
+ const fragmentShaderModule = device.createShaderModule({
56
+ "code": fragmentShaderCode
57
+ });
58
+ const bindGroupLayout = device.createBindGroupLayout({
59
+ "entries": [
60
+ {
61
+ "binding": 0,
62
+ "visibility": GPUShaderStage.FRAGMENT,
63
+ "buffer": { "type": "uniform" }
64
+ },
65
+ {
66
+ "binding": 1,
67
+ "visibility": GPUShaderStage.FRAGMENT,
68
+ "sampler": {}
69
+ },
70
+ {
71
+ "binding": 2,
72
+ "visibility": GPUShaderStage.FRAGMENT,
73
+ "texture": {}
74
+ },
75
+ {
76
+ "binding": 3,
77
+ "visibility": GPUShaderStage.FRAGMENT,
78
+ "texture": {}
79
+ }
80
+ ]
81
+ });
82
+ const pipelineLayout = device.createPipelineLayout({
83
+ "bindGroupLayouts": [bindGroupLayout]
84
+ });
85
+ const pipeline = device.createRenderPipeline({
86
+ "layout": pipelineLayout,
87
+ "vertex": {
88
+ "module": vertexShaderModule,
89
+ "entryPoint": "main",
90
+ "buffers": []
91
+ },
92
+ "fragment": {
93
+ "module": fragmentShaderModule,
94
+ "entryPoint": "main",
95
+ "targets": [{
96
+ "format": "rgba8unorm",
97
+ "blend": {
98
+ "color": {
99
+ "srcFactor": "one",
100
+ "dstFactor": "one-minus-src-alpha",
101
+ "operation": "add"
102
+ },
103
+ "alpha": {
104
+ "srcFactor": "one",
105
+ "dstFactor": "one-minus-src-alpha",
106
+ "operation": "add"
107
+ }
108
+ }
109
+ }]
110
+ },
111
+ "primitive": {
112
+ "topology": "triangle-list",
113
+ "cullMode": "none"
114
+ }
115
+ });
116
+ cached = { pipeline, bindGroupLayout };
117
+ $pipelineCache.set(cacheKey, cached);
118
+ }
119
+ // サンプラーを作成
120
+ const sampler = textureManager.createSampler("displacement_sampler", true);
121
+ // ユニフォームバッファを作成
122
+ const needsSubstituteColor = mode === 1;
123
+ const uniformSize = needsSubstituteColor ? 48 : 32;
124
+ // uvToStScale
125
+ $uniform12[0] = baseWidth / bitmapWidth;
126
+ $uniform12[1] = baseHeight / bitmapHeight;
127
+ // uvToStOffset
128
+ $uniform12[2] = mapPointX / bitmapWidth;
129
+ $uniform12[3] = (baseHeight - bitmapHeight - mapPointY) / bitmapHeight;
130
+ // scale
131
+ $uniform12[4] = scaleX / baseWidth;
132
+ $uniform12[5] = scaleY / baseHeight;
133
+ // padding
134
+ $uniform12[6] = 0;
135
+ $uniform12[7] = 0;
136
+ // substituteColor (mode === 1 の場合)
137
+ if (needsSubstituteColor) {
138
+ const [r, g, b, a] = intToRGBA(color, alpha);
139
+ $uniform12[8] = r;
140
+ $uniform12[9] = g;
141
+ $uniform12[10] = b;
142
+ $uniform12[11] = a;
143
+ }
144
+ const uniformBuffer = config.bufferManager
145
+ ? config.bufferManager.acquireAndWriteUniformBuffer($uniform12, uniformSize)
146
+ : device.createBuffer({
147
+ "size": uniformSize,
148
+ "usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
149
+ });
150
+ if (!config.bufferManager) {
151
+ device.queue.writeBuffer(uniformBuffer, 0, $uniform12, 0, uniformSize / 4);
152
+ }
153
+ // バインドグループを作成
154
+ $entries4[0].resource.buffer = uniformBuffer;
155
+ $entries4[1].resource = sampler;
156
+ $entries4[2].resource = sourceAttachment.texture.view;
157
+ $entries4[3].resource = mapTexture.createView();
158
+ const bindGroup = device.createBindGroup({
159
+ "layout": cached.bindGroupLayout,
160
+ "entries": $entries4
161
+ });
162
+ // レンダーパスを実行
163
+ const renderPassDescriptor = frameBufferManager.createRenderPassDescriptor(destAttachment.texture.view, 0, 0, 0, 0, "clear");
164
+ const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
165
+ passEncoder.setPipeline(cached.pipeline);
166
+ passEncoder.setBindGroup(0, bindGroup);
167
+ passEncoder.draw(6, 1, 0, 0);
168
+ passEncoder.end();
169
+ // クリーンアップ(mapTextureはsubmit後に遅延破棄)
170
+ config.frameTextures.push(mapTexture);
171
+ return destAttachment;
172
+ };
@@ -0,0 +1,2 @@
1
+ export declare const getDisplacementMapFilterFragmentShader: (componentX: number, componentY: number, mode: number) => string;
2
+ export declare const getDisplacementMapFilterShaderKey: (componentX: number, componentY: number, mode: number) => string;
@@ -0,0 +1,114 @@
1
+ const getComponentExpression = (component) => {
2
+ switch (component) {
3
+ case 1:
4
+ return "mapColor.r";
5
+ case 2:
6
+ return "mapColor.g";
7
+ case 4:
8
+ return "mapColor.b";
9
+ case 8:
10
+ return "mapColor.a";
11
+ default:
12
+ return "0.5";
13
+ }
14
+ };
15
+ const getModeStatement = (mode) => {
16
+ switch (mode) {
17
+ case 0:
18
+ return `
19
+ let sourceColor = textureSample(sourceTexture, sourceSampler, uv);`;
20
+ case 1:
21
+ return `
22
+ let substituteColor = uniforms.substituteColor;
23
+ let sourceColor = mix(substituteColor, textureSample(sourceTexture, sourceSampler, uv), isInside(uv));`;
24
+ case 3:
25
+ return `
26
+ let fallbackUv = mix(input.texCoord, uv, step(abs(uv - vec2<f32>(0.5)), vec2<f32>(0.5)));
27
+ let sourceColor = textureSample(sourceTexture, sourceSampler, fallbackUv);`;
28
+ case 2:
29
+ default:
30
+ return `
31
+ let sourceColor = textureSample(sourceTexture, sourceSampler, fract(uv));`;
32
+ }
33
+ };
34
+ export const getDisplacementMapFilterFragmentShader = (componentX, componentY, mode) => {
35
+ const cx = getComponentExpression(componentX);
36
+ const cy = getComponentExpression(componentY);
37
+ const modeStatement = getModeStatement(mode);
38
+ const hasSubstituteColor = mode === 1;
39
+ return `
40
+ struct DisplacementMapUniforms {
41
+ uvToStScale: vec2<f32>,
42
+ uvToStOffset: vec2<f32>,
43
+ scale: vec2<f32>,
44
+ _pad: vec2<f32>,
45
+ ${hasSubstituteColor ? " substituteColor: vec4<f32>," : ""}
46
+ }
47
+
48
+ @group(0) @binding(0) var<uniform> uniforms: DisplacementMapUniforms;
49
+ @group(0) @binding(1) var sourceSampler: sampler;
50
+ @group(0) @binding(2) var sourceTexture: texture_2d<f32>;
51
+ @group(0) @binding(3) var mapTexture: texture_2d<f32>;
52
+
53
+ struct VertexOutput {
54
+ @builtin(position) position: vec4<f32>,
55
+ @location(0) texCoord: vec2<f32>,
56
+ }
57
+
58
+ fn isInside(uv: vec2<f32>) -> f32 {
59
+ let inside = step(vec2<f32>(0.0), uv) * step(uv, vec2<f32>(1.0));
60
+ return inside.x * inside.y;
61
+ }
62
+
63
+ var<private> input: VertexOutput;
64
+
65
+ @vertex
66
+ fn vs_main(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput {
67
+ var positions = array<vec2<f32>, 6>(
68
+ vec2<f32>(-1.0, -1.0),
69
+ vec2<f32>(1.0, -1.0),
70
+ vec2<f32>(-1.0, 1.0),
71
+ vec2<f32>(-1.0, 1.0),
72
+ vec2<f32>(1.0, -1.0),
73
+ vec2<f32>(1.0, 1.0)
74
+ );
75
+
76
+ var texCoords = array<vec2<f32>, 6>(
77
+ vec2<f32>(0.0, 1.0),
78
+ vec2<f32>(1.0, 1.0),
79
+ vec2<f32>(0.0, 0.0),
80
+ vec2<f32>(0.0, 0.0),
81
+ vec2<f32>(1.0, 1.0),
82
+ vec2<f32>(1.0, 0.0)
83
+ );
84
+
85
+ var output: VertexOutput;
86
+ output.position = vec4<f32>(positions[vertexIndex], 0.0, 1.0);
87
+ output.texCoord = texCoords[vertexIndex];
88
+ return output;
89
+ }
90
+
91
+ @fragment
92
+ fn fs_main(fragInput: VertexOutput) -> @location(0) vec4<f32> {
93
+ input = fragInput;
94
+
95
+ let uvToStScale = uniforms.uvToStScale;
96
+ let uvToStOffset = uniforms.uvToStOffset;
97
+ let scale = uniforms.scale;
98
+
99
+ let st = input.texCoord * uvToStScale - uvToStOffset;
100
+ let mapColor = textureSample(mapTexture, sourceSampler, st);
101
+
102
+ let offset = vec2<f32>(${cx}, ${cy}) - 0.5;
103
+ let uv = input.texCoord + offset * scale;
104
+
105
+ ${modeStatement}
106
+
107
+ let originalColor = textureSample(sourceTexture, sourceSampler, input.texCoord);
108
+ return mix(originalColor, sourceColor, isInside(st));
109
+ }
110
+ `;
111
+ };
112
+ export const getDisplacementMapFilterShaderKey = (componentX, componentY, mode) => {
113
+ return `displacement_${componentX}_${componentY}_${mode}`;
114
+ };
@@ -0,0 +1,24 @@
1
+ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
2
+ import type { IFilterConfig } from "../../interface/IFilterConfig";
3
+ /**
4
+ * @description ドロップシャドウフィルターを適用
5
+ * Apply drop shadow filter
6
+ *
7
+ * @param {IAttachmentObject} sourceAttachment - 入力テクスチャ
8
+ * @param {Float32Array} matrix - 変換行列
9
+ * @param {number} distance - シャドウの距離
10
+ * @param {number} angle - シャドウの角度(度)
11
+ * @param {number} color - シャドウ色 (32bit整数)
12
+ * @param {number} alpha - アルファ
13
+ * @param {number} blurX - X方向ブラー量
14
+ * @param {number} blurY - Y方向ブラー量
15
+ * @param {number} strength - シャドウ強度
16
+ * @param {number} quality - クオリティ
17
+ * @param {boolean} inner - インナーシャドウ
18
+ * @param {boolean} knockout - ノックアウトモード
19
+ * @param {boolean} hideObject - 元オブジェクトを隠す
20
+ * @param {number} devicePixelRatio - デバイスピクセル比
21
+ * @param {IDropShadowConfig} config - WebGPUリソース設定
22
+ * @return {IAttachmentObject} - フィルター適用後のアタッチメント
23
+ */
24
+ export declare const execute: (sourceAttachment: IAttachmentObject, matrix: Float32Array, distance: number, angle: number, color: number, alpha: number, blurX: number, blurY: number, strength: number, quality: number, inner: boolean, knockout: boolean, hideObject: boolean, devicePixelRatio: number, config: IFilterConfig) => IAttachmentObject;
@@ -0,0 +1,179 @@
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 (サイズ16)
9
+ */
10
+ const $uniform16 = new Float32Array(16);
11
+ /**
12
+ * @description プリアロケートされたBindGroupEntry配列 (バインディング4つ)
13
+ */
14
+ const $entries4 = [
15
+ { "binding": 0, "resource": { "buffer": null } },
16
+ { "binding": 1, "resource": null },
17
+ { "binding": 2, "resource": null },
18
+ { "binding": 3, "resource": null }
19
+ ];
20
+ /**
21
+ * @description 32bit整数からRGB値を抽出(プリマルチプライドアルファ対応)
22
+ */
23
+ const intToRGBA = (color, alpha) => {
24
+ const r = (color >> 16 & 0xFF) / 255 * alpha;
25
+ const g = (color >> 8 & 0xFF) / 255 * alpha;
26
+ const b = (color & 0xFF) / 255 * alpha;
27
+ return [r, g, b, alpha];
28
+ };
29
+ /**
30
+ * @description ドロップシャドウフィルターを適用
31
+ * Apply drop shadow filter
32
+ *
33
+ * @param {IAttachmentObject} sourceAttachment - 入力テクスチャ
34
+ * @param {Float32Array} matrix - 変換行列
35
+ * @param {number} distance - シャドウの距離
36
+ * @param {number} angle - シャドウの角度(度)
37
+ * @param {number} color - シャドウ色 (32bit整数)
38
+ * @param {number} alpha - アルファ
39
+ * @param {number} blurX - X方向ブラー量
40
+ * @param {number} blurY - Y方向ブラー量
41
+ * @param {number} strength - シャドウ強度
42
+ * @param {number} quality - クオリティ
43
+ * @param {boolean} inner - インナーシャドウ
44
+ * @param {boolean} knockout - ノックアウトモード
45
+ * @param {boolean} hideObject - 元オブジェクトを隠す
46
+ * @param {number} devicePixelRatio - デバイスピクセル比
47
+ * @param {IDropShadowConfig} config - WebGPUリソース設定
48
+ * @return {IAttachmentObject} - フィルター適用後のアタッチメント
49
+ */
50
+ export const execute = (sourceAttachment, matrix, distance, angle, color, alpha, blurX, blurY, strength, quality, inner, knockout, hideObject, devicePixelRatio, config) => {
51
+ const { device, commandEncoder, frameBufferManager, pipelineManager, textureManager } = config;
52
+ // 元のオフセットを保存
53
+ const baseOffsetX = $offset.x;
54
+ const baseOffsetY = $offset.y;
55
+ const baseWidth = sourceAttachment.width;
56
+ const baseHeight = sourceAttachment.height;
57
+ // ブラーフィルターを適用
58
+ const blurAttachment = filterApplyBlurFilterUseCase(sourceAttachment, matrix, blurX, blurY, quality, devicePixelRatio, config);
59
+ const blurWidth = blurAttachment.width;
60
+ const blurHeight = blurAttachment.height;
61
+ const blurOffsetX = $offset.x;
62
+ const blurOffsetY = $offset.y;
63
+ const offsetDiffX = blurOffsetX - baseOffsetX;
64
+ const offsetDiffY = blurOffsetY - baseOffsetY;
65
+ // 変換行列からスケールを取得
66
+ const xScale = Math.sqrt(matrix[0] * matrix[0] + matrix[1] * matrix[1]);
67
+ const yScale = Math.sqrt(matrix[2] * matrix[2] + matrix[3] * matrix[3]);
68
+ // シャドウのオフセットを計算
69
+ const radian = angle * DEG_TO_RAD;
70
+ const shadowX = Math.cos(radian) * distance * (xScale / devicePixelRatio);
71
+ const shadowY = Math.sin(radian) * distance * (yScale / devicePixelRatio);
72
+ // 出力キャンバスのサイズを計算
73
+ const w = inner ? baseWidth : blurWidth + Math.max(0, Math.abs(shadowX) - offsetDiffX);
74
+ const h = inner ? baseHeight : blurHeight + Math.max(0, Math.abs(shadowY) - offsetDiffY);
75
+ const width = Math.ceil(w);
76
+ const height = Math.ceil(h);
77
+ const fractionX = (width - w) / 2;
78
+ const fractionY = (height - h) / 2;
79
+ // テクスチャの位置を計算(WebGL版と同じ)
80
+ const baseTextureX = inner ? 0 : Math.max(0, offsetDiffX - shadowX) + fractionX;
81
+ const baseTextureY = inner ? 0 : Math.max(0, offsetDiffY - shadowY) + fractionY;
82
+ const blurTextureX = inner ? shadowX - blurOffsetX : (shadowX > 0 ? Math.max(0, shadowX - offsetDiffX) : 0) + fractionX;
83
+ const blurTextureY = inner ? shadowY - blurOffsetY : (shadowY > 0 ? Math.max(0, shadowY - offsetDiffY) : 0) + fractionY;
84
+ // 出力アタッチメントを作成
85
+ const destAttachment = frameBufferManager.createTemporaryAttachment(width, height);
86
+ // タイプとノックアウト状態を決定
87
+ const isInner = inner;
88
+ let isKnockout = knockout;
89
+ let isHideObject = hideObject;
90
+ if (inner) {
91
+ isKnockout = knockout || hideObject;
92
+ }
93
+ else if (!knockout && hideObject) {
94
+ // フルモード(シャドウのみ表示)
95
+ isKnockout = true;
96
+ isHideObject = true;
97
+ }
98
+ const pipeline = pipelineManager.getFilterPipeline("drop_shadow_filter", {
99
+ "IS_INNER": isInner ? 1 : 0,
100
+ "IS_KNOCKOUT": isKnockout ? 1 : 0,
101
+ "IS_HIDE_OBJECT": isHideObject ? 1 : 0
102
+ });
103
+ const bindGroupLayout = pipelineManager.getBindGroupLayout("drop_shadow_filter");
104
+ if (!pipeline || !bindGroupLayout) {
105
+ console.error("[WebGPU DropShadowFilter] Pipeline not found");
106
+ frameBufferManager.releaseTemporaryAttachment(blurAttachment);
107
+ return sourceAttachment;
108
+ }
109
+ // サンプラーを作成
110
+ const sampler = textureManager.createSampler("drop_shadow_sampler", true);
111
+ // ユニフォームバッファを作成
112
+ // color: vec4<f32> (16 bytes)
113
+ // baseScale: vec2<f32> (8 bytes)
114
+ // baseOffset: vec2<f32> (8 bytes)
115
+ // blurScale: vec2<f32> (8 bytes)
116
+ // blurOffset: vec2<f32> (8 bytes)
117
+ // strength: f32 (4 bytes)
118
+ // inner: f32 (4 bytes)
119
+ // knockout: f32 (4 bytes)
120
+ // hideObject: f32 (4 bytes)
121
+ // Total: 64 bytes
122
+ const [r, g, b, a] = intToRGBA(color, alpha);
123
+ // WebGL版と同じUV変換方式:
124
+ // uv = texCoord * scale - offset
125
+ // WebGPU: texCoord.y=0がトップ、テクスチャY=0がトップ(Y-flip補正済み)
126
+ // → offset_y = textureY / textureHeight(WebGLのY反転不要)
127
+ const baseScaleX = width / baseWidth;
128
+ const baseScaleY = height / baseHeight;
129
+ const baseOffsetUVX = baseTextureX / baseWidth;
130
+ const baseOffsetUVY = baseTextureY / baseHeight;
131
+ const blurScaleX = width / blurWidth;
132
+ const blurScaleY = height / blurHeight;
133
+ const blurOffsetUVX = blurTextureX / blurWidth;
134
+ const blurOffsetUVY = blurTextureY / blurHeight;
135
+ $uniform16[0] = r;
136
+ $uniform16[1] = g;
137
+ $uniform16[2] = b;
138
+ $uniform16[3] = a;
139
+ $uniform16[4] = baseScaleX;
140
+ $uniform16[5] = baseScaleY;
141
+ $uniform16[6] = baseOffsetUVX;
142
+ $uniform16[7] = baseOffsetUVY;
143
+ $uniform16[8] = blurScaleX;
144
+ $uniform16[9] = blurScaleY;
145
+ $uniform16[10] = blurOffsetUVX;
146
+ $uniform16[11] = blurOffsetUVY;
147
+ $uniform16[12] = strength;
148
+ $uniform16[13] = isInner ? 1.0 : 0.0;
149
+ $uniform16[14] = isKnockout ? 1.0 : 0.0;
150
+ $uniform16[15] = isHideObject ? 1.0 : 0.0;
151
+ const uniformBuffer = config.bufferManager
152
+ ? config.bufferManager.acquireAndWriteUniformBuffer($uniform16)
153
+ : device.createBuffer({
154
+ "size": $uniform16.byteLength,
155
+ "usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
156
+ });
157
+ if (!config.bufferManager) {
158
+ device.queue.writeBuffer(uniformBuffer, 0, $uniform16);
159
+ }
160
+ // バインドグループを作成(オリジナルテクスチャを直接使用)
161
+ $entries4[0].resource.buffer = uniformBuffer;
162
+ $entries4[1].resource = sampler;
163
+ $entries4[2].resource = blurAttachment.texture.view;
164
+ $entries4[3].resource = sourceAttachment.texture.view;
165
+ const bindGroup = device.createBindGroup({
166
+ "layout": bindGroupLayout,
167
+ "entries": $entries4
168
+ });
169
+ // レンダーパスを実行
170
+ const renderPassDescriptor = frameBufferManager.createRenderPassDescriptor(destAttachment.texture.view, 0, 0, 0, 0, "clear");
171
+ const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
172
+ passEncoder.setPipeline(pipeline);
173
+ passEncoder.setBindGroup(0, bindGroup);
174
+ passEncoder.draw(6, 1, 0, 0);
175
+ passEncoder.end();
176
+ // クリーンアップ
177
+ frameBufferManager.releaseTemporaryAttachment(blurAttachment);
178
+ return destAttachment;
179
+ };
@@ -0,0 +1,4 @@
1
+ export declare class DropShadowFilterShader {
2
+ static getFragmentShader(): string;
3
+ static getVertexShader(): string;
4
+ }
@@ -0,0 +1,93 @@
1
+ export class DropShadowFilterShader {
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 DropShadowUniforms {
10
+ shadowColor: vec4<f32>,
11
+ offset: vec2<f32>,
12
+ distance: f32,
13
+ angle: f32,
14
+ strength: f32,
15
+ inner: f32,
16
+ knockout: f32,
17
+ hideObject: f32,
18
+ }
19
+
20
+ @group(0) @binding(0) var<uniform> uniforms: DropShadowUniforms;
21
+ @group(0) @binding(1) var textureSampler: sampler;
22
+ @group(0) @binding(2) var textureData: texture_2d<f32>;
23
+
24
+ @fragment
25
+ fn main(input: VertexOutput) -> @location(0) vec4<f32> {
26
+ var originalColor = textureSample(textureData, textureSampler, input.texCoord);
27
+
28
+ let radian = uniforms.angle * 3.14159265 / 180.0;
29
+ let offsetX = cos(radian) * uniforms.distance / 100.0;
30
+ let offsetY = sin(radian) * uniforms.distance / 100.0;
31
+
32
+ let shadowCoord = vec2<f32>(
33
+ input.texCoord.x + offsetX,
34
+ input.texCoord.y + offsetY
35
+ );
36
+
37
+ var shadowAlpha = textureSample(textureData, textureSampler, shadowCoord).a;
38
+
39
+ var shadowColor = vec4<f32>(
40
+ uniforms.shadowColor.rgb,
41
+ shadowAlpha * uniforms.shadowColor.a * uniforms.strength
42
+ );
43
+
44
+ if (uniforms.inner > 0.5) {
45
+ let alpha = originalColor.a;
46
+ shadowColor.a *= alpha;
47
+
48
+ if (uniforms.knockout > 0.5) {
49
+ return shadowColor;
50
+ } else {
51
+ return mix(shadowColor, originalColor, alpha);
52
+ }
53
+ } else {
54
+ if (uniforms.hideObject > 0.5) {
55
+ return shadowColor * (1.0 - originalColor.a);
56
+ } else if (uniforms.knockout > 0.5) {
57
+ return shadowColor;
58
+ } else {
59
+ let combinedAlpha = originalColor.a + shadowColor.a * (1.0 - originalColor.a);
60
+ if (combinedAlpha > 0.0) {
61
+ let rgb = (originalColor.rgb * originalColor.a +
62
+ shadowColor.rgb * shadowColor.a * (1.0 - originalColor.a)) / combinedAlpha;
63
+ return vec4<f32>(rgb, combinedAlpha);
64
+ } else {
65
+ return vec4<f32>(0.0);
66
+ }
67
+ }
68
+ }
69
+ }
70
+ `;
71
+ }
72
+ static getVertexShader() {
73
+ return /* wgsl */ `
74
+ struct VertexInput {
75
+ @location(0) position: vec2<f32>,
76
+ @location(1) texCoord: vec2<f32>,
77
+ }
78
+
79
+ struct VertexOutput {
80
+ @builtin(position) position: vec4<f32>,
81
+ @location(0) texCoord: vec2<f32>,
82
+ }
83
+
84
+ @vertex
85
+ fn main(input: VertexInput) -> VertexOutput {
86
+ var output: VertexOutput;
87
+ output.position = vec4<f32>(input.position, 0.0, 1.0);
88
+ output.texCoord = input.texCoord;
89
+ return output;
90
+ }
91
+ `;
92
+ }
93
+ }
@@ -0,0 +1,29 @@
1
+ import type { IAttachmentObject } from "../interface/IAttachmentObject";
2
+ /**
3
+ * @description GPUDeviceを設定
4
+ * Set GPUDevice
5
+ *
6
+ * @param {GPUDevice} device
7
+ * @return {void}
8
+ * @method
9
+ * @protected
10
+ */
11
+ export declare const $setFilterGradientLUTDevice: (device: GPUDevice) => void;
12
+ /**
13
+ * @description フィルター用グラデーションLUTのAttachmentObjectを返却
14
+ * Returns AttachmentObject for filter gradient LUT
15
+ *
16
+ * @return {IAttachmentObject}
17
+ * @method
18
+ * @protected
19
+ */
20
+ export declare const $getFilterGradientAttachmentObject: () => IAttachmentObject;
21
+ /**
22
+ * @description フィルター用グラデーションLUTの共有アタッチメントを破棄してクリア
23
+ * Destroy and clear filter gradient LUT shared attachment
24
+ *
25
+ * @return {void}
26
+ * @method
27
+ * @protected
28
+ */
29
+ export declare const $clearFilterGradientAttachment: () => void;