@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,123 @@
1
+ import type { IPoint } from "./interface/IPoint";
2
+ import type { IPath } from "./interface/IPath";
3
+ /**
4
+ * @description WebGPU用パスコマンド(WebGL互換形式)
5
+ * Path commands for WebGPU (WebGL compatible format)
6
+ *
7
+ * パス形式: [x, y, isControlPoint, x, y, isControlPoint, ...]
8
+ * - isControlPoint = true: 二次ベジェ曲線の制御点
9
+ * - isControlPoint = false: 通常の頂点または終点
10
+ */
11
+ export declare class PathCommand {
12
+ private $currentPath;
13
+ private $vertices;
14
+ private $currentX;
15
+ private $currentY;
16
+ private $startX;
17
+ private $startY;
18
+ /**
19
+ * @constructor
20
+ */
21
+ constructor();
22
+ /**
23
+ * @description パスを開始
24
+ * @return {void}
25
+ */
26
+ beginPath(): void;
27
+ /**
28
+ * @description パスを移動
29
+ * @param {number} x
30
+ * @param {number} y
31
+ * @return {void}
32
+ */
33
+ moveTo(x: number, y: number): void;
34
+ /**
35
+ * @description 直線を描画
36
+ * @param {number} x
37
+ * @param {number} y
38
+ * @return {void}
39
+ */
40
+ lineTo(x: number, y: number): void;
41
+ /**
42
+ * @description 二次ベジェ曲線を描画(Loop-Blinn方式対応)
43
+ * @param {number} cx
44
+ * @param {number} cy
45
+ * @param {number} x
46
+ * @param {number} y
47
+ * @return {void}
48
+ */
49
+ quadraticCurveTo(cx: number, cy: number, x: number, y: number): void;
50
+ /**
51
+ * @description フラットネス閾値(スケールに応じて調整可能)
52
+ * Flatness threshold for adaptive tessellation
53
+ * 0.25 = 0.5px squared(滑らかなストローク描画用)
54
+ */
55
+ private $flatnessThreshold;
56
+ /**
57
+ * @description フラットネス閾値を設定
58
+ * Set flatness threshold for adaptive bezier tessellation
59
+ * @param {number} scale - 現在のスケール(行列のスケール成分)
60
+ * @return {void}
61
+ */
62
+ setScale(scale: number): void;
63
+ /**
64
+ * @description 三次ベジェ曲線を二次ベジェ曲線に適応的に近似
65
+ * Adaptively approximate cubic bezier with quadratic beziers
66
+ *
67
+ * フラットネス(平坦度)に基づいて動的に分割数を決定。
68
+ * 単純な曲線は少ない分割、複雑な曲線は多い分割を行う。
69
+ *
70
+ * @param {number} cx1
71
+ * @param {number} cy1
72
+ * @param {number} cx2
73
+ * @param {number} cy2
74
+ * @param {number} x
75
+ * @param {number} y
76
+ * @return {void}
77
+ */
78
+ bezierCurveTo(cx1: number, cy1: number, cx2: number, cy2: number, x: number, y: number): void;
79
+ /**
80
+ * @description 円弧を描画(WebGL版と同じ実装: 4つの三次ベジェ曲線を使用)
81
+ * @param {number} x
82
+ * @param {number} y
83
+ * @param {number} radius
84
+ * @return {void}
85
+ */
86
+ arc(x: number, y: number, radius: number): void;
87
+ /**
88
+ * @description パスを閉じる
89
+ * @return {void}
90
+ */
91
+ closePath(): void;
92
+ /**
93
+ * @description 頂点データを取得(fill用: 3点以上が必要)
94
+ * @return {IPath[]}
95
+ */
96
+ get $getVertices(): IPath[];
97
+ /**
98
+ * @description パスから頂点配列を生成(従来互換用・単純なfan triangulation)
99
+ * @return {Float32Array}
100
+ */
101
+ generateVertices(): Float32Array;
102
+ /**
103
+ * @description 現在のパスを取得(ストローク用)
104
+ * @return {IPoint[]}
105
+ */
106
+ getCurrentPath(): IPoint[];
107
+ /**
108
+ * @description すべてのパスを取得(ストローク用)
109
+ * @return {IPoint[][]}
110
+ */
111
+ getAllPaths(): IPoint[][];
112
+ /**
113
+ * @description WebGL互換形式でパスを取得(ストローク用)
114
+ * [x, y, isCurve, x, y, isCurve, ...] 形式
115
+ * @return {IPath[]}
116
+ */
117
+ getVerticesForStroke(): IPath[];
118
+ /**
119
+ * @description リセット
120
+ * @return {void}
121
+ */
122
+ reset(): void;
123
+ }
@@ -0,0 +1,317 @@
1
+ import { adaptiveCubicToQuad, calculateAdaptiveThreshold } from "./BezierConverter/BezierConverter";
2
+ /**
3
+ * @description WebGPU用パスコマンド(WebGL互換形式)
4
+ * Path commands for WebGPU (WebGL compatible format)
5
+ *
6
+ * パス形式: [x, y, isControlPoint, x, y, isControlPoint, ...]
7
+ * - isControlPoint = true: 二次ベジェ曲線の制御点
8
+ * - isControlPoint = false: 通常の頂点または終点
9
+ */
10
+ export class PathCommand {
11
+ /**
12
+ * @constructor
13
+ */
14
+ constructor() {
15
+ Object.defineProperty(this, "$currentPath", {
16
+ enumerable: true,
17
+ configurable: true,
18
+ writable: true,
19
+ value: void 0
20
+ });
21
+ Object.defineProperty(this, "$vertices", {
22
+ enumerable: true,
23
+ configurable: true,
24
+ writable: true,
25
+ value: void 0
26
+ });
27
+ Object.defineProperty(this, "$currentX", {
28
+ enumerable: true,
29
+ configurable: true,
30
+ writable: true,
31
+ value: void 0
32
+ });
33
+ Object.defineProperty(this, "$currentY", {
34
+ enumerable: true,
35
+ configurable: true,
36
+ writable: true,
37
+ value: void 0
38
+ });
39
+ Object.defineProperty(this, "$startX", {
40
+ enumerable: true,
41
+ configurable: true,
42
+ writable: true,
43
+ value: void 0
44
+ });
45
+ Object.defineProperty(this, "$startY", {
46
+ enumerable: true,
47
+ configurable: true,
48
+ writable: true,
49
+ value: void 0
50
+ });
51
+ /**
52
+ * @description フラットネス閾値(スケールに応じて調整可能)
53
+ * Flatness threshold for adaptive tessellation
54
+ * 0.25 = 0.5px squared(滑らかなストローク描画用)
55
+ */
56
+ Object.defineProperty(this, "$flatnessThreshold", {
57
+ enumerable: true,
58
+ configurable: true,
59
+ writable: true,
60
+ value: 0.25
61
+ });
62
+ this.$currentPath = [];
63
+ this.$vertices = [];
64
+ this.$currentX = 0;
65
+ this.$currentY = 0;
66
+ this.$startX = 0;
67
+ this.$startY = 0;
68
+ }
69
+ /**
70
+ * @description パスを開始
71
+ * @return {void}
72
+ */
73
+ beginPath() {
74
+ this.$currentPath = [];
75
+ this.$vertices = [];
76
+ this.$currentX = 0;
77
+ this.$currentY = 0;
78
+ this.$startX = 0;
79
+ this.$startY = 0;
80
+ }
81
+ /**
82
+ * @description パスを移動
83
+ * @param {number} x
84
+ * @param {number} y
85
+ * @return {void}
86
+ */
87
+ moveTo(x, y) {
88
+ // stroke用は2点以上(6要素)、fill用は3点以上(9要素)が必要
89
+ // WebGL版と同じ: stroke描画に対応するため6要素以上で保存
90
+ if (this.$currentPath.length >= 6) {
91
+ this.$vertices.push(this.$currentPath);
92
+ }
93
+ this.$currentPath = [x, y, false];
94
+ this.$currentX = x;
95
+ this.$currentY = y;
96
+ this.$startX = x;
97
+ this.$startY = y;
98
+ }
99
+ /**
100
+ * @description 直線を描画
101
+ * @param {number} x
102
+ * @param {number} y
103
+ * @return {void}
104
+ */
105
+ lineTo(x, y) {
106
+ // 同じ点への移動は無視
107
+ if (x === this.$currentX && y === this.$currentY) {
108
+ return;
109
+ }
110
+ this.$currentPath.push(x, y, false);
111
+ this.$currentX = x;
112
+ this.$currentY = y;
113
+ }
114
+ /**
115
+ * @description 二次ベジェ曲線を描画(Loop-Blinn方式対応)
116
+ * @param {number} cx
117
+ * @param {number} cy
118
+ * @param {number} x
119
+ * @param {number} y
120
+ * @return {void}
121
+ */
122
+ quadraticCurveTo(cx, cy, x, y) {
123
+ // 制御点 (isControlPoint = true)
124
+ this.$currentPath.push(cx, cy, true);
125
+ // 終点 (isControlPoint = false)
126
+ this.$currentPath.push(x, y, false);
127
+ this.$currentX = x;
128
+ this.$currentY = y;
129
+ }
130
+ /**
131
+ * @description フラットネス閾値を設定
132
+ * Set flatness threshold for adaptive bezier tessellation
133
+ * @param {number} scale - 現在のスケール(行列のスケール成分)
134
+ * @return {void}
135
+ */
136
+ setScale(scale) {
137
+ this.$flatnessThreshold = calculateAdaptiveThreshold(scale);
138
+ }
139
+ /**
140
+ * @description 三次ベジェ曲線を二次ベジェ曲線に適応的に近似
141
+ * Adaptively approximate cubic bezier with quadratic beziers
142
+ *
143
+ * フラットネス(平坦度)に基づいて動的に分割数を決定。
144
+ * 単純な曲線は少ない分割、複雑な曲線は多い分割を行う。
145
+ *
146
+ * @param {number} cx1
147
+ * @param {number} cy1
148
+ * @param {number} cx2
149
+ * @param {number} cy2
150
+ * @param {number} x
151
+ * @param {number} y
152
+ * @return {void}
153
+ */
154
+ bezierCurveTo(cx1, cy1, cx2, cy2, x, y) {
155
+ // 適応的テッセレーションで三次ベジェを二次ベジェ群に変換
156
+ const p0 = { "x": this.$currentX, "y": this.$currentY };
157
+ const p1 = { "x": cx1, "y": cy1 };
158
+ const p2 = { "x": cx2, "y": cy2 };
159
+ const p3 = { "x": x, "y": y };
160
+ const segments = adaptiveCubicToQuad(p0, p1, p2, p3, this.$flatnessThreshold);
161
+ // 各二次ベジェセグメントをパスに追加
162
+ for (const segment of segments) {
163
+ this.$currentPath.push(segment.ctrl.x, segment.ctrl.y, true);
164
+ this.$currentPath.push(segment.end.x, segment.end.y, false);
165
+ }
166
+ this.$currentX = x;
167
+ this.$currentY = y;
168
+ }
169
+ /**
170
+ * @description 円弧を描画(WebGL版と同じ実装: 4つの三次ベジェ曲線を使用)
171
+ * @param {number} x
172
+ * @param {number} y
173
+ * @param {number} radius
174
+ * @return {void}
175
+ */
176
+ arc(x, y, radius) {
177
+ const r = radius;
178
+ const k = radius * 0.5522847498307936; // 円を三次ベジェで近似するための定数
179
+ // 4つの三次ベジェ曲線で円を描画
180
+ // 始点: (x + r, y)
181
+ // 各象限を1つの三次ベジェ曲線で描画
182
+ // 第1象限: (x + r, y) -> (x, y + r)
183
+ this.bezierCurveTo(x + r, y + k, x + k, y + r, x, y + r);
184
+ // 第2象限: (x, y + r) -> (x - r, y)
185
+ this.bezierCurveTo(x - k, y + r, x - r, y + k, x - r, y);
186
+ // 第3象限: (x - r, y) -> (x, y - r)
187
+ this.bezierCurveTo(x - r, y - k, x - k, y - r, x, y - r);
188
+ // 第4象限: (x, y - r) -> (x + r, y) - 終点は始点と同じ
189
+ this.bezierCurveTo(x + k, y - r, x + r, y - k, x + r, y);
190
+ // 閉じた円の終点を始点座標で強制上書き(浮動小数点誤差を排除)
191
+ // ストロークのjoin処理で始点と終点が完全一致する必要があるため
192
+ const pathLength = this.$currentPath.length;
193
+ if (pathLength >= 3) {
194
+ this.$currentPath[pathLength - 3] = this.$startX;
195
+ this.$currentPath[pathLength - 2] = this.$startY;
196
+ }
197
+ this.$currentX = this.$startX;
198
+ this.$currentY = this.$startY;
199
+ }
200
+ /**
201
+ * @description パスを閉じる
202
+ * @return {void}
203
+ */
204
+ closePath() {
205
+ if (this.$currentPath.length >= 3) {
206
+ // 始点に戻る直線
207
+ if (this.$currentX !== this.$startX || this.$currentY !== this.$startY) {
208
+ this.$currentPath.push(this.$startX, this.$startY, false);
209
+ }
210
+ }
211
+ }
212
+ /**
213
+ * @description 頂点データを取得(fill用: 3点以上が必要)
214
+ * @return {IPath[]}
215
+ */
216
+ get $getVertices() {
217
+ const vertices = [...this.$vertices];
218
+ // fill用は3点以上(9要素)が必要
219
+ if (this.$currentPath.length >= 9) {
220
+ vertices.push(this.$currentPath);
221
+ }
222
+ return vertices;
223
+ }
224
+ /**
225
+ * @description パスから頂点配列を生成(従来互換用・単純なfan triangulation)
226
+ * @return {Float32Array}
227
+ */
228
+ generateVertices() {
229
+ const vertices = this.$getVertices;
230
+ const triangles = [];
231
+ for (const path of vertices) {
232
+ if (path.length < 9) {
233
+ continue;
234
+ } // 最低3点(9要素)必要
235
+ // 点を抽出
236
+ const points = [];
237
+ for (let i = 0; i < path.length; i += 3) {
238
+ points.push({ "x": path[i], "y": path[i + 1] });
239
+ }
240
+ // Fan triangulation
241
+ for (let i = 1; i < points.length - 1; i++) {
242
+ triangles.push(points[0].x, points[0].y, points[i].x, points[i].y, points[i + 1].x, points[i + 1].y);
243
+ }
244
+ }
245
+ return new Float32Array(triangles);
246
+ }
247
+ /**
248
+ * @description 現在のパスを取得(ストローク用)
249
+ * @return {IPoint[]}
250
+ */
251
+ getCurrentPath() {
252
+ const points = [];
253
+ for (let i = 0; i < this.$currentPath.length; i += 3) {
254
+ points.push({
255
+ "x": this.$currentPath[i],
256
+ "y": this.$currentPath[i + 1]
257
+ });
258
+ }
259
+ return points;
260
+ }
261
+ /**
262
+ * @description すべてのパスを取得(ストローク用)
263
+ * @return {IPoint[][]}
264
+ */
265
+ getAllPaths() {
266
+ const allPaths = [];
267
+ for (const path of this.$vertices) {
268
+ const points = [];
269
+ for (let i = 0; i < path.length; i += 3) {
270
+ points.push({
271
+ "x": path[i],
272
+ "y": path[i + 1]
273
+ });
274
+ }
275
+ if (points.length > 0) {
276
+ allPaths.push(points);
277
+ }
278
+ }
279
+ if (this.$currentPath.length >= 3) {
280
+ const points = [];
281
+ for (let i = 0; i < this.$currentPath.length; i += 3) {
282
+ points.push({
283
+ "x": this.$currentPath[i],
284
+ "y": this.$currentPath[i + 1]
285
+ });
286
+ }
287
+ if (points.length > 0) {
288
+ allPaths.push(points);
289
+ }
290
+ }
291
+ return allPaths;
292
+ }
293
+ /**
294
+ * @description WebGL互換形式でパスを取得(ストローク用)
295
+ * [x, y, isCurve, x, y, isCurve, ...] 形式
296
+ * @return {IPath[]}
297
+ */
298
+ getVerticesForStroke() {
299
+ const vertices = [...this.$vertices];
300
+ if (this.$currentPath.length >= 6) {
301
+ vertices.push(this.$currentPath);
302
+ }
303
+ return vertices;
304
+ }
305
+ /**
306
+ * @description リセット
307
+ * @return {void}
308
+ */
309
+ reset() {
310
+ this.$currentPath = [];
311
+ this.$vertices = [];
312
+ this.$currentX = 0;
313
+ this.$currentY = 0;
314
+ this.$startX = 0;
315
+ this.$startY = 0;
316
+ }
317
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @description 頻繁に使用されるサンプラーを事前に作成
3
+ * Pre-create commonly used samplers
4
+ *
5
+ * @param {GPUDevice} device
6
+ * @param {Map<string, GPUSampler>} cache
7
+ * @return {void}
8
+ * @method
9
+ * @protected
10
+ */
11
+ export declare const execute: (device: GPUDevice, cache: Map<string, GPUSampler>) => void;
@@ -0,0 +1,35 @@
1
+ import { execute as samplerCacheGenerateKeyService } from "./SamplerCacheGenerateKeyService";
2
+ /**
3
+ * @description 頻繁に使用されるサンプラーを事前に作成
4
+ * Pre-create commonly used samplers
5
+ *
6
+ * @param {GPUDevice} device
7
+ * @param {Map<string, GPUSampler>} cache
8
+ * @return {void}
9
+ * @method
10
+ * @protected
11
+ */
12
+ export const execute = (device, cache) => {
13
+ const createAndCache = (minFilter, magFilter, addressModeU, addressModeV) => {
14
+ const key = samplerCacheGenerateKeyService(minFilter, magFilter, addressModeU, addressModeV);
15
+ if (!cache.has(key)) {
16
+ const sampler = device.createSampler({
17
+ minFilter,
18
+ magFilter,
19
+ addressModeU,
20
+ addressModeV
21
+ });
22
+ cache.set(key, sampler);
23
+ }
24
+ };
25
+ // リニアクランプ(最も一般的)
26
+ createAndCache("linear", "linear", "clamp-to-edge", "clamp-to-edge");
27
+ // ニアレストクランプ
28
+ createAndCache("nearest", "nearest", "clamp-to-edge", "clamp-to-edge");
29
+ // リニアリピート
30
+ createAndCache("linear", "linear", "repeat", "repeat");
31
+ // ニアレストリピート
32
+ createAndCache("nearest", "nearest", "repeat", "repeat");
33
+ // リニアミラーリピート
34
+ createAndCache("linear", "linear", "mirror-repeat", "mirror-repeat");
35
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @description サンプラーのキーを生成
3
+ * Generate sampler cache key
4
+ *
5
+ * @param {GPUFilterMode} minFilter
6
+ * @param {GPUFilterMode} magFilter
7
+ * @param {GPUAddressMode} addressModeU
8
+ * @param {GPUAddressMode} addressModeV
9
+ * @return {string}
10
+ * @method
11
+ * @protected
12
+ */
13
+ export declare const execute: (minFilter: GPUFilterMode, magFilter: GPUFilterMode, addressModeU: GPUAddressMode, addressModeV: GPUAddressMode) => string;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @description サンプラーのキーを生成
3
+ * Generate sampler cache key
4
+ *
5
+ * @param {GPUFilterMode} minFilter
6
+ * @param {GPUFilterMode} magFilter
7
+ * @param {GPUAddressMode} addressModeU
8
+ * @param {GPUAddressMode} addressModeV
9
+ * @return {string}
10
+ * @method
11
+ * @protected
12
+ */
13
+ export const execute = (minFilter, magFilter, addressModeU, addressModeV) => {
14
+ return `${minFilter}_${magFilter}_${addressModeU}_${addressModeV}`;
15
+ };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @description サンプラーを取得または作成
3
+ * Get or create sampler
4
+ *
5
+ * @param {GPUDevice} device
6
+ * @param {Map<string, GPUSampler>} cache
7
+ * @param {GPUFilterMode} minFilter
8
+ * @param {GPUFilterMode} magFilter
9
+ * @param {GPUAddressMode} addressModeU
10
+ * @param {GPUAddressMode} addressModeV
11
+ * @return {GPUSampler}
12
+ * @method
13
+ * @protected
14
+ */
15
+ export declare const execute: (device: GPUDevice, cache: Map<string, GPUSampler>, minFilter: GPUFilterMode, magFilter: GPUFilterMode, addressModeU: GPUAddressMode, addressModeV: GPUAddressMode) => GPUSampler;
@@ -0,0 +1,30 @@
1
+ import { execute as samplerCacheGenerateKeyService } from "./SamplerCacheGenerateKeyService";
2
+ /**
3
+ * @description サンプラーを取得または作成
4
+ * Get or create sampler
5
+ *
6
+ * @param {GPUDevice} device
7
+ * @param {Map<string, GPUSampler>} cache
8
+ * @param {GPUFilterMode} minFilter
9
+ * @param {GPUFilterMode} magFilter
10
+ * @param {GPUAddressMode} addressModeU
11
+ * @param {GPUAddressMode} addressModeV
12
+ * @return {GPUSampler}
13
+ * @method
14
+ * @protected
15
+ */
16
+ export const execute = (device, cache, minFilter, magFilter, addressModeU, addressModeV) => {
17
+ const key = samplerCacheGenerateKeyService(minFilter, magFilter, addressModeU, addressModeV);
18
+ const cached = cache.get(key);
19
+ if (cached) {
20
+ return cached;
21
+ }
22
+ const sampler = device.createSampler({
23
+ minFilter,
24
+ magFilter,
25
+ addressModeU,
26
+ addressModeV
27
+ });
28
+ cache.set(key, sampler);
29
+ return sampler;
30
+ };
@@ -0,0 +1,18 @@
1
+ export declare class SamplerCache {
2
+ private device;
3
+ private cache;
4
+ constructor(device: GPUDevice);
5
+ getOrCreate(minFilter: GPUFilterMode, magFilter: GPUFilterMode, addressModeU: GPUAddressMode, addressModeV: GPUAddressMode): GPUSampler;
6
+ getLinearClamp(): GPUSampler;
7
+ getNearestClamp(): GPUSampler;
8
+ getLinearRepeat(): GPUSampler;
9
+ getNearestRepeat(): GPUSampler;
10
+ getBySmoothRepeat(smooth: boolean, repeat: boolean): GPUSampler;
11
+ getStats(): {
12
+ size: number;
13
+ };
14
+ dispose(): void;
15
+ }
16
+ export declare const initSamplerCache: (device: GPUDevice) => void;
17
+ export declare const getSamplerCache: () => SamplerCache | null;
18
+ export declare const clearSamplerCache: () => void;
@@ -0,0 +1,61 @@
1
+ import { execute as samplerCacheGetOrCreateService } from "./SamplerCache/service/SamplerCacheGetOrCreateService";
2
+ import { execute as samplerCacheCreateCommonSamplersService } from "./SamplerCache/service/SamplerCacheCreateCommonSamplersService";
3
+ export class SamplerCache {
4
+ constructor(device) {
5
+ Object.defineProperty(this, "device", {
6
+ enumerable: true,
7
+ configurable: true,
8
+ writable: true,
9
+ value: void 0
10
+ });
11
+ Object.defineProperty(this, "cache", {
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true,
15
+ value: void 0
16
+ });
17
+ this.device = device;
18
+ this.cache = new Map();
19
+ samplerCacheCreateCommonSamplersService(device, this.cache);
20
+ }
21
+ getOrCreate(minFilter, magFilter, addressModeU, addressModeV) {
22
+ return samplerCacheGetOrCreateService(this.device, this.cache, minFilter, magFilter, addressModeU, addressModeV);
23
+ }
24
+ getLinearClamp() {
25
+ return this.getOrCreate("linear", "linear", "clamp-to-edge", "clamp-to-edge");
26
+ }
27
+ getNearestClamp() {
28
+ return this.getOrCreate("nearest", "nearest", "clamp-to-edge", "clamp-to-edge");
29
+ }
30
+ getLinearRepeat() {
31
+ return this.getOrCreate("linear", "linear", "repeat", "repeat");
32
+ }
33
+ getNearestRepeat() {
34
+ return this.getOrCreate("nearest", "nearest", "repeat", "repeat");
35
+ }
36
+ getBySmoothRepeat(smooth, repeat) {
37
+ const filter = smooth ? "linear" : "nearest";
38
+ const addressMode = repeat ? "repeat" : "clamp-to-edge";
39
+ return this.getOrCreate(filter, filter, addressMode, addressMode);
40
+ }
41
+ getStats() {
42
+ return {
43
+ "size": this.cache.size
44
+ };
45
+ }
46
+ dispose() {
47
+ this.cache.clear();
48
+ }
49
+ }
50
+ let $samplerCache = null;
51
+ export const initSamplerCache = (device) => {
52
+ $samplerCache = new SamplerCache(device);
53
+ };
54
+ export const getSamplerCache = () => {
55
+ return $samplerCache;
56
+ };
57
+ export const clearSamplerCache = () => {
58
+ if ($samplerCache) {
59
+ $samplerCache.dispose();
60
+ }
61
+ };