@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,476 @@
1
+ import { $offset } from "../../Filter/FilterOffset";
2
+ import { WebGPUUtil } from "../../WebGPUUtil";
3
+ import { $cacheStore } from "@next2d/cache";
4
+ import { execute as filterApplyBlurFilterUseCase } from "../../Filter/BlurFilter/FilterApplyBlurFilterUseCase";
5
+ import { execute as filterApplyColorMatrixFilterUseCase } from "../../Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase";
6
+ import { execute as filterApplyGlowFilterUseCase } from "../../Filter/GlowFilter/FilterApplyGlowFilterUseCase";
7
+ import { execute as filterApplyDropShadowFilterUseCase } from "../../Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase";
8
+ import { execute as filterApplyBevelFilterUseCase } from "../../Filter/BevelFilter/FilterApplyBevelFilterUseCase";
9
+ import { execute as filterApplyConvolutionFilterUseCase } from "../../Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase";
10
+ import { execute as filterApplyGradientBevelFilterUseCase } from "../../Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase";
11
+ import { execute as filterApplyGradientGlowFilterUseCase } from "../../Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase";
12
+ import { execute as filterApplyDisplacementMapFilterUseCase } from "../../Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase";
13
+ import { execute as blendApplyComplexBlendUseCase } from "../../Blend/usecase/BlendApplyComplexBlendUseCase";
14
+ const $uniform4 = new Float32Array(4);
15
+ const $uniform8 = new Float32Array(8);
16
+ const $uniform20 = new Float32Array(20);
17
+ // プリアロケート BindGroup Entry 配列
18
+ const $entries3 = [
19
+ { "binding": 0, "resource": { "buffer": null } },
20
+ { "binding": 1, "resource": null },
21
+ { "binding": 2, "resource": null }
22
+ ];
23
+ const SIMPLE_BLEND_MODES = new Set([
24
+ "normal", "layer", "add", "screen", "alpha", "erase", "copy"
25
+ ]);
26
+ const $identityColorTransform = new Float32Array([1, 1, 1, 1, 0, 0, 0, 0]);
27
+ const isIdentityColorTransform = (ct) => {
28
+ if (!ct) {
29
+ return true;
30
+ }
31
+ return ct[0] === 1 && ct[1] === 1 && ct[2] === 1 && ct[3] === 1
32
+ && ct[4] === 0 && ct[5] === 0 && ct[6] === 0 && ct[7] === 0;
33
+ };
34
+ const applyColorTransform = (config, attachment, colorTransform) => {
35
+ const ctAttachment = config.frameBufferManager.createTemporaryAttachment(attachment.width, attachment.height);
36
+ const pipeline = config.pipelineManager.getPipeline("color_transform");
37
+ const bindGroupLayout = config.pipelineManager.getBindGroupLayout("texture_copy");
38
+ if (!pipeline || !bindGroupLayout || !attachment.texture || !ctAttachment.texture) {
39
+ return attachment;
40
+ }
41
+ $uniform8[0] = colorTransform[0];
42
+ $uniform8[1] = colorTransform[1];
43
+ $uniform8[2] = colorTransform[2];
44
+ $uniform8[3] = colorTransform[3];
45
+ $uniform8[4] = colorTransform[4];
46
+ $uniform8[5] = colorTransform[5];
47
+ $uniform8[6] = colorTransform[6];
48
+ $uniform8[7] = 0;
49
+ const uniformBuffer = config.bufferManager.acquireAndWriteUniformBuffer($uniform8);
50
+ const sampler = config.textureManager.createSampler("container_ct_sampler", false);
51
+ $entries3[0].resource.buffer = uniformBuffer;
52
+ $entries3[1].resource = sampler;
53
+ $entries3[2].resource = attachment.texture.view;
54
+ const bindGroup = config.device.createBindGroup({
55
+ "layout": bindGroupLayout,
56
+ "entries": $entries3
57
+ });
58
+ const renderPassDescriptor = config.frameBufferManager.createRenderPassDescriptor(ctAttachment.texture.view, 0, 0, 0, 0, "clear");
59
+ const passEncoder = config.commandEncoder.beginRenderPass(renderPassDescriptor);
60
+ passEncoder.setPipeline(pipeline);
61
+ passEncoder.setBindGroup(0, bindGroup);
62
+ passEncoder.draw(6, 1, 0, 0);
63
+ passEncoder.end();
64
+ return ctAttachment;
65
+ };
66
+ const copyRegionToFilterAttachment = (config, srcAttachment, x, y, width, height) => {
67
+ const dstAttachment = config.frameBufferManager.createTemporaryAttachment(width, height);
68
+ const pipeline = config.pipelineManager.getPipeline("complex_blend_copy");
69
+ const bindGroupLayout = config.pipelineManager.getBindGroupLayout("texture_copy");
70
+ if (!pipeline || !bindGroupLayout || !srcAttachment.texture || !dstAttachment.texture) {
71
+ return dstAttachment;
72
+ }
73
+ const scaleX = width / srcAttachment.width;
74
+ const offsetX = x / srcAttachment.width;
75
+ // ComplexBlendCopyVertexはOpenGL座標系のtexCoord(Y軸反転)を使用するため、
76
+ // UV uniformでY反転を補正して正しい向きの出力を得る
77
+ // texCoord.y=1(fb上端) → uv.y=y/H(ソース上端), texCoord.y=0(fb下端) → uv.y=(y+h)/H(ソース下端)
78
+ const scaleY = -(height / srcAttachment.height);
79
+ const offsetY = (y + height) / srcAttachment.height;
80
+ $uniform4[0] = scaleX;
81
+ $uniform4[1] = scaleY;
82
+ $uniform4[2] = offsetX;
83
+ $uniform4[3] = offsetY;
84
+ const uniformBuffer = config.bufferManager.acquireAndWriteUniformBuffer($uniform4);
85
+ const sampler = config.textureManager.createSampler("container_copy_sampler", false);
86
+ $entries3[0].resource.buffer = uniformBuffer;
87
+ $entries3[1].resource = sampler;
88
+ $entries3[2].resource = srcAttachment.texture.view;
89
+ const bindGroup = config.device.createBindGroup({
90
+ "layout": bindGroupLayout,
91
+ "entries": $entries3
92
+ });
93
+ const renderPassDescriptor = config.frameBufferManager.createRenderPassDescriptor(dstAttachment.texture.view, 0, 0, 0, 0, "clear");
94
+ const passEncoder = config.commandEncoder.beginRenderPass(renderPassDescriptor);
95
+ passEncoder.setPipeline(pipeline);
96
+ passEncoder.setBindGroup(0, bindGroup);
97
+ passEncoder.draw(6, 1, 0, 0);
98
+ passEncoder.end();
99
+ return dstAttachment;
100
+ };
101
+ const drawFilterResultToMain = (config, filterAttachment, mainAttachment, blendMode, x, y, bufferManager) => {
102
+ if (!mainAttachment.texture || !filterAttachment.texture) {
103
+ return;
104
+ }
105
+ // WebGLと同じサブピクセル精度を維持するため、Math.floorを使用しない
106
+ let drawX = x;
107
+ let drawY = y;
108
+ let drawWidth = filterAttachment.width;
109
+ let drawHeight = filterAttachment.height;
110
+ let uvOffsetX = 0;
111
+ let uvOffsetY = 0;
112
+ if (drawX < 0) {
113
+ uvOffsetX = -drawX / filterAttachment.width;
114
+ drawWidth += drawX;
115
+ drawX = 0;
116
+ }
117
+ if (drawY < 0) {
118
+ uvOffsetY = -drawY / filterAttachment.height;
119
+ drawHeight += drawY;
120
+ drawY = 0;
121
+ }
122
+ if (drawWidth <= 0 || drawHeight <= 0) {
123
+ return;
124
+ }
125
+ const mainWidth = mainAttachment.width;
126
+ const mainHeight = mainAttachment.height;
127
+ if (drawX + drawWidth > mainWidth) {
128
+ drawWidth = mainWidth - drawX;
129
+ }
130
+ if (drawY + drawHeight > mainHeight) {
131
+ drawHeight = mainHeight - drawY;
132
+ }
133
+ if (SIMPLE_BLEND_MODES.has(blendMode)) {
134
+ const useMsaa = mainAttachment.msaa && mainAttachment.msaaTexture?.view;
135
+ let pipelineName;
136
+ switch (blendMode) {
137
+ case "add":
138
+ pipelineName = useMsaa ? "filter_output_add_msaa" : "filter_output_add";
139
+ break;
140
+ case "screen":
141
+ pipelineName = useMsaa ? "filter_output_screen_msaa" : "filter_output_screen";
142
+ break;
143
+ case "alpha":
144
+ pipelineName = useMsaa ? "filter_output_alpha_msaa" : "filter_output_alpha";
145
+ break;
146
+ case "erase":
147
+ pipelineName = useMsaa ? "filter_output_erase_msaa" : "filter_output_erase";
148
+ break;
149
+ case "copy":
150
+ pipelineName = useMsaa ? "texture_copy_bgra_msaa" : "texture_copy_bgra";
151
+ break;
152
+ default:
153
+ pipelineName = useMsaa ? "filter_output_msaa" : "filter_output";
154
+ break;
155
+ }
156
+ const pipeline = config.pipelineManager.getPipeline(pipelineName);
157
+ const bindGroupLayout = config.pipelineManager.getBindGroupLayout("texture_copy");
158
+ if (!pipeline || !bindGroupLayout) {
159
+ return;
160
+ }
161
+ const sampler = config.textureManager.createSampler("container_output_sampler", true);
162
+ const uvScaleX = drawWidth / filterAttachment.width;
163
+ const uvScaleY = drawHeight / filterAttachment.height;
164
+ $uniform4[0] = uvScaleX;
165
+ $uniform4[1] = uvScaleY;
166
+ $uniform4[2] = uvOffsetX;
167
+ $uniform4[3] = uvOffsetY;
168
+ const uniformBuffer = bufferManager.acquireAndWriteUniformBuffer($uniform4);
169
+ $entries3[0].resource.buffer = uniformBuffer;
170
+ $entries3[1].resource = sampler;
171
+ $entries3[2].resource = filterAttachment.texture.view;
172
+ const bindGroup = config.device.createBindGroup({
173
+ "layout": bindGroupLayout,
174
+ "entries": $entries3
175
+ });
176
+ const colorView = useMsaa ? mainAttachment.msaaTexture.view : mainAttachment.texture.view;
177
+ const resolveTarget = useMsaa ? mainAttachment.texture.view : null;
178
+ const renderPassDescriptor = config.frameBufferManager.createRenderPassDescriptor(colorView, 0, 0, 0, 0, "load", resolveTarget);
179
+ // Viewportはfloat値でサブピクセル精度を維持(WebGLのsetTransform相当)
180
+ const vpX = Math.max(0, drawX);
181
+ const vpY = Math.max(0, drawY);
182
+ const vpW = Math.max(1, drawWidth);
183
+ const vpH = Math.max(1, drawHeight);
184
+ const scissorX = Math.max(0, Math.floor(vpX));
185
+ const scissorY = Math.max(0, Math.floor(vpY));
186
+ const scissorW = Math.max(1, Math.min(Math.ceil(vpX + vpW) - scissorX, mainWidth - scissorX));
187
+ const scissorH = Math.max(1, Math.min(Math.ceil(vpY + vpH) - scissorY, mainHeight - scissorY));
188
+ if (scissorW <= 0 || scissorH <= 0 || scissorX >= mainWidth || scissorY >= mainHeight) {
189
+ return;
190
+ }
191
+ const passEncoder = config.commandEncoder.beginRenderPass(renderPassDescriptor);
192
+ passEncoder.setPipeline(pipeline);
193
+ passEncoder.setBindGroup(0, bindGroup);
194
+ passEncoder.setViewport(vpX, vpY, vpW, vpH, 0, 1);
195
+ passEncoder.setScissorRect(scissorX, scissorY, scissorW, scissorH);
196
+ passEncoder.draw(6, 1, 0, 0);
197
+ passEncoder.end();
198
+ }
199
+ else {
200
+ // 複雑なブレンドモード
201
+ const dstAttachment = copyRegionToFilterAttachment(config, mainAttachment, drawX, drawY, drawWidth, drawHeight);
202
+ $uniform8[0] = $identityColorTransform[0];
203
+ $uniform8[1] = $identityColorTransform[1];
204
+ $uniform8[2] = $identityColorTransform[2];
205
+ $uniform8[3] = $identityColorTransform[3];
206
+ $uniform8[4] = $identityColorTransform[4] / 255;
207
+ $uniform8[5] = $identityColorTransform[5] / 255;
208
+ $uniform8[6] = $identityColorTransform[6] / 255;
209
+ $uniform8[7] = 0;
210
+ const blendedAttachment = blendApplyComplexBlendUseCase(filterAttachment, dstAttachment, blendMode, $uniform8, {
211
+ "device": config.device,
212
+ "commandEncoder": config.commandEncoder,
213
+ "bufferManager": config.bufferManager,
214
+ "frameBufferManager": config.frameBufferManager,
215
+ "pipelineManager": config.pipelineManager,
216
+ "textureManager": config.textureManager,
217
+ "frameTextures": config.frameTextures
218
+ });
219
+ // 結果をメインに描画
220
+ const useMsaa = mainAttachment.msaa && mainAttachment.msaaTexture?.view;
221
+ const resultPipelineName = useMsaa ? "filter_complex_blend_output_msaa" : "filter_complex_blend_output";
222
+ const resultPipeline = config.pipelineManager.getPipeline(resultPipelineName);
223
+ const resultLayout = config.pipelineManager.getBindGroupLayout("positioned_texture");
224
+ if (resultPipeline && resultLayout && blendedAttachment.texture && mainAttachment.texture) {
225
+ $uniform8[0] = drawX;
226
+ $uniform8[1] = drawY;
227
+ $uniform8[2] = blendedAttachment.width;
228
+ $uniform8[3] = blendedAttachment.height;
229
+ $uniform8[4] = mainAttachment.width;
230
+ $uniform8[5] = mainAttachment.height;
231
+ $uniform8[6] = 0;
232
+ $uniform8[7] = 0;
233
+ const uniformBuffer = bufferManager.acquireAndWriteUniformBuffer($uniform8);
234
+ const sampler = config.textureManager.createSampler("container_blend_output_sampler", false);
235
+ $entries3[0].resource.buffer = uniformBuffer;
236
+ $entries3[1].resource = sampler;
237
+ $entries3[2].resource = blendedAttachment.texture.view;
238
+ const bindGroup = config.device.createBindGroup({
239
+ "layout": resultLayout,
240
+ "entries": $entries3
241
+ });
242
+ const colorView = useMsaa ? mainAttachment.msaaTexture.view : mainAttachment.texture.view;
243
+ const resolveTarget = useMsaa ? mainAttachment.texture.view : null;
244
+ const renderPassDescriptor = config.frameBufferManager.createRenderPassDescriptor(colorView, 0, 0, 0, 0, "load", resolveTarget);
245
+ const passEncoder = config.commandEncoder.beginRenderPass(renderPassDescriptor);
246
+ passEncoder.setPipeline(resultPipeline);
247
+ passEncoder.setBindGroup(0, bindGroup);
248
+ passEncoder.draw(6, 1, 0, 0);
249
+ passEncoder.end();
250
+ }
251
+ config.frameBufferManager.releaseTemporaryAttachment(dstAttachment);
252
+ config.frameBufferManager.releaseTemporaryAttachment(blendedAttachment);
253
+ }
254
+ };
255
+ const applyFilterChain = (filterAttachment, matrix, params, devicePixelRatio, config) => {
256
+ $offset.x = 0;
257
+ $offset.y = 0;
258
+ for (let idx = 0; params.length > idx;) {
259
+ const type = params[idx++];
260
+ switch (type) {
261
+ case 0: // BevelFilter
262
+ {
263
+ const newAtt = filterApplyBevelFilterUseCase(filterAttachment, matrix, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], Boolean(params[idx++]), devicePixelRatio, config);
264
+ if (filterAttachment !== newAtt) {
265
+ config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
266
+ }
267
+ filterAttachment = newAtt;
268
+ }
269
+ break;
270
+ case 1: // BlurFilter
271
+ {
272
+ const newAtt = filterApplyBlurFilterUseCase(filterAttachment, matrix, params[idx++], params[idx++], params[idx++], devicePixelRatio, config);
273
+ if (filterAttachment !== newAtt) {
274
+ config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
275
+ }
276
+ filterAttachment = newAtt;
277
+ }
278
+ break;
279
+ case 2: // ColorMatrixFilter
280
+ {
281
+ $uniform20[0] = params[idx++];
282
+ $uniform20[1] = params[idx++];
283
+ $uniform20[2] = params[idx++];
284
+ $uniform20[3] = params[idx++];
285
+ $uniform20[4] = params[idx++];
286
+ $uniform20[5] = params[idx++];
287
+ $uniform20[6] = params[idx++];
288
+ $uniform20[7] = params[idx++];
289
+ $uniform20[8] = params[idx++];
290
+ $uniform20[9] = params[idx++];
291
+ $uniform20[10] = params[idx++];
292
+ $uniform20[11] = params[idx++];
293
+ $uniform20[12] = params[idx++];
294
+ $uniform20[13] = params[idx++];
295
+ $uniform20[14] = params[idx++];
296
+ $uniform20[15] = params[idx++];
297
+ $uniform20[16] = params[idx++];
298
+ $uniform20[17] = params[idx++];
299
+ $uniform20[18] = params[idx++];
300
+ $uniform20[19] = params[idx++];
301
+ const newAtt = filterApplyColorMatrixFilterUseCase(filterAttachment, $uniform20, config);
302
+ if (filterAttachment !== newAtt) {
303
+ config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
304
+ }
305
+ filterAttachment = newAtt;
306
+ }
307
+ break;
308
+ case 3: // ConvolutionFilter
309
+ {
310
+ const matrixX = params[idx++];
311
+ const matrixY = params[idx++];
312
+ const length = matrixX * matrixY;
313
+ const convMatrix = new Float32Array(length);
314
+ for (let i = 0; i < length; i++) {
315
+ convMatrix[i] = params[idx++];
316
+ }
317
+ const newAtt = filterApplyConvolutionFilterUseCase(filterAttachment, matrixX, matrixY, convMatrix, params[idx++], params[idx++], Boolean(params[idx++]), Boolean(params[idx++]), params[idx++], params[idx++], config);
318
+ if (filterAttachment !== newAtt) {
319
+ config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
320
+ }
321
+ filterAttachment = newAtt;
322
+ }
323
+ break;
324
+ case 4: // DisplacementMapFilter
325
+ {
326
+ const dmLen = params[idx++];
327
+ const dmBuffer = new Uint8Array(dmLen);
328
+ for (let i = 0; i < dmLen; i++) {
329
+ dmBuffer[i] = params[idx++];
330
+ }
331
+ const newAtt = filterApplyDisplacementMapFilterUseCase(filterAttachment, matrix, dmBuffer, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], devicePixelRatio, config);
332
+ if (filterAttachment !== newAtt) {
333
+ config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
334
+ }
335
+ filterAttachment = newAtt;
336
+ }
337
+ break;
338
+ case 5: // DropShadowFilter
339
+ {
340
+ const newAtt = filterApplyDropShadowFilterUseCase(filterAttachment, matrix, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], Boolean(params[idx++]), Boolean(params[idx++]), Boolean(params[idx++]), devicePixelRatio, config);
341
+ if (filterAttachment !== newAtt) {
342
+ config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
343
+ }
344
+ filterAttachment = newAtt;
345
+ }
346
+ break;
347
+ case 6: // GlowFilter
348
+ {
349
+ const newAtt = filterApplyGlowFilterUseCase(filterAttachment, matrix, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], Boolean(params[idx++]), Boolean(params[idx++]), devicePixelRatio, config);
350
+ if (filterAttachment !== newAtt) {
351
+ config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
352
+ }
353
+ filterAttachment = newAtt;
354
+ }
355
+ break;
356
+ case 7: // GradientBevelFilter
357
+ {
358
+ const gbDist = params[idx++];
359
+ const gbAngle = params[idx++];
360
+ const gbColorsLen = params[idx++];
361
+ const gbColors = new Float32Array(gbColorsLen);
362
+ for (let i = 0; i < gbColorsLen; i++) {
363
+ gbColors[i] = params[idx++];
364
+ }
365
+ const gbAlphasLen = params[idx++];
366
+ const gbAlphas = new Float32Array(gbAlphasLen);
367
+ for (let i = 0; i < gbAlphasLen; i++) {
368
+ gbAlphas[i] = params[idx++];
369
+ }
370
+ const gbRatiosLen = params[idx++];
371
+ const gbRatios = new Float32Array(gbRatiosLen);
372
+ for (let i = 0; i < gbRatiosLen; i++) {
373
+ gbRatios[i] = params[idx++];
374
+ }
375
+ const newAtt = filterApplyGradientBevelFilterUseCase(filterAttachment, matrix, gbDist, gbAngle, gbColors, gbAlphas, gbRatios, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], Boolean(params[idx++]), devicePixelRatio, config);
376
+ if (filterAttachment !== newAtt) {
377
+ config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
378
+ }
379
+ filterAttachment = newAtt;
380
+ }
381
+ break;
382
+ case 8: // GradientGlowFilter
383
+ {
384
+ const ggDist = params[idx++];
385
+ const ggAngle = params[idx++];
386
+ const ggColorsLen = params[idx++];
387
+ const ggColors = new Float32Array(ggColorsLen);
388
+ for (let i = 0; i < ggColorsLen; i++) {
389
+ ggColors[i] = params[idx++];
390
+ }
391
+ const ggAlphasLen = params[idx++];
392
+ const ggAlphas = new Float32Array(ggAlphasLen);
393
+ for (let i = 0; i < ggAlphasLen; i++) {
394
+ ggAlphas[i] = params[idx++];
395
+ }
396
+ const ggRatiosLen = params[idx++];
397
+ const ggRatios = new Float32Array(ggRatiosLen);
398
+ for (let i = 0; i < ggRatiosLen; i++) {
399
+ ggRatios[i] = params[idx++];
400
+ }
401
+ const newAtt = filterApplyGradientGlowFilterUseCase(filterAttachment, matrix, ggDist, ggAngle, ggColors, ggAlphas, ggRatios, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], Boolean(params[idx++]), devicePixelRatio, config);
402
+ if (filterAttachment !== newAtt) {
403
+ config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
404
+ }
405
+ filterAttachment = newAtt;
406
+ }
407
+ break;
408
+ }
409
+ }
410
+ return filterAttachment;
411
+ };
412
+ export const execute = (tempAttachment, mainAttachment, _tempName, blendMode, matrix, colorTransform, useFilter, filterBounds, params, uniqueKey, filterKey, _contentWidth, _contentHeight, config, bufferManager) => {
413
+ if (useFilter && matrix && filterBounds && params) {
414
+ // containerEndLayerが呼ばれる=ディスプレイレイヤーがコンテンツ変更を検出して再レンダリングを要求
415
+ // 常に新鮮なテクスチャを抽出してフィルターを適用する
416
+ // (キャッシュはディスプレイレイヤーのcontainerDrawCachedFilterで管理)
417
+ // WebGL版と同じ: レイヤー全体をフィルター用にコピー
418
+ // レイヤーはコンテンツサイズで作成され、childrenは相対座標で描画されているため
419
+ // (0, 0, layerWidth, layerHeight) = コンテンツ全体
420
+ let filterAttachment = copyRegionToFilterAttachment(config, tempAttachment, 0, 0, tempAttachment.width, tempAttachment.height);
421
+ // 一時アタッチメントを遅延解放(コマンドバッファsubmit後に解放)
422
+ // destroyAttachmentは即座にGPUテクスチャを破棄するため、
423
+ // コマンドエンコーダに記録済みのレンダーパスが参照するテクスチャが無効になる
424
+ config.frameBufferManager.releaseTemporaryAttachment(tempAttachment);
425
+ // フィルターチェーンを適用
426
+ const devicePixelRatio = WebGPUUtil.getDevicePixelRatio();
427
+ filterAttachment = applyFilterChain(filterAttachment, matrix, params, devicePixelRatio, config);
428
+ // キャッシュに保存
429
+ if (uniqueKey) {
430
+ $cacheStore.set(uniqueKey, "fKey", filterKey);
431
+ $cacheStore.set(uniqueKey, "fTexture", filterAttachment);
432
+ }
433
+ // フィルター結果をメインに描画
434
+ if (filterAttachment) {
435
+ // ColorTransformが恒等変換でない場合、描画用に一時コピーを作成してCTを適用
436
+ // キャッシュにはフィルター結果のみ保存(CTは毎フレーム適用する)
437
+ let drawAttachment = filterAttachment;
438
+ let ctAttachment = null;
439
+ if (!isIdentityColorTransform(colorTransform)) {
440
+ ctAttachment = applyColorTransform(config, filterAttachment, colorTransform);
441
+ drawAttachment = ctAttachment;
442
+ }
443
+ const scaleX = Math.sqrt(matrix[0] * matrix[0] + matrix[1] * matrix[1]);
444
+ const scaleY = Math.sqrt(matrix[2] * matrix[2] + matrix[3] * matrix[3]);
445
+ const boundsXMin = filterBounds[0] * (scaleX / devicePixelRatio);
446
+ const boundsYMin = filterBounds[1] * (scaleY / devicePixelRatio);
447
+ // WebGL版と同じ: boundsXMin + matrix[4] で絶対位置
448
+ const drawX = boundsXMin + matrix[4];
449
+ const drawY = boundsYMin + matrix[5];
450
+ drawFilterResultToMain(config, drawAttachment, mainAttachment, blendMode, drawX, drawY, bufferManager);
451
+ // CT一時アタッチメントを解放
452
+ if (ctAttachment) {
453
+ config.frameBufferManager.releaseTemporaryAttachment(ctAttachment);
454
+ }
455
+ // キャッシュされていないフィルター結果のみ解放
456
+ if (!uniqueKey) {
457
+ config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
458
+ }
459
+ }
460
+ }
461
+ else {
462
+ // ブレンドのみ:レイヤー全体をフィルター用にコピーしてメインに描画
463
+ let fullAttachment = copyRegionToFilterAttachment(config, tempAttachment, 0, 0, tempAttachment.width, tempAttachment.height);
464
+ // 一時アタッチメントを遅延解放(コマンドバッファsubmit後に解放)
465
+ config.frameBufferManager.releaseTemporaryAttachment(tempAttachment);
466
+ // ColorTransformが恒等変換でない場合、適用
467
+ if (!isIdentityColorTransform(colorTransform)) {
468
+ const ctAttachment = applyColorTransform(config, fullAttachment, colorTransform);
469
+ config.frameBufferManager.releaseTemporaryAttachment(fullAttachment);
470
+ fullAttachment = ctAttachment;
471
+ }
472
+ // WebGL版と同じ: matrix[4], matrix[5] = layerBounds の絶対位置に描画
473
+ drawFilterResultToMain(config, fullAttachment, mainAttachment, blendMode, matrix[4], matrix[5], bufferManager);
474
+ config.frameBufferManager.releaseTemporaryAttachment(fullAttachment);
475
+ }
476
+ };
@@ -0,0 +1,6 @@
1
+ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
2
+ import type { BufferManager } from "../../BufferManager";
3
+ import type { FrameBufferManager } from "../../FrameBufferManager";
4
+ import type { TextureManager } from "../../TextureManager";
5
+ import type { PipelineManager } from "../../Shader/PipelineManager";
6
+ export declare const execute: (device: GPUDevice, command_encoder: GPUCommandEncoder, render_pass_encoder: GPURenderPassEncoder | null, main_attachment: IAttachmentObject, buffer_manager: BufferManager, frame_buffer_manager: FrameBufferManager, texture_manager: TextureManager, pipeline_manager: PipelineManager) => GPURenderPassEncoder | null;
@@ -0,0 +1,135 @@
1
+ import { getInstancedShaderManager } from "../../Blend/BlendInstancedManager";
2
+ import { $currentBlendMode } from "../../Blend";
3
+ import { renderQueue } from "@next2d/render-queue";
4
+ import { $isMaskTestEnabled, $getMaskStencilReference } from "../../Mask";
5
+ import { $getAtlasAttachmentObject } from "../../AtlasManager";
6
+ let $cachedBindGroup = null;
7
+ let $cachedAtlasView = null;
8
+ export const execute = (device, command_encoder, render_pass_encoder, main_attachment, buffer_manager, frame_buffer_manager, texture_manager, pipeline_manager) => {
9
+ const shaderManager = getInstancedShaderManager();
10
+ if (shaderManager.count === 0) {
11
+ return render_pass_encoder;
12
+ }
13
+ // 既存のレンダーパスを終了
14
+ if (render_pass_encoder) {
15
+ render_pass_encoder.end();
16
+ render_pass_encoder = null;
17
+ }
18
+ const isMasked = $isMaskTestEnabled();
19
+ const maskReference = $getMaskStencilReference();
20
+ // 現在のブレンドモードを取得
21
+ const blendMode = $currentBlendMode;
22
+ // ブレンドモードに応じたパイプライン名を生成
23
+ // simpleBlendModes: normal, layer, add, screen, alpha, erase, copy
24
+ const getPipelineName = (mode) => {
25
+ switch (mode) {
26
+ case "add":
27
+ return "instanced_add";
28
+ case "screen":
29
+ return "instanced_screen";
30
+ case "alpha":
31
+ return "instanced_alpha";
32
+ case "erase":
33
+ return "instanced_erase";
34
+ case "copy":
35
+ return "instanced_copy";
36
+ default:
37
+ // normal, layer
38
+ return "instanced";
39
+ }
40
+ };
41
+ const pipelineName = getPipelineName(blendMode);
42
+ const normalPipeline = pipeline_manager.getPipeline(pipelineName);
43
+ const maskedPipeline = pipeline_manager.getPipeline("instanced_masked");
44
+ // 実際にマスクを使用するか判定
45
+ // maskedパイプラインが存在し、マスクが有効で、ステンシルがある場合のみ
46
+ const useStencil = isMasked && maskedPipeline
47
+ && (main_attachment.msaaStencil?.view || main_attachment.stencil?.view);
48
+ const pipeline = useStencil ? maskedPipeline : normalPipeline;
49
+ if (!pipeline) {
50
+ console.error("[WebGPU] Instanced pipeline not found");
51
+ return null;
52
+ }
53
+ // レンダーパスを作成(パイプラインに合わせてステンシルの有無を決定)
54
+ let passEncoder;
55
+ if (useStencil) {
56
+ // ステンシル付きレンダーパス(マスク用)- MSAA対応
57
+ const useMsaa = main_attachment.msaa && main_attachment.msaaTexture?.view;
58
+ const colorView = useMsaa ? main_attachment.msaaTexture.view : main_attachment.texture.view;
59
+ const stencilView = useMsaa && main_attachment.msaaStencil?.view
60
+ ? main_attachment.msaaStencil.view : main_attachment.stencil.view;
61
+ const resolveTarget = useMsaa ? main_attachment.texture.view : null;
62
+ const renderPassDescriptor = frame_buffer_manager.createStencilRenderPassDescriptor(colorView, stencilView, "load", // カラーは既存の内容を保持
63
+ "load", // ステンシルも既存の内容を保持(マスク情報)
64
+ resolveTarget);
65
+ passEncoder = command_encoder.beginRenderPass(renderPassDescriptor);
66
+ }
67
+ else {
68
+ // 通常のレンダーパス(MSAA対応)
69
+ const useMsaa = main_attachment.msaa && main_attachment.msaaTexture?.view;
70
+ const colorView = useMsaa ? main_attachment.msaaTexture.view : main_attachment.texture.view;
71
+ const resolveTarget = useMsaa ? main_attachment.texture.view : null;
72
+ const renderPassDescriptor = frame_buffer_manager.createRenderPassDescriptor(colorView, 0, 0, 0, 0, "load", // 既存の内容を保持
73
+ resolveTarget);
74
+ passEncoder = command_encoder.beginRenderPass(renderPassDescriptor);
75
+ }
76
+ passEncoder.setPipeline(pipeline);
77
+ // マスク有効時はステンシル参照値を設定
78
+ if (useStencil) {
79
+ passEncoder.setStencilReference(maskReference);
80
+ }
81
+ // インスタンスバッファを作成
82
+ // renderQueue.offsetは配列のインデックスなので、そのまま使用
83
+ const instanceData = new Float32Array(renderQueue.buffer.buffer, renderQueue.buffer.byteOffset, renderQueue.offset // 要素数
84
+ );
85
+ const instanceBuffer = buffer_manager.acquireVertexBuffer(instanceData.byteLength, instanceData);
86
+ // 頂点バッファ(矩形)を取得(キャッシュ済み)
87
+ const vertexBuffer = buffer_manager.getUnitRectBuffer();
88
+ // アトラステクスチャをバインド(複数アトラス対応)
89
+ // AtlasManagerから取得、フォールバックとしてFrameBufferManagerから取得
90
+ const atlasAttachment = $getAtlasAttachmentObject() || frame_buffer_manager.getAttachment("atlas");
91
+ if (!atlasAttachment) {
92
+ console.error("[WebGPU] Atlas attachment not found");
93
+ passEncoder.end();
94
+ return null;
95
+ }
96
+ // アトラス用サンプラーを取得(キャッシュ済み)
97
+ // MIN_FILTER: linear(縮小時・回転時にスムーズ)
98
+ // MAG_FILTER: nearest(拡大時にシャープ)
99
+ const sampler = texture_manager.createSampler("atlas_instanced_sampler", false);
100
+ // バインドグループを作成
101
+ const bindGroupLayout = pipeline_manager.getBindGroupLayout("instanced");
102
+ if (!bindGroupLayout) {
103
+ console.error("[WebGPU] Instanced bind group layout not found");
104
+ passEncoder.end();
105
+ return null;
106
+ }
107
+ // BindGroupキャッシュ: アトラスのテクスチャビューが同じなら再利用
108
+ const atlasView = atlasAttachment.texture.view;
109
+ if (!$cachedBindGroup || $cachedAtlasView !== atlasView) {
110
+ $cachedBindGroup = device.createBindGroup({
111
+ "layout": bindGroupLayout,
112
+ "entries": [
113
+ {
114
+ "binding": 0,
115
+ "resource": sampler
116
+ },
117
+ {
118
+ "binding": 1,
119
+ "resource": atlasView
120
+ }
121
+ ]
122
+ });
123
+ $cachedAtlasView = atlasView;
124
+ }
125
+ // 描画
126
+ passEncoder.setVertexBuffer(0, vertexBuffer);
127
+ passEncoder.setVertexBuffer(1, instanceBuffer);
128
+ passEncoder.setBindGroup(0, $cachedBindGroup);
129
+ passEncoder.draw(6, shaderManager.count, 0, 0);
130
+ // レンダーパスを終了
131
+ passEncoder.end();
132
+ // インスタンスデータをクリア
133
+ shaderManager.clear();
134
+ return null;
135
+ };
@@ -0,0 +1,6 @@
1
+ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
2
+ import type { BufferManager } from "../../BufferManager";
3
+ import type { FrameBufferManager } from "../../FrameBufferManager";
4
+ import type { TextureManager } from "../../TextureManager";
5
+ import type { PipelineManager } from "../../Shader/PipelineManager";
6
+ export declare const execute: (device: GPUDevice, commandEncoder: GPUCommandEncoder, renderPassEncoder: GPURenderPassEncoder | null, mainAttachment: IAttachmentObject, bufferManager: BufferManager, frameBufferManager: FrameBufferManager, textureManager: TextureManager, pipelineManager: PipelineManager, useIndirect?: boolean, useStorageBuffer?: boolean) => GPURenderPassEncoder | null;