@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,8 @@
1
+ import { $setFuncCode, $funcCode } from "../../Blend";
2
+ export const execute = () => {
3
+ if ($funcCode !== 301) {
4
+ $setFuncCode(301);
5
+ return true;
6
+ }
7
+ return false;
8
+ };
@@ -0,0 +1,2 @@
1
+ import type { IBlendMode } from "../../interface/IBlendMode";
2
+ export declare const execute: (mode: IBlendMode) => void;
@@ -0,0 +1,4 @@
1
+ import { $setCurrentBlendMode } from "../../Blend";
2
+ export const execute = (mode) => {
3
+ $setCurrentBlendMode(mode);
4
+ };
@@ -0,0 +1,6 @@
1
+ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
2
+ import type { IFilterConfig } from "../../interface/IFilterConfig";
3
+ /**
4
+ * @description 複雑なブレンドモードを適用
5
+ */
6
+ export declare const execute: (srcAttachment: IAttachmentObject, dstAttachment: IAttachmentObject, blendMode: string, colorTransform: Float32Array, config: IFilterConfig) => IAttachmentObject;
@@ -0,0 +1,79 @@
1
+ import { ShaderSource } from "../../Shader/ShaderSource";
2
+ /**
3
+ * @description プリアロケートされた uniform データ (12 floats = 48 bytes)
4
+ */
5
+ const $uniform12 = new Float32Array(12);
6
+ /**
7
+ * @description プリアロケートされた BindGroupEntry 配列 (4 bindings)
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 複雑なブレンドモードを適用
17
+ */
18
+ export const execute = (srcAttachment, dstAttachment, blendMode, colorTransform, config) => {
19
+ const { device, commandEncoder, frameBufferManager, pipelineManager, textureManager } = config;
20
+ // 出力サイズは両方の大きい方を使用
21
+ const width = Math.max(srcAttachment.width, dstAttachment.width);
22
+ const height = Math.max(srcAttachment.height, dstAttachment.height);
23
+ // 出力アタッチメントを作成
24
+ const destAttachment = frameBufferManager.createTemporaryAttachment(width, height);
25
+ // 統一パイプラインを使用
26
+ const pipeline = pipelineManager.getPipeline("complex_blend");
27
+ const bindGroupLayout = pipelineManager.getBindGroupLayout("complex_blend");
28
+ if (!pipeline || !bindGroupLayout) {
29
+ console.error(`[WebGPU ComplexBlend] Pipeline not found for blend mode: ${blendMode}`);
30
+ // フォールバック: srcをそのまま返す
31
+ return srcAttachment;
32
+ }
33
+ // サンプラーを作成
34
+ const sampler = textureManager.createSampler("complex_blend_sampler", true);
35
+ // ユニフォームバッファを作成
36
+ // mulColor: vec4<f32> (16 bytes)
37
+ // addColor: vec4<f32> (16 bytes)
38
+ // blendMode: f32 + padding: vec3<f32> (16 bytes)
39
+ // Total: 48 bytes
40
+ const blendModeIndex = ShaderSource.getBlendModeIndex(blendMode);
41
+ $uniform12[0] = colorTransform[0];
42
+ $uniform12[1] = colorTransform[1];
43
+ $uniform12[2] = colorTransform[2];
44
+ $uniform12[3] = colorTransform[3];
45
+ $uniform12[4] = colorTransform[4];
46
+ $uniform12[5] = colorTransform[5];
47
+ $uniform12[6] = colorTransform[6];
48
+ $uniform12[7] = colorTransform[7];
49
+ $uniform12[8] = blendModeIndex;
50
+ $uniform12[9] = 0;
51
+ $uniform12[10] = 0;
52
+ $uniform12[11] = 0;
53
+ const uniformBuffer = config.bufferManager
54
+ ? config.bufferManager.acquireAndWriteUniformBuffer($uniform12)
55
+ : device.createBuffer({
56
+ "size": 48,
57
+ "usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
58
+ });
59
+ if (!config.bufferManager) {
60
+ device.queue.writeBuffer(uniformBuffer, 0, $uniform12);
61
+ }
62
+ // バインドグループを作成
63
+ $entries4[0].resource.buffer = uniformBuffer;
64
+ $entries4[1].resource = sampler;
65
+ $entries4[2].resource = dstAttachment.texture.view;
66
+ $entries4[3].resource = srcAttachment.texture.view;
67
+ const bindGroup = device.createBindGroup({
68
+ "layout": bindGroupLayout,
69
+ "entries": $entries4
70
+ });
71
+ // レンダーパスを実行
72
+ const renderPassDescriptor = frameBufferManager.createRenderPassDescriptor(destAttachment.texture.view, 0, 0, 0, 0, "clear");
73
+ const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
74
+ passEncoder.setPipeline(pipeline);
75
+ passEncoder.setBindGroup(0, bindGroup);
76
+ passEncoder.draw(6, 1, 0, 0);
77
+ passEncoder.end();
78
+ return destAttachment;
79
+ };
@@ -0,0 +1,11 @@
1
+ import type { IBlendMode } from "../../interface/IBlendMode";
2
+ /**
3
+ * @description 設定されたブレンドモードへ切り替える
4
+ * Switch to the set blend mode
5
+ *
6
+ * @param {IBlendMode} operation
7
+ * @return {boolean} ブレンドモードが変更されたかどうか
8
+ * @method
9
+ * @protected
10
+ */
11
+ export declare const execute: (operation: IBlendMode) => boolean;
@@ -0,0 +1,31 @@
1
+ import { execute as blendAddService } from "../service/BlendAddService";
2
+ import { execute as blendResetService } from "../service/BlendResetService";
3
+ import { execute as blendScreenService } from "../service/BlendScreenService";
4
+ import { execute as blendAlphaService } from "../service/BlendAlphaService";
5
+ import { execute as blendEraseService } from "../service/BlendEraseService";
6
+ import { execute as blendOneZeroService } from "../service/BlendOneZeroService";
7
+ /**
8
+ * @description 設定されたブレンドモードへ切り替える
9
+ * Switch to the set blend mode
10
+ *
11
+ * @param {IBlendMode} operation
12
+ * @return {boolean} ブレンドモードが変更されたかどうか
13
+ * @method
14
+ * @protected
15
+ */
16
+ export const execute = (operation) => {
17
+ switch (operation) {
18
+ case "add":
19
+ return blendAddService();
20
+ case "screen":
21
+ return blendScreenService();
22
+ case "alpha":
23
+ return blendAlphaService();
24
+ case "erase":
25
+ return blendEraseService();
26
+ case "copy":
27
+ return blendOneZeroService();
28
+ default:
29
+ return blendResetService();
30
+ }
31
+ };
package/src/Blend.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import type { IBlendMode } from "./interface/IBlendMode";
2
+ import type { IBlendState } from "./interface/IBlendState";
3
+ export type { IBlendState };
4
+ export declare let $currentBlendMode: IBlendMode;
5
+ export declare let $funcCode: number;
6
+ export declare const $setCurrentBlendMode: (blend_mode: IBlendMode) => void;
7
+ export declare const $setFuncCode: (code: number) => void;
8
+ export declare const $getBlendState: (mode: IBlendMode) => IBlendState;
package/src/Blend.js ADDED
@@ -0,0 +1,91 @@
1
+ export let $currentBlendMode = "normal";
2
+ export let $funcCode = 0;
3
+ export const $setCurrentBlendMode = (blend_mode) => {
4
+ $currentBlendMode = blend_mode;
5
+ };
6
+ export const $setFuncCode = (code) => {
7
+ $funcCode = code;
8
+ };
9
+ export const $getBlendState = (mode) => {
10
+ switch (mode) {
11
+ case "add":
12
+ return {
13
+ "color": {
14
+ "srcFactor": "one",
15
+ "dstFactor": "one",
16
+ "operation": "add"
17
+ },
18
+ "alpha": {
19
+ "srcFactor": "one",
20
+ "dstFactor": "one-minus-src-alpha",
21
+ "operation": "add"
22
+ }
23
+ };
24
+ case "screen":
25
+ return {
26
+ "color": {
27
+ "srcFactor": "one-minus-dst",
28
+ "dstFactor": "one",
29
+ "operation": "add"
30
+ },
31
+ "alpha": {
32
+ "srcFactor": "one",
33
+ "dstFactor": "one-minus-src-alpha",
34
+ "operation": "add"
35
+ }
36
+ };
37
+ case "alpha":
38
+ return {
39
+ "color": {
40
+ "srcFactor": "zero",
41
+ "dstFactor": "src-alpha",
42
+ "operation": "add"
43
+ },
44
+ "alpha": {
45
+ "srcFactor": "zero",
46
+ "dstFactor": "src-alpha",
47
+ "operation": "add"
48
+ }
49
+ };
50
+ case "erase":
51
+ return {
52
+ "color": {
53
+ "srcFactor": "zero",
54
+ "dstFactor": "one-minus-src-alpha",
55
+ "operation": "add"
56
+ },
57
+ "alpha": {
58
+ "srcFactor": "zero",
59
+ "dstFactor": "one-minus-src-alpha",
60
+ "operation": "add"
61
+ }
62
+ };
63
+ case "copy":
64
+ return {
65
+ "color": {
66
+ "srcFactor": "one",
67
+ "dstFactor": "zero",
68
+ "operation": "add"
69
+ },
70
+ "alpha": {
71
+ "srcFactor": "one",
72
+ "dstFactor": "zero",
73
+ "operation": "add"
74
+ }
75
+ };
76
+ // normal and default
77
+ default:
78
+ return {
79
+ "color": {
80
+ "srcFactor": "one",
81
+ "dstFactor": "one-minus-src-alpha",
82
+ "operation": "add"
83
+ },
84
+ "alpha": {
85
+ "srcFactor": "one",
86
+ "dstFactor": "one-minus-src-alpha",
87
+ "operation": "add"
88
+ }
89
+ };
90
+ }
91
+ };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @description Indirect Bufferを作成
3
+ * Create Indirect Buffer for draw indirect commands
4
+ *
5
+ * Indirect Drawingにより、CPUからのdraw呼び出しオーバーヘッドを削減。
6
+ * GPU側でドローコールのパラメータを決定可能。
7
+ *
8
+ * @param {GPUDevice} device - WebGPU device
9
+ * @param {number} vertex_count - 頂点数
10
+ * @param {number} instance_count - インスタンス数
11
+ * @param {number} first_vertex - 開始頂点インデックス
12
+ * @param {number} first_instance - 開始インスタンスインデックス
13
+ * @return {GPUBuffer} 作成されたIndirect Buffer
14
+ */
15
+ export declare const execute: (device: GPUDevice, vertex_count: number, instance_count: number, first_vertex?: number, first_instance?: number) => GPUBuffer;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @description Indirect Bufferを作成
3
+ * Create Indirect Buffer for draw indirect commands
4
+ *
5
+ * Indirect Drawingにより、CPUからのdraw呼び出しオーバーヘッドを削減。
6
+ * GPU側でドローコールのパラメータを決定可能。
7
+ *
8
+ * @param {GPUDevice} device - WebGPU device
9
+ * @param {number} vertex_count - 頂点数
10
+ * @param {number} instance_count - インスタンス数
11
+ * @param {number} first_vertex - 開始頂点インデックス
12
+ * @param {number} first_instance - 開始インスタンスインデックス
13
+ * @return {GPUBuffer} 作成されたIndirect Buffer
14
+ */
15
+ export const execute = (device, vertex_count, instance_count, first_vertex = 0, first_instance = 0) => {
16
+ // Indirect bufferのフォーマット(非インデックス描画用):
17
+ // - vertexCount: u32
18
+ // - instanceCount: u32
19
+ // - firstVertex: u32
20
+ // - firstInstance: u32
21
+ // 合計16バイト
22
+ const indirectData = new Uint32Array([
23
+ vertex_count,
24
+ instance_count,
25
+ first_vertex,
26
+ first_instance
27
+ ]);
28
+ const buffer = device.createBuffer({
29
+ "size": indirectData.byteLength,
30
+ "usage": GPUBufferUsage.INDIRECT | GPUBufferUsage.COPY_DST,
31
+ "mappedAtCreation": true,
32
+ "label": "indirect_buffer"
33
+ });
34
+ new Uint32Array(buffer.getMappedRange()).set(indirectData);
35
+ buffer.unmap();
36
+ return buffer;
37
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @description 矩形の頂点データを作成
3
+ * Create rect vertices data
4
+ *
5
+ * @param {number} x
6
+ * @param {number} y
7
+ * @param {number} width
8
+ * @param {number} height
9
+ * @return {Float32Array}
10
+ * @method
11
+ * @protected
12
+ */
13
+ export declare const execute: (x: number, y: number, width: number, height: number) => Float32Array;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @description 矩形の頂点データを作成
3
+ * Create rect vertices data
4
+ *
5
+ * @param {number} x
6
+ * @param {number} y
7
+ * @param {number} width
8
+ * @param {number} height
9
+ * @return {Float32Array}
10
+ * @method
11
+ * @protected
12
+ */
13
+ export const execute = (x, y, width, height) => {
14
+ return new Float32Array([
15
+ // Position (x, y), TexCoord (u, v)
16
+ x, y, 0.0, 0.0,
17
+ x + width, y, 1.0, 0.0,
18
+ x, y + height, 0.0, 1.0,
19
+ x + width, y, 1.0, 0.0,
20
+ x + width, y + height, 1.0, 1.0,
21
+ x, y + height, 0.0, 1.0
22
+ ]);
23
+ };
@@ -0,0 +1,17 @@
1
+ import type { IStorageBufferConfig } from "../../interface/IStorageBufferConfig";
2
+ /**
3
+ * @description Storage Bufferを作成
4
+ * Create Storage Buffer for efficient instance data
5
+ *
6
+ * Storage Bufferは大きなデータの動的更新に最適。
7
+ * Vertex Bufferと比較して:
8
+ * - より大きなサイズをサポート
9
+ * - 動的更新が効率的
10
+ * - Compute Shaderでも使用可能
11
+ * - Vertex Bufferとしても使用可能(VERTEXフラグ付き)
12
+ *
13
+ * @param {GPUDevice} device - WebGPU device
14
+ * @param {IStorageBufferConfig} config - バッファ設定
15
+ * @return {GPUBuffer} 作成されたStorage Buffer
16
+ */
17
+ export declare const execute: (device: GPUDevice, config: IStorageBufferConfig) => GPUBuffer;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @description Storage Bufferを作成
3
+ * Create Storage Buffer for efficient instance data
4
+ *
5
+ * Storage Bufferは大きなデータの動的更新に最適。
6
+ * Vertex Bufferと比較して:
7
+ * - より大きなサイズをサポート
8
+ * - 動的更新が効率的
9
+ * - Compute Shaderでも使用可能
10
+ * - Vertex Bufferとしても使用可能(VERTEXフラグ付き)
11
+ *
12
+ * @param {GPUDevice} device - WebGPU device
13
+ * @param {IStorageBufferConfig} config - バッファ設定
14
+ * @return {GPUBuffer} 作成されたStorage Buffer
15
+ */
16
+ export const execute = (device, config) => {
17
+ const buffer = device.createBuffer({
18
+ "size": config.size,
19
+ "usage": config.usage | GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,
20
+ "label": config.label || "storage_buffer"
21
+ });
22
+ return buffer;
23
+ };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @description ユニフォームバッファをプールに返却
3
+ * Release uniform buffer back to pool
4
+ * バケット化されたMap<number, GPUBuffer[]>にO(1)で返却
5
+ *
6
+ * @param {Map<number, GPUBuffer[]>} buckets - サイズ別バケットMap
7
+ * @param {GPUBuffer} buffer
8
+ * @return {void}
9
+ * @method
10
+ * @protected
11
+ */
12
+ export declare const execute: (buckets: Map<number, GPUBuffer[]>, buffer: GPUBuffer) => void;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @description バケットあたりの最大プールサイズ
3
+ * Maximum pool size per bucket
4
+ * @type {number}
5
+ * @const
6
+ */
7
+ const MAX_BUCKET_SIZE = 32;
8
+ /**
9
+ * @description ユニフォームバッファをプールに返却
10
+ * Release uniform buffer back to pool
11
+ * バケット化されたMap<number, GPUBuffer[]>にO(1)で返却
12
+ *
13
+ * @param {Map<number, GPUBuffer[]>} buckets - サイズ別バケットMap
14
+ * @param {GPUBuffer} buffer
15
+ * @return {void}
16
+ * @method
17
+ * @protected
18
+ */
19
+ export const execute = (buckets, buffer) => {
20
+ const size = buffer.size;
21
+ let bucket = buckets.get(size);
22
+ if (!bucket) {
23
+ bucket = [];
24
+ buckets.set(size, bucket);
25
+ }
26
+ if (bucket.length >= MAX_BUCKET_SIZE) {
27
+ // バケットが満杯の場合、このバッファを破棄
28
+ buffer.destroy();
29
+ return;
30
+ }
31
+ bucket.push(buffer);
32
+ };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @description 頂点バッファをプールに返却
3
+ * Release vertex buffer back to pool
4
+ * バケット化されたMap<number, GPUBuffer[]>にO(1)で返却
5
+ *
6
+ * @param {Map<number, GPUBuffer[]>} buckets - サイズ別バケットMap
7
+ * @param {GPUBuffer} buffer
8
+ * @return {void}
9
+ * @method
10
+ * @protected
11
+ */
12
+ export declare const execute: (buckets: Map<number, GPUBuffer[]>, buffer: GPUBuffer) => void;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @description バケットあたりの最大プールサイズ
3
+ * Maximum pool size per bucket
4
+ * @type {number}
5
+ * @const
6
+ */
7
+ const MAX_BUCKET_SIZE = 32;
8
+ /**
9
+ * @description 頂点バッファをプールに返却
10
+ * Release vertex buffer back to pool
11
+ * バケット化されたMap<number, GPUBuffer[]>にO(1)で返却
12
+ *
13
+ * @param {Map<number, GPUBuffer[]>} buckets - サイズ別バケットMap
14
+ * @param {GPUBuffer} buffer
15
+ * @return {void}
16
+ * @method
17
+ * @protected
18
+ */
19
+ export const execute = (buckets, buffer) => {
20
+ const size = buffer.size;
21
+ let bucket = buckets.get(size);
22
+ if (!bucket) {
23
+ bucket = [];
24
+ buckets.set(size, bucket);
25
+ }
26
+ if (bucket.length >= MAX_BUCKET_SIZE) {
27
+ // バケットが満杯の場合、このバッファを破棄
28
+ buffer.destroy();
29
+ return;
30
+ }
31
+ bucket.push(buffer);
32
+ };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @description Indirect Bufferを更新
3
+ * Update Indirect Buffer with new parameters
4
+ *
5
+ * @param {GPUDevice} device - WebGPU device
6
+ * @param {GPUBuffer} buffer - 更新するバッファ
7
+ * @param {number} vertex_count - 頂点数
8
+ * @param {number} instance_count - インスタンス数
9
+ * @param {number} first_vertex - 開始頂点インデックス
10
+ * @param {number} first_instance - 開始インスタンスインデックス
11
+ */
12
+ export declare const execute: (device: GPUDevice, buffer: GPUBuffer, vertex_count: number, instance_count: number, first_vertex?: number, first_instance?: number) => void;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @description Indirect Bufferを更新
3
+ * Update Indirect Buffer with new parameters
4
+ *
5
+ * @param {GPUDevice} device - WebGPU device
6
+ * @param {GPUBuffer} buffer - 更新するバッファ
7
+ * @param {number} vertex_count - 頂点数
8
+ * @param {number} instance_count - インスタンス数
9
+ * @param {number} first_vertex - 開始頂点インデックス
10
+ * @param {number} first_instance - 開始インスタンスインデックス
11
+ */
12
+ export const execute = (device, buffer, vertex_count, instance_count, first_vertex = 0, first_instance = 0) => {
13
+ const indirectData = new Uint32Array([
14
+ vertex_count,
15
+ instance_count,
16
+ first_vertex,
17
+ first_instance
18
+ ]);
19
+ device.queue.writeBuffer(buffer, 0, indirectData);
20
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @description 2のべき乗に切り上げ
3
+ * Round up to the next power of two
4
+ *
5
+ * @param {number} v
6
+ * @return {number}
7
+ * @method
8
+ * @protected
9
+ */
10
+ export declare const execute: (v: number) => number;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @description 2のべき乗に切り上げ
3
+ * Round up to the next power of two
4
+ *
5
+ * @param {number} v
6
+ * @return {number}
7
+ * @method
8
+ * @protected
9
+ */
10
+ export const execute = (v) => {
11
+ v--;
12
+ v |= v >> 1;
13
+ v |= v >> 2;
14
+ v |= v >> 4;
15
+ v |= v >> 8;
16
+ v |= v >> 16;
17
+ return v + 1;
18
+ };
@@ -0,0 +1,15 @@
1
+ import type { IPooledStorageBuffer } from "../../interface/IStorageBufferConfig";
2
+ /**
3
+ * @description プールからStorage Bufferを取得(または新規作成)
4
+ * Acquire Storage Buffer from pool or create new one
5
+ *
6
+ * メモリアロケーションを最小化するため、
7
+ * 使用済みのバッファを再利用する。
8
+ *
9
+ * @param {GPUDevice} device - WebGPU device
10
+ * @param {IPooledStorageBuffer[]} pool - Storage Bufferプール
11
+ * @param {number} required_size - 必要なサイズ(バイト)
12
+ * @param {number} current_frame - 現在のフレーム番号
13
+ * @return {GPUBuffer} 取得されたStorage Buffer
14
+ */
15
+ export declare const execute: (device: GPUDevice, pool: IPooledStorageBuffer[], required_size: number, current_frame: number) => GPUBuffer;
@@ -0,0 +1,51 @@
1
+ import { execute as createStorageBufferService } from "../service/BufferManagerCreateStorageBufferService";
2
+ /**
3
+ * @description プールからStorage Bufferを取得(または新規作成)
4
+ * Acquire Storage Buffer from pool or create new one
5
+ *
6
+ * メモリアロケーションを最小化するため、
7
+ * 使用済みのバッファを再利用する。
8
+ *
9
+ * @param {GPUDevice} device - WebGPU device
10
+ * @param {IPooledStorageBuffer[]} pool - Storage Bufferプール
11
+ * @param {number} required_size - 必要なサイズ(バイト)
12
+ * @param {number} current_frame - 現在のフレーム番号
13
+ * @return {GPUBuffer} 取得されたStorage Buffer
14
+ */
15
+ export const execute = (device, pool, required_size, current_frame) => {
16
+ // アライメントを考慮(256バイト境界)
17
+ const alignedSize = Math.ceil(required_size / 256) * 256;
18
+ // プールから適切なサイズの未使用バッファを検索
19
+ // 最もサイズが近いバッファを選択(メモリ効率)
20
+ let bestMatch = null;
21
+ let bestSizeDiff = Infinity;
22
+ for (const entry of pool) {
23
+ if (!entry.inUse && entry.size >= alignedSize) {
24
+ const sizeDiff = entry.size - alignedSize;
25
+ if (sizeDiff < bestSizeDiff) {
26
+ bestMatch = entry;
27
+ bestSizeDiff = sizeDiff;
28
+ }
29
+ }
30
+ }
31
+ if (bestMatch) {
32
+ bestMatch.inUse = true;
33
+ bestMatch.lastUsedFrame = current_frame;
34
+ return bestMatch.buffer;
35
+ }
36
+ // 適切なバッファがない場合は新規作成
37
+ // 将来の再利用のために少し大きめに確保
38
+ const createSize = Math.max(alignedSize, 16384); // 最小16KB
39
+ const buffer = createStorageBufferService(device, {
40
+ "size": createSize,
41
+ "usage": GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.VERTEX,
42
+ "label": `storage_buffer_${pool.length}`
43
+ });
44
+ pool.push({
45
+ "buffer": buffer,
46
+ "size": createSize,
47
+ "inUse": true,
48
+ "lastUsedFrame": current_frame
49
+ });
50
+ return buffer;
51
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @description プールからユニフォームバッファを取得(または新規作成)
3
+ * Acquire uniform buffer from pool (or create new)
4
+ * バケット化されたMap<number, GPUBuffer[]>からO(1)で取得
5
+ *
6
+ * @param {GPUDevice} device
7
+ * @param {Map<number, GPUBuffer[]>} buckets - サイズ別バケットMap
8
+ * @param {number} required_size - 必要なバイトサイズ
9
+ * @return {GPUBuffer}
10
+ * @method
11
+ * @protected
12
+ */
13
+ export declare const execute: (device: GPUDevice, buckets: Map<number, GPUBuffer[]>, required_size: number) => GPUBuffer;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @description プールからユニフォームバッファを取得(または新規作成)
3
+ * Acquire uniform buffer from pool (or create new)
4
+ * バケット化されたMap<number, GPUBuffer[]>からO(1)で取得
5
+ *
6
+ * @param {GPUDevice} device
7
+ * @param {Map<number, GPUBuffer[]>} buckets - サイズ別バケットMap
8
+ * @param {number} required_size - 必要なバイトサイズ
9
+ * @return {GPUBuffer}
10
+ * @method
11
+ * @protected
12
+ */
13
+ export const execute = (device, buckets, required_size) => {
14
+ // 16バイトアライメント
15
+ const alignedSize = Math.ceil(required_size / 16) * 16;
16
+ // バケットからバッファを取得(O(1))
17
+ const bucket = buckets.get(alignedSize);
18
+ if (bucket && bucket.length > 0) {
19
+ return bucket.pop();
20
+ }
21
+ // 新規作成
22
+ return device.createBuffer({
23
+ "size": alignedSize,
24
+ "usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
25
+ });
26
+ };