@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.
- package/LICENSE +21 -0
- package/README.md +574 -0
- package/package.json +30 -0
- package/src/AtlasManager.d.ts +23 -0
- package/src/AtlasManager.js +123 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.d.ts +13 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.js +24 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.d.ts +15 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.js +31 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.d.ts +5 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.js +42 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.d.ts +16 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.js +28 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.d.ts +17 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.js +33 -0
- package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.d.ts +16 -0
- package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.js +28 -0
- package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.d.ts +17 -0
- package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.js +27 -0
- package/src/AttachmentManager/service/AttachmentManagerGetTextureService.d.ts +18 -0
- package/src/AttachmentManager/service/AttachmentManagerGetTextureService.js +27 -0
- package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.d.ts +12 -0
- package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.js +17 -0
- package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.d.ts +26 -0
- package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.js +43 -0
- package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.d.ts +18 -0
- package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.js +33 -0
- package/src/AttachmentManager.d.ts +19 -0
- package/src/AttachmentManager.js +105 -0
- package/src/BezierConverter/BezierConverter.d.ts +16 -0
- package/src/BezierConverter/BezierConverter.js +15 -0
- package/src/BezierConverter/service/BezierConverterCalculateFlatnessService.d.ts +15 -0
- package/src/BezierConverter/service/BezierConverterCalculateFlatnessService.js +37 -0
- package/src/BezierConverter/service/BezierConverterSplitCubicService.d.ts +15 -0
- package/src/BezierConverter/service/BezierConverterSplitCubicService.js +47 -0
- package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.d.ts +29 -0
- package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.js +80 -0
- package/src/Blend/BlendInstancedManager.d.ts +35 -0
- package/src/Blend/BlendInstancedManager.js +147 -0
- package/src/Blend/service/BlendAddService.d.ts +1 -0
- package/src/Blend/service/BlendAddService.js +8 -0
- package/src/Blend/service/BlendAlphaService.d.ts +1 -0
- package/src/Blend/service/BlendAlphaService.js +8 -0
- package/src/Blend/service/BlendEraseService.d.ts +1 -0
- package/src/Blend/service/BlendEraseService.js +8 -0
- package/src/Blend/service/BlendGetStateService.d.ts +12 -0
- package/src/Blend/service/BlendGetStateService.js +13 -0
- package/src/Blend/service/BlendOneZeroService.d.ts +1 -0
- package/src/Blend/service/BlendOneZeroService.js +8 -0
- package/src/Blend/service/BlendResetService.d.ts +1 -0
- package/src/Blend/service/BlendResetService.js +8 -0
- package/src/Blend/service/BlendScreenService.d.ts +1 -0
- package/src/Blend/service/BlendScreenService.js +8 -0
- package/src/Blend/service/BlendSetModeService.d.ts +2 -0
- package/src/Blend/service/BlendSetModeService.js +4 -0
- package/src/Blend/usecase/BlendApplyComplexBlendUseCase.d.ts +6 -0
- package/src/Blend/usecase/BlendApplyComplexBlendUseCase.js +79 -0
- package/src/Blend/usecase/BlendOperationUseCase.d.ts +11 -0
- package/src/Blend/usecase/BlendOperationUseCase.js +31 -0
- package/src/Blend.d.ts +8 -0
- package/src/Blend.js +91 -0
- package/src/BufferManager/service/BufferManagerCreateIndirectBufferService.d.ts +15 -0
- package/src/BufferManager/service/BufferManagerCreateIndirectBufferService.js +37 -0
- package/src/BufferManager/service/BufferManagerCreateRectVerticesService.d.ts +13 -0
- package/src/BufferManager/service/BufferManagerCreateRectVerticesService.js +23 -0
- package/src/BufferManager/service/BufferManagerCreateStorageBufferService.d.ts +17 -0
- package/src/BufferManager/service/BufferManagerCreateStorageBufferService.js +23 -0
- package/src/BufferManager/service/BufferManagerReleaseUniformBufferService.d.ts +12 -0
- package/src/BufferManager/service/BufferManagerReleaseUniformBufferService.js +32 -0
- package/src/BufferManager/service/BufferManagerReleaseVertexBufferService.d.ts +12 -0
- package/src/BufferManager/service/BufferManagerReleaseVertexBufferService.js +32 -0
- package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.d.ts +12 -0
- package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.js +20 -0
- package/src/BufferManager/service/BufferManagerUpperPowerOfTwoService.d.ts +10 -0
- package/src/BufferManager/service/BufferManagerUpperPowerOfTwoService.js +18 -0
- package/src/BufferManager/usecase/BufferManagerAcquireStorageBufferUseCase.d.ts +15 -0
- package/src/BufferManager/usecase/BufferManagerAcquireStorageBufferUseCase.js +51 -0
- package/src/BufferManager/usecase/BufferManagerAcquireUniformBufferUseCase.d.ts +13 -0
- package/src/BufferManager/usecase/BufferManagerAcquireUniformBufferUseCase.js +26 -0
- package/src/BufferManager/usecase/BufferManagerAcquireVertexBufferUseCase.d.ts +14 -0
- package/src/BufferManager/usecase/BufferManagerAcquireVertexBufferUseCase.js +46 -0
- package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.d.ts +12 -0
- package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.js +20 -0
- package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.d.ts +9 -0
- package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.js +15 -0
- package/src/BufferManager.d.ts +93 -0
- package/src/BufferManager.js +487 -0
- package/src/Compute/ComputePipelineManager.d.ts +61 -0
- package/src/Compute/ComputePipelineManager.js +313 -0
- package/src/Compute/service/ComputeExecuteBlurService.d.ts +21 -0
- package/src/Compute/service/ComputeExecuteBlurService.js +81 -0
- package/src/Context/service/ContextComputeBitmapMatrixService.d.ts +1 -0
- package/src/Context/service/ContextComputeBitmapMatrixService.js +74 -0
- package/src/Context/service/ContextComputeGradientMatrixService.d.ts +4 -0
- package/src/Context/service/ContextComputeGradientMatrixService.js +88 -0
- package/src/Context/service/ContextFillSimpleService.d.ts +2 -0
- package/src/Context/service/ContextFillSimpleService.js +28 -0
- package/src/Context/service/ContextFillWithStencilMainService.d.ts +2 -0
- package/src/Context/service/ContextFillWithStencilMainService.js +19 -0
- package/src/Context/service/ContextFillWithStencilService.d.ts +2 -0
- package/src/Context/service/ContextFillWithStencilService.js +19 -0
- package/src/Context/usecase/ContextApplyFilterUseCase.d.ts +5 -0
- package/src/Context/usecase/ContextApplyFilterUseCase.js +668 -0
- package/src/Context/usecase/ContextBitmapFillUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextBitmapFillUseCase.js +210 -0
- package/src/Context/usecase/ContextBitmapStrokeUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextBitmapStrokeUseCase.js +119 -0
- package/src/Context/usecase/ContextClipUseCase.d.ts +5 -0
- package/src/Context/usecase/ContextClipUseCase.js +101 -0
- package/src/Context/usecase/ContextContainerEndLayerUseCase.d.ts +5 -0
- package/src/Context/usecase/ContextContainerEndLayerUseCase.js +476 -0
- package/src/Context/usecase/ContextDrawArraysInstancedUseCase.d.ts +6 -0
- package/src/Context/usecase/ContextDrawArraysInstancedUseCase.js +135 -0
- package/src/Context/usecase/ContextDrawIndirectUseCase.d.ts +6 -0
- package/src/Context/usecase/ContextDrawIndirectUseCase.js +154 -0
- package/src/Context/usecase/ContextGradientFillUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextGradientFillUseCase.js +230 -0
- package/src/Context/usecase/ContextGradientStrokeUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextGradientStrokeUseCase.js +138 -0
- package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.d.ts +6 -0
- package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.js +213 -0
- package/src/Context.d.ts +430 -0
- package/src/Context.js +2453 -0
- package/src/FillTexturePool.d.ts +6 -0
- package/src/FillTexturePool.js +72 -0
- package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.d.ts +10 -0
- package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.js +214 -0
- package/src/Filter/BevelFilterShader.d.ts +2 -0
- package/src/Filter/BevelFilterShader.js +107 -0
- package/src/Filter/BitmapFilterShader.d.ts +2 -0
- package/src/Filter/BitmapFilterShader.js +207 -0
- package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.d.ts +16 -0
- package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.js +243 -0
- package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.d.ts +40 -0
- package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.js +51 -0
- package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.d.ts +25 -0
- package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.js +180 -0
- package/src/Filter/BlurFilterShader.d.ts +5 -0
- package/src/Filter/BlurFilterShader.js +109 -0
- package/src/Filter/BlurFilterUseCase.d.ts +36 -0
- package/src/Filter/BlurFilterUseCase.js +85 -0
- package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.d.ts +12 -0
- package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.js +90 -0
- package/src/Filter/ColorMatrixFilterShader.d.ts +4 -0
- package/src/Filter/ColorMatrixFilterShader.js +51 -0
- package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.d.ts +6 -0
- package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.js +144 -0
- package/src/Filter/ConvolutionFilterShader.d.ts +2 -0
- package/src/Filter/ConvolutionFilterShader.js +115 -0
- package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.d.ts +6 -0
- package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.js +172 -0
- package/src/Filter/DisplacementMapFilterShader.d.ts +2 -0
- package/src/Filter/DisplacementMapFilterShader.js +114 -0
- package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.d.ts +24 -0
- package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.js +179 -0
- package/src/Filter/DropShadowFilterShader.d.ts +4 -0
- package/src/Filter/DropShadowFilterShader.js +93 -0
- package/src/Filter/FilterGradientLUTCache.d.ts +29 -0
- package/src/Filter/FilterGradientLUTCache.js +84 -0
- package/src/Filter/FilterOffset.d.ts +8 -0
- package/src/Filter/FilterOffset.js +10 -0
- package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.d.ts +24 -0
- package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.js +143 -0
- package/src/Filter/GlowFilterShader.d.ts +4 -0
- package/src/Filter/GlowFilterShader.js +66 -0
- package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.d.ts +29 -0
- package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.js +216 -0
- package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.d.ts +29 -0
- package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.js +164 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.d.ts +4 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.js +23 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.d.ts +4 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.js +28 -0
- package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.d.ts +11 -0
- package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.js +19 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.d.ts +23 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.js +125 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.d.ts +14 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.js +23 -0
- package/src/FrameBufferManager.d.ts +24 -0
- package/src/FrameBufferManager.js +161 -0
- package/src/Gradient/GradientLUTCache.d.ts +61 -0
- package/src/Gradient/GradientLUTCache.js +153 -0
- package/src/Gradient/GradientLUTGenerator.d.ts +30 -0
- package/src/Gradient/GradientLUTGenerator.js +202 -0
- package/src/Grid.d.ts +18 -0
- package/src/Grid.js +21 -0
- package/src/Mask/service/MaskBeginMaskService.d.ts +9 -0
- package/src/Mask/service/MaskBeginMaskService.js +22 -0
- package/src/Mask/service/MaskEndMaskService.d.ts +15 -0
- package/src/Mask/service/MaskEndMaskService.js +36 -0
- package/src/Mask/service/MaskSetMaskBoundsService.d.ts +13 -0
- package/src/Mask/service/MaskSetMaskBoundsService.js +36 -0
- package/src/Mask/service/MaskUnionMaskService.d.ts +4 -0
- package/src/Mask/service/MaskUnionMaskService.js +74 -0
- package/src/Mask/usecase/MaskBindUseCase.d.ts +10 -0
- package/src/Mask/usecase/MaskBindUseCase.js +20 -0
- package/src/Mask/usecase/MaskLeaveMaskUseCase.d.ts +13 -0
- package/src/Mask/usecase/MaskLeaveMaskUseCase.js +51 -0
- package/src/Mask.d.ts +12 -0
- package/src/Mask.js +41 -0
- package/src/Mesh/service/MeshFillGenerateService.d.ts +19 -0
- package/src/Mesh/service/MeshFillGenerateService.js +76 -0
- package/src/Mesh/service/MeshLerpService.d.ts +13 -0
- package/src/Mesh/service/MeshLerpService.js +17 -0
- package/src/Mesh/service/MeshStrokeFillGenerateService.d.ts +19 -0
- package/src/Mesh/service/MeshStrokeFillGenerateService.js +76 -0
- package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.d.ts +13 -0
- package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.js +65 -0
- package/src/Mesh/usecase/MeshFillGenerateUseCase.d.ts +12 -0
- package/src/Mesh/usecase/MeshFillGenerateUseCase.js +48 -0
- package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.d.ts +13 -0
- package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.js +65 -0
- package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.d.ts +14 -0
- package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.js +28 -0
- package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.d.ts +18 -0
- package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.js +54 -0
- package/src/Mesh/usecase/MeshStrokeGenerateUseCase.d.ts +25 -0
- package/src/Mesh/usecase/MeshStrokeGenerateUseCase.js +608 -0
- package/src/PathCommand.d.ts +123 -0
- package/src/PathCommand.js +317 -0
- package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.d.ts +11 -0
- package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.js +35 -0
- package/src/SamplerCache/service/SamplerCacheGenerateKeyService.d.ts +13 -0
- package/src/SamplerCache/service/SamplerCacheGenerateKeyService.js +15 -0
- package/src/SamplerCache/service/SamplerCacheGetOrCreateService.d.ts +15 -0
- package/src/SamplerCache/service/SamplerCacheGetOrCreateService.js +30 -0
- package/src/SamplerCache.d.ts +18 -0
- package/src/SamplerCache.js +61 -0
- package/src/Shader/BlendModeShader.d.ts +51 -0
- package/src/Shader/BlendModeShader.js +71 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.d.ts +12 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.js +28 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.d.ts +13 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.js +61 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.d.ts +19 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.js +37 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.d.ts +11 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.js +24 -0
- package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.d.ts +14 -0
- package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.js +24 -0
- package/src/Shader/PipelineManager.d.ts +57 -0
- package/src/Shader/PipelineManager.js +2868 -0
- package/src/Shader/ShaderInstancedManager.d.ts +8 -0
- package/src/Shader/ShaderInstancedManager.js +18 -0
- package/src/Shader/ShaderSource.d.ts +60 -0
- package/src/Shader/ShaderSource.js +518 -0
- package/src/Shader/wgsl/common/SharedWgsl.d.ts +5 -0
- package/src/Shader/wgsl/common/SharedWgsl.js +37 -0
- package/src/Shader/wgsl/fragment/BasicFragment.d.ts +2 -0
- package/src/Shader/wgsl/fragment/BasicFragment.js +28 -0
- package/src/Shader/wgsl/fragment/BitmapFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/BitmapFragment.js +43 -0
- package/src/Shader/wgsl/fragment/BlendFragment.d.ts +8 -0
- package/src/Shader/wgsl/fragment/BlendFragment.js +63 -0
- package/src/Shader/wgsl/fragment/EffectFragment.d.ts +6 -0
- package/src/Shader/wgsl/fragment/EffectFragment.js +324 -0
- package/src/Shader/wgsl/fragment/FillFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/FillFragment.js +28 -0
- package/src/Shader/wgsl/fragment/FilterFragment.d.ts +10 -0
- package/src/Shader/wgsl/fragment/FilterFragment.js +212 -0
- package/src/Shader/wgsl/fragment/GradientFragment.d.ts +3 -0
- package/src/Shader/wgsl/fragment/GradientFragment.js +118 -0
- package/src/Shader/wgsl/fragment/InstancedFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/InstancedFragment.js +20 -0
- package/src/Shader/wgsl/fragment/MaskFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/MaskFragment.js +17 -0
- package/src/Shader/wgsl/fragment/StencilFragment.d.ts +2 -0
- package/src/Shader/wgsl/fragment/StencilFragment.js +33 -0
- package/src/Shader/wgsl/vertex/BasicVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/BasicVertex.js +37 -0
- package/src/Shader/wgsl/vertex/BitmapVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/BitmapVertex.js +43 -0
- package/src/Shader/wgsl/vertex/FillVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/FillVertex.js +35 -0
- package/src/Shader/wgsl/vertex/FilterVertex.d.ts +12 -0
- package/src/Shader/wgsl/vertex/FilterVertex.js +193 -0
- package/src/Shader/wgsl/vertex/GradientVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/GradientVertex.js +44 -0
- package/src/Shader/wgsl/vertex/InstancedVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/InstancedVertex.js +48 -0
- package/src/Shader/wgsl/vertex/MaskVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/MaskVertex.js +36 -0
- package/src/Shader/wgsl/vertex/StencilVertex.d.ts +2 -0
- package/src/Shader/wgsl/vertex/StencilVertex.js +66 -0
- package/src/TextureManager/service/TextureManagerInitializeSamplersService.d.ts +11 -0
- package/src/TextureManager/service/TextureManagerInitializeSamplersService.js +48 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.d.ts +13 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.js +30 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.d.ts +15 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.js +26 -0
- package/src/TextureManager.d.ts +15 -0
- package/src/TextureManager.js +87 -0
- package/src/TexturePool/service/TexturePoolCleanupService.d.ts +14 -0
- package/src/TexturePool/service/TexturePoolCleanupService.js +28 -0
- package/src/TexturePool/service/TexturePoolEvictOldestService.d.ts +11 -0
- package/src/TexturePool/service/TexturePoolEvictOldestService.js +24 -0
- package/src/TexturePool/service/TexturePoolReleaseService.d.ts +13 -0
- package/src/TexturePool/service/TexturePoolReleaseService.js +22 -0
- package/src/TexturePool/usecase/TexturePoolAcquireUseCase.d.ts +19 -0
- package/src/TexturePool/usecase/TexturePoolAcquireUseCase.js +90 -0
- package/src/TexturePool.d.ts +69 -0
- package/src/TexturePool.js +151 -0
- package/src/WebGPUUtil.d.ts +102 -0
- package/src/WebGPUUtil.js +157 -0
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/interface/IAttachmentObject.d.ts +41 -0
- package/src/interface/IAttachmentObject.js +1 -0
- package/src/interface/IBlendMode.d.ts +1 -0
- package/src/interface/IBlendMode.js +1 -0
- package/src/interface/IBlendState.d.ts +8 -0
- package/src/interface/IBlendState.js +1 -0
- package/src/interface/IBounds.d.ts +6 -0
- package/src/interface/IBounds.js +1 -0
- package/src/interface/ICachedBindGroup.d.ts +8 -0
- package/src/interface/ICachedBindGroup.js +1 -0
- package/src/interface/IColorBufferObject.d.ts +17 -0
- package/src/interface/IColorBufferObject.js +1 -0
- package/src/interface/IComplexBlendItem.d.ts +19 -0
- package/src/interface/IComplexBlendItem.js +1 -0
- package/src/interface/IFilterConfig.d.ts +29 -0
- package/src/interface/IFilterConfig.js +1 -0
- package/src/interface/IGradientLUTData.d.ts +8 -0
- package/src/interface/IGradientLUTData.js +1 -0
- package/src/interface/IGradientStop.d.ts +11 -0
- package/src/interface/IGradientStop.js +1 -0
- package/src/interface/ILocalFilterConfig.d.ts +21 -0
- package/src/interface/ILocalFilterConfig.js +1 -0
- package/src/interface/IMeshResult.d.ts +8 -0
- package/src/interface/IMeshResult.js +1 -0
- package/src/interface/IPath.d.ts +8 -0
- package/src/interface/IPath.js +1 -0
- package/src/interface/IPoint.d.ts +4 -0
- package/src/interface/IPoint.js +1 -0
- package/src/interface/IPooledBuffer.d.ts +8 -0
- package/src/interface/IPooledBuffer.js +1 -0
- package/src/interface/IPooledTexture.d.ts +17 -0
- package/src/interface/IPooledTexture.js +1 -0
- package/src/interface/IQuadraticSegment.d.ts +9 -0
- package/src/interface/IQuadraticSegment.js +1 -0
- package/src/interface/IRectangleInfo.d.ts +13 -0
- package/src/interface/IRectangleInfo.js +1 -0
- package/src/interface/IStencilBufferObject.d.ts +16 -0
- package/src/interface/IStencilBufferObject.js +1 -0
- package/src/interface/IStorageBufferConfig.d.ts +40 -0
- package/src/interface/IStorageBufferConfig.js +1 -0
- package/src/interface/ITextureObject.d.ts +16 -0
- 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,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,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
|
+
};
|