@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,7 +1,26 @@
|
|
|
1
1
|
import { execute as meshFillGenerateUseCase } from "../../Mesh/usecase/MeshFillGenerateUseCase";
|
|
2
2
|
import { execute as maskUnionMaskService } from "../../Mask/service/MaskUnionMaskService";
|
|
3
3
|
import { $clipLevels } from "../../Mask";
|
|
4
|
+
/**
|
|
5
|
+
* @description クリップ用ユニフォームデータの事前確保配列(16要素)
|
|
6
|
+
* Pre-allocated uniform data array for clipping (16 elements)
|
|
7
|
+
*/
|
|
4
8
|
const $clipUniform16 = new Float32Array(16);
|
|
9
|
+
/**
|
|
10
|
+
* @description クリップ(マスク)描画を実行する
|
|
11
|
+
* Executes clip (mask) rendering
|
|
12
|
+
* @param {GPUDevice} device GPUデバイス / GPU device
|
|
13
|
+
* @param {GPURenderPassEncoder} render_pass_encoder レンダーパスエンコーダ / Render pass encoder
|
|
14
|
+
* @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
|
|
15
|
+
* @param {PipelineManager} pipeline_manager パイプラインマネージャ / Pipeline manager
|
|
16
|
+
* @param {IAttachmentObject} current_attachment 現在のアタッチメント / Current attachment
|
|
17
|
+
* @param {IPath[]} path_vertices パス頂点配列 / Path vertices array
|
|
18
|
+
* @param {Float32Array} context_matrix コンテキスト変換行列 / Context transformation matrix
|
|
19
|
+
* @param {Float32Array} fill_style フィルスタイル(RGBA) / Fill style (RGBA)
|
|
20
|
+
* @param {number} global_alpha グローバルアルファ値 / Global alpha value
|
|
21
|
+
* @param {boolean} is_main_attachment メインアタッチメントフラグ / Whether this is the main attachment
|
|
22
|
+
* @return {void}
|
|
23
|
+
*/
|
|
5
24
|
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
25
|
// クリップ境界を取得
|
|
7
26
|
const clipLevel = current_attachment.clipLevel;
|
|
@@ -2,4 +2,24 @@ import type { IAttachmentObject } from "../../interface/IAttachmentObject";
|
|
|
2
2
|
import type { IBlendMode } from "../../interface/IBlendMode";
|
|
3
3
|
import type { ILocalFilterConfig } from "../../interface/ILocalFilterConfig";
|
|
4
4
|
import type { BufferManager } from "../../BufferManager";
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* @description コンテナレイヤーの終了処理を実行する(フィルター適用+ブレンド+メインへの描画)
|
|
7
|
+
* Executes container layer end processing (filter application + blending + drawing to main)
|
|
8
|
+
* @param {IAttachmentObject} temp_attachment 一時アタッチメント / Temporary attachment
|
|
9
|
+
* @param {IAttachmentObject} main_attachment メインアタッチメント / Main attachment
|
|
10
|
+
* @param {string} _temp_name 一時名(未使用) / Temporary name (unused)
|
|
11
|
+
* @param {IBlendMode} blend_mode ブレンドモード / Blend mode
|
|
12
|
+
* @param {Float32Array} matrix 変換行列 / Transformation matrix
|
|
13
|
+
* @param {Float32Array | null} color_transform カラートランスフォーム配列 / Color transform array
|
|
14
|
+
* @param {boolean} use_filter フィルター使用フラグ / Whether to use filter
|
|
15
|
+
* @param {Float32Array | null} filter_bounds フィルターバウンディングボックス / Filter bounding box
|
|
16
|
+
* @param {Float32Array | null} params フィルターパラメータ配列 / Filter parameters array
|
|
17
|
+
* @param {string} unique_key ユニークキー / Unique key
|
|
18
|
+
* @param {string} filter_key フィルターキー / Filter key
|
|
19
|
+
* @param {number} _content_width コンテンツ幅(未使用) / Content width (unused)
|
|
20
|
+
* @param {number} _content_height コンテンツ高さ(未使用) / Content height (unused)
|
|
21
|
+
* @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
|
|
22
|
+
* @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
|
|
23
|
+
* @return {void}
|
|
24
|
+
*/
|
|
25
|
+
export declare const execute: (temp_attachment: IAttachmentObject, main_attachment: IAttachmentObject, _temp_name: string, blend_mode: IBlendMode, matrix: Float32Array, color_transform: Float32Array | null, use_filter: boolean, filter_bounds: Float32Array | null, params: Float32Array | null, unique_key: string, filter_key: string, _content_width: number, _content_height: number, config: ILocalFilterConfig, buffer_manager: BufferManager) => void;
|
|
@@ -11,40 +11,78 @@ import { execute as filterApplyGradientBevelFilterUseCase } from "../../Filter/G
|
|
|
11
11
|
import { execute as filterApplyGradientGlowFilterUseCase } from "../../Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase";
|
|
12
12
|
import { execute as filterApplyDisplacementMapFilterUseCase } from "../../Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase";
|
|
13
13
|
import { execute as blendApplyComplexBlendUseCase } from "../../Blend/usecase/BlendApplyComplexBlendUseCase";
|
|
14
|
+
/**
|
|
15
|
+
* @description ユニフォームデータの事前確保配列(4要素)
|
|
16
|
+
* Pre-allocated uniform data array (4 elements)
|
|
17
|
+
*/
|
|
14
18
|
const $uniform4 = new Float32Array(4);
|
|
19
|
+
/**
|
|
20
|
+
* @description ユニフォームデータの事前確保配列(8要素)
|
|
21
|
+
* Pre-allocated uniform data array (8 elements)
|
|
22
|
+
*/
|
|
15
23
|
const $uniform8 = new Float32Array(8);
|
|
24
|
+
/**
|
|
25
|
+
* @description ユニフォームデータの事前確保配列(20要素)
|
|
26
|
+
* Pre-allocated uniform data array (20 elements)
|
|
27
|
+
*/
|
|
16
28
|
const $uniform20 = new Float32Array(20);
|
|
17
29
|
// プリアロケート BindGroup Entry 配列
|
|
30
|
+
/**
|
|
31
|
+
* @description バインドグループエントリの事前確保配列
|
|
32
|
+
* Pre-allocated bind group entry array
|
|
33
|
+
*/
|
|
18
34
|
const $entries3 = [
|
|
19
35
|
{ "binding": 0, "resource": { "buffer": null } },
|
|
20
36
|
{ "binding": 1, "resource": null },
|
|
21
37
|
{ "binding": 2, "resource": null }
|
|
22
38
|
];
|
|
23
|
-
|
|
39
|
+
/**
|
|
40
|
+
* @description シンプルなブレンドモードのセット
|
|
41
|
+
* Set of simple blend modes
|
|
42
|
+
*/
|
|
43
|
+
const $SIMPLE_BLEND_MODES = new Set([
|
|
24
44
|
"normal", "layer", "add", "screen", "alpha", "erase", "copy"
|
|
25
45
|
]);
|
|
46
|
+
/**
|
|
47
|
+
* @description 恒等カラートランスフォーム
|
|
48
|
+
* Identity color transform
|
|
49
|
+
*/
|
|
26
50
|
const $identityColorTransform = new Float32Array([1, 1, 1, 1, 0, 0, 0, 0]);
|
|
27
|
-
|
|
51
|
+
/**
|
|
52
|
+
* @description カラートランスフォームが恒等変換かどうかを判定する
|
|
53
|
+
* Checks whether the color transform is an identity transform
|
|
54
|
+
* @param {Float32Array | null} ct カラートランスフォーム配列 / Color transform array
|
|
55
|
+
* @return {boolean} 恒等変換の場合true / True if identity transform
|
|
56
|
+
*/
|
|
57
|
+
const $isIdentityColorTransform = (ct) => {
|
|
28
58
|
if (!ct) {
|
|
29
59
|
return true;
|
|
30
60
|
}
|
|
31
61
|
return ct[0] === 1 && ct[1] === 1 && ct[2] === 1 && ct[3] === 1
|
|
32
62
|
&& ct[4] === 0 && ct[5] === 0 && ct[6] === 0 && ct[7] === 0;
|
|
33
63
|
};
|
|
34
|
-
|
|
64
|
+
/**
|
|
65
|
+
* @description アタッチメントにカラートランスフォームを適用する
|
|
66
|
+
* Applies color transform to an attachment
|
|
67
|
+
* @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
|
|
68
|
+
* @param {IAttachmentObject} attachment ソースアタッチメント / Source attachment
|
|
69
|
+
* @param {Float32Array} color_transform カラートランスフォーム配列 / Color transform array
|
|
70
|
+
* @return {IAttachmentObject} カラートランスフォーム適用後のアタッチメント / Attachment with color transform applied
|
|
71
|
+
*/
|
|
72
|
+
const $applyColorTransform = (config, attachment, color_transform) => {
|
|
35
73
|
const ctAttachment = config.frameBufferManager.createTemporaryAttachment(attachment.width, attachment.height);
|
|
36
74
|
const pipeline = config.pipelineManager.getPipeline("color_transform");
|
|
37
75
|
const bindGroupLayout = config.pipelineManager.getBindGroupLayout("texture_copy");
|
|
38
76
|
if (!pipeline || !bindGroupLayout || !attachment.texture || !ctAttachment.texture) {
|
|
39
77
|
return attachment;
|
|
40
78
|
}
|
|
41
|
-
$uniform8[0] =
|
|
42
|
-
$uniform8[1] =
|
|
43
|
-
$uniform8[2] =
|
|
44
|
-
$uniform8[3] =
|
|
45
|
-
$uniform8[4] =
|
|
46
|
-
$uniform8[5] =
|
|
47
|
-
$uniform8[6] =
|
|
79
|
+
$uniform8[0] = color_transform[0];
|
|
80
|
+
$uniform8[1] = color_transform[1];
|
|
81
|
+
$uniform8[2] = color_transform[2];
|
|
82
|
+
$uniform8[3] = color_transform[3];
|
|
83
|
+
$uniform8[4] = color_transform[4];
|
|
84
|
+
$uniform8[5] = color_transform[5];
|
|
85
|
+
$uniform8[6] = color_transform[6];
|
|
48
86
|
$uniform8[7] = 0;
|
|
49
87
|
const uniformBuffer = config.bufferManager.acquireAndWriteUniformBuffer($uniform8);
|
|
50
88
|
const sampler = config.textureManager.createSampler("container_ct_sampler", false);
|
|
@@ -63,20 +101,31 @@ const applyColorTransform = (config, attachment, colorTransform) => {
|
|
|
63
101
|
passEncoder.end();
|
|
64
102
|
return ctAttachment;
|
|
65
103
|
};
|
|
66
|
-
|
|
104
|
+
/**
|
|
105
|
+
* @description ソースアタッチメントの領域をフィルター用アタッチメントにコピーする
|
|
106
|
+
* Copies a region from source attachment to a filter attachment
|
|
107
|
+
* @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
|
|
108
|
+
* @param {IAttachmentObject} src_attachment ソースアタッチメント / Source attachment
|
|
109
|
+
* @param {number} x X座標 / X coordinate
|
|
110
|
+
* @param {number} y Y座標 / Y coordinate
|
|
111
|
+
* @param {number} width 幅 / Width
|
|
112
|
+
* @param {number} height 高さ / Height
|
|
113
|
+
* @return {IAttachmentObject} コピーされたアタッチメント / Copied attachment
|
|
114
|
+
*/
|
|
115
|
+
const $copyRegionToFilterAttachment = (config, src_attachment, x, y, width, height) => {
|
|
67
116
|
const dstAttachment = config.frameBufferManager.createTemporaryAttachment(width, height);
|
|
68
|
-
|
|
117
|
+
// texture_copy_rgba8 (BlurFilterVertex, yFlipTexCoord=true) を使用
|
|
118
|
+
const pipeline = config.pipelineManager.getPipeline("texture_copy_rgba8");
|
|
69
119
|
const bindGroupLayout = config.pipelineManager.getBindGroupLayout("texture_copy");
|
|
70
|
-
if (!pipeline || !bindGroupLayout || !
|
|
120
|
+
if (!pipeline || !bindGroupLayout || !src_attachment.texture || !dstAttachment.texture) {
|
|
71
121
|
return dstAttachment;
|
|
72
122
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const
|
|
79
|
-
const offsetY = (y + height) / srcAttachment.height;
|
|
123
|
+
// BlurFilterVertex (yFlipTexCoord=true):
|
|
124
|
+
// texCoord.y=0(fb上端) → uv.y=y/H, texCoord.y=1(fb下端) → uv.y=(y+h)/H
|
|
125
|
+
const scaleX = width / src_attachment.width;
|
|
126
|
+
const scaleY = height / src_attachment.height;
|
|
127
|
+
const offsetX = x / src_attachment.width;
|
|
128
|
+
const offsetY = y / src_attachment.height;
|
|
80
129
|
$uniform4[0] = scaleX;
|
|
81
130
|
$uniform4[1] = scaleY;
|
|
82
131
|
$uniform4[2] = offsetX;
|
|
@@ -85,7 +134,7 @@ const copyRegionToFilterAttachment = (config, srcAttachment, x, y, width, height
|
|
|
85
134
|
const sampler = config.textureManager.createSampler("container_copy_sampler", false);
|
|
86
135
|
$entries3[0].resource.buffer = uniformBuffer;
|
|
87
136
|
$entries3[1].resource = sampler;
|
|
88
|
-
$entries3[2].resource =
|
|
137
|
+
$entries3[2].resource = src_attachment.texture.view;
|
|
89
138
|
const bindGroup = config.device.createBindGroup({
|
|
90
139
|
"layout": bindGroupLayout,
|
|
91
140
|
"entries": $entries3
|
|
@@ -98,42 +147,54 @@ const copyRegionToFilterAttachment = (config, srcAttachment, x, y, width, height
|
|
|
98
147
|
passEncoder.end();
|
|
99
148
|
return dstAttachment;
|
|
100
149
|
};
|
|
101
|
-
|
|
102
|
-
|
|
150
|
+
/**
|
|
151
|
+
* @description フィルター結果をメインアタッチメントに描画する
|
|
152
|
+
* Draws filter result to the main attachment
|
|
153
|
+
* @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
|
|
154
|
+
* @param {IAttachmentObject} filter_attachment フィルターアタッチメント / Filter attachment
|
|
155
|
+
* @param {IAttachmentObject} main_attachment メインアタッチメント / Main attachment
|
|
156
|
+
* @param {IBlendMode} blend_mode ブレンドモード / Blend mode
|
|
157
|
+
* @param {number} x X座標 / X coordinate
|
|
158
|
+
* @param {number} y Y座標 / Y coordinate
|
|
159
|
+
* @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
|
|
160
|
+
* @return {void}
|
|
161
|
+
*/
|
|
162
|
+
const $drawFilterResultToMain = (config, filter_attachment, main_attachment, blend_mode, x, y, buffer_manager) => {
|
|
163
|
+
if (!main_attachment.texture || !filter_attachment.texture) {
|
|
103
164
|
return;
|
|
104
165
|
}
|
|
105
166
|
// WebGLと同じサブピクセル精度を維持するため、Math.floorを使用しない
|
|
106
167
|
let drawX = x;
|
|
107
168
|
let drawY = y;
|
|
108
|
-
let drawWidth =
|
|
109
|
-
let drawHeight =
|
|
169
|
+
let drawWidth = filter_attachment.width;
|
|
170
|
+
let drawHeight = filter_attachment.height;
|
|
110
171
|
let uvOffsetX = 0;
|
|
111
172
|
let uvOffsetY = 0;
|
|
112
173
|
if (drawX < 0) {
|
|
113
|
-
uvOffsetX = -drawX /
|
|
174
|
+
uvOffsetX = -drawX / filter_attachment.width;
|
|
114
175
|
drawWidth += drawX;
|
|
115
176
|
drawX = 0;
|
|
116
177
|
}
|
|
117
178
|
if (drawY < 0) {
|
|
118
|
-
uvOffsetY = -drawY /
|
|
179
|
+
uvOffsetY = -drawY / filter_attachment.height;
|
|
119
180
|
drawHeight += drawY;
|
|
120
181
|
drawY = 0;
|
|
121
182
|
}
|
|
122
183
|
if (drawWidth <= 0 || drawHeight <= 0) {
|
|
123
184
|
return;
|
|
124
185
|
}
|
|
125
|
-
const mainWidth =
|
|
126
|
-
const mainHeight =
|
|
186
|
+
const mainWidth = main_attachment.width;
|
|
187
|
+
const mainHeight = main_attachment.height;
|
|
127
188
|
if (drawX + drawWidth > mainWidth) {
|
|
128
189
|
drawWidth = mainWidth - drawX;
|
|
129
190
|
}
|
|
130
191
|
if (drawY + drawHeight > mainHeight) {
|
|
131
192
|
drawHeight = mainHeight - drawY;
|
|
132
193
|
}
|
|
133
|
-
if (SIMPLE_BLEND_MODES.has(
|
|
134
|
-
const useMsaa =
|
|
194
|
+
if ($SIMPLE_BLEND_MODES.has(blend_mode)) {
|
|
195
|
+
const useMsaa = main_attachment.msaa && main_attachment.msaaTexture?.view;
|
|
135
196
|
let pipelineName;
|
|
136
|
-
switch (
|
|
197
|
+
switch (blend_mode) {
|
|
137
198
|
case "add":
|
|
138
199
|
pipelineName = useMsaa ? "filter_output_add_msaa" : "filter_output_add";
|
|
139
200
|
break;
|
|
@@ -159,22 +220,22 @@ const drawFilterResultToMain = (config, filterAttachment, mainAttachment, blendM
|
|
|
159
220
|
return;
|
|
160
221
|
}
|
|
161
222
|
const sampler = config.textureManager.createSampler("container_output_sampler", true);
|
|
162
|
-
const uvScaleX = drawWidth /
|
|
163
|
-
const uvScaleY = drawHeight /
|
|
223
|
+
const uvScaleX = drawWidth / filter_attachment.width;
|
|
224
|
+
const uvScaleY = drawHeight / filter_attachment.height;
|
|
164
225
|
$uniform4[0] = uvScaleX;
|
|
165
226
|
$uniform4[1] = uvScaleY;
|
|
166
227
|
$uniform4[2] = uvOffsetX;
|
|
167
228
|
$uniform4[3] = uvOffsetY;
|
|
168
|
-
const uniformBuffer =
|
|
229
|
+
const uniformBuffer = buffer_manager.acquireAndWriteUniformBuffer($uniform4);
|
|
169
230
|
$entries3[0].resource.buffer = uniformBuffer;
|
|
170
231
|
$entries3[1].resource = sampler;
|
|
171
|
-
$entries3[2].resource =
|
|
232
|
+
$entries3[2].resource = filter_attachment.texture.view;
|
|
172
233
|
const bindGroup = config.device.createBindGroup({
|
|
173
234
|
"layout": bindGroupLayout,
|
|
174
235
|
"entries": $entries3
|
|
175
236
|
});
|
|
176
|
-
const colorView = useMsaa ?
|
|
177
|
-
const resolveTarget = useMsaa ?
|
|
237
|
+
const colorView = useMsaa ? main_attachment.msaaTexture.view : main_attachment.texture.view;
|
|
238
|
+
const resolveTarget = useMsaa ? main_attachment.texture.view : null;
|
|
178
239
|
const renderPassDescriptor = config.frameBufferManager.createRenderPassDescriptor(colorView, 0, 0, 0, 0, "load", resolveTarget);
|
|
179
240
|
// Viewportはfloat値でサブピクセル精度を維持(WebGLのsetTransform相当)
|
|
180
241
|
const vpX = Math.max(0, drawX);
|
|
@@ -198,7 +259,7 @@ const drawFilterResultToMain = (config, filterAttachment, mainAttachment, blendM
|
|
|
198
259
|
}
|
|
199
260
|
else {
|
|
200
261
|
// 複雑なブレンドモード
|
|
201
|
-
const dstAttachment = copyRegionToFilterAttachment(config,
|
|
262
|
+
const dstAttachment = $copyRegionToFilterAttachment(config, main_attachment, drawX, drawY, drawWidth, drawHeight);
|
|
202
263
|
$uniform8[0] = $identityColorTransform[0];
|
|
203
264
|
$uniform8[1] = $identityColorTransform[1];
|
|
204
265
|
$uniform8[2] = $identityColorTransform[2];
|
|
@@ -207,7 +268,7 @@ const drawFilterResultToMain = (config, filterAttachment, mainAttachment, blendM
|
|
|
207
268
|
$uniform8[5] = $identityColorTransform[5] / 255;
|
|
208
269
|
$uniform8[6] = $identityColorTransform[6] / 255;
|
|
209
270
|
$uniform8[7] = 0;
|
|
210
|
-
const blendedAttachment = blendApplyComplexBlendUseCase(
|
|
271
|
+
const blendedAttachment = blendApplyComplexBlendUseCase(filter_attachment, dstAttachment, blend_mode, $uniform8, {
|
|
211
272
|
"device": config.device,
|
|
212
273
|
"commandEncoder": config.commandEncoder,
|
|
213
274
|
"bufferManager": config.bufferManager,
|
|
@@ -217,20 +278,20 @@ const drawFilterResultToMain = (config, filterAttachment, mainAttachment, blendM
|
|
|
217
278
|
"frameTextures": config.frameTextures
|
|
218
279
|
});
|
|
219
280
|
// 結果をメインに描画
|
|
220
|
-
const useMsaa =
|
|
281
|
+
const useMsaa = main_attachment.msaa && main_attachment.msaaTexture?.view;
|
|
221
282
|
const resultPipelineName = useMsaa ? "filter_complex_blend_output_msaa" : "filter_complex_blend_output";
|
|
222
283
|
const resultPipeline = config.pipelineManager.getPipeline(resultPipelineName);
|
|
223
284
|
const resultLayout = config.pipelineManager.getBindGroupLayout("positioned_texture");
|
|
224
|
-
if (resultPipeline && resultLayout && blendedAttachment.texture &&
|
|
285
|
+
if (resultPipeline && resultLayout && blendedAttachment.texture && main_attachment.texture) {
|
|
225
286
|
$uniform8[0] = drawX;
|
|
226
287
|
$uniform8[1] = drawY;
|
|
227
288
|
$uniform8[2] = blendedAttachment.width;
|
|
228
289
|
$uniform8[3] = blendedAttachment.height;
|
|
229
|
-
$uniform8[4] =
|
|
230
|
-
$uniform8[5] =
|
|
290
|
+
$uniform8[4] = main_attachment.width;
|
|
291
|
+
$uniform8[5] = main_attachment.height;
|
|
231
292
|
$uniform8[6] = 0;
|
|
232
293
|
$uniform8[7] = 0;
|
|
233
|
-
const uniformBuffer =
|
|
294
|
+
const uniformBuffer = buffer_manager.acquireAndWriteUniformBuffer($uniform8);
|
|
234
295
|
const sampler = config.textureManager.createSampler("container_blend_output_sampler", false);
|
|
235
296
|
$entries3[0].resource.buffer = uniformBuffer;
|
|
236
297
|
$entries3[1].resource = sampler;
|
|
@@ -239,8 +300,8 @@ const drawFilterResultToMain = (config, filterAttachment, mainAttachment, blendM
|
|
|
239
300
|
"layout": resultLayout,
|
|
240
301
|
"entries": $entries3
|
|
241
302
|
});
|
|
242
|
-
const colorView = useMsaa ?
|
|
243
|
-
const resolveTarget = useMsaa ?
|
|
303
|
+
const colorView = useMsaa ? main_attachment.msaaTexture.view : main_attachment.texture.view;
|
|
304
|
+
const resolveTarget = useMsaa ? main_attachment.texture.view : null;
|
|
244
305
|
const renderPassDescriptor = config.frameBufferManager.createRenderPassDescriptor(colorView, 0, 0, 0, 0, "load", resolveTarget);
|
|
245
306
|
const passEncoder = config.commandEncoder.beginRenderPass(renderPassDescriptor);
|
|
246
307
|
passEncoder.setPipeline(resultPipeline);
|
|
@@ -252,7 +313,17 @@ const drawFilterResultToMain = (config, filterAttachment, mainAttachment, blendM
|
|
|
252
313
|
config.frameBufferManager.releaseTemporaryAttachment(blendedAttachment);
|
|
253
314
|
}
|
|
254
315
|
};
|
|
255
|
-
|
|
316
|
+
/**
|
|
317
|
+
* @description フィルターチェーンをアタッチメントに適用する
|
|
318
|
+
* Applies a chain of filters to an attachment
|
|
319
|
+
* @param {IAttachmentObject} filter_attachment フィルターアタッチメント / Filter attachment
|
|
320
|
+
* @param {Float32Array} matrix 変換行列 / Transformation matrix
|
|
321
|
+
* @param {Float32Array} params フィルターパラメータ配列 / Filter parameters array
|
|
322
|
+
* @param {number} device_pixel_ratio デバイスピクセル比 / Device pixel ratio
|
|
323
|
+
* @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
|
|
324
|
+
* @return {IAttachmentObject} フィルター適用後のアタッチメント / Attachment with filters applied
|
|
325
|
+
*/
|
|
326
|
+
const $applyFilterChain = (filter_attachment, matrix, params, device_pixel_ratio, config) => {
|
|
256
327
|
$offset.x = 0;
|
|
257
328
|
$offset.y = 0;
|
|
258
329
|
for (let idx = 0; params.length > idx;) {
|
|
@@ -260,20 +331,20 @@ const applyFilterChain = (filterAttachment, matrix, params, devicePixelRatio, co
|
|
|
260
331
|
switch (type) {
|
|
261
332
|
case 0: // BevelFilter
|
|
262
333
|
{
|
|
263
|
-
const newAtt = filterApplyBevelFilterUseCase(
|
|
264
|
-
if (
|
|
265
|
-
config.frameBufferManager.releaseTemporaryAttachment(
|
|
334
|
+
const newAtt = filterApplyBevelFilterUseCase(filter_attachment, matrix, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], Boolean(params[idx++]), device_pixel_ratio, config);
|
|
335
|
+
if (filter_attachment !== newAtt) {
|
|
336
|
+
config.frameBufferManager.releaseTemporaryAttachment(filter_attachment);
|
|
266
337
|
}
|
|
267
|
-
|
|
338
|
+
filter_attachment = newAtt;
|
|
268
339
|
}
|
|
269
340
|
break;
|
|
270
341
|
case 1: // BlurFilter
|
|
271
342
|
{
|
|
272
|
-
const newAtt = filterApplyBlurFilterUseCase(
|
|
273
|
-
if (
|
|
274
|
-
config.frameBufferManager.releaseTemporaryAttachment(
|
|
343
|
+
const newAtt = filterApplyBlurFilterUseCase(filter_attachment, matrix, params[idx++], params[idx++], params[idx++], device_pixel_ratio, config);
|
|
344
|
+
if (filter_attachment !== newAtt) {
|
|
345
|
+
config.frameBufferManager.releaseTemporaryAttachment(filter_attachment);
|
|
275
346
|
}
|
|
276
|
-
|
|
347
|
+
filter_attachment = newAtt;
|
|
277
348
|
}
|
|
278
349
|
break;
|
|
279
350
|
case 2: // ColorMatrixFilter
|
|
@@ -298,11 +369,11 @@ const applyFilterChain = (filterAttachment, matrix, params, devicePixelRatio, co
|
|
|
298
369
|
$uniform20[17] = params[idx++];
|
|
299
370
|
$uniform20[18] = params[idx++];
|
|
300
371
|
$uniform20[19] = params[idx++];
|
|
301
|
-
const newAtt = filterApplyColorMatrixFilterUseCase(
|
|
302
|
-
if (
|
|
303
|
-
config.frameBufferManager.releaseTemporaryAttachment(
|
|
372
|
+
const newAtt = filterApplyColorMatrixFilterUseCase(filter_attachment, $uniform20, config);
|
|
373
|
+
if (filter_attachment !== newAtt) {
|
|
374
|
+
config.frameBufferManager.releaseTemporaryAttachment(filter_attachment);
|
|
304
375
|
}
|
|
305
|
-
|
|
376
|
+
filter_attachment = newAtt;
|
|
306
377
|
}
|
|
307
378
|
break;
|
|
308
379
|
case 3: // ConvolutionFilter
|
|
@@ -314,11 +385,11 @@ const applyFilterChain = (filterAttachment, matrix, params, devicePixelRatio, co
|
|
|
314
385
|
for (let i = 0; i < length; i++) {
|
|
315
386
|
convMatrix[i] = params[idx++];
|
|
316
387
|
}
|
|
317
|
-
const newAtt = filterApplyConvolutionFilterUseCase(
|
|
318
|
-
if (
|
|
319
|
-
config.frameBufferManager.releaseTemporaryAttachment(
|
|
388
|
+
const newAtt = filterApplyConvolutionFilterUseCase(filter_attachment, matrixX, matrixY, convMatrix, params[idx++], params[idx++], Boolean(params[idx++]), Boolean(params[idx++]), params[idx++], params[idx++], config);
|
|
389
|
+
if (filter_attachment !== newAtt) {
|
|
390
|
+
config.frameBufferManager.releaseTemporaryAttachment(filter_attachment);
|
|
320
391
|
}
|
|
321
|
-
|
|
392
|
+
filter_attachment = newAtt;
|
|
322
393
|
}
|
|
323
394
|
break;
|
|
324
395
|
case 4: // DisplacementMapFilter
|
|
@@ -328,29 +399,29 @@ const applyFilterChain = (filterAttachment, matrix, params, devicePixelRatio, co
|
|
|
328
399
|
for (let i = 0; i < dmLen; i++) {
|
|
329
400
|
dmBuffer[i] = params[idx++];
|
|
330
401
|
}
|
|
331
|
-
const newAtt = filterApplyDisplacementMapFilterUseCase(
|
|
332
|
-
if (
|
|
333
|
-
config.frameBufferManager.releaseTemporaryAttachment(
|
|
402
|
+
const newAtt = filterApplyDisplacementMapFilterUseCase(filter_attachment, matrix, dmBuffer, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], device_pixel_ratio, config);
|
|
403
|
+
if (filter_attachment !== newAtt) {
|
|
404
|
+
config.frameBufferManager.releaseTemporaryAttachment(filter_attachment);
|
|
334
405
|
}
|
|
335
|
-
|
|
406
|
+
filter_attachment = newAtt;
|
|
336
407
|
}
|
|
337
408
|
break;
|
|
338
409
|
case 5: // DropShadowFilter
|
|
339
410
|
{
|
|
340
|
-
const newAtt = filterApplyDropShadowFilterUseCase(
|
|
341
|
-
if (
|
|
342
|
-
config.frameBufferManager.releaseTemporaryAttachment(
|
|
411
|
+
const newAtt = filterApplyDropShadowFilterUseCase(filter_attachment, matrix, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], Boolean(params[idx++]), Boolean(params[idx++]), Boolean(params[idx++]), device_pixel_ratio, config);
|
|
412
|
+
if (filter_attachment !== newAtt) {
|
|
413
|
+
config.frameBufferManager.releaseTemporaryAttachment(filter_attachment);
|
|
343
414
|
}
|
|
344
|
-
|
|
415
|
+
filter_attachment = newAtt;
|
|
345
416
|
}
|
|
346
417
|
break;
|
|
347
418
|
case 6: // GlowFilter
|
|
348
419
|
{
|
|
349
|
-
const newAtt = filterApplyGlowFilterUseCase(
|
|
350
|
-
if (
|
|
351
|
-
config.frameBufferManager.releaseTemporaryAttachment(
|
|
420
|
+
const newAtt = filterApplyGlowFilterUseCase(filter_attachment, matrix, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], Boolean(params[idx++]), Boolean(params[idx++]), device_pixel_ratio, config);
|
|
421
|
+
if (filter_attachment !== newAtt) {
|
|
422
|
+
config.frameBufferManager.releaseTemporaryAttachment(filter_attachment);
|
|
352
423
|
}
|
|
353
|
-
|
|
424
|
+
filter_attachment = newAtt;
|
|
354
425
|
}
|
|
355
426
|
break;
|
|
356
427
|
case 7: // GradientBevelFilter
|
|
@@ -372,11 +443,11 @@ const applyFilterChain = (filterAttachment, matrix, params, devicePixelRatio, co
|
|
|
372
443
|
for (let i = 0; i < gbRatiosLen; i++) {
|
|
373
444
|
gbRatios[i] = params[idx++];
|
|
374
445
|
}
|
|
375
|
-
const newAtt = filterApplyGradientBevelFilterUseCase(
|
|
376
|
-
if (
|
|
377
|
-
config.frameBufferManager.releaseTemporaryAttachment(
|
|
446
|
+
const newAtt = filterApplyGradientBevelFilterUseCase(filter_attachment, matrix, gbDist, gbAngle, gbColors, gbAlphas, gbRatios, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], Boolean(params[idx++]), device_pixel_ratio, config);
|
|
447
|
+
if (filter_attachment !== newAtt) {
|
|
448
|
+
config.frameBufferManager.releaseTemporaryAttachment(filter_attachment);
|
|
378
449
|
}
|
|
379
|
-
|
|
450
|
+
filter_attachment = newAtt;
|
|
380
451
|
}
|
|
381
452
|
break;
|
|
382
453
|
case 8: // GradientGlowFilter
|
|
@@ -398,37 +469,57 @@ const applyFilterChain = (filterAttachment, matrix, params, devicePixelRatio, co
|
|
|
398
469
|
for (let i = 0; i < ggRatiosLen; i++) {
|
|
399
470
|
ggRatios[i] = params[idx++];
|
|
400
471
|
}
|
|
401
|
-
const newAtt = filterApplyGradientGlowFilterUseCase(
|
|
402
|
-
if (
|
|
403
|
-
config.frameBufferManager.releaseTemporaryAttachment(
|
|
472
|
+
const newAtt = filterApplyGradientGlowFilterUseCase(filter_attachment, matrix, ggDist, ggAngle, ggColors, ggAlphas, ggRatios, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], Boolean(params[idx++]), device_pixel_ratio, config);
|
|
473
|
+
if (filter_attachment !== newAtt) {
|
|
474
|
+
config.frameBufferManager.releaseTemporaryAttachment(filter_attachment);
|
|
404
475
|
}
|
|
405
|
-
|
|
476
|
+
filter_attachment = newAtt;
|
|
406
477
|
}
|
|
407
478
|
break;
|
|
408
479
|
}
|
|
409
480
|
}
|
|
410
|
-
return
|
|
481
|
+
return filter_attachment;
|
|
411
482
|
};
|
|
412
|
-
|
|
413
|
-
|
|
483
|
+
/**
|
|
484
|
+
* @description コンテナレイヤーの終了処理を実行する(フィルター適用+ブレンド+メインへの描画)
|
|
485
|
+
* Executes container layer end processing (filter application + blending + drawing to main)
|
|
486
|
+
* @param {IAttachmentObject} temp_attachment 一時アタッチメント / Temporary attachment
|
|
487
|
+
* @param {IAttachmentObject} main_attachment メインアタッチメント / Main attachment
|
|
488
|
+
* @param {string} _temp_name 一時名(未使用) / Temporary name (unused)
|
|
489
|
+
* @param {IBlendMode} blend_mode ブレンドモード / Blend mode
|
|
490
|
+
* @param {Float32Array} matrix 変換行列 / Transformation matrix
|
|
491
|
+
* @param {Float32Array | null} color_transform カラートランスフォーム配列 / Color transform array
|
|
492
|
+
* @param {boolean} use_filter フィルター使用フラグ / Whether to use filter
|
|
493
|
+
* @param {Float32Array | null} filter_bounds フィルターバウンディングボックス / Filter bounding box
|
|
494
|
+
* @param {Float32Array | null} params フィルターパラメータ配列 / Filter parameters array
|
|
495
|
+
* @param {string} unique_key ユニークキー / Unique key
|
|
496
|
+
* @param {string} filter_key フィルターキー / Filter key
|
|
497
|
+
* @param {number} _content_width コンテンツ幅(未使用) / Content width (unused)
|
|
498
|
+
* @param {number} _content_height コンテンツ高さ(未使用) / Content height (unused)
|
|
499
|
+
* @param {ILocalFilterConfig} config フィルター設定 / Filter configuration
|
|
500
|
+
* @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
|
|
501
|
+
* @return {void}
|
|
502
|
+
*/
|
|
503
|
+
export const execute = (temp_attachment, main_attachment, _temp_name, blend_mode, matrix, color_transform, use_filter, filter_bounds, params, unique_key, filter_key, _content_width, _content_height, config, buffer_manager) => {
|
|
504
|
+
if (use_filter && matrix && filter_bounds && params) {
|
|
414
505
|
// containerEndLayerが呼ばれる=ディスプレイレイヤーがコンテンツ変更を検出して再レンダリングを要求
|
|
415
506
|
// 常に新鮮なテクスチャを抽出してフィルターを適用する
|
|
416
507
|
// (キャッシュはディスプレイレイヤーのcontainerDrawCachedFilterで管理)
|
|
417
508
|
// WebGL版と同じ: レイヤー全体をフィルター用にコピー
|
|
418
509
|
// レイヤーはコンテンツサイズで作成され、childrenは相対座標で描画されているため
|
|
419
510
|
// (0, 0, layerWidth, layerHeight) = コンテンツ全体
|
|
420
|
-
let filterAttachment = copyRegionToFilterAttachment(config,
|
|
511
|
+
let filterAttachment = $copyRegionToFilterAttachment(config, temp_attachment, 0, 0, temp_attachment.width, temp_attachment.height);
|
|
421
512
|
// 一時アタッチメントを遅延解放(コマンドバッファsubmit後に解放)
|
|
422
513
|
// destroyAttachmentは即座にGPUテクスチャを破棄するため、
|
|
423
514
|
// コマンドエンコーダに記録済みのレンダーパスが参照するテクスチャが無効になる
|
|
424
|
-
config.frameBufferManager.releaseTemporaryAttachment(
|
|
515
|
+
config.frameBufferManager.releaseTemporaryAttachment(temp_attachment);
|
|
425
516
|
// フィルターチェーンを適用
|
|
426
517
|
const devicePixelRatio = WebGPUUtil.getDevicePixelRatio();
|
|
427
|
-
filterAttachment = applyFilterChain(filterAttachment, matrix, params, devicePixelRatio, config);
|
|
518
|
+
filterAttachment = $applyFilterChain(filterAttachment, matrix, params, devicePixelRatio, config);
|
|
428
519
|
// キャッシュに保存
|
|
429
|
-
if (
|
|
430
|
-
$cacheStore.set(
|
|
431
|
-
$cacheStore.set(
|
|
520
|
+
if (unique_key) {
|
|
521
|
+
$cacheStore.set(unique_key, "fKey", filter_key);
|
|
522
|
+
$cacheStore.set(unique_key, "fTexture", filterAttachment);
|
|
432
523
|
}
|
|
433
524
|
// フィルター結果をメインに描画
|
|
434
525
|
if (filterAttachment) {
|
|
@@ -436,41 +527,41 @@ export const execute = (tempAttachment, mainAttachment, _tempName, blendMode, ma
|
|
|
436
527
|
// キャッシュにはフィルター結果のみ保存(CTは毎フレーム適用する)
|
|
437
528
|
let drawAttachment = filterAttachment;
|
|
438
529
|
let ctAttachment = null;
|
|
439
|
-
if (
|
|
440
|
-
ctAttachment = applyColorTransform(config, filterAttachment,
|
|
530
|
+
if (!$isIdentityColorTransform(color_transform)) {
|
|
531
|
+
ctAttachment = $applyColorTransform(config, filterAttachment, color_transform);
|
|
441
532
|
drawAttachment = ctAttachment;
|
|
442
533
|
}
|
|
443
534
|
const scaleX = Math.sqrt(matrix[0] * matrix[0] + matrix[1] * matrix[1]);
|
|
444
535
|
const scaleY = Math.sqrt(matrix[2] * matrix[2] + matrix[3] * matrix[3]);
|
|
445
|
-
const boundsXMin =
|
|
446
|
-
const boundsYMin =
|
|
536
|
+
const boundsXMin = filter_bounds[0] * (scaleX / devicePixelRatio);
|
|
537
|
+
const boundsYMin = filter_bounds[1] * (scaleY / devicePixelRatio);
|
|
447
538
|
// WebGL版と同じ: boundsXMin + matrix[4] で絶対位置
|
|
448
539
|
const drawX = boundsXMin + matrix[4];
|
|
449
540
|
const drawY = boundsYMin + matrix[5];
|
|
450
|
-
drawFilterResultToMain(config, drawAttachment,
|
|
541
|
+
$drawFilterResultToMain(config, drawAttachment, main_attachment, blend_mode, drawX, drawY, buffer_manager);
|
|
451
542
|
// CT一時アタッチメントを解放
|
|
452
543
|
if (ctAttachment) {
|
|
453
544
|
config.frameBufferManager.releaseTemporaryAttachment(ctAttachment);
|
|
454
545
|
}
|
|
455
546
|
// キャッシュされていないフィルター結果のみ解放
|
|
456
|
-
if (!
|
|
547
|
+
if (!unique_key) {
|
|
457
548
|
config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
|
|
458
549
|
}
|
|
459
550
|
}
|
|
460
551
|
}
|
|
461
552
|
else {
|
|
462
553
|
// ブレンドのみ:レイヤー全体をフィルター用にコピーしてメインに描画
|
|
463
|
-
let fullAttachment = copyRegionToFilterAttachment(config,
|
|
554
|
+
let fullAttachment = $copyRegionToFilterAttachment(config, temp_attachment, 0, 0, temp_attachment.width, temp_attachment.height);
|
|
464
555
|
// 一時アタッチメントを遅延解放(コマンドバッファsubmit後に解放)
|
|
465
|
-
config.frameBufferManager.releaseTemporaryAttachment(
|
|
556
|
+
config.frameBufferManager.releaseTemporaryAttachment(temp_attachment);
|
|
466
557
|
// ColorTransformが恒等変換でない場合、適用
|
|
467
|
-
if (
|
|
468
|
-
const ctAttachment = applyColorTransform(config, fullAttachment,
|
|
558
|
+
if (!$isIdentityColorTransform(color_transform)) {
|
|
559
|
+
const ctAttachment = $applyColorTransform(config, fullAttachment, color_transform);
|
|
469
560
|
config.frameBufferManager.releaseTemporaryAttachment(fullAttachment);
|
|
470
561
|
fullAttachment = ctAttachment;
|
|
471
562
|
}
|
|
472
563
|
// WebGL版と同じ: matrix[4], matrix[5] = layerBounds の絶対位置に描画
|
|
473
|
-
drawFilterResultToMain(config, fullAttachment,
|
|
564
|
+
$drawFilterResultToMain(config, fullAttachment, main_attachment, blend_mode, matrix[4], matrix[5], buffer_manager);
|
|
474
565
|
config.frameBufferManager.releaseTemporaryAttachment(fullAttachment);
|
|
475
566
|
}
|
|
476
567
|
};
|
|
@@ -3,4 +3,17 @@ import type { BufferManager } from "../../BufferManager";
|
|
|
3
3
|
import type { FrameBufferManager } from "../../FrameBufferManager";
|
|
4
4
|
import type { TextureManager } from "../../TextureManager";
|
|
5
5
|
import type { PipelineManager } from "../../Shader/PipelineManager";
|
|
6
|
+
/**
|
|
7
|
+
* @description インスタンス描画を実行する
|
|
8
|
+
* Executes instanced array drawing
|
|
9
|
+
* @param {GPUDevice} device GPUデバイス / GPU device
|
|
10
|
+
* @param {GPUCommandEncoder} command_encoder コマンドエンコーダ / Command encoder
|
|
11
|
+
* @param {GPURenderPassEncoder | null} render_pass_encoder レンダーパスエンコーダ / Render pass encoder
|
|
12
|
+
* @param {IAttachmentObject} main_attachment メインアタッチメント / Main attachment
|
|
13
|
+
* @param {BufferManager} buffer_manager バッファマネージャ / Buffer manager
|
|
14
|
+
* @param {FrameBufferManager} frame_buffer_manager フレームバッファマネージャ / Frame buffer manager
|
|
15
|
+
* @param {TextureManager} texture_manager テクスチャマネージャ / Texture manager
|
|
16
|
+
* @param {PipelineManager} pipeline_manager パイプラインマネージャ / Pipeline manager
|
|
17
|
+
* @return {GPURenderPassEncoder | null} レンダーパスエンコーダまたはnull / Render pass encoder or null
|
|
18
|
+
*/
|
|
6
19
|
export declare const execute: (device: GPUDevice, command_encoder: GPUCommandEncoder, render_pass_encoder: GPURenderPassEncoder | null, main_attachment: IAttachmentObject, buffer_manager: BufferManager, frame_buffer_manager: FrameBufferManager, texture_manager: TextureManager, pipeline_manager: PipelineManager) => GPURenderPassEncoder | null;
|