@next2d/webgpu 3.0.4 → 3.1.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/package.json +3 -3
- package/src/AtlasManager.d.ts +75 -6
- package/src/AtlasManager.js +106 -30
- package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.d.ts +2 -2
- package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.js +3 -3
- package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.d.ts +4 -4
- package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.js +4 -4
- package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.d.ts +5 -5
- package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.js +6 -6
- package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.d.ts +6 -6
- package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.js +7 -7
- package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.d.ts +6 -6
- package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.js +9 -9
- package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.d.ts +6 -6
- package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.js +10 -10
- package/src/AttachmentManager/service/AttachmentManagerGetTextureService.d.ts +7 -7
- package/src/AttachmentManager/service/AttachmentManagerGetTextureService.js +10 -10
- package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.d.ts +3 -3
- package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.js +7 -7
- package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.d.ts +10 -10
- package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.js +16 -16
- package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.d.ts +6 -6
- package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.js +10 -10
- package/src/AttachmentManager.d.ts +28 -6
- package/src/AttachmentManager.js +28 -23
- package/src/BezierConverter/BezierConverter.d.ts +9 -3
- package/src/BezierConverter/BezierConverter.js +5 -3
- package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.d.ts +2 -13
- package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.js +13 -25
- package/src/Blend/BlendInstancedManager.d.ts +19 -15
- package/src/Blend/BlendInstancedManager.js +35 -22
- package/src/Blend/usecase/BlendApplyComplexBlendUseCase.d.ts +9 -2
- package/src/Blend/usecase/BlendApplyComplexBlendUseCase.js +28 -17
- package/src/Blend.d.ts +20 -2
- package/src/Blend.js +20 -4
- package/src/BufferManager/service/BufferManagerReleaseUniformBufferService.js +2 -2
- package/src/BufferManager/service/BufferManagerReleaseVertexBufferService.js +2 -2
- package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.d.ts +1 -0
- package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.js +1 -0
- package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.d.ts +1 -0
- package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.js +1 -0
- package/src/BufferManager.d.ts +108 -43
- package/src/BufferManager.js +113 -153
- package/src/Context/service/ContextComputeBitmapMatrixService.d.ts +7 -0
- package/src/Context/service/ContextComputeBitmapMatrixService.js +7 -0
- package/src/Context/service/ContextComputeGradientMatrixService.d.ts +9 -1
- package/src/Context/service/ContextComputeGradientMatrixService.js +15 -7
- package/src/Context/service/ContextFillSimpleService.d.ts +14 -0
- package/src/Context/service/ContextFillSimpleService.js +14 -0
- package/src/Context/service/ContextFillWithStencilMainService.d.ts +11 -0
- package/src/Context/service/ContextFillWithStencilMainService.js +11 -0
- package/src/Context/service/ContextFillWithStencilService.d.ts +11 -0
- package/src/Context/service/ContextFillWithStencilService.js +11 -0
- package/src/Context/usecase/ContextApplyFilterUseCase.d.ts +17 -0
- package/src/Context/usecase/ContextApplyFilterUseCase.js +201 -62
- package/src/Context/usecase/ContextBitmapFillUseCase.d.ts +23 -0
- package/src/Context/usecase/ContextBitmapFillUseCase.js +47 -0
- package/src/Context/usecase/ContextBitmapStrokeUseCase.d.ts +23 -0
- package/src/Context/usecase/ContextBitmapStrokeUseCase.js +35 -0
- package/src/Context/usecase/ContextClipUseCase.d.ts +15 -0
- package/src/Context/usecase/ContextClipUseCase.js +19 -0
- package/src/Context/usecase/ContextContainerEndLayerUseCase.d.ts +21 -1
- package/src/Context/usecase/ContextContainerEndLayerUseCase.js +195 -104
- package/src/Context/usecase/ContextDrawArraysInstancedUseCase.d.ts +13 -0
- package/src/Context/usecase/ContextDrawArraysInstancedUseCase.js +41 -20
- package/src/Context/usecase/ContextDrawIndirectUseCase.d.ts +16 -1
- package/src/Context/usecase/ContextDrawIndirectUseCase.js +53 -30
- package/src/Context/usecase/ContextGradientFillUseCase.d.ts +23 -0
- package/src/Context/usecase/ContextGradientFillUseCase.js +47 -0
- package/src/Context/usecase/ContextGradientStrokeUseCase.d.ts +23 -0
- package/src/Context/usecase/ContextGradientStrokeUseCase.js +35 -0
- package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.d.ts +13 -1
- package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.js +126 -60
- package/src/Context.d.ts +445 -63
- package/src/Context.js +566 -144
- package/src/FillTexturePool.d.ts +39 -0
- package/src/FillTexturePool.js +70 -7
- package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.d.ts +21 -2
- package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.js +33 -26
- package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.d.ts +5 -5
- package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.js +81 -64
- package/src/Filter/BlurFilterUseCase.d.ts +15 -11
- package/src/Filter/BlurFilterUseCase.js +22 -17
- package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.d.ts +2 -2
- package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.js +5 -5
- package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.d.ts +15 -1
- package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.js +23 -17
- package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.d.ts +20 -1
- package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.js +37 -26
- package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.d.ts +7 -7
- package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.js +19 -31
- package/src/Filter/FilterGradientLUTCache.js +2 -0
- package/src/Filter/FilterUtil.d.ts +23 -0
- package/src/Filter/FilterUtil.js +33 -0
- package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.d.ts +5 -5
- package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.js +12 -21
- package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.d.ts +6 -6
- package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.js +16 -19
- package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.d.ts +5 -5
- package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.js +13 -16
- package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.d.ts +13 -1
- package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.js +30 -3
- package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.d.ts +11 -1
- package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.js +36 -6
- package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.d.ts +10 -10
- package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.js +15 -15
- package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.d.ts +4 -4
- package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.js +5 -5
- package/src/FrameBufferManager.d.ts +95 -3
- package/src/FrameBufferManager.js +97 -8
- package/src/Gradient/GradientLUTCache.d.ts +36 -4
- package/src/Gradient/GradientLUTCache.js +61 -5
- package/src/Gradient/GradientLUTGenerator.d.ts +26 -14
- package/src/Gradient/GradientLUTGenerator.js +74 -43
- package/src/Mask/service/MaskUnionMaskService.d.ts +16 -1
- package/src/Mask/service/MaskUnionMaskService.js +45 -31
- package/src/Mask.d.ts +57 -3
- package/src/Mask.js +75 -11
- package/src/Mesh/service/MeshFillGenerateService.d.ts +4 -4
- package/src/Mesh/service/MeshFillGenerateService.js +4 -4
- package/src/Mesh/service/MeshStrokeFillGenerateService.d.ts +4 -4
- package/src/Mesh/service/MeshStrokeFillGenerateService.js +4 -4
- package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.d.ts +3 -3
- package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.js +10 -3
- package/src/Mesh/usecase/MeshFillGenerateUseCase.d.ts +2 -2
- package/src/Mesh/usecase/MeshFillGenerateUseCase.js +9 -2
- package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.d.ts +3 -3
- package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.js +10 -3
- package/src/Mesh/usecase/MeshStrokeGenerateUseCase.d.ts +8 -14
- package/src/Mesh/usecase/MeshStrokeGenerateUseCase.js +214 -129
- package/src/PathCommand.d.ts +24 -23
- package/src/PathCommand.js +25 -79
- package/src/Shader/PipelineManager.d.ts +223 -6
- package/src/Shader/PipelineManager.js +308 -66
- package/src/Shader/ShaderInstancedManager.d.ts +17 -0
- package/src/Shader/ShaderInstancedManager.js +17 -0
- package/src/Shader/ShaderSource.d.ts +317 -12
- package/src/Shader/ShaderSource.js +328 -39
- package/src/Shader/wgsl/common/SharedWgsl.d.ts +28 -1
- package/src/Shader/wgsl/common/SharedWgsl.js +28 -9
- package/src/Shader/wgsl/fragment/BasicFragment.d.ts +14 -0
- package/src/Shader/wgsl/fragment/BasicFragment.js +14 -0
- package/src/Shader/wgsl/fragment/BitmapFragment.d.ts +7 -0
- package/src/Shader/wgsl/fragment/BitmapFragment.js +7 -0
- package/src/Shader/wgsl/fragment/EffectFragment.d.ts +42 -0
- package/src/Shader/wgsl/fragment/EffectFragment.js +42 -0
- package/src/Shader/wgsl/fragment/FillFragment.d.ts +7 -0
- package/src/Shader/wgsl/fragment/FillFragment.js +7 -0
- package/src/Shader/wgsl/fragment/FilterFragment.d.ts +70 -0
- package/src/Shader/wgsl/fragment/FilterFragment.js +70 -0
- package/src/Shader/wgsl/fragment/GradientFragment.d.ts +21 -0
- package/src/Shader/wgsl/fragment/GradientFragment.js +43 -8
- package/src/Shader/wgsl/fragment/InstancedFragment.d.ts +7 -0
- package/src/Shader/wgsl/fragment/InstancedFragment.js +7 -0
- package/src/Shader/wgsl/fragment/MaskFragment.d.ts +7 -0
- package/src/Shader/wgsl/fragment/MaskFragment.js +7 -0
- package/src/Shader/wgsl/fragment/StencilFragment.d.ts +14 -0
- package/src/Shader/wgsl/fragment/StencilFragment.js +14 -0
- package/src/Shader/wgsl/vertex/BasicVertex.d.ts +7 -0
- package/src/Shader/wgsl/vertex/BasicVertex.js +7 -0
- package/src/Shader/wgsl/vertex/BitmapVertex.d.ts +7 -0
- package/src/Shader/wgsl/vertex/BitmapVertex.js +7 -0
- package/src/Shader/wgsl/vertex/FillVertex.d.ts +7 -0
- package/src/Shader/wgsl/vertex/FillVertex.js +7 -0
- package/src/Shader/wgsl/vertex/FilterVertex.d.ts +77 -1
- package/src/Shader/wgsl/vertex/FilterVertex.js +135 -42
- package/src/Shader/wgsl/vertex/GradientVertex.d.ts +7 -0
- package/src/Shader/wgsl/vertex/GradientVertex.js +7 -0
- package/src/Shader/wgsl/vertex/InstancedVertex.d.ts +7 -0
- package/src/Shader/wgsl/vertex/InstancedVertex.js +7 -0
- package/src/Shader/wgsl/vertex/MaskVertex.d.ts +7 -0
- package/src/Shader/wgsl/vertex/MaskVertex.js +7 -0
- package/src/Shader/wgsl/vertex/StencilVertex.d.ts +14 -0
- package/src/Shader/wgsl/vertex/StencilVertex.js +14 -0
- package/src/TextureManager/service/TextureManagerInitializeSamplersService.d.ts +2 -2
- package/src/TextureManager/service/TextureManagerInitializeSamplersService.js +2 -2
- package/src/TextureManager.d.ts +36 -5
- package/src/TextureManager.js +36 -24
- package/src/TexturePool/service/TexturePoolCleanupService.d.ts +4 -4
- package/src/TexturePool/service/TexturePoolCleanupService.js +6 -6
- package/src/TexturePool/service/TexturePoolReleaseService.d.ts +4 -4
- package/src/TexturePool/service/TexturePoolReleaseService.js +5 -5
- package/src/TexturePool/usecase/TexturePoolAcquireUseCase.d.ts +10 -10
- package/src/TexturePool/usecase/TexturePoolAcquireUseCase.js +19 -18
- package/src/TexturePool.d.ts +36 -35
- package/src/TexturePool.js +44 -65
- package/src/WebGPUUtil.d.ts +79 -34
- package/src/WebGPUUtil.js +79 -36
- package/src/interface/IAttachmentObject.d.ts +36 -0
- package/src/interface/IBlendMode.d.ts +7 -0
- package/src/interface/IBlendState.d.ts +8 -0
- package/src/interface/IBounds.d.ts +23 -0
- package/src/interface/IColorBufferObject.d.ts +28 -0
- package/src/interface/IComplexBlendItem.d.ts +48 -0
- package/src/interface/IFilterConfig.d.ts +28 -2
- package/src/interface/IGradientStop.d.ts +20 -0
- package/src/interface/ILocalFilterConfig.d.ts +32 -2
- package/src/interface/IMeshResult.d.ts +8 -0
- package/src/interface/IPoint.d.ts +12 -0
- package/src/interface/IPooledTexture.d.ts +24 -0
- package/src/interface/IQuadraticSegment.d.ts +8 -0
- package/src/interface/IStencilBufferObject.d.ts +28 -0
- package/src/interface/IStorageBufferConfig.d.ts +8 -1
- package/src/interface/ITextureObject.d.ts +28 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.d.ts +0 -5
- package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.js +0 -42
- package/src/Blend/service/BlendAddService.d.ts +0 -1
- package/src/Blend/service/BlendAddService.js +0 -8
- package/src/Blend/service/BlendAlphaService.d.ts +0 -1
- package/src/Blend/service/BlendAlphaService.js +0 -8
- package/src/Blend/service/BlendEraseService.d.ts +0 -1
- package/src/Blend/service/BlendEraseService.js +0 -8
- package/src/Blend/service/BlendGetStateService.d.ts +0 -12
- package/src/Blend/service/BlendGetStateService.js +0 -13
- package/src/Blend/service/BlendOneZeroService.d.ts +0 -1
- package/src/Blend/service/BlendOneZeroService.js +0 -8
- package/src/Blend/service/BlendResetService.d.ts +0 -1
- package/src/Blend/service/BlendResetService.js +0 -8
- package/src/Blend/service/BlendScreenService.d.ts +0 -1
- package/src/Blend/service/BlendScreenService.js +0 -8
- package/src/Blend/service/BlendSetModeService.d.ts +0 -2
- package/src/Blend/service/BlendSetModeService.js +0 -4
- package/src/Blend/usecase/BlendOperationUseCase.d.ts +0 -11
- package/src/Blend/usecase/BlendOperationUseCase.js +0 -31
- package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.d.ts +0 -9
- package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.js +0 -15
- package/src/Compute/ComputePipelineManager.d.ts +0 -61
- package/src/Compute/ComputePipelineManager.js +0 -313
- package/src/Compute/service/ComputeExecuteBlurService.d.ts +0 -21
- package/src/Compute/service/ComputeExecuteBlurService.js +0 -81
- package/src/Filter/BevelFilterShader.d.ts +0 -2
- package/src/Filter/BevelFilterShader.js +0 -107
- package/src/Filter/BitmapFilterShader.d.ts +0 -2
- package/src/Filter/BitmapFilterShader.js +0 -207
- package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.d.ts +0 -40
- package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.js +0 -51
- package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.d.ts +0 -25
- package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.js +0 -180
- package/src/Filter/BlurFilterShader.d.ts +0 -5
- package/src/Filter/BlurFilterShader.js +0 -109
- package/src/Filter/ColorMatrixFilterShader.d.ts +0 -4
- package/src/Filter/ColorMatrixFilterShader.js +0 -51
- package/src/Filter/ConvolutionFilterShader.d.ts +0 -2
- package/src/Filter/ConvolutionFilterShader.js +0 -115
- package/src/Filter/DisplacementMapFilterShader.d.ts +0 -2
- package/src/Filter/DisplacementMapFilterShader.js +0 -114
- package/src/Filter/DropShadowFilterShader.d.ts +0 -4
- package/src/Filter/DropShadowFilterShader.js +0 -93
- package/src/Filter/GlowFilterShader.d.ts +0 -4
- package/src/Filter/GlowFilterShader.js +0 -66
- package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.d.ts +0 -11
- package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.js +0 -19
- package/src/Mask/usecase/MaskBindUseCase.d.ts +0 -10
- package/src/Mask/usecase/MaskBindUseCase.js +0 -20
- package/src/Mesh/service/MeshLerpService.d.ts +0 -13
- package/src/Mesh/service/MeshLerpService.js +0 -17
- package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.d.ts +0 -14
- package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.js +0 -28
- package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.d.ts +0 -18
- package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.js +0 -54
- package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.d.ts +0 -11
- package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.js +0 -35
- package/src/SamplerCache/service/SamplerCacheGenerateKeyService.d.ts +0 -13
- package/src/SamplerCache/service/SamplerCacheGenerateKeyService.js +0 -15
- package/src/SamplerCache/service/SamplerCacheGetOrCreateService.d.ts +0 -15
- package/src/SamplerCache/service/SamplerCacheGetOrCreateService.js +0 -30
- package/src/SamplerCache.d.ts +0 -18
- package/src/SamplerCache.js +0 -61
- package/src/Shader/BlendModeShader.d.ts +0 -51
- package/src/Shader/BlendModeShader.js +0 -71
- package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.d.ts +0 -12
- package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.js +0 -28
- package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.d.ts +0 -13
- package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.js +0 -61
- package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.d.ts +0 -19
- package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.js +0 -37
- package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.d.ts +0 -11
- package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.js +0 -24
- package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.d.ts +0 -14
- package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.js +0 -24
- package/src/Shader/wgsl/fragment/BlendFragment.d.ts +0 -8
- package/src/Shader/wgsl/fragment/BlendFragment.js +0 -63
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.d.ts +0 -13
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.js +0 -30
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.d.ts +0 -15
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.js +0 -26
- package/src/TexturePool/service/TexturePoolEvictOldestService.d.ts +0 -11
- package/src/TexturePool/service/TexturePoolEvictOldestService.js +0 -24
- package/src/interface/ICachedBindGroup.d.ts +0 -8
- package/src/interface/ICachedBindGroup.js +0 -1
- package/src/interface/IGradientLUTData.d.ts +0 -8
- package/src/interface/IGradientLUTData.js +0 -1
- package/src/interface/IPooledBuffer.d.ts +0 -8
- package/src/interface/IPooledBuffer.js +0 -1
- package/src/interface/IRectangleInfo.d.ts +0 -13
- package/src/interface/IRectangleInfo.js +0 -1
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import { ShaderSource } from "./ShaderSource";
|
|
2
2
|
import { $samples } from "../WebGPUUtil";
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* @description 4フロートストライドの頂点バッファレイアウト(position: float32x2, uv: float32x2)
|
|
5
|
+
* Vertex buffer layout with 4-float stride (position: float32x2, uv: float32x2)
|
|
6
|
+
*/
|
|
7
|
+
const $VERTEX_BUFFER_LAYOUT_4F = {
|
|
4
8
|
"arrayStride": 4 * 4,
|
|
5
9
|
"attributes": [
|
|
6
10
|
{ "shaderLocation": 0, "offset": 0, "format": "float32x2" },
|
|
7
11
|
{ "shaderLocation": 1, "offset": 2 * 4, "format": "float32x2" }
|
|
8
12
|
]
|
|
9
13
|
};
|
|
10
|
-
|
|
14
|
+
/**
|
|
15
|
+
* @description プリマルチプライドアルファのブレンドステート
|
|
16
|
+
* Premultiplied alpha blend state for standard compositing
|
|
17
|
+
*/
|
|
18
|
+
const $BLEND_PREMULTIPLIED_ALPHA = {
|
|
11
19
|
"color": {
|
|
12
20
|
"srcFactor": "one",
|
|
13
21
|
"dstFactor": "one-minus-src-alpha",
|
|
@@ -19,56 +27,102 @@ const BLEND_PREMULTIPLIED_ALPHA = {
|
|
|
19
27
|
"operation": "add"
|
|
20
28
|
}
|
|
21
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* @description WebGPUレンダーパイプラインの管理クラス。パイプラインとバインドグループレイアウトの生成・キャッシュを行う
|
|
32
|
+
* Manager class for WebGPU render pipelines. Creates, caches, and manages pipelines and bind group layouts
|
|
33
|
+
*/
|
|
22
34
|
export class PipelineManager {
|
|
35
|
+
/**
|
|
36
|
+
* @description PipelineManagerのコンストラクタ。GPUデバイスとフォーマットを設定し、パイプラインを初期化する
|
|
37
|
+
* Construct PipelineManager. Sets GPU device, format, and initializes pipelines
|
|
38
|
+
* @param {GPUDevice} device - GPUデバイス / GPU device instance
|
|
39
|
+
* @param {GPUTextureFormat} format - テクスチャフォーマット / Texture format for output
|
|
40
|
+
*/
|
|
23
41
|
constructor(device, format) {
|
|
42
|
+
/**
|
|
43
|
+
* @description GPUデバイスの参照
|
|
44
|
+
* Reference to the GPU device
|
|
45
|
+
*/
|
|
24
46
|
Object.defineProperty(this, "device", {
|
|
25
47
|
enumerable: true,
|
|
26
48
|
configurable: true,
|
|
27
49
|
writable: true,
|
|
28
50
|
value: void 0
|
|
29
51
|
});
|
|
52
|
+
/**
|
|
53
|
+
* @description 出力テクスチャフォーマット
|
|
54
|
+
* Output texture format
|
|
55
|
+
*/
|
|
30
56
|
Object.defineProperty(this, "format", {
|
|
31
57
|
enumerable: true,
|
|
32
58
|
configurable: true,
|
|
33
59
|
writable: true,
|
|
34
60
|
value: void 0
|
|
35
61
|
});
|
|
62
|
+
/**
|
|
63
|
+
* @description パイプライン名からGPURenderPipelineへのキャッシュマップ
|
|
64
|
+
* Cache map from pipeline name to GPURenderPipeline
|
|
65
|
+
*/
|
|
36
66
|
Object.defineProperty(this, "pipelines", {
|
|
37
67
|
enumerable: true,
|
|
38
68
|
configurable: true,
|
|
39
69
|
writable: true,
|
|
40
70
|
value: void 0
|
|
41
71
|
});
|
|
72
|
+
/**
|
|
73
|
+
* @description バインドグループレイアウト名からGPUBindGroupLayoutへのキャッシュマップ
|
|
74
|
+
* Cache map from layout name to GPUBindGroupLayout
|
|
75
|
+
*/
|
|
42
76
|
Object.defineProperty(this, "bindGroupLayouts", {
|
|
43
77
|
enumerable: true,
|
|
44
78
|
configurable: true,
|
|
45
79
|
writable: true,
|
|
46
80
|
value: void 0
|
|
47
81
|
});
|
|
82
|
+
/**
|
|
83
|
+
* @description MSAAサンプル数
|
|
84
|
+
* MSAA sample count
|
|
85
|
+
*/
|
|
48
86
|
Object.defineProperty(this, "sampleCount", {
|
|
49
87
|
enumerable: true,
|
|
50
88
|
configurable: true,
|
|
51
89
|
writable: true,
|
|
52
90
|
value: void 0
|
|
53
91
|
});
|
|
92
|
+
/**
|
|
93
|
+
* @description シェーダーモジュールのキャッシュ
|
|
94
|
+
* Shader module cache by key
|
|
95
|
+
*/
|
|
54
96
|
Object.defineProperty(this, "shaderModuleCache", {
|
|
55
97
|
enumerable: true,
|
|
56
98
|
configurable: true,
|
|
57
99
|
writable: true,
|
|
58
100
|
value: new Map()
|
|
59
101
|
});
|
|
102
|
+
/**
|
|
103
|
+
* @description フィルター用バインドグループレイアウトキャッシュ(テクスチャ数別)
|
|
104
|
+
* Filter bind group layout cache indexed by texture count
|
|
105
|
+
*/
|
|
60
106
|
Object.defineProperty(this, "filterBindGroupLayouts", {
|
|
61
107
|
enumerable: true,
|
|
62
108
|
configurable: true,
|
|
63
109
|
writable: true,
|
|
64
110
|
value: new Map()
|
|
65
111
|
});
|
|
112
|
+
/**
|
|
113
|
+
* @description 初期化済みの遅延グループ名セット
|
|
114
|
+
* Set of initialized lazy group names
|
|
115
|
+
*/
|
|
66
116
|
Object.defineProperty(this, "lazyInitGroups", {
|
|
67
117
|
enumerable: true,
|
|
68
118
|
configurable: true,
|
|
69
119
|
writable: true,
|
|
70
120
|
value: new Set()
|
|
71
121
|
});
|
|
122
|
+
/**
|
|
123
|
+
* @description パイプライン名から遅延初期化グループ名への読み取り専用マップ
|
|
124
|
+
* Read-only map from pipeline name to lazy initialization group name
|
|
125
|
+
*/
|
|
72
126
|
Object.defineProperty(this, "lazyGroupMap", {
|
|
73
127
|
enumerable: true,
|
|
74
128
|
configurable: true,
|
|
@@ -76,7 +130,7 @@ export class PipelineManager {
|
|
|
76
130
|
value: new Map([
|
|
77
131
|
...Array.from({ "length": 16 }, (_, i) => [`blur_filter_${i + 1}`, "blur_filter"]),
|
|
78
132
|
["blur_filter", "blur_filter"],
|
|
79
|
-
["texture_copy", "texture_copy"], ["texture_copy_rgba8", "texture_copy"], ["color_transform", "texture_copy"], ["y_flip_color_transform", "texture_copy"],
|
|
133
|
+
["texture_copy", "texture_copy"], ["texture_copy_rgba8", "texture_copy"], ["texture_copy_rgba8_msaa", "texture_copy"], ["color_transform", "texture_copy"], ["y_flip_color_transform", "texture_copy"],
|
|
80
134
|
["texture_erase", "texture_copy"], ["blur_texture_copy", "texture_copy"],
|
|
81
135
|
["filter_blend", "texture_copy"], ["texture_copy_bgra", "texture_copy"],
|
|
82
136
|
["filter_output", "texture_copy"], ["filter_output_add", "texture_copy"],
|
|
@@ -85,6 +139,7 @@ export class PipelineManager {
|
|
|
85
139
|
["filter_output_msaa", "texture_copy"], ["filter_output_add_msaa", "texture_copy"],
|
|
86
140
|
["filter_output_screen_msaa", "texture_copy"], ["filter_output_alpha_msaa", "texture_copy"],
|
|
87
141
|
["filter_output_erase_msaa", "texture_copy"],
|
|
142
|
+
["filter_output_masked", "texture_copy"], ["filter_output_masked_msaa", "texture_copy"],
|
|
88
143
|
["positioned_texture", "texture_copy"], ["positioned_texture_rgba", "texture_copy"],
|
|
89
144
|
["bitmap_render_msaa", "texture_copy"], ["bitmap_render", "texture_copy"],
|
|
90
145
|
["texture_scale", "texture_copy"], ["texture_scale_blend", "texture_copy"],
|
|
@@ -101,24 +156,40 @@ export class PipelineManager {
|
|
|
101
156
|
["filter_complex_blend_output_msaa", "complex_blend"]
|
|
102
157
|
])
|
|
103
158
|
});
|
|
159
|
+
/**
|
|
160
|
+
* @description グラデーション用パイプラインレイアウト
|
|
161
|
+
* Pipeline layout for gradient pipelines
|
|
162
|
+
*/
|
|
104
163
|
Object.defineProperty(this, "gradientPipelineLayout", {
|
|
105
164
|
enumerable: true,
|
|
106
165
|
configurable: true,
|
|
107
166
|
writable: true,
|
|
108
167
|
value: null
|
|
109
168
|
});
|
|
169
|
+
/**
|
|
170
|
+
* @description グラデーション用頂点シェーダーモジュール
|
|
171
|
+
* Vertex shader module for gradient pipelines
|
|
172
|
+
*/
|
|
110
173
|
Object.defineProperty(this, "gradientVertexShaderModule", {
|
|
111
174
|
enumerable: true,
|
|
112
175
|
configurable: true,
|
|
113
176
|
writable: true,
|
|
114
177
|
value: null
|
|
115
178
|
});
|
|
179
|
+
/**
|
|
180
|
+
* @description グラデーション用フラグメントシェーダーモジュール
|
|
181
|
+
* Fragment shader module for gradient pipelines
|
|
182
|
+
*/
|
|
116
183
|
Object.defineProperty(this, "gradientFragmentShaderModule", {
|
|
117
184
|
enumerable: true,
|
|
118
185
|
configurable: true,
|
|
119
186
|
writable: true,
|
|
120
187
|
value: null
|
|
121
188
|
});
|
|
189
|
+
/**
|
|
190
|
+
* @description グラデーション用ステンシルフラグメントシェーダーモジュール
|
|
191
|
+
* Stencil fragment shader module for gradient pipelines
|
|
192
|
+
*/
|
|
122
193
|
Object.defineProperty(this, "gradientStencilFragmentShaderModule", {
|
|
123
194
|
enumerable: true,
|
|
124
195
|
configurable: true,
|
|
@@ -132,6 +203,13 @@ export class PipelineManager {
|
|
|
132
203
|
this.sampleCount = $samples;
|
|
133
204
|
this.initialize();
|
|
134
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* @description シェーダーモジュールをキャッシュから取得、または新規作成する
|
|
208
|
+
* Get a shader module from cache, or create and cache a new one
|
|
209
|
+
* @param {string} key - キャッシュキー / Cache key
|
|
210
|
+
* @param {string} code - WGSLシェーダーコード / WGSL shader source code
|
|
211
|
+
* @return {GPUShaderModule} シェーダーモジュール / The shader module
|
|
212
|
+
*/
|
|
135
213
|
getOrCreateShaderModule(key, code) {
|
|
136
214
|
let module = this.shaderModuleCache.get(key);
|
|
137
215
|
if (!module) {
|
|
@@ -140,6 +218,10 @@ export class PipelineManager {
|
|
|
140
218
|
}
|
|
141
219
|
return module;
|
|
142
220
|
}
|
|
221
|
+
/**
|
|
222
|
+
* @description 初期パイプライン群を一括作成する
|
|
223
|
+
* Create all initial render pipelines
|
|
224
|
+
*/
|
|
143
225
|
initialize() {
|
|
144
226
|
this.createFillPipeline();
|
|
145
227
|
this.createStencilFillPipelines();
|
|
@@ -154,6 +236,11 @@ export class PipelineManager {
|
|
|
154
236
|
this.createBlendPipeline();
|
|
155
237
|
this.createNodeClearPipeline();
|
|
156
238
|
}
|
|
239
|
+
/**
|
|
240
|
+
* @description 指定された名前に対応する遅延初期化グループをまだ初期化されていなければ初期化する
|
|
241
|
+
* Ensure the lazy initialization group for the given name is initialized
|
|
242
|
+
* @param {string} name - パイプライン名 / Pipeline name to look up its lazy group
|
|
243
|
+
*/
|
|
157
244
|
ensureLazyGroup(name) {
|
|
158
245
|
const group = this.lazyGroupMap.get(name);
|
|
159
246
|
if (!group || this.lazyInitGroups.has(group)) {
|
|
@@ -178,12 +265,20 @@ export class PipelineManager {
|
|
|
178
265
|
break;
|
|
179
266
|
}
|
|
180
267
|
}
|
|
268
|
+
/**
|
|
269
|
+
* @description すべての遅延初期化グループを事前にロードする
|
|
270
|
+
* Preload all lazy initialization groups eagerly
|
|
271
|
+
*/
|
|
181
272
|
preloadLazyGroups() {
|
|
182
273
|
const groups = ["blur_filter", "texture_copy", "bitmap_sync", "filter", "complex_blend"];
|
|
183
274
|
for (const group of groups) {
|
|
184
275
|
this.ensureLazyGroup(group);
|
|
185
276
|
}
|
|
186
277
|
}
|
|
278
|
+
/**
|
|
279
|
+
* @description 塗りつぶし描画用パイプラインを作成する(RGBA/BGRA/ステンシル対応)
|
|
280
|
+
* Create fill render pipelines (RGBA, BGRA, and stencil variants)
|
|
281
|
+
*/
|
|
187
282
|
createFillPipeline() {
|
|
188
283
|
// Dynamic Offset対応のBindGroupLayout(fill + stencil共有)
|
|
189
284
|
const dynamicBindGroupLayout = this.device.createBindGroupLayout({
|
|
@@ -201,8 +296,8 @@ export class PipelineManager {
|
|
|
201
296
|
});
|
|
202
297
|
const vertexShaderModule = this.getOrCreateShaderModule("fillVertex", ShaderSource.getFillVertexShader());
|
|
203
298
|
const fragmentShaderModule = this.getOrCreateShaderModule("fillFragment", ShaderSource.getFillFragmentShader());
|
|
204
|
-
const vertexBufferLayout = VERTEX_BUFFER_LAYOUT_4F;
|
|
205
|
-
const blendState = BLEND_PREMULTIPLIED_ALPHA;
|
|
299
|
+
const vertexBufferLayout = $VERTEX_BUFFER_LAYOUT_4F;
|
|
300
|
+
const blendState = $BLEND_PREMULTIPLIED_ALPHA;
|
|
206
301
|
const pipelineRGBA = this.device.createRenderPipeline({
|
|
207
302
|
"layout": pipelineLayout,
|
|
208
303
|
"vertex": {
|
|
@@ -315,8 +410,12 @@ export class PipelineManager {
|
|
|
315
410
|
});
|
|
316
411
|
this.pipelines.set("fill_bgra_stencil", pipelineBGRAStencil);
|
|
317
412
|
}
|
|
413
|
+
/**
|
|
414
|
+
* @description ステンシル塗りつぶし用パイプラインを作成する(書き込み・塗りつぶし・アトラス・メイン・マスク対応)
|
|
415
|
+
* Create stencil fill pipelines (write, fill, atlas, main, and masked variants)
|
|
416
|
+
*/
|
|
318
417
|
createStencilFillPipelines() {
|
|
319
|
-
const vertexBufferLayout = VERTEX_BUFFER_LAYOUT_4F;
|
|
418
|
+
const vertexBufferLayout = $VERTEX_BUFFER_LAYOUT_4F;
|
|
320
419
|
// fill_dynamicレイアウトを共有(hasDynamicOffset: true)
|
|
321
420
|
const dynamicLayout = this.bindGroupLayouts.get("fill_dynamic");
|
|
322
421
|
const stencilPipelineLayout = this.device.createPipelineLayout({
|
|
@@ -662,8 +761,12 @@ export class PipelineManager {
|
|
|
662
761
|
});
|
|
663
762
|
this.pipelines.set("stencil_fill_masked", stencilFillMaskedPipeline);
|
|
664
763
|
}
|
|
764
|
+
/**
|
|
765
|
+
* @description クリッピング用パイプラインを作成する(レベル別の書き込み・クリア)
|
|
766
|
+
* Create clip pipelines (level-based write and clear variants)
|
|
767
|
+
*/
|
|
665
768
|
createClipPipeline() {
|
|
666
|
-
const vertexBufferLayout = VERTEX_BUFFER_LAYOUT_4F;
|
|
769
|
+
const vertexBufferLayout = $VERTEX_BUFFER_LAYOUT_4F;
|
|
667
770
|
const dynamicLayout = this.bindGroupLayouts.get("fill_dynamic");
|
|
668
771
|
const clipPipelineLayout = this.device.createPipelineLayout({
|
|
669
772
|
"bindGroupLayouts": [dynamicLayout]
|
|
@@ -804,8 +907,12 @@ export class PipelineManager {
|
|
|
804
907
|
this.pipelines.set(`clip_clear_main_${level}`, clipClearMainPipeline);
|
|
805
908
|
}
|
|
806
909
|
}
|
|
910
|
+
/**
|
|
911
|
+
* @description マスク合成用パイプラインを作成する(レベル別のマージ・クリア)
|
|
912
|
+
* Create mask union pipelines (level-based merge and clear variants)
|
|
913
|
+
*/
|
|
807
914
|
createMaskUnionPipelines() {
|
|
808
|
-
const vertexBufferLayout = VERTEX_BUFFER_LAYOUT_4F;
|
|
915
|
+
const vertexBufferLayout = $VERTEX_BUFFER_LAYOUT_4F;
|
|
809
916
|
const dynamicLayout = this.bindGroupLayouts.get("fill_dynamic");
|
|
810
917
|
const maskUnionPipelineLayout = this.device.createPipelineLayout({
|
|
811
918
|
"bindGroupLayouts": [dynamicLayout]
|
|
@@ -895,6 +1002,10 @@ export class PipelineManager {
|
|
|
895
1002
|
this.pipelines.set(`mask_union_clear_${level}`, clearPipeline);
|
|
896
1003
|
}
|
|
897
1004
|
}
|
|
1005
|
+
/**
|
|
1006
|
+
* @description マスク描画用パイプラインを作成する
|
|
1007
|
+
* Create mask render pipeline
|
|
1008
|
+
*/
|
|
898
1009
|
createMaskPipeline() {
|
|
899
1010
|
const bindGroupLayout = this.device.createBindGroupLayout({
|
|
900
1011
|
"entries": [
|
|
@@ -958,6 +1069,10 @@ export class PipelineManager {
|
|
|
958
1069
|
});
|
|
959
1070
|
this.pipelines.set("mask", pipeline);
|
|
960
1071
|
}
|
|
1072
|
+
/**
|
|
1073
|
+
* @description 基本描画パイプラインを作成する(RGBA/BGRA)
|
|
1074
|
+
* Create basic render pipelines (RGBA and BGRA variants)
|
|
1075
|
+
*/
|
|
961
1076
|
createBasicPipeline() {
|
|
962
1077
|
const bindGroupLayout = this.device.createBindGroupLayout({
|
|
963
1078
|
"entries": [{
|
|
@@ -987,7 +1102,7 @@ export class PipelineManager {
|
|
|
987
1102
|
}
|
|
988
1103
|
]
|
|
989
1104
|
};
|
|
990
|
-
const blendState = BLEND_PREMULTIPLIED_ALPHA;
|
|
1105
|
+
const blendState = $BLEND_PREMULTIPLIED_ALPHA;
|
|
991
1106
|
const pipelineRGBA = this.device.createRenderPipeline({
|
|
992
1107
|
"layout": pipelineLayout,
|
|
993
1108
|
"vertex": {
|
|
@@ -1035,6 +1150,10 @@ export class PipelineManager {
|
|
|
1035
1150
|
this.pipelines.set("basic", pipelineRGBA);
|
|
1036
1151
|
this.pipelines.set("basic_bgra", pipelineBGRA);
|
|
1037
1152
|
}
|
|
1153
|
+
/**
|
|
1154
|
+
* @description テクスチャ描画用パイプラインを作成する
|
|
1155
|
+
* Create texture render pipeline
|
|
1156
|
+
*/
|
|
1038
1157
|
createTexturePipeline() {
|
|
1039
1158
|
const bindGroupLayout = this.device.createBindGroupLayout({
|
|
1040
1159
|
"entries": [
|
|
@@ -1108,6 +1227,10 @@ export class PipelineManager {
|
|
|
1108
1227
|
});
|
|
1109
1228
|
this.pipelines.set("texture", pipeline);
|
|
1110
1229
|
}
|
|
1230
|
+
/**
|
|
1231
|
+
* @description インスタンス描画用パイプラインを作成する(ブレンドバリアント・マスク対応)
|
|
1232
|
+
* Create instanced render pipelines (blend variants and masked)
|
|
1233
|
+
*/
|
|
1111
1234
|
createInstancedPipeline() {
|
|
1112
1235
|
const bindGroupLayout = this.device.createBindGroupLayout({
|
|
1113
1236
|
"entries": [
|
|
@@ -1276,18 +1399,7 @@ export class PipelineManager {
|
|
|
1276
1399
|
"entryPoint": "main",
|
|
1277
1400
|
"targets": [{
|
|
1278
1401
|
"format": this.format,
|
|
1279
|
-
"blend":
|
|
1280
|
-
"color": {
|
|
1281
|
-
"srcFactor": "one",
|
|
1282
|
-
"dstFactor": "one-minus-src-alpha",
|
|
1283
|
-
"operation": "add"
|
|
1284
|
-
},
|
|
1285
|
-
"alpha": {
|
|
1286
|
-
"srcFactor": "one",
|
|
1287
|
-
"dstFactor": "one-minus-src-alpha",
|
|
1288
|
-
"operation": "add"
|
|
1289
|
-
}
|
|
1290
|
-
}
|
|
1402
|
+
"blend": $BLEND_PREMULTIPLIED_ALPHA
|
|
1291
1403
|
}]
|
|
1292
1404
|
},
|
|
1293
1405
|
"primitive": {
|
|
@@ -1317,6 +1429,10 @@ export class PipelineManager {
|
|
|
1317
1429
|
});
|
|
1318
1430
|
this.pipelines.set("instanced_masked", maskedPipeline);
|
|
1319
1431
|
}
|
|
1432
|
+
/**
|
|
1433
|
+
* @description グラデーション塗りつぶし用パイプラインを作成する(RGBA/BGRA/ステンシル対応)
|
|
1434
|
+
* Create gradient fill pipelines (RGBA, BGRA, stencil, and stroke variants)
|
|
1435
|
+
*/
|
|
1320
1436
|
createGradientPipeline() {
|
|
1321
1437
|
const bindGroupLayout = this.device.createBindGroupLayout({
|
|
1322
1438
|
"entries": [
|
|
@@ -1348,8 +1464,8 @@ export class PipelineManager {
|
|
|
1348
1464
|
this.gradientFragmentShaderModule = fragmentShaderModule;
|
|
1349
1465
|
const stencilFragmentShaderModule = this.getOrCreateShaderModule("gradientFillStencilFragment", ShaderSource.getGradientFillStencilFragmentShader());
|
|
1350
1466
|
this.gradientStencilFragmentShaderModule = stencilFragmentShaderModule;
|
|
1351
|
-
const vertexBufferLayout = VERTEX_BUFFER_LAYOUT_4F;
|
|
1352
|
-
const blendState = BLEND_PREMULTIPLIED_ALPHA;
|
|
1467
|
+
const vertexBufferLayout = $VERTEX_BUFFER_LAYOUT_4F;
|
|
1468
|
+
const blendState = $BLEND_PREMULTIPLIED_ALPHA;
|
|
1353
1469
|
const pipelineRGBA = this.device.createRenderPipeline({
|
|
1354
1470
|
"label": "gradient_fill_no_stencil_pipeline",
|
|
1355
1471
|
"layout": pipelineLayout,
|
|
@@ -1663,6 +1779,10 @@ export class PipelineManager {
|
|
|
1663
1779
|
});
|
|
1664
1780
|
this.pipelines.set("gradient_fill_bgra_stencil", pipelineBGRAStencil);
|
|
1665
1781
|
}
|
|
1782
|
+
/**
|
|
1783
|
+
* @description ビットマップ塗りつぶし用パイプラインを作成する(RGBA/BGRA/ステンシル・ストローク対応)
|
|
1784
|
+
* Create bitmap fill pipelines (RGBA, BGRA, stencil, and stroke variants)
|
|
1785
|
+
*/
|
|
1666
1786
|
createBitmapFillPipeline() {
|
|
1667
1787
|
const bindGroupLayout = this.device.createBindGroupLayout({
|
|
1668
1788
|
"entries": [
|
|
@@ -1689,8 +1809,8 @@ export class PipelineManager {
|
|
|
1689
1809
|
});
|
|
1690
1810
|
const vertexShaderModule = this.getOrCreateShaderModule("bitmapFillVertex", ShaderSource.getBitmapFillVertexShader());
|
|
1691
1811
|
const fragmentShaderModule = this.getOrCreateShaderModule("bitmapFillFragment", ShaderSource.getBitmapFillFragmentShader());
|
|
1692
|
-
const vertexBufferLayout = VERTEX_BUFFER_LAYOUT_4F;
|
|
1693
|
-
const blendState = BLEND_PREMULTIPLIED_ALPHA;
|
|
1812
|
+
const vertexBufferLayout = $VERTEX_BUFFER_LAYOUT_4F;
|
|
1813
|
+
const blendState = $BLEND_PREMULTIPLIED_ALPHA;
|
|
1694
1814
|
const pipelineRGBA = this.device.createRenderPipeline({
|
|
1695
1815
|
"layout": pipelineLayout,
|
|
1696
1816
|
"vertex": {
|
|
@@ -1888,6 +2008,10 @@ export class PipelineManager {
|
|
|
1888
2008
|
});
|
|
1889
2009
|
this.pipelines.set("bitmap_fill_bgra_stencil", pipelineBGRAStencil);
|
|
1890
2010
|
}
|
|
2011
|
+
/**
|
|
2012
|
+
* @description ブレンド描画用パイプラインを作成する(デュアルテクスチャブレンド)
|
|
2013
|
+
* Create blend render pipeline for dual-texture blending
|
|
2014
|
+
*/
|
|
1891
2015
|
createBlendPipeline() {
|
|
1892
2016
|
const bindGroupLayout = this.device.createBindGroupLayout({
|
|
1893
2017
|
"entries": [
|
|
@@ -1976,6 +2100,10 @@ export class PipelineManager {
|
|
|
1976
2100
|
});
|
|
1977
2101
|
this.pipelines.set("blend", pipeline);
|
|
1978
2102
|
}
|
|
2103
|
+
/**
|
|
2104
|
+
* @description ブラーフィルター用パイプラインを作成する(halfBlur 1〜16のバリアント)
|
|
2105
|
+
* Create blur filter pipelines (halfBlur 1-16 variants)
|
|
2106
|
+
*/
|
|
1979
2107
|
createBlurFilterPipeline() {
|
|
1980
2108
|
const bindGroupLayout = this.device.createBindGroupLayout({
|
|
1981
2109
|
"entries": [
|
|
@@ -2037,6 +2165,10 @@ export class PipelineManager {
|
|
|
2037
2165
|
this.pipelines.set(`blur_filter_${halfBlur}`, pipeline);
|
|
2038
2166
|
}
|
|
2039
2167
|
}
|
|
2168
|
+
/**
|
|
2169
|
+
* @description テクスチャコピー用パイプラインを作成する(各種ブレンド・フィルター出力・MSAA対応)
|
|
2170
|
+
* Create texture copy pipelines (various blend modes, filter output, MSAA variants)
|
|
2171
|
+
*/
|
|
2040
2172
|
createTextureCopyPipeline() {
|
|
2041
2173
|
const bindGroupLayout = this.device.createBindGroupLayout({
|
|
2042
2174
|
"entries": [
|
|
@@ -2077,6 +2209,10 @@ export class PipelineManager {
|
|
|
2077
2209
|
};
|
|
2078
2210
|
this.pipelines.set("texture_copy", this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, fragmentShaderModule, this.format, BLEND_REPLACE));
|
|
2079
2211
|
this.pipelines.set("texture_copy_rgba8", this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, fragmentShaderModule, "rgba8unorm", BLEND_REPLACE));
|
|
2212
|
+
if (this.sampleCount > 1) {
|
|
2213
|
+
const copyBlendRgba8 = { "color": { "srcFactor": "one", "dstFactor": "zero", "operation": "add" }, "alpha": { "srcFactor": "one", "dstFactor": "zero", "operation": "add" } };
|
|
2214
|
+
this.pipelines.set("texture_copy_rgba8_msaa", this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, fragmentShaderModule, "rgba8unorm", copyBlendRgba8, this.sampleCount));
|
|
2215
|
+
}
|
|
2080
2216
|
const colorTransformFragmentModule = this.getOrCreateShaderModule("colorTransformFragment", ShaderSource.getColorTransformFragmentShader());
|
|
2081
2217
|
this.pipelines.set("color_transform", this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, colorTransformFragmentModule, "rgba8unorm", BLEND_REPLACE));
|
|
2082
2218
|
const yFlipCTFragmentModule = this.getOrCreateShaderModule("yFlipColorTransformFragment", ShaderSource.getYFlipColorTransformFragmentShader());
|
|
@@ -2097,6 +2233,29 @@ export class PipelineManager {
|
|
|
2097
2233
|
for (const [name, blend] of filterOutputBlendVariants) {
|
|
2098
2234
|
this.pipelines.set(name, this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, filterOutputShaderModule, this.format, blend));
|
|
2099
2235
|
}
|
|
2236
|
+
// マスク付きフィルター出力パイプライン(ステンシルテスト付き)
|
|
2237
|
+
const filterMaskedStencil = {
|
|
2238
|
+
"format": "stencil8",
|
|
2239
|
+
"stencilFront": {
|
|
2240
|
+
"compare": "equal",
|
|
2241
|
+
"failOp": "keep",
|
|
2242
|
+
"depthFailOp": "keep",
|
|
2243
|
+
"passOp": "keep"
|
|
2244
|
+
},
|
|
2245
|
+
"stencilBack": {
|
|
2246
|
+
"compare": "equal",
|
|
2247
|
+
"failOp": "keep",
|
|
2248
|
+
"depthFailOp": "keep",
|
|
2249
|
+
"passOp": "keep"
|
|
2250
|
+
},
|
|
2251
|
+
"stencilReadMask": 0xFF,
|
|
2252
|
+
"stencilWriteMask": 0x00
|
|
2253
|
+
};
|
|
2254
|
+
this.pipelines.set("filter_output_masked", this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, filterOutputShaderModule, this.format, BLEND_ALPHA, undefined, filterMaskedStencil));
|
|
2255
|
+
if (this.sampleCount > 1) {
|
|
2256
|
+
const normalBlendForMask = { "color": { "srcFactor": "one", "dstFactor": "one-minus-src-alpha", "operation": "add" }, "alpha": { "srcFactor": "one", "dstFactor": "one-minus-src-alpha", "operation": "add" } };
|
|
2257
|
+
this.pipelines.set("filter_output_masked_msaa", this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, filterOutputShaderModule, this.format, normalBlendForMask, this.sampleCount, filterMaskedStencil));
|
|
2258
|
+
}
|
|
2100
2259
|
if (this.sampleCount > 1) {
|
|
2101
2260
|
const copyBlend = { "color": { "srcFactor": "one", "dstFactor": "zero", "operation": "add" }, "alpha": { "srcFactor": "one", "dstFactor": "zero", "operation": "add" } };
|
|
2102
2261
|
this.pipelines.set("texture_copy_bgra_msaa", this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, fragmentShaderModule, this.format, copyBlend, this.sampleCount));
|
|
@@ -2109,6 +2268,10 @@ export class PipelineManager {
|
|
|
2109
2268
|
this.createPositionedTexturePipeline();
|
|
2110
2269
|
this.createTextureScalePipeline();
|
|
2111
2270
|
}
|
|
2271
|
+
/**
|
|
2272
|
+
* @description 位置指定テクスチャ描画用パイプラインを作成する(RGBA/ビットマップレンダー対応)
|
|
2273
|
+
* Create positioned texture pipelines (RGBA, bitmap render, MSAA variants)
|
|
2274
|
+
*/
|
|
2112
2275
|
createPositionedTexturePipeline() {
|
|
2113
2276
|
const bindGroupLayout = this.device.createBindGroupLayout({
|
|
2114
2277
|
"entries": [
|
|
@@ -2297,6 +2460,10 @@ export class PipelineManager {
|
|
|
2297
2460
|
});
|
|
2298
2461
|
this.pipelines.set("bitmap_render", pipelineNonMsaa);
|
|
2299
2462
|
}
|
|
2463
|
+
/**
|
|
2464
|
+
* @description テクスチャスケーリング用パイプラインを作成する
|
|
2465
|
+
* Create texture scale pipelines
|
|
2466
|
+
*/
|
|
2300
2467
|
createTextureScalePipeline() {
|
|
2301
2468
|
const bindGroupLayout = this.device.createBindGroupLayout({
|
|
2302
2469
|
"entries": [
|
|
@@ -2389,6 +2556,10 @@ export class PipelineManager {
|
|
|
2389
2556
|
});
|
|
2390
2557
|
this.pipelines.set("texture_scale_blend", blendPipeline);
|
|
2391
2558
|
}
|
|
2559
|
+
/**
|
|
2560
|
+
* @description ビットマップ同期描画用パイプラインを作成する(MSAA 4x)
|
|
2561
|
+
* Create bitmap sync render pipeline (MSAA 4x)
|
|
2562
|
+
*/
|
|
2392
2563
|
createBitmapSyncPipeline() {
|
|
2393
2564
|
const bindGroupLayout = this.device.createBindGroupLayout({
|
|
2394
2565
|
"entries": [
|
|
@@ -2451,6 +2622,10 @@ export class PipelineManager {
|
|
|
2451
2622
|
});
|
|
2452
2623
|
this.pipelines.set("bitmap_sync", pipeline);
|
|
2453
2624
|
}
|
|
2625
|
+
/**
|
|
2626
|
+
* @description カラーマトリクスフィルター・ベベル・グロー・ドロップシャドウ等のフィルターパイプラインを作成する
|
|
2627
|
+
* Create filter pipelines (color matrix, bevel, glow, drop shadow, gradient glow/bevel)
|
|
2628
|
+
*/
|
|
2454
2629
|
createColorMatrixFilterPipeline() {
|
|
2455
2630
|
const BLEND_REPLACE = {
|
|
2456
2631
|
"color": { "srcFactor": "one", "dstFactor": "zero", "operation": "add" },
|
|
@@ -2468,6 +2643,10 @@ export class PipelineManager {
|
|
|
2468
2643
|
this.createFilterPipelineWithLayout("gradient_glow_filter", ShaderSource.getGradientGlowFilterFragmentShader(), 3, BLEND_ALPHA);
|
|
2469
2644
|
this.createFilterPipelineWithLayout("gradient_bevel_filter", ShaderSource.getGradientBevelFilterFragmentShader(), 3, BLEND_ALPHA);
|
|
2470
2645
|
}
|
|
2646
|
+
/**
|
|
2647
|
+
* @description 複合ブレンド用パイプラインを作成する
|
|
2648
|
+
* Create complex blend pipelines
|
|
2649
|
+
*/
|
|
2471
2650
|
createComplexBlendPipelines() {
|
|
2472
2651
|
const bindGroupLayout = this.device.createBindGroupLayout({
|
|
2473
2652
|
"entries": [
|
|
@@ -2534,6 +2713,10 @@ export class PipelineManager {
|
|
|
2534
2713
|
this.createComplexBlendCopyPipeline();
|
|
2535
2714
|
this.createComplexBlendOutputPipeline();
|
|
2536
2715
|
}
|
|
2716
|
+
/**
|
|
2717
|
+
* @description 複合ブレンドのコピー・スケール用パイプラインを作成する
|
|
2718
|
+
* Create complex blend copy and scale pipelines
|
|
2719
|
+
*/
|
|
2537
2720
|
createComplexBlendCopyPipeline() {
|
|
2538
2721
|
const BLEND_REPLACE = {
|
|
2539
2722
|
"color": { "srcFactor": "one", "dstFactor": "zero", "operation": "add" },
|
|
@@ -2554,6 +2737,10 @@ export class PipelineManager {
|
|
|
2554
2737
|
this.pipelines.set("complex_blend_scale", this.createFullscreenQuadPipeline(scalePipelineLayout, scaleVS, scaleFS, "rgba8unorm", BLEND_REPLACE));
|
|
2555
2738
|
}
|
|
2556
2739
|
}
|
|
2740
|
+
/**
|
|
2741
|
+
* @description 複合ブレンドの出力用パイプラインを作成する(MSAA対応含む)
|
|
2742
|
+
* Create complex blend output pipelines (including MSAA variants)
|
|
2743
|
+
*/
|
|
2557
2744
|
createComplexBlendOutputPipeline() {
|
|
2558
2745
|
const bindGroupLayout = this.bindGroupLayouts.get("positioned_texture");
|
|
2559
2746
|
if (!bindGroupLayout) {
|
|
@@ -2576,35 +2763,55 @@ export class PipelineManager {
|
|
|
2576
2763
|
this.pipelines.set("filter_complex_blend_output_msaa", this.createFullscreenQuadPipeline(pipelineLayout, filterBlendOutputVS, fragmentShaderModule, this.format, blend, this.sampleCount));
|
|
2577
2764
|
}
|
|
2578
2765
|
}
|
|
2579
|
-
|
|
2580
|
-
|
|
2766
|
+
/**
|
|
2767
|
+
* @description 指定されたフラグメントシェーダーとテクスチャ数でフィルターパイプラインを作成する
|
|
2768
|
+
* Create a filter pipeline with the specified fragment shader and texture count
|
|
2769
|
+
* @param {string} name - パイプライン名 / Pipeline name
|
|
2770
|
+
* @param {string} fragment_shader_code - フラグメントシェーダーコード / Fragment shader WGSL source code
|
|
2771
|
+
* @param {number} texture_count - テクスチャバインディング数 / Number of texture bindings
|
|
2772
|
+
* @param {GPUBlendState} blend - ブレンドステート / Blend state configuration
|
|
2773
|
+
*/
|
|
2774
|
+
createFilterPipelineWithLayout(name, fragment_shader_code, texture_count, blend) {
|
|
2775
|
+
let bindGroupLayout = this.filterBindGroupLayouts.get(texture_count);
|
|
2581
2776
|
if (!bindGroupLayout) {
|
|
2582
2777
|
const entries = [
|
|
2583
2778
|
{ "binding": 0, "visibility": GPUShaderStage.FRAGMENT, "buffer": { "type": "uniform" } },
|
|
2584
2779
|
{ "binding": 1, "visibility": GPUShaderStage.FRAGMENT, "sampler": {} }
|
|
2585
2780
|
];
|
|
2586
|
-
for (let i = 0; i <
|
|
2781
|
+
for (let i = 0; i < texture_count; i++) {
|
|
2587
2782
|
entries.push({ "binding": 2 + i, "visibility": GPUShaderStage.FRAGMENT, "texture": {} });
|
|
2588
2783
|
}
|
|
2589
2784
|
bindGroupLayout = this.device.createBindGroupLayout({ "entries": entries });
|
|
2590
|
-
this.filterBindGroupLayouts.set(
|
|
2785
|
+
this.filterBindGroupLayouts.set(texture_count, bindGroupLayout);
|
|
2591
2786
|
}
|
|
2592
2787
|
this.bindGroupLayouts.set(name, bindGroupLayout);
|
|
2593
2788
|
const pipelineLayout = this.device.createPipelineLayout({ "bindGroupLayouts": [bindGroupLayout] });
|
|
2594
2789
|
const vertexShaderModule = this.getOrCreateShaderModule("blurFilterVertex", ShaderSource.getBlurFilterVertexShader());
|
|
2595
|
-
const fragmentShaderModule = this.getOrCreateShaderModule(`filter_${name}`,
|
|
2790
|
+
const fragmentShaderModule = this.getOrCreateShaderModule(`filter_${name}`, fragment_shader_code);
|
|
2596
2791
|
this.pipelines.set(name, this.createFullscreenQuadPipeline(pipelineLayout, vertexShaderModule, fragmentShaderModule, "rgba8unorm", blend));
|
|
2597
2792
|
}
|
|
2598
|
-
|
|
2793
|
+
/**
|
|
2794
|
+
* @description フルスクリーンクアッド描画用の汎用パイプラインを作成する
|
|
2795
|
+
* Create a generic fullscreen quad render pipeline
|
|
2796
|
+
* @param {GPUPipelineLayout} pipeline_layout - パイプラインレイアウト / Pipeline layout
|
|
2797
|
+
* @param {GPUShaderModule} vertex_module - 頂点シェーダーモジュール / Vertex shader module
|
|
2798
|
+
* @param {GPUShaderModule} fragment_module - フラグメントシェーダーモジュール / Fragment shader module
|
|
2799
|
+
* @param {GPUTextureFormat} format - テクスチャフォーマット / Target texture format
|
|
2800
|
+
* @param {GPUBlendState} blend - ブレンドステート / Blend state configuration
|
|
2801
|
+
* @param {number} multisample_count - MSAAサンプル数(任意) / Optional MSAA sample count
|
|
2802
|
+
* @param {GPUDepthStencilState} depth_stencil - 深度ステンシルステート(任意) / Optional depth-stencil state
|
|
2803
|
+
* @return {GPURenderPipeline} レンダーパイプライン / The created render pipeline
|
|
2804
|
+
*/
|
|
2805
|
+
createFullscreenQuadPipeline(pipeline_layout, vertex_module, fragment_module, format, blend, multisample_count, depth_stencil) {
|
|
2599
2806
|
const descriptor = {
|
|
2600
|
-
"layout":
|
|
2807
|
+
"layout": pipeline_layout,
|
|
2601
2808
|
"vertex": {
|
|
2602
|
-
"module":
|
|
2809
|
+
"module": vertex_module,
|
|
2603
2810
|
"entryPoint": "main",
|
|
2604
2811
|
"buffers": []
|
|
2605
2812
|
},
|
|
2606
2813
|
"fragment": {
|
|
2607
|
-
"module":
|
|
2814
|
+
"module": fragment_module,
|
|
2608
2815
|
"entryPoint": "main",
|
|
2609
2816
|
"targets": [{ "format": format, "blend": blend }]
|
|
2610
2817
|
},
|
|
@@ -2613,14 +2820,20 @@ export class PipelineManager {
|
|
|
2613
2820
|
"cullMode": "none"
|
|
2614
2821
|
}
|
|
2615
2822
|
};
|
|
2616
|
-
if (
|
|
2617
|
-
descriptor.multisample = { "count":
|
|
2823
|
+
if (multisample_count && multisample_count > 1) {
|
|
2824
|
+
descriptor.multisample = { "count": multisample_count };
|
|
2618
2825
|
}
|
|
2619
|
-
if (
|
|
2620
|
-
descriptor.depthStencil =
|
|
2826
|
+
if (depth_stencil) {
|
|
2827
|
+
descriptor.depthStencil = depth_stencil;
|
|
2621
2828
|
}
|
|
2622
2829
|
return this.device.createRenderPipeline(descriptor);
|
|
2623
2830
|
}
|
|
2831
|
+
/**
|
|
2832
|
+
* @description 名前からレンダーパイプラインを取得する(遅延初期化を含む)
|
|
2833
|
+
* Get a render pipeline by name, initializing lazy groups if needed
|
|
2834
|
+
* @param {string} name - パイプライン名 / Pipeline name
|
|
2835
|
+
* @return {GPURenderPipeline | undefined} パイプラインまたはundefined / The pipeline or undefined
|
|
2836
|
+
*/
|
|
2624
2837
|
getPipeline(name) {
|
|
2625
2838
|
let pipeline = this.pipelines.get(name);
|
|
2626
2839
|
if (!pipeline) {
|
|
@@ -2630,25 +2843,28 @@ export class PipelineManager {
|
|
|
2630
2843
|
return pipeline;
|
|
2631
2844
|
}
|
|
2632
2845
|
/**
|
|
2633
|
-
* @description フィルターパイプラインのoverride
|
|
2634
|
-
* GPU warp divergence
|
|
2846
|
+
* @description フィルターパイプラインのoverride定数バリアントを取得する。GPU warp divergenceを排除するコンパイル時分岐特殊化
|
|
2847
|
+
* Get a filter pipeline variant with override constants. Compile-time branch specialization to eliminate GPU warp divergence
|
|
2848
|
+
* @param {string} base_name - ベースパイプライン名 / Base pipeline name
|
|
2849
|
+
* @param {Record<string, number>} constants - オーバーライド定数 / Override constant values
|
|
2850
|
+
* @return {GPURenderPipeline | undefined} パイプラインまたはundefined / The pipeline or undefined
|
|
2635
2851
|
*/
|
|
2636
|
-
getFilterPipeline(
|
|
2852
|
+
getFilterPipeline(base_name, constants) {
|
|
2637
2853
|
// キャッシュキーを生成
|
|
2638
2854
|
const keys = Object.keys(constants).sort();
|
|
2639
2855
|
const suffix = keys.map((k) => `${k}${constants[k]}`).join("_");
|
|
2640
|
-
const cacheKey = `${
|
|
2856
|
+
const cacheKey = `${base_name}_${suffix}`;
|
|
2641
2857
|
let pipeline = this.pipelines.get(cacheKey);
|
|
2642
2858
|
if (pipeline) {
|
|
2643
2859
|
return pipeline;
|
|
2644
2860
|
}
|
|
2645
2861
|
// ベースグループのロードを確保
|
|
2646
|
-
this.ensureLazyGroup(
|
|
2647
|
-
const fragmentModule = this.shaderModuleCache.get(`filter_${
|
|
2862
|
+
this.ensureLazyGroup(base_name);
|
|
2863
|
+
const fragmentModule = this.shaderModuleCache.get(`filter_${base_name}`);
|
|
2648
2864
|
const vertexModule = this.shaderModuleCache.get("blurFilterVertex");
|
|
2649
|
-
const bindGroupLayout = this.bindGroupLayouts.get(
|
|
2865
|
+
const bindGroupLayout = this.bindGroupLayouts.get(base_name);
|
|
2650
2866
|
if (!fragmentModule || !vertexModule || !bindGroupLayout) {
|
|
2651
|
-
return this.pipelines.get(
|
|
2867
|
+
return this.pipelines.get(base_name);
|
|
2652
2868
|
}
|
|
2653
2869
|
const pipelineLayout = this.device.createPipelineLayout({
|
|
2654
2870
|
"bindGroupLayouts": [bindGroupLayout]
|
|
@@ -2681,50 +2897,62 @@ export class PipelineManager {
|
|
|
2681
2897
|
return pipeline;
|
|
2682
2898
|
}
|
|
2683
2899
|
/**
|
|
2684
|
-
* @description
|
|
2685
|
-
* override
|
|
2900
|
+
* @description グラデーションタイプとスプレッドモードに応じた特殊化パイプラインを取得する。override定数でGPU warp divergenceを排除
|
|
2901
|
+
* Get a gradient pipeline specialized by gradient type and spread mode. Uses override constants to eliminate GPU warp divergence
|
|
2902
|
+
* @param {string} base_name - ベースパイプライン名 / Base pipeline name
|
|
2903
|
+
* @param {number} gradient_type - グラデーションタイプ / Gradient type identifier
|
|
2904
|
+
* @param {number} spread_mode - スプレッドモード / Spread mode identifier
|
|
2905
|
+
* @return {GPURenderPipeline | undefined} パイプラインまたはundefined / The pipeline or undefined
|
|
2686
2906
|
*/
|
|
2687
|
-
getGradientPipeline(
|
|
2688
|
-
const key = `${
|
|
2907
|
+
getGradientPipeline(base_name, gradient_type, spread_mode) {
|
|
2908
|
+
const key = `${base_name}_t${gradient_type}s${spread_mode}`;
|
|
2689
2909
|
let pipeline = this.pipelines.get(key);
|
|
2690
2910
|
if (pipeline) {
|
|
2691
2911
|
return pipeline;
|
|
2692
2912
|
}
|
|
2693
2913
|
if (!this.gradientPipelineLayout) {
|
|
2694
|
-
return this.getPipeline(
|
|
2914
|
+
return this.getPipeline(base_name);
|
|
2695
2915
|
}
|
|
2696
2916
|
// ベースパイプラインと同じ構成でoverride定数を変えて作成
|
|
2697
|
-
pipeline = this.createGradientVariant(
|
|
2917
|
+
pipeline = this.createGradientVariant(base_name, gradient_type, spread_mode);
|
|
2698
2918
|
if (pipeline) {
|
|
2699
2919
|
this.pipelines.set(key, pipeline);
|
|
2700
2920
|
return pipeline;
|
|
2701
2921
|
}
|
|
2702
2922
|
// フォールバック: デフォルト定数のベースパイプラインを使用
|
|
2703
|
-
return this.getPipeline(
|
|
2923
|
+
return this.getPipeline(base_name);
|
|
2704
2924
|
}
|
|
2705
|
-
|
|
2925
|
+
/**
|
|
2926
|
+
* @description グラデーションバリアントパイプラインを作成する(override定数による特殊化)
|
|
2927
|
+
* Create a gradient variant pipeline with override constants for specialization
|
|
2928
|
+
* @param {string} base_name - ベースパイプライン名 / Base pipeline name
|
|
2929
|
+
* @param {number} gradient_type - グラデーションタイプ / Gradient type identifier
|
|
2930
|
+
* @param {number} spread_mode - スプレッドモード / Spread mode identifier
|
|
2931
|
+
* @return {GPURenderPipeline | undefined} パイプラインまたはundefined / The pipeline or undefined
|
|
2932
|
+
*/
|
|
2933
|
+
createGradientVariant(base_name, gradient_type, spread_mode) {
|
|
2706
2934
|
if (!this.gradientPipelineLayout) {
|
|
2707
2935
|
return undefined;
|
|
2708
2936
|
}
|
|
2709
2937
|
const constants = {
|
|
2710
|
-
"GRADIENT_TYPE":
|
|
2711
|
-
"SPREAD_MODE":
|
|
2938
|
+
"GRADIENT_TYPE": gradient_type,
|
|
2939
|
+
"SPREAD_MODE": spread_mode
|
|
2712
2940
|
};
|
|
2713
|
-
const vertexBufferLayout = VERTEX_BUFFER_LAYOUT_4F;
|
|
2714
|
-
const blendState = BLEND_PREMULTIPLIED_ALPHA;
|
|
2941
|
+
const vertexBufferLayout = $VERTEX_BUFFER_LAYOUT_4F;
|
|
2942
|
+
const blendState = $BLEND_PREMULTIPLIED_ALPHA;
|
|
2715
2943
|
// ベース名からパイプライン構成を決定
|
|
2716
|
-
const isStencilFragment =
|
|
2944
|
+
const isStencilFragment = base_name.includes("stencil_atlas") || base_name === "gradient_fill_stencil_main";
|
|
2717
2945
|
const fragModule = isStencilFragment ? this.gradientStencilFragmentShaderModule : this.gradientFragmentShaderModule;
|
|
2718
|
-
const isBGRA =
|
|
2946
|
+
const isBGRA = base_name.includes("bgra") || base_name === "gradient_fill_stencil_main";
|
|
2719
2947
|
const format = isBGRA ? this.format : "rgba8unorm";
|
|
2720
|
-
const needsYFlip =
|
|
2948
|
+
const needsYFlip = base_name.includes("bgra") || base_name === "gradient_fill_stencil_main";
|
|
2721
2949
|
const vertexConstants = {};
|
|
2722
2950
|
if (needsYFlip) {
|
|
2723
2951
|
vertexConstants.yFlipSign = -1.0;
|
|
2724
2952
|
}
|
|
2725
2953
|
let depthStencil;
|
|
2726
2954
|
let sampleCount = this.sampleCount;
|
|
2727
|
-
if (
|
|
2955
|
+
if (base_name.includes("stroke")) {
|
|
2728
2956
|
depthStencil = {
|
|
2729
2957
|
"format": "stencil8",
|
|
2730
2958
|
"stencilFront": { "compare": "always", "failOp": "keep", "depthFailOp": "keep", "passOp": "keep" },
|
|
@@ -2733,7 +2961,7 @@ export class PipelineManager {
|
|
|
2733
2961
|
"stencilWriteMask": 0x00
|
|
2734
2962
|
};
|
|
2735
2963
|
}
|
|
2736
|
-
else if (
|
|
2964
|
+
else if (base_name === "gradient_fill_stencil" || base_name === "gradient_fill_stencil_atlas") {
|
|
2737
2965
|
depthStencil = {
|
|
2738
2966
|
"format": "stencil8",
|
|
2739
2967
|
"stencilFront": { "compare": "not-equal", "failOp": "keep", "depthFailOp": "zero", "passOp": "zero" },
|
|
@@ -2742,7 +2970,7 @@ export class PipelineManager {
|
|
|
2742
2970
|
"stencilWriteMask": 0xFF
|
|
2743
2971
|
};
|
|
2744
2972
|
}
|
|
2745
|
-
else if (
|
|
2973
|
+
else if (base_name === "gradient_fill_stencil_main") {
|
|
2746
2974
|
depthStencil = {
|
|
2747
2975
|
"format": "stencil8",
|
|
2748
2976
|
"stencilFront": { "compare": "not-equal", "failOp": "keep", "depthFailOp": "zero", "passOp": "zero" },
|
|
@@ -2752,7 +2980,7 @@ export class PipelineManager {
|
|
|
2752
2980
|
};
|
|
2753
2981
|
sampleCount = 1;
|
|
2754
2982
|
}
|
|
2755
|
-
else if (
|
|
2983
|
+
else if (base_name === "gradient_fill_bgra_stencil") {
|
|
2756
2984
|
depthStencil = {
|
|
2757
2985
|
"format": "stencil8",
|
|
2758
2986
|
"stencilFront": { "compare": "equal", "failOp": "keep", "depthFailOp": "keep", "passOp": "keep" },
|
|
@@ -2761,7 +2989,7 @@ export class PipelineManager {
|
|
|
2761
2989
|
"stencilWriteMask": 0x00
|
|
2762
2990
|
};
|
|
2763
2991
|
}
|
|
2764
|
-
else if (
|
|
2992
|
+
else if (base_name === "gradient_fill_bgra_no_msaa") {
|
|
2765
2993
|
sampleCount = 1;
|
|
2766
2994
|
}
|
|
2767
2995
|
const descriptor = {
|
|
@@ -2786,6 +3014,12 @@ export class PipelineManager {
|
|
|
2786
3014
|
}
|
|
2787
3015
|
return this.device.createRenderPipeline(descriptor);
|
|
2788
3016
|
}
|
|
3017
|
+
/**
|
|
3018
|
+
* @description 名前からバインドグループレイアウトを取得する(遅延初期化を含む)
|
|
3019
|
+
* Get a bind group layout by name, initializing lazy groups if needed
|
|
3020
|
+
* @param {string} name - バインドグループレイアウト名 / Bind group layout name
|
|
3021
|
+
* @return {GPUBindGroupLayout | undefined} レイアウトまたはundefined / The layout or undefined
|
|
3022
|
+
*/
|
|
2789
3023
|
getBindGroupLayout(name) {
|
|
2790
3024
|
let layout = this.bindGroupLayouts.get(name);
|
|
2791
3025
|
if (!layout) {
|
|
@@ -2794,6 +3028,10 @@ export class PipelineManager {
|
|
|
2794
3028
|
}
|
|
2795
3029
|
return layout;
|
|
2796
3030
|
}
|
|
3031
|
+
/**
|
|
3032
|
+
* @description ノードクリア用パイプラインを作成する(カラーとステンシルの同時クリア)
|
|
3033
|
+
* Create node clear pipeline for simultaneous color and stencil clear
|
|
3034
|
+
*/
|
|
2797
3035
|
createNodeClearPipeline() {
|
|
2798
3036
|
const vertexBufferLayout = {
|
|
2799
3037
|
"arrayStride": 2 * 4,
|
|
@@ -2859,6 +3097,10 @@ export class PipelineManager {
|
|
|
2859
3097
|
});
|
|
2860
3098
|
this.pipelines.set("node_clear_atlas", nodeClearPipeline);
|
|
2861
3099
|
}
|
|
3100
|
+
/**
|
|
3101
|
+
* @description すべてのパイプライン・レイアウト・シェーダーモジュールを解放する
|
|
3102
|
+
* Dispose all pipelines, layouts, and shader module caches
|
|
3103
|
+
*/
|
|
2862
3104
|
dispose() {
|
|
2863
3105
|
this.pipelines.clear();
|
|
2864
3106
|
this.bindGroupLayouts.clear();
|