@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,4 @@
|
|
|
1
|
+
import type { IPath } from "../../interface/IPath";
|
|
2
|
+
import type { BufferManager } from "../../BufferManager";
|
|
3
|
+
import type { PipelineManager } from "../../Shader/PipelineManager";
|
|
4
|
+
export declare const execute: (device: GPUDevice, render_pass_encoder: GPURenderPassEncoder, buffer_manager: BufferManager, pipeline_manager: PipelineManager, path_vertices: IPath[], context_matrix: Float32Array, fill_style: Float32Array, pixels: Uint8Array, bitmap_matrix: Float32Array, width: number, height: number, repeat: boolean, smooth: boolean, viewport_width: number, viewport_height: number, use_atlas_target: boolean, use_stencil_pipeline?: boolean, _clip_level?: number) => GPUTexture | null;
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { execute as meshFillGenerateUseCase } from "../../Mesh/usecase/MeshFillGenerateUseCase";
|
|
2
|
+
import { execute as contextComputeBitmapMatrixService } from "../service/ContextComputeBitmapMatrixService";
|
|
3
|
+
import { $acquireFillTexture, $releaseFillTexture } from "../../FillTexturePool";
|
|
4
|
+
import { $isMaskDrawing, $getMaskStencilReference } from "../../Mask";
|
|
5
|
+
const $bitmapSamplerCache = new Map();
|
|
6
|
+
const $uniformData32 = new Float32Array(32);
|
|
7
|
+
const $stencilData16 = new Float32Array(16);
|
|
8
|
+
let $stencilDynamicBindGroup = null;
|
|
9
|
+
let $stencilDynamicBuffer = null;
|
|
10
|
+
const $entries3 = [
|
|
11
|
+
{ "binding": 0, "resource": { "buffer": null } },
|
|
12
|
+
{ "binding": 1, "resource": null },
|
|
13
|
+
{ "binding": 2, "resource": null }
|
|
14
|
+
];
|
|
15
|
+
export const execute = (device, render_pass_encoder, buffer_manager, pipeline_manager, path_vertices, context_matrix, fill_style, pixels, bitmap_matrix, width, height, repeat, smooth, viewport_width, viewport_height, use_atlas_target, use_stencil_pipeline = false, _clip_level = 1) => {
|
|
16
|
+
// MeshFillGenerateUseCaseで頂点データを生成(4 floats/vertex: position + bezier)
|
|
17
|
+
const mesh = meshFillGenerateUseCase(path_vertices);
|
|
18
|
+
if (mesh.indexCount === 0) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
// 頂点バッファを取得(プールから再利用)
|
|
22
|
+
const vertexBuffer = buffer_manager.acquireVertexBuffer(mesh.buffer.byteLength, mesh.buffer);
|
|
23
|
+
// ビットマップテクスチャをプールから取得
|
|
24
|
+
const bitmapTexture = $acquireFillTexture(device, width, height);
|
|
25
|
+
// ピクセルデータをテクスチャに転送
|
|
26
|
+
device.queue.writeTexture({ "texture": bitmapTexture }, pixels.buffer, { "bytesPerRow": width * 4, "rowsPerImage": height, "offset": pixels.byteOffset }, { width, height });
|
|
27
|
+
// ビットマップ変換行列を計算(コンテキスト行列と合成して逆行列)
|
|
28
|
+
const computedBitmapMatrix = contextComputeBitmapMatrixService(bitmap_matrix, context_matrix);
|
|
29
|
+
// 色とmatrix
|
|
30
|
+
const red = fill_style[0];
|
|
31
|
+
const green = fill_style[1];
|
|
32
|
+
const blue = fill_style[2];
|
|
33
|
+
const alpha = fill_style[3];
|
|
34
|
+
const a = context_matrix[0];
|
|
35
|
+
const b = context_matrix[1];
|
|
36
|
+
const c = context_matrix[3];
|
|
37
|
+
const d = context_matrix[4];
|
|
38
|
+
const tx = context_matrix[6];
|
|
39
|
+
const ty = context_matrix[7];
|
|
40
|
+
// Uniformバッファを作成(BitmapUniforms: 28 floats = 112 bytes)
|
|
41
|
+
// bitmapMatrix: mat3x3<f32> (48 bytes)
|
|
42
|
+
$uniformData32[0] = computedBitmapMatrix[0]; // col0.x = a
|
|
43
|
+
$uniformData32[1] = computedBitmapMatrix[1]; // col0.y = c
|
|
44
|
+
$uniformData32[2] = computedBitmapMatrix[2]; // col0.z = 0
|
|
45
|
+
$uniformData32[3] = 0; // padding
|
|
46
|
+
$uniformData32[4] = computedBitmapMatrix[3]; // col1.x = b
|
|
47
|
+
$uniformData32[5] = computedBitmapMatrix[4]; // col1.y = d
|
|
48
|
+
$uniformData32[6] = computedBitmapMatrix[5]; // col1.z = 0
|
|
49
|
+
$uniformData32[7] = 0; // padding
|
|
50
|
+
$uniformData32[8] = computedBitmapMatrix[6]; // col2.x = tx
|
|
51
|
+
$uniformData32[9] = computedBitmapMatrix[7]; // col2.y = ty
|
|
52
|
+
$uniformData32[10] = computedBitmapMatrix[8]; // col2.z = 1
|
|
53
|
+
$uniformData32[11] = 0; // padding
|
|
54
|
+
// ビットマップパラメータ
|
|
55
|
+
$uniformData32[12] = width;
|
|
56
|
+
$uniformData32[13] = height;
|
|
57
|
+
$uniformData32[14] = repeat ? 1.0 : 0.0;
|
|
58
|
+
$uniformData32[15] = 0; // padding
|
|
59
|
+
// color
|
|
60
|
+
$uniformData32[16] = red;
|
|
61
|
+
$uniformData32[17] = green;
|
|
62
|
+
$uniformData32[18] = blue;
|
|
63
|
+
$uniformData32[19] = alpha;
|
|
64
|
+
// contextMatrix(viewport正規化済み)
|
|
65
|
+
$uniformData32[20] = a / viewport_width;
|
|
66
|
+
$uniformData32[21] = b / viewport_height;
|
|
67
|
+
$uniformData32[22] = 0;
|
|
68
|
+
$uniformData32[23] = 0;
|
|
69
|
+
$uniformData32[24] = c / viewport_width;
|
|
70
|
+
$uniformData32[25] = d / viewport_height;
|
|
71
|
+
$uniformData32[26] = 0;
|
|
72
|
+
$uniformData32[27] = 0;
|
|
73
|
+
// contextMatrix2
|
|
74
|
+
$uniformData32[28] = tx / viewport_width;
|
|
75
|
+
$uniformData32[29] = ty / viewport_height;
|
|
76
|
+
$uniformData32[30] = 1;
|
|
77
|
+
$uniformData32[31] = 0;
|
|
78
|
+
const uniformBuffer = buffer_manager.acquireAndWriteUniformBuffer($uniformData32);
|
|
79
|
+
// サンプラーを取得(キャッシュ済み)
|
|
80
|
+
const samplerKey = `bitmap_${smooth ? "s" : "n"}_${repeat ? "r" : "c"}`;
|
|
81
|
+
let sampler = $bitmapSamplerCache.get(samplerKey);
|
|
82
|
+
if (!sampler) {
|
|
83
|
+
sampler = device.createSampler({
|
|
84
|
+
"magFilter": smooth ? "linear" : "nearest",
|
|
85
|
+
"minFilter": smooth ? "linear" : "nearest",
|
|
86
|
+
"addressModeU": repeat ? "repeat" : "clamp-to-edge",
|
|
87
|
+
"addressModeV": repeat ? "repeat" : "clamp-to-edge"
|
|
88
|
+
});
|
|
89
|
+
$bitmapSamplerCache.set(samplerKey, sampler);
|
|
90
|
+
}
|
|
91
|
+
// バインドグループを作成
|
|
92
|
+
const bindGroupLayout = pipeline_manager.getBindGroupLayout("bitmap_fill");
|
|
93
|
+
if (!bindGroupLayout) {
|
|
94
|
+
console.error("[WebGPU] bitmap_fill bind group layout not found");
|
|
95
|
+
$releaseFillTexture(bitmapTexture);
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
$entries3[0].resource.buffer = uniformBuffer;
|
|
99
|
+
$entries3[1].resource = sampler;
|
|
100
|
+
$entries3[2].resource = bitmapTexture.createView();
|
|
101
|
+
const bindGroup = device.createBindGroup({
|
|
102
|
+
"layout": bindGroupLayout,
|
|
103
|
+
"entries": $entries3
|
|
104
|
+
});
|
|
105
|
+
// ステンシル書き込みパス用のDynamic BindGroup + offset作成ヘルパー
|
|
106
|
+
const createStencilDynamic = () => {
|
|
107
|
+
const dynamicLayout = pipeline_manager.getBindGroupLayout("fill_dynamic");
|
|
108
|
+
if (!dynamicLayout) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
// FillUniforms: color(16) + matrix0(16) + matrix1(16) + matrix2(16) = 64 bytes
|
|
112
|
+
$stencilData16[0] = red;
|
|
113
|
+
$stencilData16[1] = green;
|
|
114
|
+
$stencilData16[2] = blue;
|
|
115
|
+
$stencilData16[3] = alpha;
|
|
116
|
+
$stencilData16[4] = a / viewport_width;
|
|
117
|
+
$stencilData16[5] = b / viewport_height;
|
|
118
|
+
$stencilData16[6] = 0;
|
|
119
|
+
$stencilData16[7] = 0;
|
|
120
|
+
$stencilData16[8] = c / viewport_width;
|
|
121
|
+
$stencilData16[9] = d / viewport_height;
|
|
122
|
+
$stencilData16[10] = 0;
|
|
123
|
+
$stencilData16[11] = 0;
|
|
124
|
+
$stencilData16[12] = tx / viewport_width;
|
|
125
|
+
$stencilData16[13] = ty / viewport_height;
|
|
126
|
+
$stencilData16[14] = 1;
|
|
127
|
+
$stencilData16[15] = 0;
|
|
128
|
+
const offset = buffer_manager.dynamicUniform.allocate($stencilData16);
|
|
129
|
+
const currentBuffer = buffer_manager.dynamicUniform.getBuffer();
|
|
130
|
+
if (!$stencilDynamicBindGroup || $stencilDynamicBuffer !== currentBuffer) {
|
|
131
|
+
$stencilDynamicBindGroup = device.createBindGroup({
|
|
132
|
+
"layout": dynamicLayout,
|
|
133
|
+
"entries": [{
|
|
134
|
+
"binding": 0,
|
|
135
|
+
"resource": {
|
|
136
|
+
"buffer": currentBuffer,
|
|
137
|
+
"size": 256
|
|
138
|
+
}
|
|
139
|
+
}]
|
|
140
|
+
});
|
|
141
|
+
$stencilDynamicBuffer = currentBuffer;
|
|
142
|
+
}
|
|
143
|
+
return { "bindGroup": $stencilDynamicBindGroup, "offset": offset };
|
|
144
|
+
};
|
|
145
|
+
// アトラス描画時は2パスステンシル処理を使用(WebGL版と同じ)
|
|
146
|
+
if (use_atlas_target && use_stencil_pipeline) {
|
|
147
|
+
// === Pass 1: ステンシル書き込み(カラー書き込みなし) ===
|
|
148
|
+
const stencilWritePipeline = pipeline_manager.getPipeline("stencil_write");
|
|
149
|
+
if (stencilWritePipeline) {
|
|
150
|
+
const stencilDynamic = createStencilDynamic();
|
|
151
|
+
if (stencilDynamic) {
|
|
152
|
+
render_pass_encoder.setPipeline(stencilWritePipeline);
|
|
153
|
+
render_pass_encoder.setStencilReference(0);
|
|
154
|
+
render_pass_encoder.setVertexBuffer(0, vertexBuffer);
|
|
155
|
+
render_pass_encoder.setBindGroup(0, stencilDynamic.bindGroup, [stencilDynamic.offset]);
|
|
156
|
+
render_pass_encoder.draw(mesh.indexCount, 1, 0, 0);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// === Pass 2: ビットマップ描画(NOT_EQUAL 0) ===
|
|
160
|
+
const bitmapPipeline = pipeline_manager.getPipeline("bitmap_fill_stencil");
|
|
161
|
+
if (bitmapPipeline) {
|
|
162
|
+
render_pass_encoder.setPipeline(bitmapPipeline);
|
|
163
|
+
render_pass_encoder.setStencilReference(0);
|
|
164
|
+
render_pass_encoder.setBindGroup(0, bindGroup);
|
|
165
|
+
render_pass_encoder.draw(mesh.indexCount, 1, 0, 0);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
// パイプラインを取得
|
|
170
|
+
// - アトラス用: "bitmap_fill" (rgba8unorm, ステンシルなし)
|
|
171
|
+
// - キャンバス用: "bitmap_fill_bgra" (bgra8unorm, ステンシルなし)
|
|
172
|
+
// - マスク描画モード時: 何もしない(clip()でステンシル書き込み)
|
|
173
|
+
// - マスクテストモード時: "bitmap_fill_bgra_stencil" (bgra8unorm, ステンシルテストあり)
|
|
174
|
+
let pipelineName;
|
|
175
|
+
if (use_atlas_target) {
|
|
176
|
+
pipelineName = "bitmap_fill";
|
|
177
|
+
}
|
|
178
|
+
else if (use_stencil_pipeline) {
|
|
179
|
+
if ($isMaskDrawing()) {
|
|
180
|
+
// マスク描画モード: ステンシルへの書き込みはclip()で行うため、ここでは何もしない
|
|
181
|
+
// clip()がINVERTでステンシルを書き込み、重複書き込みによるINVERT打ち消しを防止
|
|
182
|
+
// ビットマップテクスチャは解放してnullを返す
|
|
183
|
+
$releaseFillTexture(bitmapTexture);
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
// マスクテストモード: ステンシル値をテストしてビットマップを描画
|
|
187
|
+
pipelineName = "bitmap_fill_bgra_stencil";
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
pipelineName = "bitmap_fill_bgra";
|
|
191
|
+
}
|
|
192
|
+
const pipeline = pipeline_manager.getPipeline(pipelineName);
|
|
193
|
+
if (!pipeline) {
|
|
194
|
+
console.error(`[WebGPU] ${pipelineName} pipeline not found`);
|
|
195
|
+
$releaseFillTexture(bitmapTexture);
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
// 描画
|
|
199
|
+
render_pass_encoder.setPipeline(pipeline);
|
|
200
|
+
render_pass_encoder.setVertexBuffer(0, vertexBuffer);
|
|
201
|
+
render_pass_encoder.setBindGroup(0, bindGroup);
|
|
202
|
+
// マスクテストモード時はステンシル参照値を設定
|
|
203
|
+
if (use_stencil_pipeline && !use_atlas_target && !$isMaskDrawing()) {
|
|
204
|
+
render_pass_encoder.setStencilReference($getMaskStencilReference());
|
|
205
|
+
}
|
|
206
|
+
render_pass_encoder.draw(mesh.indexCount, 1, 0, 0);
|
|
207
|
+
}
|
|
208
|
+
// ビットマップテクスチャを返す(Context.tsでフレーム終了時に解放)
|
|
209
|
+
return bitmapTexture;
|
|
210
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { IPath } from "../../interface/IPath";
|
|
2
|
+
import type { BufferManager } from "../../BufferManager";
|
|
3
|
+
import type { PipelineManager } from "../../Shader/PipelineManager";
|
|
4
|
+
export declare const execute: (device: GPUDevice, render_pass_encoder: GPURenderPassEncoder, buffer_manager: BufferManager, pipeline_manager: PipelineManager, vertices: IPath[], thickness: number, context_matrix: Float32Array, stroke_style: Float32Array, pixels: Uint8Array, bitmap_matrix: Float32Array, width: number, height: number, repeat: boolean, smooth: boolean, viewport_width: number, viewport_height: number, use_atlas_target: boolean, use_stencil_pipeline: boolean) => GPUTexture | null;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { execute as meshBitmapStrokeGenerateUseCase } from "../../Mesh/usecase/MeshBitmapStrokeGenerateUseCase";
|
|
2
|
+
import { execute as contextComputeBitmapMatrixService } from "../service/ContextComputeBitmapMatrixService";
|
|
3
|
+
import { $acquireFillTexture, $releaseFillTexture } from "../../FillTexturePool";
|
|
4
|
+
const $bitmapSamplerCache = new Map();
|
|
5
|
+
const $uniformData32 = new Float32Array(32);
|
|
6
|
+
const $entries3 = [
|
|
7
|
+
{ "binding": 0, "resource": { "buffer": null } },
|
|
8
|
+
{ "binding": 1, "resource": null },
|
|
9
|
+
{ "binding": 2, "resource": null }
|
|
10
|
+
];
|
|
11
|
+
export const execute = (device, render_pass_encoder, buffer_manager, pipeline_manager, vertices, thickness, context_matrix, stroke_style, pixels, bitmap_matrix, width, height, repeat, smooth, viewport_width, viewport_height, use_atlas_target, use_stencil_pipeline) => {
|
|
12
|
+
// ビットマップストローク用メッシュを生成(4 floats/vertex: position + bezier)
|
|
13
|
+
const mesh = meshBitmapStrokeGenerateUseCase(vertices, thickness);
|
|
14
|
+
if (mesh.indexCount === 0) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
// 頂点バッファを取得(プールから再利用)
|
|
18
|
+
const vertexBuffer = buffer_manager.acquireVertexBuffer(mesh.buffer.byteLength, mesh.buffer);
|
|
19
|
+
// ビットマップテクスチャをプールから取得
|
|
20
|
+
const bitmapTexture = $acquireFillTexture(device, width, height);
|
|
21
|
+
// ピクセルデータをテクスチャに転送
|
|
22
|
+
device.queue.writeTexture({ "texture": bitmapTexture }, pixels.buffer, { "bytesPerRow": width * 4, "rowsPerImage": height, "offset": pixels.byteOffset }, { width, height });
|
|
23
|
+
// ビットマップ変換行列を計算(コンテキスト行列と合成して逆行列)
|
|
24
|
+
const computedBitmapMatrix = contextComputeBitmapMatrixService(bitmap_matrix, context_matrix);
|
|
25
|
+
// 色とmatrix
|
|
26
|
+
const red = 1;
|
|
27
|
+
const green = 1;
|
|
28
|
+
const blue = 1;
|
|
29
|
+
const alpha = stroke_style[3] > 0 ? stroke_style[3] : 1;
|
|
30
|
+
const a = context_matrix[0];
|
|
31
|
+
const b = context_matrix[1];
|
|
32
|
+
const c = context_matrix[3];
|
|
33
|
+
const d = context_matrix[4];
|
|
34
|
+
const tx = context_matrix[6];
|
|
35
|
+
const ty = context_matrix[7];
|
|
36
|
+
// Uniformバッファを作成(BitmapUniforms: 32 floats = 128 bytes)
|
|
37
|
+
$uniformData32[0] = computedBitmapMatrix[0]; // col0.x = a
|
|
38
|
+
$uniformData32[1] = computedBitmapMatrix[1]; // col0.y = c
|
|
39
|
+
$uniformData32[2] = computedBitmapMatrix[2]; // col0.z = 0
|
|
40
|
+
$uniformData32[3] = 0; // padding
|
|
41
|
+
$uniformData32[4] = computedBitmapMatrix[3]; // col1.x = b
|
|
42
|
+
$uniformData32[5] = computedBitmapMatrix[4]; // col1.y = d
|
|
43
|
+
$uniformData32[6] = computedBitmapMatrix[5]; // col1.z = 0
|
|
44
|
+
$uniformData32[7] = 0; // padding
|
|
45
|
+
$uniformData32[8] = computedBitmapMatrix[6]; // col2.x = tx
|
|
46
|
+
$uniformData32[9] = computedBitmapMatrix[7]; // col2.y = ty
|
|
47
|
+
$uniformData32[10] = computedBitmapMatrix[8]; // col2.z = 1
|
|
48
|
+
$uniformData32[11] = 0; // padding
|
|
49
|
+
// ビットマップパラメータ
|
|
50
|
+
$uniformData32[12] = width;
|
|
51
|
+
$uniformData32[13] = height;
|
|
52
|
+
$uniformData32[14] = repeat ? 1.0 : 0.0;
|
|
53
|
+
$uniformData32[15] = 0; // padding
|
|
54
|
+
// color
|
|
55
|
+
$uniformData32[16] = red;
|
|
56
|
+
$uniformData32[17] = green;
|
|
57
|
+
$uniformData32[18] = blue;
|
|
58
|
+
$uniformData32[19] = alpha;
|
|
59
|
+
// contextMatrix(viewport正規化済み)
|
|
60
|
+
$uniformData32[20] = a / viewport_width;
|
|
61
|
+
$uniformData32[21] = b / viewport_height;
|
|
62
|
+
$uniformData32[22] = 0;
|
|
63
|
+
$uniformData32[23] = 0;
|
|
64
|
+
$uniformData32[24] = c / viewport_width;
|
|
65
|
+
$uniformData32[25] = d / viewport_height;
|
|
66
|
+
$uniformData32[26] = 0;
|
|
67
|
+
$uniformData32[27] = 0;
|
|
68
|
+
$uniformData32[28] = tx / viewport_width;
|
|
69
|
+
$uniformData32[29] = ty / viewport_height;
|
|
70
|
+
$uniformData32[30] = 1;
|
|
71
|
+
$uniformData32[31] = 0;
|
|
72
|
+
const uniformBuffer = buffer_manager.acquireAndWriteUniformBuffer($uniformData32);
|
|
73
|
+
// サンプラーを取得(キャッシュ済み)
|
|
74
|
+
const samplerKey = `bitmap_${smooth ? "s" : "n"}_${repeat ? "r" : "c"}`;
|
|
75
|
+
let sampler = $bitmapSamplerCache.get(samplerKey);
|
|
76
|
+
if (!sampler) {
|
|
77
|
+
sampler = device.createSampler({
|
|
78
|
+
"magFilter": smooth ? "linear" : "nearest",
|
|
79
|
+
"minFilter": smooth ? "linear" : "nearest",
|
|
80
|
+
"addressModeU": repeat ? "repeat" : "clamp-to-edge",
|
|
81
|
+
"addressModeV": repeat ? "repeat" : "clamp-to-edge"
|
|
82
|
+
});
|
|
83
|
+
$bitmapSamplerCache.set(samplerKey, sampler);
|
|
84
|
+
}
|
|
85
|
+
// バインドグループを作成
|
|
86
|
+
const bindGroupLayout = pipeline_manager.getBindGroupLayout("bitmap_fill");
|
|
87
|
+
if (!bindGroupLayout) {
|
|
88
|
+
console.error("[WebGPU] bitmap_fill bind group layout not found");
|
|
89
|
+
$releaseFillTexture(bitmapTexture);
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
$entries3[0].resource.buffer = uniformBuffer;
|
|
93
|
+
$entries3[1].resource = sampler;
|
|
94
|
+
$entries3[2].resource = bitmapTexture.createView();
|
|
95
|
+
const bindGroup = device.createBindGroup({
|
|
96
|
+
"layout": bindGroupLayout,
|
|
97
|
+
"entries": $entries3
|
|
98
|
+
});
|
|
99
|
+
// パイプラインを取得
|
|
100
|
+
// ストロークのメッシュは各セグメントが独立した凸多角形のため、
|
|
101
|
+
// フィルのような2パスステンシル描画は不要で、直接描画で正しく描画される。
|
|
102
|
+
// ステンシル付きレンダーパスの場合はステンシル互換パイプライン(compare: always)を使用する。
|
|
103
|
+
const pipelineName = use_stencil_pipeline
|
|
104
|
+
? use_atlas_target ? "bitmap_stroke_atlas" : "bitmap_stroke_bgra"
|
|
105
|
+
: use_atlas_target ? "bitmap_fill" : "bitmap_fill_bgra";
|
|
106
|
+
const pipeline = pipeline_manager.getPipeline(pipelineName);
|
|
107
|
+
if (!pipeline) {
|
|
108
|
+
console.error(`[WebGPU] ${pipelineName} pipeline not found`);
|
|
109
|
+
$releaseFillTexture(bitmapTexture);
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
// 描画
|
|
113
|
+
render_pass_encoder.setPipeline(pipeline);
|
|
114
|
+
render_pass_encoder.setVertexBuffer(0, vertexBuffer);
|
|
115
|
+
render_pass_encoder.setBindGroup(0, bindGroup);
|
|
116
|
+
render_pass_encoder.draw(mesh.indexCount, 1, 0, 0);
|
|
117
|
+
// ビットマップテクスチャを返す(Context.tsでフレーム終了時に解放)
|
|
118
|
+
return bitmapTexture;
|
|
119
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IPath } from "../../interface/IPath";
|
|
2
|
+
import type { IAttachmentObject } from "../../interface/IAttachmentObject";
|
|
3
|
+
import type { BufferManager } from "../../BufferManager";
|
|
4
|
+
import type { PipelineManager } from "../../Shader/PipelineManager";
|
|
5
|
+
export declare const execute: (device: GPUDevice, render_pass_encoder: GPURenderPassEncoder, buffer_manager: BufferManager, pipeline_manager: PipelineManager, current_attachment: IAttachmentObject, path_vertices: IPath[], context_matrix: Float32Array, fill_style: Float32Array, global_alpha: number, is_main_attachment?: boolean) => void;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { execute as meshFillGenerateUseCase } from "../../Mesh/usecase/MeshFillGenerateUseCase";
|
|
2
|
+
import { execute as maskUnionMaskService } from "../../Mask/service/MaskUnionMaskService";
|
|
3
|
+
import { $clipLevels } from "../../Mask";
|
|
4
|
+
const $clipUniform16 = new Float32Array(16);
|
|
5
|
+
export const execute = (device, render_pass_encoder, buffer_manager, pipeline_manager, current_attachment, path_vertices, context_matrix, fill_style, global_alpha, is_main_attachment = false) => {
|
|
6
|
+
// クリップ境界を取得
|
|
7
|
+
const clipLevel = current_attachment.clipLevel;
|
|
8
|
+
// メッシュを生成
|
|
9
|
+
const viewportWidth = current_attachment.width;
|
|
10
|
+
const viewportHeight = current_attachment.height;
|
|
11
|
+
const red = fill_style[0];
|
|
12
|
+
const green = fill_style[1];
|
|
13
|
+
const blue = fill_style[2];
|
|
14
|
+
const alpha = fill_style[3] * global_alpha;
|
|
15
|
+
if (path_vertices.length === 0) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const mesh = meshFillGenerateUseCase(path_vertices);
|
|
19
|
+
if (mesh.indexCount === 0) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// 頂点バッファを取得(プールから再利用)
|
|
23
|
+
const vertexBuffer = buffer_manager.acquireVertexBuffer(mesh.buffer.byteLength, mesh.buffer);
|
|
24
|
+
// Uniform bufferにcolor/matrixを書き込み
|
|
25
|
+
const a = context_matrix[0];
|
|
26
|
+
const b = context_matrix[1];
|
|
27
|
+
const c = context_matrix[3];
|
|
28
|
+
const d = context_matrix[4];
|
|
29
|
+
const tx = context_matrix[6];
|
|
30
|
+
const ty = context_matrix[7];
|
|
31
|
+
$clipUniform16[0] = red;
|
|
32
|
+
$clipUniform16[1] = green;
|
|
33
|
+
$clipUniform16[2] = blue;
|
|
34
|
+
$clipUniform16[3] = alpha;
|
|
35
|
+
$clipUniform16[4] = a / viewportWidth;
|
|
36
|
+
$clipUniform16[5] = b / viewportHeight;
|
|
37
|
+
$clipUniform16[6] = 0;
|
|
38
|
+
$clipUniform16[7] = 0;
|
|
39
|
+
$clipUniform16[8] = c / viewportWidth;
|
|
40
|
+
$clipUniform16[9] = d / viewportHeight;
|
|
41
|
+
$clipUniform16[10] = 0;
|
|
42
|
+
$clipUniform16[11] = 0;
|
|
43
|
+
$clipUniform16[12] = tx / viewportWidth;
|
|
44
|
+
$clipUniform16[13] = ty / viewportHeight;
|
|
45
|
+
$clipUniform16[14] = 1;
|
|
46
|
+
$clipUniform16[15] = 0;
|
|
47
|
+
// Dynamic Uniform Bufferにデータを書き込み
|
|
48
|
+
const uniformOffset = buffer_manager.dynamicUniform.allocate($clipUniform16);
|
|
49
|
+
// 現在のマスクレベルを取得(WebGL版: $clipLevels.get(clipLevel))
|
|
50
|
+
// レベルは1から始まり、各パスごとにインクリメントされる
|
|
51
|
+
let level = $clipLevels.get(clipLevel) ?? clipLevel;
|
|
52
|
+
// ステンシルパイプラインを取得
|
|
53
|
+
// メインアタッチメント: レベルに対応するパイプライン(stencilWriteMask = 1 << (level - 1))
|
|
54
|
+
// アトラス: 通常のクリップパイプライン
|
|
55
|
+
let pipelineName;
|
|
56
|
+
if (is_main_attachment) {
|
|
57
|
+
// レベルを1-8の範囲にクランプ(8レベルまでサポート)
|
|
58
|
+
const clampedLevel = Math.min(8, Math.max(1, level));
|
|
59
|
+
pipelineName = `clip_write_main_${clampedLevel}`;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
pipelineName = "clip_write";
|
|
63
|
+
}
|
|
64
|
+
const pipeline = pipeline_manager.getPipeline(pipelineName);
|
|
65
|
+
if (!pipeline) {
|
|
66
|
+
console.error(`[WebGPU] ${pipelineName} pipeline not found`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// Dynamic BindGroupを取得
|
|
70
|
+
const layout = pipeline_manager.getBindGroupLayout("fill_dynamic");
|
|
71
|
+
if (!layout) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const bindGroup = device.createBindGroup({
|
|
75
|
+
"layout": layout,
|
|
76
|
+
"entries": [{
|
|
77
|
+
"binding": 0,
|
|
78
|
+
"resource": {
|
|
79
|
+
"buffer": buffer_manager.dynamicUniform.getBuffer(),
|
|
80
|
+
"size": 256
|
|
81
|
+
}
|
|
82
|
+
}]
|
|
83
|
+
});
|
|
84
|
+
// INVERT操作でマスク形状を描画
|
|
85
|
+
// カバーされたピクセルのステンシル値が反転される(ビット単位)
|
|
86
|
+
// 奇数回カバーされたピクセルのみがマスク領域となる
|
|
87
|
+
render_pass_encoder.setPipeline(pipeline);
|
|
88
|
+
render_pass_encoder.setStencilReference(0); // INVERT操作では参照値は使用されないが、設定は必要
|
|
89
|
+
render_pass_encoder.setVertexBuffer(0, vertexBuffer);
|
|
90
|
+
render_pass_encoder.setBindGroup(0, bindGroup, [uniformOffset]);
|
|
91
|
+
render_pass_encoder.draw(mesh.indexCount, 1, 0, 0);
|
|
92
|
+
// レベルをインクリメント(WebGL版: ++level)
|
|
93
|
+
level++;
|
|
94
|
+
// レベルが8を超えた場合、ステンシルビットをマージして再利用
|
|
95
|
+
// WebGL版: if (level > 7) { maskUnionMaskService(); level = clipLevel + 1; }
|
|
96
|
+
if (level > 8) {
|
|
97
|
+
maskUnionMaskService(device, render_pass_encoder, buffer_manager, pipeline_manager, current_attachment);
|
|
98
|
+
level = clipLevel + 1;
|
|
99
|
+
}
|
|
100
|
+
$clipLevels.set(clipLevel, level);
|
|
101
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IAttachmentObject } from "../../interface/IAttachmentObject";
|
|
2
|
+
import type { IBlendMode } from "../../interface/IBlendMode";
|
|
3
|
+
import type { ILocalFilterConfig } from "../../interface/ILocalFilterConfig";
|
|
4
|
+
import type { BufferManager } from "../../BufferManager";
|
|
5
|
+
export declare const execute: (tempAttachment: IAttachmentObject, mainAttachment: IAttachmentObject, _tempName: string, blendMode: IBlendMode, matrix: Float32Array, colorTransform: Float32Array | null, useFilter: boolean, filterBounds: Float32Array | null, params: Float32Array | null, uniqueKey: string, filterKey: string, _contentWidth: number, _contentHeight: number, config: ILocalFilterConfig, bufferManager: BufferManager) => void;
|