@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,164 @@
1
+ import { $offset } from "../FilterOffset";
2
+ import { execute as filterApplyBlurFilterUseCase } from "../BlurFilter/FilterApplyBlurFilterUseCase";
3
+ import { generateFilterGradientLUT } from "../../Gradient/GradientLUTGenerator";
4
+ /**
5
+ * @description 度からラジアンへの変換係数
6
+ */
7
+ const DEG_TO_RAD = Math.PI / 180;
8
+ /**
9
+ * @description プリアロケートされたFloat32Array (サイズ12)
10
+ */
11
+ const $uniform12 = new Float32Array(12);
12
+ /**
13
+ * @description プリアロケートされたBindGroupEntry配列 (バインディング5つ)
14
+ */
15
+ const $entries5 = [
16
+ { "binding": 0, "resource": { "buffer": null } },
17
+ { "binding": 1, "resource": null },
18
+ { "binding": 2, "resource": null },
19
+ { "binding": 3, "resource": null },
20
+ { "binding": 4, "resource": null }
21
+ ];
22
+ /**
23
+ * @description グラデーショングローフィルターを適用
24
+ * Apply gradient glow filter
25
+ *
26
+ * WebGL版と同じフロー:
27
+ * 1. ブラー適用
28
+ * 2. グラデーションLUT生成(専用テクスチャ)
29
+ * 3. UV変換方式で最終合成(isInsideでハード境界クリッピング)
30
+ *
31
+ * @param {IAttachmentObject} sourceAttachment - 入力テクスチャ
32
+ * @param {Float32Array} matrix - 変換行列
33
+ * @param {number} distance - グローの距離
34
+ * @param {number} angle - グローの角度(度)
35
+ * @param {Float32Array} colors - 色配列
36
+ * @param {Float32Array} alphas - アルファ配列
37
+ * @param {Float32Array} ratios - 比率配列
38
+ * @param {number} blurX - X方向ブラー量
39
+ * @param {number} blurY - Y方向ブラー量
40
+ * @param {number} strength - グロー強度
41
+ * @param {number} quality - クオリティ
42
+ * @param {number} type - タイプ (0: full, 1: inner, 2: outer)
43
+ * @param {boolean} knockout - ノックアウトモード
44
+ * @param {number} devicePixelRatio - デバイスピクセル比
45
+ * @param {IFilterConfig} config - WebGPUリソース設定
46
+ * @return {IAttachmentObject} - フィルター適用後のアタッチメント
47
+ */
48
+ export const execute = (sourceAttachment, matrix, distance, angle, colors, alphas, ratios, blurX, blurY, strength, quality, type, knockout, devicePixelRatio, config) => {
49
+ const { device, commandEncoder, frameBufferManager, pipelineManager, textureManager } = config;
50
+ // 元のオフセットを保存
51
+ const baseOffsetX = $offset.x;
52
+ const baseOffsetY = $offset.y;
53
+ const baseWidth = sourceAttachment.width;
54
+ const baseHeight = sourceAttachment.height;
55
+ // ブラーフィルターを適用
56
+ const blurAttachment = filterApplyBlurFilterUseCase(sourceAttachment, matrix, blurX, blurY, quality, devicePixelRatio, config);
57
+ const blurWidth = blurAttachment.width;
58
+ const blurHeight = blurAttachment.height;
59
+ const blurOffsetX = $offset.x;
60
+ const blurOffsetY = $offset.y;
61
+ const offsetDiffX = blurOffsetX - baseOffsetX;
62
+ const offsetDiffY = blurOffsetY - baseOffsetY;
63
+ // 変換行列からスケールを取得
64
+ const xScale = Math.sqrt(matrix[0] * matrix[0] + matrix[1] * matrix[1]);
65
+ const yScale = Math.sqrt(matrix[2] * matrix[2] + matrix[3] * matrix[3]);
66
+ // グローのオフセットを計算
67
+ const radian = angle * DEG_TO_RAD;
68
+ const x = Math.cos(radian) * distance * (xScale / devicePixelRatio);
69
+ const y = Math.sin(radian) * distance * (yScale / devicePixelRatio);
70
+ // ===== WebGL版と同じサイズ・位置計算 =====
71
+ const isInner = type === 1;
72
+ const w = isInner ? baseWidth : blurWidth + Math.max(0, Math.abs(x) - offsetDiffX);
73
+ const h = isInner ? baseHeight : blurHeight + Math.max(0, Math.abs(y) - offsetDiffY);
74
+ const width = Math.ceil(w);
75
+ const height = Math.ceil(h);
76
+ const fractionX = (width - w) / 2;
77
+ const fractionY = (height - h) / 2;
78
+ // テクスチャ座標の計算
79
+ const baseTextureX = isInner ? 0 : Math.max(0, offsetDiffX - x) + fractionX;
80
+ const baseTextureY = isInner ? 0 : Math.max(0, offsetDiffY - y) + fractionY;
81
+ const blurTextureX = isInner ? x - blurOffsetX : (x > 0 ? Math.max(0, x - offsetDiffX) : 0) + fractionX;
82
+ const blurTextureY = isInner ? y - blurOffsetY : (y > 0 ? Math.max(0, y - offsetDiffY) : 0) + fractionY;
83
+ // ===== グラデーションLUT生成(専用テクスチャ) =====
84
+ // 注意: 共有テクスチャは使用しない。
85
+ // queue.writeTextureはcommandEncoder外で即座に実行されるため、
86
+ // 同一フレーム内の複数GradientGlowFilter適用時に最後の書き込みで上書きされる。
87
+ const lutData = generateFilterGradientLUT(ratios, colors, alphas);
88
+ const lutTexture = device.createTexture({
89
+ "size": { "width": 256, "height": 1 },
90
+ "format": "rgba8unorm",
91
+ "usage": GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST
92
+ });
93
+ device.queue.writeTexture({ "texture": lutTexture }, lutData.buffer, { "bytesPerRow": 256 * 4, "offset": lutData.byteOffset }, { "width": 256, "height": 1 });
94
+ const lutView = lutTexture.createView();
95
+ // ===== UV変換パラメータ計算 =====
96
+ // WebGPU: texCoord.y=0がトップ(Y-flip補正済み)
97
+ const baseScaleX = width / baseWidth;
98
+ const baseScaleY = height / baseHeight;
99
+ const baseOffsetUVX = baseTextureX / baseWidth;
100
+ const baseOffsetUVY = baseTextureY / baseHeight;
101
+ const blurScaleX = width / blurWidth;
102
+ const blurScaleY = height / blurHeight;
103
+ const blurOffsetUVX = blurTextureX / blurWidth;
104
+ const blurOffsetUVY = blurTextureY / blurHeight;
105
+ // ===== 最終合成パス =====
106
+ const destAttachment = frameBufferManager.createTemporaryAttachment(width, height);
107
+ const pipeline = pipelineManager.getFilterPipeline("gradient_glow_filter", {
108
+ "GLOW_TYPE": type,
109
+ "IS_KNOCKOUT": knockout ? 1 : 0
110
+ });
111
+ const bindGroupLayout = pipelineManager.getBindGroupLayout("gradient_glow_filter");
112
+ if (!pipeline || !bindGroupLayout) {
113
+ console.error("[WebGPU GradientGlowFilter] Pipeline not found");
114
+ frameBufferManager.releaseTemporaryAttachment(blurAttachment);
115
+ return sourceAttachment;
116
+ }
117
+ const sampler = textureManager.createSampler("gradient_glow_sampler", true);
118
+ // ユニフォームバッファ: 12 floats = 48 bytes
119
+ $uniform12[0] = strength;
120
+ $uniform12[1] = isInner ? 1.0 : 0.0;
121
+ $uniform12[2] = knockout ? 1.0 : 0.0;
122
+ $uniform12[3] = type;
123
+ $uniform12[4] = baseScaleX;
124
+ $uniform12[5] = baseScaleY;
125
+ $uniform12[6] = baseOffsetUVX;
126
+ $uniform12[7] = baseOffsetUVY;
127
+ $uniform12[8] = blurScaleX;
128
+ $uniform12[9] = blurScaleY;
129
+ $uniform12[10] = blurOffsetUVX;
130
+ $uniform12[11] = blurOffsetUVY;
131
+ const uniformBuffer = config.bufferManager
132
+ ? config.bufferManager.acquireAndWriteUniformBuffer($uniform12)
133
+ : device.createBuffer({
134
+ "size": $uniform12.byteLength,
135
+ "usage": GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
136
+ });
137
+ if (!config.bufferManager) {
138
+ device.queue.writeBuffer(uniformBuffer, 0, $uniform12);
139
+ }
140
+ // バインドグループを作成(オリジナルテクスチャを直接使用)
141
+ $entries5[0].resource.buffer = uniformBuffer;
142
+ $entries5[1].resource = sampler;
143
+ $entries5[2].resource = blurAttachment.texture.view;
144
+ $entries5[3].resource = sourceAttachment.texture.view;
145
+ $entries5[4].resource = lutView;
146
+ const bindGroup = device.createBindGroup({
147
+ "layout": bindGroupLayout,
148
+ "entries": $entries5
149
+ });
150
+ // レンダーパスを実行
151
+ const renderPassDescriptor = frameBufferManager.createRenderPassDescriptor(destAttachment.texture.view, 0, 0, 0, 0, "clear");
152
+ const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
153
+ passEncoder.setPipeline(pipeline);
154
+ passEncoder.setBindGroup(0, bindGroup);
155
+ passEncoder.draw(6, 1, 0, 0);
156
+ passEncoder.end();
157
+ // クリーンアップ(lutTextureはsubmit後に遅延破棄)
158
+ config.frameTextures.push(lutTexture);
159
+ frameBufferManager.releaseTemporaryAttachment(blurAttachment);
160
+ // WebGL版と同じオフセット更新
161
+ $offset.x = baseOffsetX + baseTextureX;
162
+ $offset.y = baseOffsetY + baseTextureY;
163
+ return destAttachment;
164
+ };
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @description レンダーパス記述子を作成(プリアロケート再利用)
3
+ */
4
+ export declare const execute: (view: GPUTextureView, r?: number, g?: number, b?: number, a?: number, loadOp?: GPULoadOp, resolveTarget?: GPUTextureView | null) => GPURenderPassDescriptor;
@@ -0,0 +1,23 @@
1
+ const $clearValue = { "r": 0, "g": 0, "b": 0, "a": 0 };
2
+ const $colorAttachment = {
3
+ "view": null,
4
+ "clearValue": $clearValue,
5
+ "loadOp": "clear",
6
+ "storeOp": "store"
7
+ };
8
+ const $descriptor = {
9
+ "colorAttachments": [$colorAttachment]
10
+ };
11
+ /**
12
+ * @description レンダーパス記述子を作成(プリアロケート再利用)
13
+ */
14
+ export const execute = (view, r = 0, g = 0, b = 0, a = 0, loadOp = "clear", resolveTarget = null) => {
15
+ $colorAttachment.view = view;
16
+ $clearValue.r = r;
17
+ $clearValue.g = g;
18
+ $clearValue.b = b;
19
+ $clearValue.a = a;
20
+ $colorAttachment.loadOp = loadOp;
21
+ $colorAttachment.resolveTarget = resolveTarget ?? undefined;
22
+ return $descriptor;
23
+ };
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @description ステンシル付きレンダーパス記述子を作成(プリアロケート再利用)
3
+ */
4
+ export declare const execute: (colorView: GPUTextureView, stencilView: GPUTextureView, colorLoadOp?: GPULoadOp, stencilLoadOp?: GPULoadOp, resolveTarget?: GPUTextureView | null) => GPURenderPassDescriptor;
@@ -0,0 +1,28 @@
1
+ const $clearValue = { "r": 0, "g": 0, "b": 0, "a": 0 };
2
+ const $colorAttachment = {
3
+ "view": null,
4
+ "clearValue": $clearValue,
5
+ "loadOp": "load",
6
+ "storeOp": "store"
7
+ };
8
+ const $depthStencilAttachment = {
9
+ "view": null,
10
+ "stencilClearValue": 0,
11
+ "stencilLoadOp": "clear",
12
+ "stencilStoreOp": "store"
13
+ };
14
+ const $descriptor = {
15
+ "colorAttachments": [$colorAttachment],
16
+ "depthStencilAttachment": $depthStencilAttachment
17
+ };
18
+ /**
19
+ * @description ステンシル付きレンダーパス記述子を作成(プリアロケート再利用)
20
+ */
21
+ export const execute = (colorView, stencilView, colorLoadOp = "load", stencilLoadOp = "clear", resolveTarget = null) => {
22
+ $colorAttachment.view = colorView;
23
+ $colorAttachment.loadOp = colorLoadOp;
24
+ $colorAttachment.resolveTarget = resolveTarget ?? undefined;
25
+ $depthStencilAttachment.view = stencilView;
26
+ $depthStencilAttachment.stencilLoadOp = stencilLoadOp;
27
+ return $descriptor;
28
+ };
@@ -0,0 +1,11 @@
1
+ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
2
+ /**
3
+ * @description フレーム終了時に保留中のテクスチャを解放
4
+ * Release pending textures at end of frame (after submit)
5
+ *
6
+ * @param {IAttachmentObject[]} pendingReleases
7
+ * @return {void}
8
+ * @method
9
+ * @protected
10
+ */
11
+ export declare const execute: (pendingReleases: IAttachmentObject[]) => void;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @description フレーム終了時に保留中のテクスチャを解放
3
+ * Release pending textures at end of frame (after submit)
4
+ *
5
+ * @param {IAttachmentObject[]} pendingReleases
6
+ * @return {void}
7
+ * @method
8
+ * @protected
9
+ */
10
+ export const execute = (pendingReleases) => {
11
+ for (const att of pendingReleases) {
12
+ if (att.texture) {
13
+ att.texture.resource.destroy();
14
+ }
15
+ if (att.stencil) {
16
+ att.stencil.resource.destroy();
17
+ }
18
+ }
19
+ };
@@ -0,0 +1,23 @@
1
+ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
2
+ /**
3
+ * @description アタッチメントオブジェクトを作成
4
+ * Create attachment object
5
+ *
6
+ * @param {GPUDevice} device
7
+ * @param {GPUTextureFormat} format
8
+ * @param {Map<string, IAttachmentObject>} attachments
9
+ * @param {string} name
10
+ * @param {number} width
11
+ * @param {number} height
12
+ * @param {boolean} msaa
13
+ * @param {boolean} mask
14
+ * @param {{ nextId: number, textureId: number, stencilId: number }} idCounter
15
+ * @return {IAttachmentObject}
16
+ * @method
17
+ * @protected
18
+ */
19
+ export declare const execute: (device: GPUDevice, format: GPUTextureFormat, attachments: Map<string, IAttachmentObject>, name: string, width: number, height: number, msaa: boolean, mask: boolean, idCounter: {
20
+ nextId: number;
21
+ textureId: number;
22
+ stencilId: number;
23
+ }) => IAttachmentObject;
@@ -0,0 +1,125 @@
1
+ import { $samples } from "../../WebGPUUtil";
2
+ /**
3
+ * @description アタッチメントオブジェクトを作成
4
+ * Create attachment object
5
+ *
6
+ * @param {GPUDevice} device
7
+ * @param {GPUTextureFormat} format
8
+ * @param {Map<string, IAttachmentObject>} attachments
9
+ * @param {string} name
10
+ * @param {number} width
11
+ * @param {number} height
12
+ * @param {boolean} msaa
13
+ * @param {boolean} mask
14
+ * @param {{ nextId: number, textureId: number, stencilId: number }} idCounter
15
+ * @return {IAttachmentObject}
16
+ * @method
17
+ * @protected
18
+ */
19
+ export const execute = (device, format, attachments, name, width, height, msaa, mask, idCounter) => {
20
+ // アトラスかどうか判定(atlas, atlas_0, atlas_1, ...)
21
+ const isAtlas = name === "atlas" || name.startsWith("atlas_");
22
+ // アトラステクスチャと一時アタッチメントはRGBA8フォーマットを使用
23
+ // (copyExternalImageToTextureとの互換性、およびcopyTextureToTextureでのフォーマット一致のため)
24
+ // mainアタッチメントはスワップチェーンと同じbgra8unormフォーマットを使用
25
+ const textureFormat = isAtlas || name.startsWith("temp_") ? "rgba8unorm" : format;
26
+ // MSAAを使用するかどうか(アトラスでmsaa有効かつ$samples > 1の場合)
27
+ // 現在はアトラスのみにMSAAを適用(他のアタッチメントはmsaa=falseで呼び出される)
28
+ const useMsaa = msaa || isAtlas && $samples > 1;
29
+ const sampleCount = useMsaa ? $samples : 1;
30
+ const gpuTexture = device.createTexture({
31
+ "size": { width, height },
32
+ "format": textureFormat,
33
+ "usage": GPUTextureUsage.RENDER_ATTACHMENT |
34
+ GPUTextureUsage.TEXTURE_BINDING |
35
+ GPUTextureUsage.COPY_SRC |
36
+ GPUTextureUsage.COPY_DST
37
+ });
38
+ const textureView = gpuTexture.createView();
39
+ // ITextureObject形式で格納(解決先テクスチャ)
40
+ const texture = {
41
+ "id": idCounter.textureId++,
42
+ "resource": gpuTexture,
43
+ "view": textureView,
44
+ width,
45
+ height,
46
+ "area": width * height,
47
+ "smooth": true
48
+ };
49
+ // MSAAテクスチャを作成(sampleCount > 1の場合)
50
+ let msaaTexture = null;
51
+ if (useMsaa) {
52
+ const msaaGpuTexture = device.createTexture({
53
+ "size": { width, height },
54
+ "format": textureFormat,
55
+ "sampleCount": sampleCount,
56
+ "usage": GPUTextureUsage.RENDER_ATTACHMENT
57
+ });
58
+ const msaaTextureView = msaaGpuTexture.createView();
59
+ msaaTexture = {
60
+ "id": idCounter.textureId++,
61
+ "resource": msaaGpuTexture,
62
+ "view": msaaTextureView,
63
+ width,
64
+ height,
65
+ "area": width * height,
66
+ "smooth": true
67
+ };
68
+ }
69
+ // アトラスとメインアタッチメント用にステンシルテクスチャを作成
70
+ // アトラス: 2パスフィルレンダリング用
71
+ // メイン: マスク描画用
72
+ let stencil = null;
73
+ let msaaStencil = null;
74
+ if (isAtlas || name === "main" || mask) {
75
+ const stencilTexture = device.createTexture({
76
+ "size": { width, height },
77
+ "format": "stencil8",
78
+ "usage": GPUTextureUsage.RENDER_ATTACHMENT
79
+ });
80
+ const stencilView = stencilTexture.createView();
81
+ stencil = {
82
+ "id": idCounter.stencilId++,
83
+ "resource": stencilTexture,
84
+ "view": stencilView,
85
+ width,
86
+ height,
87
+ "area": width * height,
88
+ "dirty": false
89
+ };
90
+ // MSAAステンシルテクスチャを作成(sampleCount > 1の場合)
91
+ if (useMsaa) {
92
+ const msaaStencilTexture = device.createTexture({
93
+ "size": { width, height },
94
+ "format": "stencil8",
95
+ "sampleCount": sampleCount,
96
+ "usage": GPUTextureUsage.RENDER_ATTACHMENT
97
+ });
98
+ const msaaStencilView = msaaStencilTexture.createView();
99
+ msaaStencil = {
100
+ "id": idCounter.stencilId++,
101
+ "resource": msaaStencilTexture,
102
+ "view": msaaStencilView,
103
+ width,
104
+ height,
105
+ "area": width * height,
106
+ "dirty": false
107
+ };
108
+ }
109
+ }
110
+ const attachment = {
111
+ "id": idCounter.nextId++,
112
+ width,
113
+ height,
114
+ "clipLevel": 0,
115
+ "msaa": useMsaa,
116
+ mask,
117
+ "color": null,
118
+ texture,
119
+ stencil,
120
+ msaaTexture,
121
+ msaaStencil
122
+ };
123
+ attachments.set(name, attachment);
124
+ return attachment;
125
+ };
@@ -0,0 +1,14 @@
1
+ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
2
+ /**
3
+ * @description 一時的なアタッチメントを解放(フィルター処理用)
4
+ * Releases a temporary attachment after filter processing
5
+ * テクスチャは即座に破棄せず、フレーム終了時に遅延解放します
6
+ *
7
+ * @param {Map<string, IAttachmentObject>} attachments
8
+ * @param {IAttachmentObject[]} pendingReleases
9
+ * @param {IAttachmentObject} attachment
10
+ * @return {void}
11
+ * @method
12
+ * @protected
13
+ */
14
+ export declare const execute: (attachments: Map<string, IAttachmentObject>, pendingReleases: IAttachmentObject[], attachment: IAttachmentObject) => void;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @description 一時的なアタッチメントを解放(フィルター処理用)
3
+ * Releases a temporary attachment after filter processing
4
+ * テクスチャは即座に破棄せず、フレーム終了時に遅延解放します
5
+ *
6
+ * @param {Map<string, IAttachmentObject>} attachments
7
+ * @param {IAttachmentObject[]} pendingReleases
8
+ * @param {IAttachmentObject} attachment
9
+ * @return {void}
10
+ * @method
11
+ * @protected
12
+ */
13
+ export const execute = (attachments, pendingReleases, attachment) => {
14
+ // 名前を検索して削除(Map から削除するが、テクスチャは破棄しない)
15
+ for (const [name, att] of attachments.entries()) {
16
+ if (att.id === attachment.id) {
17
+ attachments.delete(name);
18
+ // フレーム終了時に遅延解放するためキューに追加
19
+ pendingReleases.push(att);
20
+ break;
21
+ }
22
+ }
23
+ };
@@ -0,0 +1,24 @@
1
+ import type { IAttachmentObject } from "./interface/IAttachmentObject";
2
+ export declare class FrameBufferManager {
3
+ private device;
4
+ private format;
5
+ private attachments;
6
+ private currentAttachment;
7
+ private idCounter;
8
+ private texturePool;
9
+ private pendingReleases;
10
+ constructor(device: GPUDevice, format: GPUTextureFormat);
11
+ beginFrame(): void;
12
+ createAttachment(name: string, width: number, height: number, msaa?: boolean, mask?: boolean): IAttachmentObject;
13
+ getAttachment(name: string): IAttachmentObject | undefined;
14
+ setCurrentAttachment(attachment: IAttachmentObject | null): void;
15
+ getCurrentAttachment(): IAttachmentObject | null;
16
+ createRenderPassDescriptor(view: GPUTextureView, r?: number, g?: number, b?: number, a?: number, loadOp?: GPULoadOp, resolveTarget?: GPUTextureView | null): GPURenderPassDescriptor;
17
+ createStencilRenderPassDescriptor(colorView: GPUTextureView, stencilView: GPUTextureView, colorLoadOp?: GPULoadOp, stencilLoadOp?: GPULoadOp, resolveTarget?: GPUTextureView | null): GPURenderPassDescriptor;
18
+ destroyAttachment(name: string): void;
19
+ resizeAttachment(name: string, width: number, height: number): IAttachmentObject;
20
+ createTemporaryAttachment(width: number, height: number): IAttachmentObject;
21
+ releaseTemporaryAttachment(attachment: IAttachmentObject): void;
22
+ flushPendingReleases(): void;
23
+ dispose(): void;
24
+ }
@@ -0,0 +1,161 @@
1
+ import { execute as frameBufferManagerCreateAttachmentUseCase } from "./FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase";
2
+ import { execute as frameBufferManagerReleaseTemporaryAttachmentUseCase } from "./FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase";
3
+ import { execute as frameBufferManagerCreateRenderPassDescriptorService } from "./FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService";
4
+ import { execute as frameBufferManagerCreateStencilRenderPassDescriptorService } from "./FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService";
5
+ import { TexturePool } from "./TexturePool";
6
+ export class FrameBufferManager {
7
+ constructor(device, format) {
8
+ Object.defineProperty(this, "device", {
9
+ enumerable: true,
10
+ configurable: true,
11
+ writable: true,
12
+ value: void 0
13
+ });
14
+ Object.defineProperty(this, "format", {
15
+ enumerable: true,
16
+ configurable: true,
17
+ writable: true,
18
+ value: void 0
19
+ });
20
+ Object.defineProperty(this, "attachments", {
21
+ enumerable: true,
22
+ configurable: true,
23
+ writable: true,
24
+ value: void 0
25
+ });
26
+ Object.defineProperty(this, "currentAttachment", {
27
+ enumerable: true,
28
+ configurable: true,
29
+ writable: true,
30
+ value: void 0
31
+ });
32
+ Object.defineProperty(this, "idCounter", {
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true,
36
+ value: void 0
37
+ });
38
+ Object.defineProperty(this, "texturePool", {
39
+ enumerable: true,
40
+ configurable: true,
41
+ writable: true,
42
+ value: void 0
43
+ });
44
+ Object.defineProperty(this, "pendingReleases", {
45
+ enumerable: true,
46
+ configurable: true,
47
+ writable: true,
48
+ value: []
49
+ });
50
+ this.device = device;
51
+ this.format = format;
52
+ this.attachments = new Map();
53
+ this.currentAttachment = null;
54
+ this.idCounter = { "nextId": 1, "textureId": 1, "stencilId": 1 };
55
+ this.texturePool = new TexturePool(device);
56
+ }
57
+ beginFrame() {
58
+ this.texturePool.beginFrame();
59
+ }
60
+ createAttachment(name, width, height, msaa = false, mask = false) {
61
+ return frameBufferManagerCreateAttachmentUseCase(this.device, this.format, this.attachments, name, width, height, msaa, mask, this.idCounter);
62
+ }
63
+ getAttachment(name) {
64
+ return this.attachments.get(name);
65
+ }
66
+ setCurrentAttachment(attachment) {
67
+ this.currentAttachment = attachment;
68
+ }
69
+ getCurrentAttachment() {
70
+ return this.currentAttachment;
71
+ }
72
+ createRenderPassDescriptor(view, r = 0, g = 0, b = 0, a = 0, loadOp = "clear", resolveTarget = null) {
73
+ return frameBufferManagerCreateRenderPassDescriptorService(view, r, g, b, a, loadOp, resolveTarget);
74
+ }
75
+ createStencilRenderPassDescriptor(colorView, stencilView, colorLoadOp = "load", stencilLoadOp = "clear", resolveTarget = null) {
76
+ return frameBufferManagerCreateStencilRenderPassDescriptorService(colorView, stencilView, colorLoadOp, stencilLoadOp, resolveTarget);
77
+ }
78
+ destroyAttachment(name) {
79
+ const attachment = this.attachments.get(name);
80
+ if (attachment) {
81
+ if (attachment.texture) {
82
+ attachment.texture.resource.destroy();
83
+ }
84
+ if (attachment.stencil) {
85
+ attachment.stencil.resource.destroy();
86
+ }
87
+ this.attachments.delete(name);
88
+ }
89
+ }
90
+ resizeAttachment(name, width, height) {
91
+ this.destroyAttachment(name);
92
+ return this.createAttachment(name, width, height);
93
+ }
94
+ createTemporaryAttachment(width, height) {
95
+ const name = `temp_${this.idCounter.nextId}`;
96
+ const usage = GPUTextureUsage.RENDER_ATTACHMENT |
97
+ GPUTextureUsage.TEXTURE_BINDING |
98
+ GPUTextureUsage.COPY_SRC |
99
+ GPUTextureUsage.COPY_DST |
100
+ GPUTextureUsage.STORAGE_BINDING;
101
+ const gpuTexture = this.texturePool.acquire(width, height, "rgba8unorm", usage);
102
+ const textureView = gpuTexture.createView();
103
+ const texture = {
104
+ "id": this.idCounter.textureId++,
105
+ "resource": gpuTexture,
106
+ "view": textureView,
107
+ width,
108
+ height,
109
+ "area": width * height,
110
+ "smooth": true
111
+ };
112
+ const attachment = {
113
+ "id": this.idCounter.nextId++,
114
+ width,
115
+ height,
116
+ "clipLevel": 0,
117
+ "msaa": false,
118
+ "mask": false,
119
+ "color": null,
120
+ texture,
121
+ "stencil": null,
122
+ "msaaTexture": null,
123
+ "msaaStencil": null
124
+ };
125
+ this.attachments.set(name, attachment);
126
+ return attachment;
127
+ }
128
+ releaseTemporaryAttachment(attachment) {
129
+ frameBufferManagerReleaseTemporaryAttachmentUseCase(this.attachments, this.pendingReleases, attachment);
130
+ }
131
+ flushPendingReleases() {
132
+ for (const att of this.pendingReleases) {
133
+ if (att.texture) {
134
+ this.texturePool.release(att.texture.resource);
135
+ }
136
+ if (att.msaaTexture) {
137
+ att.msaaTexture.resource.destroy();
138
+ }
139
+ if (att.stencil) {
140
+ att.stencil.resource.destroy();
141
+ }
142
+ if (att.msaaStencil) {
143
+ att.msaaStencil.resource.destroy();
144
+ }
145
+ }
146
+ this.pendingReleases = [];
147
+ }
148
+ dispose() {
149
+ for (const attachment of this.attachments.values()) {
150
+ if (attachment.texture) {
151
+ attachment.texture.resource.destroy();
152
+ }
153
+ if (attachment.stencil) {
154
+ attachment.stencil.resource.destroy();
155
+ }
156
+ }
157
+ this.attachments.clear();
158
+ this.currentAttachment = null;
159
+ this.texturePool.dispose();
160
+ }
161
+ }