@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,74 @@
1
+ /**
2
+ * @description マスクの合成処理(ネストされたマスク対応)
3
+ * WebGL版と同様に、レベル7を超えたステンシルビットをマージする
4
+ *
5
+ * @param {GPUDevice} device
6
+ * @param {GPURenderPassEncoder} renderPassEncoder
7
+ * @param {BufferManager} bufferManager
8
+ * @param {PipelineManager} pipelineManager
9
+ * @param {IAttachmentObject} currentAttachment
10
+ * @return {void}
11
+ * @method
12
+ * @protected
13
+ */
14
+ // フルスクリーン矩形(4 floats/vertex: position + bezier)
15
+ const $rectVertices = new Float32Array([
16
+ // Triangle 1
17
+ -1, -1, 0.5, 0.5,
18
+ 1, -1, 0.5, 0.5,
19
+ -1, 1, 0.5, 0.5,
20
+ // Triangle 2
21
+ -1, 1, 0.5, 0.5,
22
+ 1, -1, 0.5, 0.5,
23
+ 1, 1, 0.5, 0.5
24
+ ]);
25
+ // FillUniforms: identity matrix + white color (NDC座標なので変換不要)
26
+ const $uniformData16 = new Float32Array([
27
+ 1, 1, 1, 1, // color: white
28
+ 0.5, 0, 0, 0, // matrix0: (0.5, 0, 0, pad) → identity-like for NDC passthrough
29
+ 0, 0.5, 0, 0, // matrix1: (0, 0.5, 0, pad)
30
+ 0.5, 0.5, 1, 0 // matrix2: (0.5, 0.5, 1, pad)
31
+ ]);
32
+ export const execute = (device, renderPassEncoder, bufferManager, pipelineManager, currentAttachment) => {
33
+ if (!currentAttachment) {
34
+ return;
35
+ }
36
+ const clipLevel = currentAttachment.clipLevel;
37
+ const mask = 1 << clipLevel - 1;
38
+ const vertexBuffer = bufferManager.acquireVertexBuffer($rectVertices.byteLength, $rectVertices);
39
+ // Dynamic Uniform Bufferにデータを書き込み
40
+ const uniformOffset = bufferManager.dynamicUniform.allocate($uniformData16);
41
+ // Dynamic BindGroupを取得
42
+ const layout = pipelineManager.getBindGroupLayout("fill_dynamic");
43
+ if (!layout) {
44
+ return;
45
+ }
46
+ const bindGroup = device.createBindGroup({
47
+ "layout": layout,
48
+ "entries": [{
49
+ "binding": 0,
50
+ "resource": {
51
+ "buffer": bufferManager.dynamicUniform.getBuffer(),
52
+ "size": 256
53
+ }
54
+ }]
55
+ });
56
+ // === Pass 1: ステンシルビットのマージ ===
57
+ const mergePipeline = pipelineManager.getPipeline(`mask_union_merge_${clipLevel}`);
58
+ if (mergePipeline) {
59
+ renderPassEncoder.setPipeline(mergePipeline);
60
+ renderPassEncoder.setStencilReference(mask);
61
+ renderPassEncoder.setVertexBuffer(0, vertexBuffer);
62
+ renderPassEncoder.setBindGroup(0, bindGroup, [uniformOffset]);
63
+ renderPassEncoder.draw(6, 1, 0, 0);
64
+ }
65
+ // === Pass 2: 上位ビットのクリア ===
66
+ const clearPipeline = pipelineManager.getPipeline(`mask_union_clear_${clipLevel}`);
67
+ if (clearPipeline) {
68
+ renderPassEncoder.setPipeline(clearPipeline);
69
+ renderPassEncoder.setStencilReference(0);
70
+ renderPassEncoder.setVertexBuffer(0, vertexBuffer);
71
+ renderPassEncoder.setBindGroup(0, bindGroup, [uniformOffset]);
72
+ renderPassEncoder.draw(6, 1, 0, 0);
73
+ }
74
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @description マスクOn/Offに合わせたバインド処理
3
+ * Binding process according to mask On/Off
4
+ *
5
+ * @param {boolean} mask
6
+ * @return {void}
7
+ * @method
8
+ * @protected
9
+ */
10
+ export declare const execute: (mask: boolean) => void;
@@ -0,0 +1,20 @@
1
+ import { execute as maskEndMaskService } from "../service/MaskEndMaskService";
2
+ import { $isMaskDrawing, $setMaskDrawing } from "../../Mask";
3
+ /**
4
+ * @description マスクOn/Offに合わせたバインド処理
5
+ * Binding process according to mask On/Off
6
+ *
7
+ * @param {boolean} mask
8
+ * @return {void}
9
+ * @method
10
+ * @protected
11
+ */
12
+ export const execute = (mask) => {
13
+ if (!mask && $isMaskDrawing()) {
14
+ $setMaskDrawing(false);
15
+ }
16
+ else if (mask && !$isMaskDrawing()) {
17
+ $setMaskDrawing(true);
18
+ maskEndMaskService();
19
+ }
20
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @description マスクの終了処理
3
+ * End mask processing
4
+ *
5
+ * WebGL版と同じ:
6
+ * - 単体マスク終了時: ステンシルバッファをクリア
7
+ * - ネストマスク終了時: 上位レベルのステンシルビットをクリア
8
+ *
9
+ * @return {void}
10
+ * @method
11
+ * @protected
12
+ */
13
+ export declare const execute: () => void;
@@ -0,0 +1,51 @@
1
+ import { execute as maskEndMaskService } from "../service/MaskEndMaskService";
2
+ import { $setMaskDrawing, $setMaskTestEnabled, $setMaskStencilReference, $clipBounds, $clipLevels } from "../../Mask";
3
+ import { $context, $poolFloat32Array4 } from "../../WebGPUUtil";
4
+ /**
5
+ * @description マスクの終了処理
6
+ * End mask processing
7
+ *
8
+ * WebGL版と同じ:
9
+ * - 単体マスク終了時: ステンシルバッファをクリア
10
+ * - ネストマスク終了時: 上位レベルのステンシルビットをクリア
11
+ *
12
+ * @return {void}
13
+ * @method
14
+ * @protected
15
+ */
16
+ export const execute = () => {
17
+ const currentAttachmentObject = $context.currentAttachmentObject;
18
+ if (!currentAttachmentObject) {
19
+ return;
20
+ }
21
+ const clipLevel = currentAttachmentObject.clipLevel;
22
+ const bounds = $clipBounds.get(clipLevel);
23
+ if (bounds) {
24
+ // レベルと描画範囲を削除
25
+ $clipBounds.delete(clipLevel);
26
+ $poolFloat32Array4(bounds);
27
+ }
28
+ $clipLevels.delete(clipLevel);
29
+ // 単体のマスクであれば終了
30
+ --currentAttachmentObject.clipLevel;
31
+ if (!currentAttachmentObject.clipLevel) {
32
+ currentAttachmentObject.mask = false;
33
+ $setMaskDrawing(false);
34
+ // マスクテストを無効化
35
+ $setMaskTestEnabled(false);
36
+ $setMaskStencilReference(0);
37
+ // WebGL版と同じ: ステンシルバッファをクリア
38
+ // WebGPUでは次のレンダーパス開始時にステンシルがクリアされる
39
+ // ステンシルクリアフラグを設定
40
+ currentAttachmentObject.needsStencilClear = true;
41
+ $clipLevels.clear();
42
+ $clipBounds.clear();
43
+ return;
44
+ }
45
+ // ネストされたマスクの場合、上位レベルのステンシルビットをクリア
46
+ // WebGL版と同じ: stencilMask(1 << clipLevel), stencilOp(REPLACE, REPLACE, REPLACE)
47
+ // ステンシルクリアフラグを設定(特定のビットのみクリア)
48
+ currentAttachmentObject.pendingStencilClearLevel = currentAttachmentObject.clipLevel;
49
+ // 親マスクの設定に戻す
50
+ maskEndMaskService();
51
+ };
package/src/Mask.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ export declare const $setMaskDrawing: (state: boolean) => void;
2
+ export declare const $isMaskDrawing: () => boolean;
3
+ export declare const $setMaskTestEnabled: (enabled: boolean) => void;
4
+ export declare const $isMaskTestEnabled: () => boolean;
5
+ export declare const $setMaskStencilReference: (value: number) => void;
6
+ export declare const $getMaskStencilReference: () => number;
7
+ export declare const $pushMaskAttachment: (attachment: any) => void;
8
+ export declare const $popMaskAttachment: () => any;
9
+ export declare const $hasMaskAttachment: () => boolean;
10
+ export declare const $clipBounds: Map<number, Float32Array>;
11
+ export declare const $clipLevels: Map<number, number>;
12
+ export declare const $resetMaskState: () => void;
package/src/Mask.js ADDED
@@ -0,0 +1,41 @@
1
+ let $maskDrawingState = false;
2
+ export const $setMaskDrawing = (state) => {
3
+ $maskDrawingState = state;
4
+ };
5
+ export const $isMaskDrawing = () => {
6
+ return $maskDrawingState;
7
+ };
8
+ let $maskTestEnabled = false;
9
+ let $maskStencilReference = 0;
10
+ export const $setMaskTestEnabled = (enabled) => {
11
+ $maskTestEnabled = enabled;
12
+ };
13
+ export const $isMaskTestEnabled = () => {
14
+ return $maskTestEnabled;
15
+ };
16
+ export const $setMaskStencilReference = (value) => {
17
+ $maskStencilReference = value;
18
+ };
19
+ export const $getMaskStencilReference = () => {
20
+ return $maskStencilReference;
21
+ };
22
+ const $maskAttachmentStack = [];
23
+ export const $pushMaskAttachment = (attachment) => {
24
+ $maskAttachmentStack.push(attachment);
25
+ };
26
+ export const $popMaskAttachment = () => {
27
+ return $maskAttachmentStack.pop();
28
+ };
29
+ export const $hasMaskAttachment = () => {
30
+ return $maskAttachmentStack.length > 0;
31
+ };
32
+ export const $clipBounds = new Map();
33
+ export const $clipLevels = new Map();
34
+ export const $resetMaskState = () => {
35
+ $maskDrawingState = false;
36
+ $maskTestEnabled = false;
37
+ $maskStencilReference = 0;
38
+ $maskAttachmentStack.length = 0;
39
+ $clipBounds.clear();
40
+ $clipLevels.clear();
41
+ };
@@ -0,0 +1,19 @@
1
+ import type { IPath } from "../../interface/IPath";
2
+ /**
3
+ * @description 塗りのメッシュを生成する(Loop-Blinn方式対応)
4
+ * Generate a fill mesh with Loop-Blinn method support
5
+ *
6
+ * 頂点フォーマット(4 floats per vertex):
7
+ * - position: x, y (2 floats)
8
+ * - bezier: u, v (2 floats) - Loop-Blinn用の暗黙的関数座標
9
+ *
10
+ * color/matrixはuniform bufferで供給される
11
+ *
12
+ * @param {IPath} vertex
13
+ * @param {Float32Array} buffer
14
+ * @param {number} index - 現在の頂点インデックス
15
+ * @return {number} 新しい頂点インデックス
16
+ * @method
17
+ * @protected
18
+ */
19
+ export declare const execute: (vertex: IPath, buffer: Float32Array, index: number) => number;
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @description 塗りのメッシュを生成する(Loop-Blinn方式対応)
3
+ * Generate a fill mesh with Loop-Blinn method support
4
+ *
5
+ * 頂点フォーマット(4 floats per vertex):
6
+ * - position: x, y (2 floats)
7
+ * - bezier: u, v (2 floats) - Loop-Blinn用の暗黙的関数座標
8
+ *
9
+ * color/matrixはuniform bufferで供給される
10
+ *
11
+ * @param {IPath} vertex
12
+ * @param {Float32Array} buffer
13
+ * @param {number} index - 現在の頂点インデックス
14
+ * @return {number} 新しい頂点インデックス
15
+ * @method
16
+ * @protected
17
+ */
18
+ export const execute = (vertex, buffer, index) => {
19
+ const length = vertex.length - 5;
20
+ for (let idx = 3; idx < length; idx += 3) {
21
+ let position = index * 4;
22
+ if (vertex[idx + 2]) {
23
+ // 座標A
24
+ buffer[position++] = vertex[idx - 3];
25
+ buffer[position++] = vertex[idx - 2];
26
+ buffer[position++] = 0;
27
+ buffer[position++] = 0;
28
+ // 座標B
29
+ buffer[position++] = vertex[idx];
30
+ buffer[position++] = vertex[idx + 1];
31
+ buffer[position++] = 0.5;
32
+ buffer[position++] = 0;
33
+ // 座標C
34
+ buffer[position++] = vertex[idx + 3];
35
+ buffer[position++] = vertex[idx + 4];
36
+ buffer[position++] = 1;
37
+ buffer[position++] = 1;
38
+ }
39
+ else if (vertex[idx + 5]) {
40
+ // 座標A
41
+ buffer[position++] = vertex[0];
42
+ buffer[position++] = vertex[1];
43
+ buffer[position++] = 0.5;
44
+ buffer[position++] = 0.5;
45
+ // 座標B
46
+ buffer[position++] = vertex[idx];
47
+ buffer[position++] = vertex[idx + 1];
48
+ buffer[position++] = 0.5;
49
+ buffer[position++] = 0.5;
50
+ // 座標C
51
+ buffer[position++] = vertex[idx + 6];
52
+ buffer[position++] = vertex[idx + 7];
53
+ buffer[position++] = 0.5;
54
+ buffer[position++] = 0.5;
55
+ }
56
+ else {
57
+ // 座標A
58
+ buffer[position++] = vertex[0];
59
+ buffer[position++] = vertex[1];
60
+ buffer[position++] = 0.5;
61
+ buffer[position++] = 0.5;
62
+ // 座標B
63
+ buffer[position++] = vertex[idx];
64
+ buffer[position++] = vertex[idx + 1];
65
+ buffer[position++] = 0.5;
66
+ buffer[position++] = 0.5;
67
+ // 座標C
68
+ buffer[position++] = vertex[idx + 3];
69
+ buffer[position++] = vertex[idx + 4];
70
+ buffer[position++] = 0.5;
71
+ buffer[position++] = 0.5;
72
+ }
73
+ index += 3;
74
+ }
75
+ return index;
76
+ };
@@ -0,0 +1,13 @@
1
+ import type { IPoint } from "../../interface/IPoint";
2
+ /**
3
+ * @description 線形補間
4
+ * Linear interpolation
5
+ *
6
+ * @param {IPoint} pointA
7
+ * @param {IPoint} pointB
8
+ * @param {number} t
9
+ * @return {IPoint}
10
+ * @method
11
+ * @protected
12
+ */
13
+ export declare const execute: (pointA: IPoint, pointB: IPoint, t: number) => IPoint;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @description 線形補間
3
+ * Linear interpolation
4
+ *
5
+ * @param {IPoint} pointA
6
+ * @param {IPoint} pointB
7
+ * @param {number} t
8
+ * @return {IPoint}
9
+ * @method
10
+ * @protected
11
+ */
12
+ export const execute = (pointA, pointB, t) => {
13
+ return {
14
+ "x": pointA.x + (pointB.x - pointA.x) * t,
15
+ "y": pointA.y + (pointB.y - pointA.y) * t
16
+ };
17
+ };
@@ -0,0 +1,19 @@
1
+ import type { IPath } from "../../interface/IPath";
2
+ /**
3
+ * @description ストローク塗りつぶし用のメッシュを生成する(bezier座標は常に0.5, 0.5)
4
+ * Generate a mesh for stroke fill (bezier coordinates are always 0.5, 0.5)
5
+ *
6
+ * 頂点フォーマット(4 floats per vertex):
7
+ * - position: x, y (2 floats)
8
+ * - bezier: u, v (2 floats) - 常に (0.5, 0.5) を設定
9
+ *
10
+ * color/matrixはuniform bufferで供給される
11
+ *
12
+ * @param {IPath} vertex
13
+ * @param {Float32Array} buffer
14
+ * @param {number} index - 現在の頂点インデックス
15
+ * @return {number} 新しい頂点インデックス
16
+ * @method
17
+ * @protected
18
+ */
19
+ export declare const execute: (vertex: IPath, buffer: Float32Array, index: number) => number;
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @description ストローク塗りつぶし用のメッシュを生成する(bezier座標は常に0.5, 0.5)
3
+ * Generate a mesh for stroke fill (bezier coordinates are always 0.5, 0.5)
4
+ *
5
+ * 頂点フォーマット(4 floats per vertex):
6
+ * - position: x, y (2 floats)
7
+ * - bezier: u, v (2 floats) - 常に (0.5, 0.5) を設定
8
+ *
9
+ * color/matrixはuniform bufferで供給される
10
+ *
11
+ * @param {IPath} vertex
12
+ * @param {Float32Array} buffer
13
+ * @param {number} index - 現在の頂点インデックス
14
+ * @return {number} 新しい頂点インデックス
15
+ * @method
16
+ * @protected
17
+ */
18
+ export const execute = (vertex, buffer, index) => {
19
+ const length = vertex.length - 5;
20
+ for (let idx = 3; idx < length; idx += 3) {
21
+ let position = index * 4;
22
+ if (vertex[idx + 2]) {
23
+ // 座標A (始点)
24
+ buffer[position++] = vertex[idx - 3];
25
+ buffer[position++] = vertex[idx - 2];
26
+ buffer[position++] = 0.5;
27
+ buffer[position++] = 0.5;
28
+ // 座標B (制御点)
29
+ buffer[position++] = vertex[idx];
30
+ buffer[position++] = vertex[idx + 1];
31
+ buffer[position++] = 0.5;
32
+ buffer[position++] = 0.5;
33
+ // 座標C (終点)
34
+ buffer[position++] = vertex[idx + 3];
35
+ buffer[position++] = vertex[idx + 4];
36
+ buffer[position++] = 0.5;
37
+ buffer[position++] = 0.5;
38
+ }
39
+ else if (vertex[idx + 5]) {
40
+ // 座標A (基点)
41
+ buffer[position++] = vertex[0];
42
+ buffer[position++] = vertex[1];
43
+ buffer[position++] = 0.5;
44
+ buffer[position++] = 0.5;
45
+ // 座標B (現在点)
46
+ buffer[position++] = vertex[idx];
47
+ buffer[position++] = vertex[idx + 1];
48
+ buffer[position++] = 0.5;
49
+ buffer[position++] = 0.5;
50
+ // 座標C (次の次の点)
51
+ buffer[position++] = vertex[idx + 6];
52
+ buffer[position++] = vertex[idx + 7];
53
+ buffer[position++] = 0.5;
54
+ buffer[position++] = 0.5;
55
+ }
56
+ else {
57
+ // 座標A (基点)
58
+ buffer[position++] = vertex[0];
59
+ buffer[position++] = vertex[1];
60
+ buffer[position++] = 0.5;
61
+ buffer[position++] = 0.5;
62
+ // 座標B (現在点)
63
+ buffer[position++] = vertex[idx];
64
+ buffer[position++] = vertex[idx + 1];
65
+ buffer[position++] = 0.5;
66
+ buffer[position++] = 0.5;
67
+ // 座標C (次の点)
68
+ buffer[position++] = vertex[idx + 3];
69
+ buffer[position++] = vertex[idx + 4];
70
+ buffer[position++] = 0.5;
71
+ buffer[position++] = 0.5;
72
+ }
73
+ index += 3;
74
+ }
75
+ return index;
76
+ };
@@ -0,0 +1,13 @@
1
+ import type { IPath } from "../../interface/IPath";
2
+ import type { IMeshResult } from "../../interface/IMeshResult";
3
+ /**
4
+ * @description ビットマップストローク用のメッシュを生成する
5
+ * Generate a mesh for bitmap stroke
6
+ *
7
+ * @param {IPath[]} vertices
8
+ * @param {number} thickness
9
+ * @return {IMeshResult}
10
+ * @method
11
+ * @protected
12
+ */
13
+ export declare const execute: (vertices: IPath[], thickness: number) => IMeshResult;
@@ -0,0 +1,65 @@
1
+ import { generateStrokeOutline } from "./MeshStrokeGenerateUseCase";
2
+ import { execute as meshStrokeFillGenerateService } from "../service/MeshStrokeFillGenerateService";
3
+ /**
4
+ * @description メッシュ生成用の再利用可能な一時バッファ(GC回避)
5
+ */
6
+ let $meshTempBuffer = new Float32Array(32);
7
+ const $upperPowerOfTwo = (v) => {
8
+ v--;
9
+ v |= v >> 1;
10
+ v |= v >> 2;
11
+ v |= v >> 4;
12
+ v |= v >> 8;
13
+ v |= v >> 16;
14
+ v++;
15
+ return v;
16
+ };
17
+ /**
18
+ * @description ビットマップストローク用のメッシュを生成する
19
+ * Generate a mesh for bitmap stroke
20
+ *
21
+ * @param {IPath[]} vertices
22
+ * @param {number} thickness
23
+ * @return {IMeshResult}
24
+ * @method
25
+ * @protected
26
+ */
27
+ export const execute = (vertices, thickness) => {
28
+ const halfThickness = thickness / 2;
29
+ // 各パスのアウトラインを生成
30
+ const fillVertices = [];
31
+ for (const path of vertices) {
32
+ const outlines = generateStrokeOutline(path, halfThickness);
33
+ for (const outline of outlines) {
34
+ fillVertices.push(outline);
35
+ }
36
+ }
37
+ // 頂点数を計算(各パスの三角形数 × 3)
38
+ let totalVertices = 0;
39
+ for (const vertex of fillVertices) {
40
+ const length = vertex.length - 5;
41
+ for (let idx = 3; idx < length; idx += 3) {
42
+ totalVertices += 3;
43
+ }
44
+ }
45
+ if (totalVertices === 0) {
46
+ return {
47
+ "buffer": new Float32Array(0),
48
+ "indexCount": 0
49
+ };
50
+ }
51
+ // バッファを確保(4 floats per vertex、再利用可能バッファ)
52
+ const requiredSize = totalVertices * 4;
53
+ if ($meshTempBuffer.length < requiredSize) {
54
+ $meshTempBuffer = new Float32Array($upperPowerOfTwo(requiredSize));
55
+ }
56
+ const buffer = $meshTempBuffer;
57
+ let index = 0;
58
+ for (const vertex of fillVertices) {
59
+ index = meshStrokeFillGenerateService(vertex, buffer, index);
60
+ }
61
+ return {
62
+ "buffer": buffer.subarray(0, index * 4),
63
+ "indexCount": index
64
+ };
65
+ };
@@ -0,0 +1,12 @@
1
+ import type { IPath } from "../../interface/IPath";
2
+ import type { IMeshResult } from "../../interface/IMeshResult";
3
+ /**
4
+ * @description 塗りのメッシュを生成する
5
+ * Generate a fill mesh
6
+ *
7
+ * @param {IPath[]} vertices
8
+ * @return {IMeshResult}
9
+ * @method
10
+ * @protected
11
+ */
12
+ export declare const execute: (vertices: IPath[]) => IMeshResult;
@@ -0,0 +1,48 @@
1
+ import { execute as meshFillGenerateService } from "../service/MeshFillGenerateService";
2
+ /**
3
+ * @description メッシュ生成用の再利用可能な一時バッファ(GC回避)
4
+ */
5
+ let $meshTempBuffer = new Float32Array(32);
6
+ const $upperPowerOfTwo = (v) => {
7
+ v--;
8
+ v |= v >> 1;
9
+ v |= v >> 2;
10
+ v |= v >> 4;
11
+ v |= v >> 8;
12
+ v |= v >> 16;
13
+ v++;
14
+ return v;
15
+ };
16
+ /**
17
+ * @description 塗りのメッシュを生成する
18
+ * Generate a fill mesh
19
+ *
20
+ * @param {IPath[]} vertices
21
+ * @return {IMeshResult}
22
+ * @method
23
+ * @protected
24
+ */
25
+ export const execute = (vertices) => {
26
+ // 頂点数を計算(各パスの三角形数 × 3)
27
+ let totalVertices = 0;
28
+ for (const vertex of vertices) {
29
+ const length = vertex.length - 5;
30
+ for (let idx = 3; idx < length; idx += 3) {
31
+ totalVertices += 3;
32
+ }
33
+ }
34
+ // バッファを確保(4 floats per vertex、再利用可能バッファ)
35
+ const requiredSize = totalVertices * 4;
36
+ if ($meshTempBuffer.length < requiredSize) {
37
+ $meshTempBuffer = new Float32Array($upperPowerOfTwo(requiredSize));
38
+ }
39
+ const buffer = $meshTempBuffer;
40
+ let index = 0;
41
+ for (const vertex of vertices) {
42
+ index = meshFillGenerateService(vertex, buffer, index);
43
+ }
44
+ return {
45
+ "buffer": buffer.subarray(0, index * 4),
46
+ "indexCount": index
47
+ };
48
+ };
@@ -0,0 +1,13 @@
1
+ import type { IPath } from "../../interface/IPath";
2
+ import type { IMeshResult } from "../../interface/IMeshResult";
3
+ /**
4
+ * @description グラデーションストローク用のメッシュを生成する
5
+ * Generate a mesh for gradient stroke
6
+ *
7
+ * @param {IPath[]} vertices
8
+ * @param {number} thickness
9
+ * @return {IMeshResult}
10
+ * @method
11
+ * @protected
12
+ */
13
+ export declare const execute: (vertices: IPath[], thickness: number) => IMeshResult;
@@ -0,0 +1,65 @@
1
+ import { generateStrokeOutline } from "./MeshStrokeGenerateUseCase";
2
+ import { execute as meshStrokeFillGenerateService } from "../service/MeshStrokeFillGenerateService";
3
+ /**
4
+ * @description メッシュ生成用の再利用可能な一時バッファ(GC回避)
5
+ */
6
+ let $meshTempBuffer = new Float32Array(32);
7
+ const $upperPowerOfTwo = (v) => {
8
+ v--;
9
+ v |= v >> 1;
10
+ v |= v >> 2;
11
+ v |= v >> 4;
12
+ v |= v >> 8;
13
+ v |= v >> 16;
14
+ v++;
15
+ return v;
16
+ };
17
+ /**
18
+ * @description グラデーションストローク用のメッシュを生成する
19
+ * Generate a mesh for gradient stroke
20
+ *
21
+ * @param {IPath[]} vertices
22
+ * @param {number} thickness
23
+ * @return {IMeshResult}
24
+ * @method
25
+ * @protected
26
+ */
27
+ export const execute = (vertices, thickness) => {
28
+ const halfThickness = thickness / 2;
29
+ // 各パスのアウトラインを生成
30
+ const fillVertices = [];
31
+ for (const path of vertices) {
32
+ const outlines = generateStrokeOutline(path, halfThickness);
33
+ for (const outline of outlines) {
34
+ fillVertices.push(outline);
35
+ }
36
+ }
37
+ // 頂点数を計算(各パスの三角形数 × 3)
38
+ let totalVertices = 0;
39
+ for (const vertex of fillVertices) {
40
+ const length = vertex.length - 5;
41
+ for (let idx = 3; idx < length; idx += 3) {
42
+ totalVertices += 3;
43
+ }
44
+ }
45
+ if (totalVertices === 0) {
46
+ return {
47
+ "buffer": new Float32Array(0),
48
+ "indexCount": 0
49
+ };
50
+ }
51
+ // バッファを確保(4 floats per vertex、再利用可能バッファ)
52
+ const requiredSize = totalVertices * 4;
53
+ if ($meshTempBuffer.length < requiredSize) {
54
+ $meshTempBuffer = new Float32Array($upperPowerOfTwo(requiredSize));
55
+ }
56
+ const buffer = $meshTempBuffer;
57
+ let index = 0;
58
+ for (const vertex of fillVertices) {
59
+ index = meshStrokeFillGenerateService(vertex, buffer, index);
60
+ }
61
+ return {
62
+ "buffer": buffer.subarray(0, index * 4),
63
+ "indexCount": index
64
+ };
65
+ };