@next2d/webgpu 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +574 -0
- package/package.json +30 -0
- package/src/AtlasManager.d.ts +23 -0
- package/src/AtlasManager.js +123 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.d.ts +13 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.js +24 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.d.ts +15 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.js +31 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.d.ts +5 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.js +42 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.d.ts +16 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.js +28 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.d.ts +17 -0
- package/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.js +33 -0
- package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.d.ts +16 -0
- package/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.js +28 -0
- package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.d.ts +17 -0
- package/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.js +27 -0
- package/src/AttachmentManager/service/AttachmentManagerGetTextureService.d.ts +18 -0
- package/src/AttachmentManager/service/AttachmentManagerGetTextureService.js +27 -0
- package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.d.ts +12 -0
- package/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.js +17 -0
- package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.d.ts +26 -0
- package/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.js +43 -0
- package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.d.ts +18 -0
- package/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.js +33 -0
- package/src/AttachmentManager.d.ts +19 -0
- package/src/AttachmentManager.js +105 -0
- package/src/BezierConverter/BezierConverter.d.ts +16 -0
- package/src/BezierConverter/BezierConverter.js +15 -0
- package/src/BezierConverter/service/BezierConverterCalculateFlatnessService.d.ts +15 -0
- package/src/BezierConverter/service/BezierConverterCalculateFlatnessService.js +37 -0
- package/src/BezierConverter/service/BezierConverterSplitCubicService.d.ts +15 -0
- package/src/BezierConverter/service/BezierConverterSplitCubicService.js +47 -0
- package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.d.ts +29 -0
- package/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.js +80 -0
- package/src/Blend/BlendInstancedManager.d.ts +35 -0
- package/src/Blend/BlendInstancedManager.js +147 -0
- package/src/Blend/service/BlendAddService.d.ts +1 -0
- package/src/Blend/service/BlendAddService.js +8 -0
- package/src/Blend/service/BlendAlphaService.d.ts +1 -0
- package/src/Blend/service/BlendAlphaService.js +8 -0
- package/src/Blend/service/BlendEraseService.d.ts +1 -0
- package/src/Blend/service/BlendEraseService.js +8 -0
- package/src/Blend/service/BlendGetStateService.d.ts +12 -0
- package/src/Blend/service/BlendGetStateService.js +13 -0
- package/src/Blend/service/BlendOneZeroService.d.ts +1 -0
- package/src/Blend/service/BlendOneZeroService.js +8 -0
- package/src/Blend/service/BlendResetService.d.ts +1 -0
- package/src/Blend/service/BlendResetService.js +8 -0
- package/src/Blend/service/BlendScreenService.d.ts +1 -0
- package/src/Blend/service/BlendScreenService.js +8 -0
- package/src/Blend/service/BlendSetModeService.d.ts +2 -0
- package/src/Blend/service/BlendSetModeService.js +4 -0
- package/src/Blend/usecase/BlendApplyComplexBlendUseCase.d.ts +6 -0
- package/src/Blend/usecase/BlendApplyComplexBlendUseCase.js +79 -0
- package/src/Blend/usecase/BlendOperationUseCase.d.ts +11 -0
- package/src/Blend/usecase/BlendOperationUseCase.js +31 -0
- package/src/Blend.d.ts +8 -0
- package/src/Blend.js +91 -0
- package/src/BufferManager/service/BufferManagerCreateIndirectBufferService.d.ts +15 -0
- package/src/BufferManager/service/BufferManagerCreateIndirectBufferService.js +37 -0
- package/src/BufferManager/service/BufferManagerCreateRectVerticesService.d.ts +13 -0
- package/src/BufferManager/service/BufferManagerCreateRectVerticesService.js +23 -0
- package/src/BufferManager/service/BufferManagerCreateStorageBufferService.d.ts +17 -0
- package/src/BufferManager/service/BufferManagerCreateStorageBufferService.js +23 -0
- package/src/BufferManager/service/BufferManagerReleaseUniformBufferService.d.ts +12 -0
- package/src/BufferManager/service/BufferManagerReleaseUniformBufferService.js +32 -0
- package/src/BufferManager/service/BufferManagerReleaseVertexBufferService.d.ts +12 -0
- package/src/BufferManager/service/BufferManagerReleaseVertexBufferService.js +32 -0
- package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.d.ts +12 -0
- package/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.js +20 -0
- package/src/BufferManager/service/BufferManagerUpperPowerOfTwoService.d.ts +10 -0
- package/src/BufferManager/service/BufferManagerUpperPowerOfTwoService.js +18 -0
- package/src/BufferManager/usecase/BufferManagerAcquireStorageBufferUseCase.d.ts +15 -0
- package/src/BufferManager/usecase/BufferManagerAcquireStorageBufferUseCase.js +51 -0
- package/src/BufferManager/usecase/BufferManagerAcquireUniformBufferUseCase.d.ts +13 -0
- package/src/BufferManager/usecase/BufferManagerAcquireUniformBufferUseCase.js +26 -0
- package/src/BufferManager/usecase/BufferManagerAcquireVertexBufferUseCase.d.ts +14 -0
- package/src/BufferManager/usecase/BufferManagerAcquireVertexBufferUseCase.js +46 -0
- package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.d.ts +12 -0
- package/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.js +20 -0
- package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.d.ts +9 -0
- package/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.js +15 -0
- package/src/BufferManager.d.ts +93 -0
- package/src/BufferManager.js +487 -0
- package/src/Compute/ComputePipelineManager.d.ts +61 -0
- package/src/Compute/ComputePipelineManager.js +313 -0
- package/src/Compute/service/ComputeExecuteBlurService.d.ts +21 -0
- package/src/Compute/service/ComputeExecuteBlurService.js +81 -0
- package/src/Context/service/ContextComputeBitmapMatrixService.d.ts +1 -0
- package/src/Context/service/ContextComputeBitmapMatrixService.js +74 -0
- package/src/Context/service/ContextComputeGradientMatrixService.d.ts +4 -0
- package/src/Context/service/ContextComputeGradientMatrixService.js +88 -0
- package/src/Context/service/ContextFillSimpleService.d.ts +2 -0
- package/src/Context/service/ContextFillSimpleService.js +28 -0
- package/src/Context/service/ContextFillWithStencilMainService.d.ts +2 -0
- package/src/Context/service/ContextFillWithStencilMainService.js +19 -0
- package/src/Context/service/ContextFillWithStencilService.d.ts +2 -0
- package/src/Context/service/ContextFillWithStencilService.js +19 -0
- package/src/Context/usecase/ContextApplyFilterUseCase.d.ts +5 -0
- package/src/Context/usecase/ContextApplyFilterUseCase.js +668 -0
- package/src/Context/usecase/ContextBitmapFillUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextBitmapFillUseCase.js +210 -0
- package/src/Context/usecase/ContextBitmapStrokeUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextBitmapStrokeUseCase.js +119 -0
- package/src/Context/usecase/ContextClipUseCase.d.ts +5 -0
- package/src/Context/usecase/ContextClipUseCase.js +101 -0
- package/src/Context/usecase/ContextContainerEndLayerUseCase.d.ts +5 -0
- package/src/Context/usecase/ContextContainerEndLayerUseCase.js +476 -0
- package/src/Context/usecase/ContextDrawArraysInstancedUseCase.d.ts +6 -0
- package/src/Context/usecase/ContextDrawArraysInstancedUseCase.js +135 -0
- package/src/Context/usecase/ContextDrawIndirectUseCase.d.ts +6 -0
- package/src/Context/usecase/ContextDrawIndirectUseCase.js +154 -0
- package/src/Context/usecase/ContextGradientFillUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextGradientFillUseCase.js +230 -0
- package/src/Context/usecase/ContextGradientStrokeUseCase.d.ts +4 -0
- package/src/Context/usecase/ContextGradientStrokeUseCase.js +138 -0
- package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.d.ts +6 -0
- package/src/Context/usecase/ContextProcessComplexBlendQueueUseCase.js +213 -0
- package/src/Context.d.ts +430 -0
- package/src/Context.js +2453 -0
- package/src/FillTexturePool.d.ts +6 -0
- package/src/FillTexturePool.js +72 -0
- package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.d.ts +10 -0
- package/src/Filter/BevelFilter/FilterApplyBevelFilterUseCase.js +214 -0
- package/src/Filter/BevelFilterShader.d.ts +2 -0
- package/src/Filter/BevelFilterShader.js +107 -0
- package/src/Filter/BitmapFilterShader.d.ts +2 -0
- package/src/Filter/BitmapFilterShader.js +207 -0
- package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.d.ts +16 -0
- package/src/Filter/BlurFilter/FilterApplyBlurFilterUseCase.js +243 -0
- package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.d.ts +40 -0
- package/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.js +51 -0
- package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.d.ts +25 -0
- package/src/Filter/BlurFilter/usecase/FilterApplyBlurComputeUseCase.js +180 -0
- package/src/Filter/BlurFilterShader.d.ts +5 -0
- package/src/Filter/BlurFilterShader.js +109 -0
- package/src/Filter/BlurFilterUseCase.d.ts +36 -0
- package/src/Filter/BlurFilterUseCase.js +85 -0
- package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.d.ts +12 -0
- package/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.js +90 -0
- package/src/Filter/ColorMatrixFilterShader.d.ts +4 -0
- package/src/Filter/ColorMatrixFilterShader.js +51 -0
- package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.d.ts +6 -0
- package/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.js +144 -0
- package/src/Filter/ConvolutionFilterShader.d.ts +2 -0
- package/src/Filter/ConvolutionFilterShader.js +115 -0
- package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.d.ts +6 -0
- package/src/Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase.js +172 -0
- package/src/Filter/DisplacementMapFilterShader.d.ts +2 -0
- package/src/Filter/DisplacementMapFilterShader.js +114 -0
- package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.d.ts +24 -0
- package/src/Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase.js +179 -0
- package/src/Filter/DropShadowFilterShader.d.ts +4 -0
- package/src/Filter/DropShadowFilterShader.js +93 -0
- package/src/Filter/FilterGradientLUTCache.d.ts +29 -0
- package/src/Filter/FilterGradientLUTCache.js +84 -0
- package/src/Filter/FilterOffset.d.ts +8 -0
- package/src/Filter/FilterOffset.js +10 -0
- package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.d.ts +24 -0
- package/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.js +143 -0
- package/src/Filter/GlowFilterShader.d.ts +4 -0
- package/src/Filter/GlowFilterShader.js +66 -0
- package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.d.ts +29 -0
- package/src/Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase.js +216 -0
- package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.d.ts +29 -0
- package/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.js +164 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.d.ts +4 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.js +23 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.d.ts +4 -0
- package/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.js +28 -0
- package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.d.ts +11 -0
- package/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.js +19 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.d.ts +23 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.js +125 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.d.ts +14 -0
- package/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.js +23 -0
- package/src/FrameBufferManager.d.ts +24 -0
- package/src/FrameBufferManager.js +161 -0
- package/src/Gradient/GradientLUTCache.d.ts +61 -0
- package/src/Gradient/GradientLUTCache.js +153 -0
- package/src/Gradient/GradientLUTGenerator.d.ts +30 -0
- package/src/Gradient/GradientLUTGenerator.js +202 -0
- package/src/Grid.d.ts +18 -0
- package/src/Grid.js +21 -0
- package/src/Mask/service/MaskBeginMaskService.d.ts +9 -0
- package/src/Mask/service/MaskBeginMaskService.js +22 -0
- package/src/Mask/service/MaskEndMaskService.d.ts +15 -0
- package/src/Mask/service/MaskEndMaskService.js +36 -0
- package/src/Mask/service/MaskSetMaskBoundsService.d.ts +13 -0
- package/src/Mask/service/MaskSetMaskBoundsService.js +36 -0
- package/src/Mask/service/MaskUnionMaskService.d.ts +4 -0
- package/src/Mask/service/MaskUnionMaskService.js +74 -0
- package/src/Mask/usecase/MaskBindUseCase.d.ts +10 -0
- package/src/Mask/usecase/MaskBindUseCase.js +20 -0
- package/src/Mask/usecase/MaskLeaveMaskUseCase.d.ts +13 -0
- package/src/Mask/usecase/MaskLeaveMaskUseCase.js +51 -0
- package/src/Mask.d.ts +12 -0
- package/src/Mask.js +41 -0
- package/src/Mesh/service/MeshFillGenerateService.d.ts +19 -0
- package/src/Mesh/service/MeshFillGenerateService.js +76 -0
- package/src/Mesh/service/MeshLerpService.d.ts +13 -0
- package/src/Mesh/service/MeshLerpService.js +17 -0
- package/src/Mesh/service/MeshStrokeFillGenerateService.d.ts +19 -0
- package/src/Mesh/service/MeshStrokeFillGenerateService.js +76 -0
- package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.d.ts +13 -0
- package/src/Mesh/usecase/MeshBitmapStrokeGenerateUseCase.js +65 -0
- package/src/Mesh/usecase/MeshFillGenerateUseCase.d.ts +12 -0
- package/src/Mesh/usecase/MeshFillGenerateUseCase.js +48 -0
- package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.d.ts +13 -0
- package/src/Mesh/usecase/MeshGradientStrokeGenerateUseCase.js +65 -0
- package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.d.ts +14 -0
- package/src/Mesh/usecase/MeshSplitQuadraticBezierUseCase.js +28 -0
- package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.d.ts +18 -0
- package/src/Mesh/usecase/MeshStrokeFillGenerateUseCase.js +54 -0
- package/src/Mesh/usecase/MeshStrokeGenerateUseCase.d.ts +25 -0
- package/src/Mesh/usecase/MeshStrokeGenerateUseCase.js +608 -0
- package/src/PathCommand.d.ts +123 -0
- package/src/PathCommand.js +317 -0
- package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.d.ts +11 -0
- package/src/SamplerCache/service/SamplerCacheCreateCommonSamplersService.js +35 -0
- package/src/SamplerCache/service/SamplerCacheGenerateKeyService.d.ts +13 -0
- package/src/SamplerCache/service/SamplerCacheGenerateKeyService.js +15 -0
- package/src/SamplerCache/service/SamplerCacheGetOrCreateService.d.ts +15 -0
- package/src/SamplerCache/service/SamplerCacheGetOrCreateService.js +30 -0
- package/src/SamplerCache.d.ts +18 -0
- package/src/SamplerCache.js +61 -0
- package/src/Shader/BlendModeShader.d.ts +51 -0
- package/src/Shader/BlendModeShader.js +71 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.d.ts +12 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTCalculateResolutionService.js +28 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.d.ts +13 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTGeneratePixelsService.js +61 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.d.ts +19 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTInterpolateColorService.js +37 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.d.ts +11 -0
- package/src/Shader/GradientLUTGenerator/service/GradientLUTParseStopsService.js +24 -0
- package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.d.ts +14 -0
- package/src/Shader/GradientLUTGenerator/usecase/GradientLUTGenerateDataUseCase.js +24 -0
- package/src/Shader/PipelineManager.d.ts +57 -0
- package/src/Shader/PipelineManager.js +2868 -0
- package/src/Shader/ShaderInstancedManager.d.ts +8 -0
- package/src/Shader/ShaderInstancedManager.js +18 -0
- package/src/Shader/ShaderSource.d.ts +60 -0
- package/src/Shader/ShaderSource.js +518 -0
- package/src/Shader/wgsl/common/SharedWgsl.d.ts +5 -0
- package/src/Shader/wgsl/common/SharedWgsl.js +37 -0
- package/src/Shader/wgsl/fragment/BasicFragment.d.ts +2 -0
- package/src/Shader/wgsl/fragment/BasicFragment.js +28 -0
- package/src/Shader/wgsl/fragment/BitmapFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/BitmapFragment.js +43 -0
- package/src/Shader/wgsl/fragment/BlendFragment.d.ts +8 -0
- package/src/Shader/wgsl/fragment/BlendFragment.js +63 -0
- package/src/Shader/wgsl/fragment/EffectFragment.d.ts +6 -0
- package/src/Shader/wgsl/fragment/EffectFragment.js +324 -0
- package/src/Shader/wgsl/fragment/FillFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/FillFragment.js +28 -0
- package/src/Shader/wgsl/fragment/FilterFragment.d.ts +10 -0
- package/src/Shader/wgsl/fragment/FilterFragment.js +212 -0
- package/src/Shader/wgsl/fragment/GradientFragment.d.ts +3 -0
- package/src/Shader/wgsl/fragment/GradientFragment.js +118 -0
- package/src/Shader/wgsl/fragment/InstancedFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/InstancedFragment.js +20 -0
- package/src/Shader/wgsl/fragment/MaskFragment.d.ts +1 -0
- package/src/Shader/wgsl/fragment/MaskFragment.js +17 -0
- package/src/Shader/wgsl/fragment/StencilFragment.d.ts +2 -0
- package/src/Shader/wgsl/fragment/StencilFragment.js +33 -0
- package/src/Shader/wgsl/vertex/BasicVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/BasicVertex.js +37 -0
- package/src/Shader/wgsl/vertex/BitmapVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/BitmapVertex.js +43 -0
- package/src/Shader/wgsl/vertex/FillVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/FillVertex.js +35 -0
- package/src/Shader/wgsl/vertex/FilterVertex.d.ts +12 -0
- package/src/Shader/wgsl/vertex/FilterVertex.js +193 -0
- package/src/Shader/wgsl/vertex/GradientVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/GradientVertex.js +44 -0
- package/src/Shader/wgsl/vertex/InstancedVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/InstancedVertex.js +48 -0
- package/src/Shader/wgsl/vertex/MaskVertex.d.ts +1 -0
- package/src/Shader/wgsl/vertex/MaskVertex.js +36 -0
- package/src/Shader/wgsl/vertex/StencilVertex.d.ts +2 -0
- package/src/Shader/wgsl/vertex/StencilVertex.js +66 -0
- package/src/TextureManager/service/TextureManagerInitializeSamplersService.d.ts +11 -0
- package/src/TextureManager/service/TextureManagerInitializeSamplersService.js +48 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.d.ts +13 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromImageBitmapUseCase.js +30 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.d.ts +15 -0
- package/src/TextureManager/usecase/TextureManagerCreateTextureFromPixelsUseCase.js +26 -0
- package/src/TextureManager.d.ts +15 -0
- package/src/TextureManager.js +87 -0
- package/src/TexturePool/service/TexturePoolCleanupService.d.ts +14 -0
- package/src/TexturePool/service/TexturePoolCleanupService.js +28 -0
- package/src/TexturePool/service/TexturePoolEvictOldestService.d.ts +11 -0
- package/src/TexturePool/service/TexturePoolEvictOldestService.js +24 -0
- package/src/TexturePool/service/TexturePoolReleaseService.d.ts +13 -0
- package/src/TexturePool/service/TexturePoolReleaseService.js +22 -0
- package/src/TexturePool/usecase/TexturePoolAcquireUseCase.d.ts +19 -0
- package/src/TexturePool/usecase/TexturePoolAcquireUseCase.js +90 -0
- package/src/TexturePool.d.ts +69 -0
- package/src/TexturePool.js +151 -0
- package/src/WebGPUUtil.d.ts +102 -0
- package/src/WebGPUUtil.js +157 -0
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/interface/IAttachmentObject.d.ts +41 -0
- package/src/interface/IAttachmentObject.js +1 -0
- package/src/interface/IBlendMode.d.ts +1 -0
- package/src/interface/IBlendMode.js +1 -0
- package/src/interface/IBlendState.d.ts +8 -0
- package/src/interface/IBlendState.js +1 -0
- package/src/interface/IBounds.d.ts +6 -0
- package/src/interface/IBounds.js +1 -0
- package/src/interface/ICachedBindGroup.d.ts +8 -0
- package/src/interface/ICachedBindGroup.js +1 -0
- package/src/interface/IColorBufferObject.d.ts +17 -0
- package/src/interface/IColorBufferObject.js +1 -0
- package/src/interface/IComplexBlendItem.d.ts +19 -0
- package/src/interface/IComplexBlendItem.js +1 -0
- package/src/interface/IFilterConfig.d.ts +29 -0
- package/src/interface/IFilterConfig.js +1 -0
- package/src/interface/IGradientLUTData.d.ts +8 -0
- package/src/interface/IGradientLUTData.js +1 -0
- package/src/interface/IGradientStop.d.ts +11 -0
- package/src/interface/IGradientStop.js +1 -0
- package/src/interface/ILocalFilterConfig.d.ts +21 -0
- package/src/interface/ILocalFilterConfig.js +1 -0
- package/src/interface/IMeshResult.d.ts +8 -0
- package/src/interface/IMeshResult.js +1 -0
- package/src/interface/IPath.d.ts +8 -0
- package/src/interface/IPath.js +1 -0
- package/src/interface/IPoint.d.ts +4 -0
- package/src/interface/IPoint.js +1 -0
- package/src/interface/IPooledBuffer.d.ts +8 -0
- package/src/interface/IPooledBuffer.js +1 -0
- package/src/interface/IPooledTexture.d.ts +17 -0
- package/src/interface/IPooledTexture.js +1 -0
- package/src/interface/IQuadraticSegment.d.ts +9 -0
- package/src/interface/IQuadraticSegment.js +1 -0
- package/src/interface/IRectangleInfo.d.ts +13 -0
- package/src/interface/IRectangleInfo.js +1 -0
- package/src/interface/IStencilBufferObject.d.ts +16 -0
- package/src/interface/IStencilBufferObject.js +1 -0
- package/src/interface/IStorageBufferConfig.d.ts +40 -0
- package/src/interface/IStorageBufferConfig.js +1 -0
- package/src/interface/ITextureObject.d.ts +16 -0
- package/src/interface/ITextureObject.js +1 -0
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
import { $offset } from "../../Filter/FilterOffset";
|
|
2
|
+
import { WebGPUUtil } from "../../WebGPUUtil";
|
|
3
|
+
import { $cacheStore } from "@next2d/cache";
|
|
4
|
+
import { execute as filterApplyBlurFilterUseCase } from "../../Filter/BlurFilter/FilterApplyBlurFilterUseCase";
|
|
5
|
+
import { execute as filterApplyColorMatrixFilterUseCase } from "../../Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase";
|
|
6
|
+
import { execute as filterApplyGlowFilterUseCase } from "../../Filter/GlowFilter/FilterApplyGlowFilterUseCase";
|
|
7
|
+
import { execute as filterApplyDropShadowFilterUseCase } from "../../Filter/DropShadowFilter/FilterApplyDropShadowFilterUseCase";
|
|
8
|
+
import { execute as filterApplyBevelFilterUseCase } from "../../Filter/BevelFilter/FilterApplyBevelFilterUseCase";
|
|
9
|
+
import { execute as filterApplyConvolutionFilterUseCase } from "../../Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase";
|
|
10
|
+
import { execute as filterApplyGradientBevelFilterUseCase } from "../../Filter/GradientBevelFilter/FilterApplyGradientBevelFilterUseCase";
|
|
11
|
+
import { execute as filterApplyGradientGlowFilterUseCase } from "../../Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase";
|
|
12
|
+
import { execute as filterApplyDisplacementMapFilterUseCase } from "../../Filter/DisplacementMapFilter/FilterApplyDisplacementMapFilterUseCase";
|
|
13
|
+
import { execute as blendApplyComplexBlendUseCase } from "../../Blend/usecase/BlendApplyComplexBlendUseCase";
|
|
14
|
+
const $uniform4 = new Float32Array(4);
|
|
15
|
+
const $uniform8 = new Float32Array(8);
|
|
16
|
+
const $uniform20 = new Float32Array(20);
|
|
17
|
+
// プリアロケート BindGroup Entry 配列
|
|
18
|
+
const $entries3 = [
|
|
19
|
+
{ "binding": 0, "resource": { "buffer": null } },
|
|
20
|
+
{ "binding": 1, "resource": null },
|
|
21
|
+
{ "binding": 2, "resource": null }
|
|
22
|
+
];
|
|
23
|
+
const SIMPLE_BLEND_MODES = new Set([
|
|
24
|
+
"normal", "layer", "add", "screen", "alpha", "erase", "copy"
|
|
25
|
+
]);
|
|
26
|
+
const $identityColorTransform = new Float32Array([1, 1, 1, 1, 0, 0, 0, 0]);
|
|
27
|
+
const isIdentityColorTransform = (ct) => {
|
|
28
|
+
if (!ct) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
return ct[0] === 1 && ct[1] === 1 && ct[2] === 1 && ct[3] === 1
|
|
32
|
+
&& ct[4] === 0 && ct[5] === 0 && ct[6] === 0 && ct[7] === 0;
|
|
33
|
+
};
|
|
34
|
+
const applyColorTransform = (config, attachment, colorTransform) => {
|
|
35
|
+
const ctAttachment = config.frameBufferManager.createTemporaryAttachment(attachment.width, attachment.height);
|
|
36
|
+
const pipeline = config.pipelineManager.getPipeline("color_transform");
|
|
37
|
+
const bindGroupLayout = config.pipelineManager.getBindGroupLayout("texture_copy");
|
|
38
|
+
if (!pipeline || !bindGroupLayout || !attachment.texture || !ctAttachment.texture) {
|
|
39
|
+
return attachment;
|
|
40
|
+
}
|
|
41
|
+
$uniform8[0] = colorTransform[0];
|
|
42
|
+
$uniform8[1] = colorTransform[1];
|
|
43
|
+
$uniform8[2] = colorTransform[2];
|
|
44
|
+
$uniform8[3] = colorTransform[3];
|
|
45
|
+
$uniform8[4] = colorTransform[4];
|
|
46
|
+
$uniform8[5] = colorTransform[5];
|
|
47
|
+
$uniform8[6] = colorTransform[6];
|
|
48
|
+
$uniform8[7] = 0;
|
|
49
|
+
const uniformBuffer = config.bufferManager.acquireAndWriteUniformBuffer($uniform8);
|
|
50
|
+
const sampler = config.textureManager.createSampler("container_ct_sampler", false);
|
|
51
|
+
$entries3[0].resource.buffer = uniformBuffer;
|
|
52
|
+
$entries3[1].resource = sampler;
|
|
53
|
+
$entries3[2].resource = attachment.texture.view;
|
|
54
|
+
const bindGroup = config.device.createBindGroup({
|
|
55
|
+
"layout": bindGroupLayout,
|
|
56
|
+
"entries": $entries3
|
|
57
|
+
});
|
|
58
|
+
const renderPassDescriptor = config.frameBufferManager.createRenderPassDescriptor(ctAttachment.texture.view, 0, 0, 0, 0, "clear");
|
|
59
|
+
const passEncoder = config.commandEncoder.beginRenderPass(renderPassDescriptor);
|
|
60
|
+
passEncoder.setPipeline(pipeline);
|
|
61
|
+
passEncoder.setBindGroup(0, bindGroup);
|
|
62
|
+
passEncoder.draw(6, 1, 0, 0);
|
|
63
|
+
passEncoder.end();
|
|
64
|
+
return ctAttachment;
|
|
65
|
+
};
|
|
66
|
+
const copyRegionToFilterAttachment = (config, srcAttachment, x, y, width, height) => {
|
|
67
|
+
const dstAttachment = config.frameBufferManager.createTemporaryAttachment(width, height);
|
|
68
|
+
const pipeline = config.pipelineManager.getPipeline("complex_blend_copy");
|
|
69
|
+
const bindGroupLayout = config.pipelineManager.getBindGroupLayout("texture_copy");
|
|
70
|
+
if (!pipeline || !bindGroupLayout || !srcAttachment.texture || !dstAttachment.texture) {
|
|
71
|
+
return dstAttachment;
|
|
72
|
+
}
|
|
73
|
+
const scaleX = width / srcAttachment.width;
|
|
74
|
+
const offsetX = x / srcAttachment.width;
|
|
75
|
+
// ComplexBlendCopyVertexはOpenGL座標系のtexCoord(Y軸反転)を使用するため、
|
|
76
|
+
// UV uniformでY反転を補正して正しい向きの出力を得る
|
|
77
|
+
// texCoord.y=1(fb上端) → uv.y=y/H(ソース上端), texCoord.y=0(fb下端) → uv.y=(y+h)/H(ソース下端)
|
|
78
|
+
const scaleY = -(height / srcAttachment.height);
|
|
79
|
+
const offsetY = (y + height) / srcAttachment.height;
|
|
80
|
+
$uniform4[0] = scaleX;
|
|
81
|
+
$uniform4[1] = scaleY;
|
|
82
|
+
$uniform4[2] = offsetX;
|
|
83
|
+
$uniform4[3] = offsetY;
|
|
84
|
+
const uniformBuffer = config.bufferManager.acquireAndWriteUniformBuffer($uniform4);
|
|
85
|
+
const sampler = config.textureManager.createSampler("container_copy_sampler", false);
|
|
86
|
+
$entries3[0].resource.buffer = uniformBuffer;
|
|
87
|
+
$entries3[1].resource = sampler;
|
|
88
|
+
$entries3[2].resource = srcAttachment.texture.view;
|
|
89
|
+
const bindGroup = config.device.createBindGroup({
|
|
90
|
+
"layout": bindGroupLayout,
|
|
91
|
+
"entries": $entries3
|
|
92
|
+
});
|
|
93
|
+
const renderPassDescriptor = config.frameBufferManager.createRenderPassDescriptor(dstAttachment.texture.view, 0, 0, 0, 0, "clear");
|
|
94
|
+
const passEncoder = config.commandEncoder.beginRenderPass(renderPassDescriptor);
|
|
95
|
+
passEncoder.setPipeline(pipeline);
|
|
96
|
+
passEncoder.setBindGroup(0, bindGroup);
|
|
97
|
+
passEncoder.draw(6, 1, 0, 0);
|
|
98
|
+
passEncoder.end();
|
|
99
|
+
return dstAttachment;
|
|
100
|
+
};
|
|
101
|
+
const drawFilterResultToMain = (config, filterAttachment, mainAttachment, blendMode, x, y, bufferManager) => {
|
|
102
|
+
if (!mainAttachment.texture || !filterAttachment.texture) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// WebGLと同じサブピクセル精度を維持するため、Math.floorを使用しない
|
|
106
|
+
let drawX = x;
|
|
107
|
+
let drawY = y;
|
|
108
|
+
let drawWidth = filterAttachment.width;
|
|
109
|
+
let drawHeight = filterAttachment.height;
|
|
110
|
+
let uvOffsetX = 0;
|
|
111
|
+
let uvOffsetY = 0;
|
|
112
|
+
if (drawX < 0) {
|
|
113
|
+
uvOffsetX = -drawX / filterAttachment.width;
|
|
114
|
+
drawWidth += drawX;
|
|
115
|
+
drawX = 0;
|
|
116
|
+
}
|
|
117
|
+
if (drawY < 0) {
|
|
118
|
+
uvOffsetY = -drawY / filterAttachment.height;
|
|
119
|
+
drawHeight += drawY;
|
|
120
|
+
drawY = 0;
|
|
121
|
+
}
|
|
122
|
+
if (drawWidth <= 0 || drawHeight <= 0) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const mainWidth = mainAttachment.width;
|
|
126
|
+
const mainHeight = mainAttachment.height;
|
|
127
|
+
if (drawX + drawWidth > mainWidth) {
|
|
128
|
+
drawWidth = mainWidth - drawX;
|
|
129
|
+
}
|
|
130
|
+
if (drawY + drawHeight > mainHeight) {
|
|
131
|
+
drawHeight = mainHeight - drawY;
|
|
132
|
+
}
|
|
133
|
+
if (SIMPLE_BLEND_MODES.has(blendMode)) {
|
|
134
|
+
const useMsaa = mainAttachment.msaa && mainAttachment.msaaTexture?.view;
|
|
135
|
+
let pipelineName;
|
|
136
|
+
switch (blendMode) {
|
|
137
|
+
case "add":
|
|
138
|
+
pipelineName = useMsaa ? "filter_output_add_msaa" : "filter_output_add";
|
|
139
|
+
break;
|
|
140
|
+
case "screen":
|
|
141
|
+
pipelineName = useMsaa ? "filter_output_screen_msaa" : "filter_output_screen";
|
|
142
|
+
break;
|
|
143
|
+
case "alpha":
|
|
144
|
+
pipelineName = useMsaa ? "filter_output_alpha_msaa" : "filter_output_alpha";
|
|
145
|
+
break;
|
|
146
|
+
case "erase":
|
|
147
|
+
pipelineName = useMsaa ? "filter_output_erase_msaa" : "filter_output_erase";
|
|
148
|
+
break;
|
|
149
|
+
case "copy":
|
|
150
|
+
pipelineName = useMsaa ? "texture_copy_bgra_msaa" : "texture_copy_bgra";
|
|
151
|
+
break;
|
|
152
|
+
default:
|
|
153
|
+
pipelineName = useMsaa ? "filter_output_msaa" : "filter_output";
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
const pipeline = config.pipelineManager.getPipeline(pipelineName);
|
|
157
|
+
const bindGroupLayout = config.pipelineManager.getBindGroupLayout("texture_copy");
|
|
158
|
+
if (!pipeline || !bindGroupLayout) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const sampler = config.textureManager.createSampler("container_output_sampler", true);
|
|
162
|
+
const uvScaleX = drawWidth / filterAttachment.width;
|
|
163
|
+
const uvScaleY = drawHeight / filterAttachment.height;
|
|
164
|
+
$uniform4[0] = uvScaleX;
|
|
165
|
+
$uniform4[1] = uvScaleY;
|
|
166
|
+
$uniform4[2] = uvOffsetX;
|
|
167
|
+
$uniform4[3] = uvOffsetY;
|
|
168
|
+
const uniformBuffer = bufferManager.acquireAndWriteUniformBuffer($uniform4);
|
|
169
|
+
$entries3[0].resource.buffer = uniformBuffer;
|
|
170
|
+
$entries3[1].resource = sampler;
|
|
171
|
+
$entries3[2].resource = filterAttachment.texture.view;
|
|
172
|
+
const bindGroup = config.device.createBindGroup({
|
|
173
|
+
"layout": bindGroupLayout,
|
|
174
|
+
"entries": $entries3
|
|
175
|
+
});
|
|
176
|
+
const colorView = useMsaa ? mainAttachment.msaaTexture.view : mainAttachment.texture.view;
|
|
177
|
+
const resolveTarget = useMsaa ? mainAttachment.texture.view : null;
|
|
178
|
+
const renderPassDescriptor = config.frameBufferManager.createRenderPassDescriptor(colorView, 0, 0, 0, 0, "load", resolveTarget);
|
|
179
|
+
// Viewportはfloat値でサブピクセル精度を維持(WebGLのsetTransform相当)
|
|
180
|
+
const vpX = Math.max(0, drawX);
|
|
181
|
+
const vpY = Math.max(0, drawY);
|
|
182
|
+
const vpW = Math.max(1, drawWidth);
|
|
183
|
+
const vpH = Math.max(1, drawHeight);
|
|
184
|
+
const scissorX = Math.max(0, Math.floor(vpX));
|
|
185
|
+
const scissorY = Math.max(0, Math.floor(vpY));
|
|
186
|
+
const scissorW = Math.max(1, Math.min(Math.ceil(vpX + vpW) - scissorX, mainWidth - scissorX));
|
|
187
|
+
const scissorH = Math.max(1, Math.min(Math.ceil(vpY + vpH) - scissorY, mainHeight - scissorY));
|
|
188
|
+
if (scissorW <= 0 || scissorH <= 0 || scissorX >= mainWidth || scissorY >= mainHeight) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const passEncoder = config.commandEncoder.beginRenderPass(renderPassDescriptor);
|
|
192
|
+
passEncoder.setPipeline(pipeline);
|
|
193
|
+
passEncoder.setBindGroup(0, bindGroup);
|
|
194
|
+
passEncoder.setViewport(vpX, vpY, vpW, vpH, 0, 1);
|
|
195
|
+
passEncoder.setScissorRect(scissorX, scissorY, scissorW, scissorH);
|
|
196
|
+
passEncoder.draw(6, 1, 0, 0);
|
|
197
|
+
passEncoder.end();
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
// 複雑なブレンドモード
|
|
201
|
+
const dstAttachment = copyRegionToFilterAttachment(config, mainAttachment, drawX, drawY, drawWidth, drawHeight);
|
|
202
|
+
$uniform8[0] = $identityColorTransform[0];
|
|
203
|
+
$uniform8[1] = $identityColorTransform[1];
|
|
204
|
+
$uniform8[2] = $identityColorTransform[2];
|
|
205
|
+
$uniform8[3] = $identityColorTransform[3];
|
|
206
|
+
$uniform8[4] = $identityColorTransform[4] / 255;
|
|
207
|
+
$uniform8[5] = $identityColorTransform[5] / 255;
|
|
208
|
+
$uniform8[6] = $identityColorTransform[6] / 255;
|
|
209
|
+
$uniform8[7] = 0;
|
|
210
|
+
const blendedAttachment = blendApplyComplexBlendUseCase(filterAttachment, dstAttachment, blendMode, $uniform8, {
|
|
211
|
+
"device": config.device,
|
|
212
|
+
"commandEncoder": config.commandEncoder,
|
|
213
|
+
"bufferManager": config.bufferManager,
|
|
214
|
+
"frameBufferManager": config.frameBufferManager,
|
|
215
|
+
"pipelineManager": config.pipelineManager,
|
|
216
|
+
"textureManager": config.textureManager,
|
|
217
|
+
"frameTextures": config.frameTextures
|
|
218
|
+
});
|
|
219
|
+
// 結果をメインに描画
|
|
220
|
+
const useMsaa = mainAttachment.msaa && mainAttachment.msaaTexture?.view;
|
|
221
|
+
const resultPipelineName = useMsaa ? "filter_complex_blend_output_msaa" : "filter_complex_blend_output";
|
|
222
|
+
const resultPipeline = config.pipelineManager.getPipeline(resultPipelineName);
|
|
223
|
+
const resultLayout = config.pipelineManager.getBindGroupLayout("positioned_texture");
|
|
224
|
+
if (resultPipeline && resultLayout && blendedAttachment.texture && mainAttachment.texture) {
|
|
225
|
+
$uniform8[0] = drawX;
|
|
226
|
+
$uniform8[1] = drawY;
|
|
227
|
+
$uniform8[2] = blendedAttachment.width;
|
|
228
|
+
$uniform8[3] = blendedAttachment.height;
|
|
229
|
+
$uniform8[4] = mainAttachment.width;
|
|
230
|
+
$uniform8[5] = mainAttachment.height;
|
|
231
|
+
$uniform8[6] = 0;
|
|
232
|
+
$uniform8[7] = 0;
|
|
233
|
+
const uniformBuffer = bufferManager.acquireAndWriteUniformBuffer($uniform8);
|
|
234
|
+
const sampler = config.textureManager.createSampler("container_blend_output_sampler", false);
|
|
235
|
+
$entries3[0].resource.buffer = uniformBuffer;
|
|
236
|
+
$entries3[1].resource = sampler;
|
|
237
|
+
$entries3[2].resource = blendedAttachment.texture.view;
|
|
238
|
+
const bindGroup = config.device.createBindGroup({
|
|
239
|
+
"layout": resultLayout,
|
|
240
|
+
"entries": $entries3
|
|
241
|
+
});
|
|
242
|
+
const colorView = useMsaa ? mainAttachment.msaaTexture.view : mainAttachment.texture.view;
|
|
243
|
+
const resolveTarget = useMsaa ? mainAttachment.texture.view : null;
|
|
244
|
+
const renderPassDescriptor = config.frameBufferManager.createRenderPassDescriptor(colorView, 0, 0, 0, 0, "load", resolveTarget);
|
|
245
|
+
const passEncoder = config.commandEncoder.beginRenderPass(renderPassDescriptor);
|
|
246
|
+
passEncoder.setPipeline(resultPipeline);
|
|
247
|
+
passEncoder.setBindGroup(0, bindGroup);
|
|
248
|
+
passEncoder.draw(6, 1, 0, 0);
|
|
249
|
+
passEncoder.end();
|
|
250
|
+
}
|
|
251
|
+
config.frameBufferManager.releaseTemporaryAttachment(dstAttachment);
|
|
252
|
+
config.frameBufferManager.releaseTemporaryAttachment(blendedAttachment);
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
const applyFilterChain = (filterAttachment, matrix, params, devicePixelRatio, config) => {
|
|
256
|
+
$offset.x = 0;
|
|
257
|
+
$offset.y = 0;
|
|
258
|
+
for (let idx = 0; params.length > idx;) {
|
|
259
|
+
const type = params[idx++];
|
|
260
|
+
switch (type) {
|
|
261
|
+
case 0: // BevelFilter
|
|
262
|
+
{
|
|
263
|
+
const newAtt = filterApplyBevelFilterUseCase(filterAttachment, 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++]), devicePixelRatio, config);
|
|
264
|
+
if (filterAttachment !== newAtt) {
|
|
265
|
+
config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
|
|
266
|
+
}
|
|
267
|
+
filterAttachment = newAtt;
|
|
268
|
+
}
|
|
269
|
+
break;
|
|
270
|
+
case 1: // BlurFilter
|
|
271
|
+
{
|
|
272
|
+
const newAtt = filterApplyBlurFilterUseCase(filterAttachment, matrix, params[idx++], params[idx++], params[idx++], devicePixelRatio, config);
|
|
273
|
+
if (filterAttachment !== newAtt) {
|
|
274
|
+
config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
|
|
275
|
+
}
|
|
276
|
+
filterAttachment = newAtt;
|
|
277
|
+
}
|
|
278
|
+
break;
|
|
279
|
+
case 2: // ColorMatrixFilter
|
|
280
|
+
{
|
|
281
|
+
$uniform20[0] = params[idx++];
|
|
282
|
+
$uniform20[1] = params[idx++];
|
|
283
|
+
$uniform20[2] = params[idx++];
|
|
284
|
+
$uniform20[3] = params[idx++];
|
|
285
|
+
$uniform20[4] = params[idx++];
|
|
286
|
+
$uniform20[5] = params[idx++];
|
|
287
|
+
$uniform20[6] = params[idx++];
|
|
288
|
+
$uniform20[7] = params[idx++];
|
|
289
|
+
$uniform20[8] = params[idx++];
|
|
290
|
+
$uniform20[9] = params[idx++];
|
|
291
|
+
$uniform20[10] = params[idx++];
|
|
292
|
+
$uniform20[11] = params[idx++];
|
|
293
|
+
$uniform20[12] = params[idx++];
|
|
294
|
+
$uniform20[13] = params[idx++];
|
|
295
|
+
$uniform20[14] = params[idx++];
|
|
296
|
+
$uniform20[15] = params[idx++];
|
|
297
|
+
$uniform20[16] = params[idx++];
|
|
298
|
+
$uniform20[17] = params[idx++];
|
|
299
|
+
$uniform20[18] = params[idx++];
|
|
300
|
+
$uniform20[19] = params[idx++];
|
|
301
|
+
const newAtt = filterApplyColorMatrixFilterUseCase(filterAttachment, $uniform20, config);
|
|
302
|
+
if (filterAttachment !== newAtt) {
|
|
303
|
+
config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
|
|
304
|
+
}
|
|
305
|
+
filterAttachment = newAtt;
|
|
306
|
+
}
|
|
307
|
+
break;
|
|
308
|
+
case 3: // ConvolutionFilter
|
|
309
|
+
{
|
|
310
|
+
const matrixX = params[idx++];
|
|
311
|
+
const matrixY = params[idx++];
|
|
312
|
+
const length = matrixX * matrixY;
|
|
313
|
+
const convMatrix = new Float32Array(length);
|
|
314
|
+
for (let i = 0; i < length; i++) {
|
|
315
|
+
convMatrix[i] = params[idx++];
|
|
316
|
+
}
|
|
317
|
+
const newAtt = filterApplyConvolutionFilterUseCase(filterAttachment, matrixX, matrixY, convMatrix, params[idx++], params[idx++], Boolean(params[idx++]), Boolean(params[idx++]), params[idx++], params[idx++], config);
|
|
318
|
+
if (filterAttachment !== newAtt) {
|
|
319
|
+
config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
|
|
320
|
+
}
|
|
321
|
+
filterAttachment = newAtt;
|
|
322
|
+
}
|
|
323
|
+
break;
|
|
324
|
+
case 4: // DisplacementMapFilter
|
|
325
|
+
{
|
|
326
|
+
const dmLen = params[idx++];
|
|
327
|
+
const dmBuffer = new Uint8Array(dmLen);
|
|
328
|
+
for (let i = 0; i < dmLen; i++) {
|
|
329
|
+
dmBuffer[i] = params[idx++];
|
|
330
|
+
}
|
|
331
|
+
const newAtt = filterApplyDisplacementMapFilterUseCase(filterAttachment, matrix, dmBuffer, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], devicePixelRatio, config);
|
|
332
|
+
if (filterAttachment !== newAtt) {
|
|
333
|
+
config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
|
|
334
|
+
}
|
|
335
|
+
filterAttachment = newAtt;
|
|
336
|
+
}
|
|
337
|
+
break;
|
|
338
|
+
case 5: // DropShadowFilter
|
|
339
|
+
{
|
|
340
|
+
const newAtt = filterApplyDropShadowFilterUseCase(filterAttachment, 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++]), devicePixelRatio, config);
|
|
341
|
+
if (filterAttachment !== newAtt) {
|
|
342
|
+
config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
|
|
343
|
+
}
|
|
344
|
+
filterAttachment = newAtt;
|
|
345
|
+
}
|
|
346
|
+
break;
|
|
347
|
+
case 6: // GlowFilter
|
|
348
|
+
{
|
|
349
|
+
const newAtt = filterApplyGlowFilterUseCase(filterAttachment, matrix, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], Boolean(params[idx++]), Boolean(params[idx++]), devicePixelRatio, config);
|
|
350
|
+
if (filterAttachment !== newAtt) {
|
|
351
|
+
config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
|
|
352
|
+
}
|
|
353
|
+
filterAttachment = newAtt;
|
|
354
|
+
}
|
|
355
|
+
break;
|
|
356
|
+
case 7: // GradientBevelFilter
|
|
357
|
+
{
|
|
358
|
+
const gbDist = params[idx++];
|
|
359
|
+
const gbAngle = params[idx++];
|
|
360
|
+
const gbColorsLen = params[idx++];
|
|
361
|
+
const gbColors = new Float32Array(gbColorsLen);
|
|
362
|
+
for (let i = 0; i < gbColorsLen; i++) {
|
|
363
|
+
gbColors[i] = params[idx++];
|
|
364
|
+
}
|
|
365
|
+
const gbAlphasLen = params[idx++];
|
|
366
|
+
const gbAlphas = new Float32Array(gbAlphasLen);
|
|
367
|
+
for (let i = 0; i < gbAlphasLen; i++) {
|
|
368
|
+
gbAlphas[i] = params[idx++];
|
|
369
|
+
}
|
|
370
|
+
const gbRatiosLen = params[idx++];
|
|
371
|
+
const gbRatios = new Float32Array(gbRatiosLen);
|
|
372
|
+
for (let i = 0; i < gbRatiosLen; i++) {
|
|
373
|
+
gbRatios[i] = params[idx++];
|
|
374
|
+
}
|
|
375
|
+
const newAtt = filterApplyGradientBevelFilterUseCase(filterAttachment, matrix, gbDist, gbAngle, gbColors, gbAlphas, gbRatios, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], Boolean(params[idx++]), devicePixelRatio, config);
|
|
376
|
+
if (filterAttachment !== newAtt) {
|
|
377
|
+
config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
|
|
378
|
+
}
|
|
379
|
+
filterAttachment = newAtt;
|
|
380
|
+
}
|
|
381
|
+
break;
|
|
382
|
+
case 8: // GradientGlowFilter
|
|
383
|
+
{
|
|
384
|
+
const ggDist = params[idx++];
|
|
385
|
+
const ggAngle = params[idx++];
|
|
386
|
+
const ggColorsLen = params[idx++];
|
|
387
|
+
const ggColors = new Float32Array(ggColorsLen);
|
|
388
|
+
for (let i = 0; i < ggColorsLen; i++) {
|
|
389
|
+
ggColors[i] = params[idx++];
|
|
390
|
+
}
|
|
391
|
+
const ggAlphasLen = params[idx++];
|
|
392
|
+
const ggAlphas = new Float32Array(ggAlphasLen);
|
|
393
|
+
for (let i = 0; i < ggAlphasLen; i++) {
|
|
394
|
+
ggAlphas[i] = params[idx++];
|
|
395
|
+
}
|
|
396
|
+
const ggRatiosLen = params[idx++];
|
|
397
|
+
const ggRatios = new Float32Array(ggRatiosLen);
|
|
398
|
+
for (let i = 0; i < ggRatiosLen; i++) {
|
|
399
|
+
ggRatios[i] = params[idx++];
|
|
400
|
+
}
|
|
401
|
+
const newAtt = filterApplyGradientGlowFilterUseCase(filterAttachment, matrix, ggDist, ggAngle, ggColors, ggAlphas, ggRatios, params[idx++], params[idx++], params[idx++], params[idx++], params[idx++], Boolean(params[idx++]), devicePixelRatio, config);
|
|
402
|
+
if (filterAttachment !== newAtt) {
|
|
403
|
+
config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
|
|
404
|
+
}
|
|
405
|
+
filterAttachment = newAtt;
|
|
406
|
+
}
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return filterAttachment;
|
|
411
|
+
};
|
|
412
|
+
export const execute = (tempAttachment, mainAttachment, _tempName, blendMode, matrix, colorTransform, useFilter, filterBounds, params, uniqueKey, filterKey, _contentWidth, _contentHeight, config, bufferManager) => {
|
|
413
|
+
if (useFilter && matrix && filterBounds && params) {
|
|
414
|
+
// containerEndLayerが呼ばれる=ディスプレイレイヤーがコンテンツ変更を検出して再レンダリングを要求
|
|
415
|
+
// 常に新鮮なテクスチャを抽出してフィルターを適用する
|
|
416
|
+
// (キャッシュはディスプレイレイヤーのcontainerDrawCachedFilterで管理)
|
|
417
|
+
// WebGL版と同じ: レイヤー全体をフィルター用にコピー
|
|
418
|
+
// レイヤーはコンテンツサイズで作成され、childrenは相対座標で描画されているため
|
|
419
|
+
// (0, 0, layerWidth, layerHeight) = コンテンツ全体
|
|
420
|
+
let filterAttachment = copyRegionToFilterAttachment(config, tempAttachment, 0, 0, tempAttachment.width, tempAttachment.height);
|
|
421
|
+
// 一時アタッチメントを遅延解放(コマンドバッファsubmit後に解放)
|
|
422
|
+
// destroyAttachmentは即座にGPUテクスチャを破棄するため、
|
|
423
|
+
// コマンドエンコーダに記録済みのレンダーパスが参照するテクスチャが無効になる
|
|
424
|
+
config.frameBufferManager.releaseTemporaryAttachment(tempAttachment);
|
|
425
|
+
// フィルターチェーンを適用
|
|
426
|
+
const devicePixelRatio = WebGPUUtil.getDevicePixelRatio();
|
|
427
|
+
filterAttachment = applyFilterChain(filterAttachment, matrix, params, devicePixelRatio, config);
|
|
428
|
+
// キャッシュに保存
|
|
429
|
+
if (uniqueKey) {
|
|
430
|
+
$cacheStore.set(uniqueKey, "fKey", filterKey);
|
|
431
|
+
$cacheStore.set(uniqueKey, "fTexture", filterAttachment);
|
|
432
|
+
}
|
|
433
|
+
// フィルター結果をメインに描画
|
|
434
|
+
if (filterAttachment) {
|
|
435
|
+
// ColorTransformが恒等変換でない場合、描画用に一時コピーを作成してCTを適用
|
|
436
|
+
// キャッシュにはフィルター結果のみ保存(CTは毎フレーム適用する)
|
|
437
|
+
let drawAttachment = filterAttachment;
|
|
438
|
+
let ctAttachment = null;
|
|
439
|
+
if (!isIdentityColorTransform(colorTransform)) {
|
|
440
|
+
ctAttachment = applyColorTransform(config, filterAttachment, colorTransform);
|
|
441
|
+
drawAttachment = ctAttachment;
|
|
442
|
+
}
|
|
443
|
+
const scaleX = Math.sqrt(matrix[0] * matrix[0] + matrix[1] * matrix[1]);
|
|
444
|
+
const scaleY = Math.sqrt(matrix[2] * matrix[2] + matrix[3] * matrix[3]);
|
|
445
|
+
const boundsXMin = filterBounds[0] * (scaleX / devicePixelRatio);
|
|
446
|
+
const boundsYMin = filterBounds[1] * (scaleY / devicePixelRatio);
|
|
447
|
+
// WebGL版と同じ: boundsXMin + matrix[4] で絶対位置
|
|
448
|
+
const drawX = boundsXMin + matrix[4];
|
|
449
|
+
const drawY = boundsYMin + matrix[5];
|
|
450
|
+
drawFilterResultToMain(config, drawAttachment, mainAttachment, blendMode, drawX, drawY, bufferManager);
|
|
451
|
+
// CT一時アタッチメントを解放
|
|
452
|
+
if (ctAttachment) {
|
|
453
|
+
config.frameBufferManager.releaseTemporaryAttachment(ctAttachment);
|
|
454
|
+
}
|
|
455
|
+
// キャッシュされていないフィルター結果のみ解放
|
|
456
|
+
if (!uniqueKey) {
|
|
457
|
+
config.frameBufferManager.releaseTemporaryAttachment(filterAttachment);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
else {
|
|
462
|
+
// ブレンドのみ:レイヤー全体をフィルター用にコピーしてメインに描画
|
|
463
|
+
let fullAttachment = copyRegionToFilterAttachment(config, tempAttachment, 0, 0, tempAttachment.width, tempAttachment.height);
|
|
464
|
+
// 一時アタッチメントを遅延解放(コマンドバッファsubmit後に解放)
|
|
465
|
+
config.frameBufferManager.releaseTemporaryAttachment(tempAttachment);
|
|
466
|
+
// ColorTransformが恒等変換でない場合、適用
|
|
467
|
+
if (!isIdentityColorTransform(colorTransform)) {
|
|
468
|
+
const ctAttachment = applyColorTransform(config, fullAttachment, colorTransform);
|
|
469
|
+
config.frameBufferManager.releaseTemporaryAttachment(fullAttachment);
|
|
470
|
+
fullAttachment = ctAttachment;
|
|
471
|
+
}
|
|
472
|
+
// WebGL版と同じ: matrix[4], matrix[5] = layerBounds の絶対位置に描画
|
|
473
|
+
drawFilterResultToMain(config, fullAttachment, mainAttachment, blendMode, matrix[4], matrix[5], bufferManager);
|
|
474
|
+
config.frameBufferManager.releaseTemporaryAttachment(fullAttachment);
|
|
475
|
+
}
|
|
476
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IAttachmentObject } from "../../interface/IAttachmentObject";
|
|
2
|
+
import type { BufferManager } from "../../BufferManager";
|
|
3
|
+
import type { FrameBufferManager } from "../../FrameBufferManager";
|
|
4
|
+
import type { TextureManager } from "../../TextureManager";
|
|
5
|
+
import type { PipelineManager } from "../../Shader/PipelineManager";
|
|
6
|
+
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;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { getInstancedShaderManager } from "../../Blend/BlendInstancedManager";
|
|
2
|
+
import { $currentBlendMode } from "../../Blend";
|
|
3
|
+
import { renderQueue } from "@next2d/render-queue";
|
|
4
|
+
import { $isMaskTestEnabled, $getMaskStencilReference } from "../../Mask";
|
|
5
|
+
import { $getAtlasAttachmentObject } from "../../AtlasManager";
|
|
6
|
+
let $cachedBindGroup = null;
|
|
7
|
+
let $cachedAtlasView = null;
|
|
8
|
+
export const execute = (device, command_encoder, render_pass_encoder, main_attachment, buffer_manager, frame_buffer_manager, texture_manager, pipeline_manager) => {
|
|
9
|
+
const shaderManager = getInstancedShaderManager();
|
|
10
|
+
if (shaderManager.count === 0) {
|
|
11
|
+
return render_pass_encoder;
|
|
12
|
+
}
|
|
13
|
+
// 既存のレンダーパスを終了
|
|
14
|
+
if (render_pass_encoder) {
|
|
15
|
+
render_pass_encoder.end();
|
|
16
|
+
render_pass_encoder = null;
|
|
17
|
+
}
|
|
18
|
+
const isMasked = $isMaskTestEnabled();
|
|
19
|
+
const maskReference = $getMaskStencilReference();
|
|
20
|
+
// 現在のブレンドモードを取得
|
|
21
|
+
const blendMode = $currentBlendMode;
|
|
22
|
+
// ブレンドモードに応じたパイプライン名を生成
|
|
23
|
+
// simpleBlendModes: normal, layer, add, screen, alpha, erase, copy
|
|
24
|
+
const getPipelineName = (mode) => {
|
|
25
|
+
switch (mode) {
|
|
26
|
+
case "add":
|
|
27
|
+
return "instanced_add";
|
|
28
|
+
case "screen":
|
|
29
|
+
return "instanced_screen";
|
|
30
|
+
case "alpha":
|
|
31
|
+
return "instanced_alpha";
|
|
32
|
+
case "erase":
|
|
33
|
+
return "instanced_erase";
|
|
34
|
+
case "copy":
|
|
35
|
+
return "instanced_copy";
|
|
36
|
+
default:
|
|
37
|
+
// normal, layer
|
|
38
|
+
return "instanced";
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const pipelineName = getPipelineName(blendMode);
|
|
42
|
+
const normalPipeline = pipeline_manager.getPipeline(pipelineName);
|
|
43
|
+
const maskedPipeline = pipeline_manager.getPipeline("instanced_masked");
|
|
44
|
+
// 実際にマスクを使用するか判定
|
|
45
|
+
// maskedパイプラインが存在し、マスクが有効で、ステンシルがある場合のみ
|
|
46
|
+
const useStencil = isMasked && maskedPipeline
|
|
47
|
+
&& (main_attachment.msaaStencil?.view || main_attachment.stencil?.view);
|
|
48
|
+
const pipeline = useStencil ? maskedPipeline : normalPipeline;
|
|
49
|
+
if (!pipeline) {
|
|
50
|
+
console.error("[WebGPU] Instanced pipeline not found");
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
// レンダーパスを作成(パイプラインに合わせてステンシルの有無を決定)
|
|
54
|
+
let passEncoder;
|
|
55
|
+
if (useStencil) {
|
|
56
|
+
// ステンシル付きレンダーパス(マスク用)- MSAA対応
|
|
57
|
+
const useMsaa = main_attachment.msaa && main_attachment.msaaTexture?.view;
|
|
58
|
+
const colorView = useMsaa ? main_attachment.msaaTexture.view : main_attachment.texture.view;
|
|
59
|
+
const stencilView = useMsaa && main_attachment.msaaStencil?.view
|
|
60
|
+
? main_attachment.msaaStencil.view : main_attachment.stencil.view;
|
|
61
|
+
const resolveTarget = useMsaa ? main_attachment.texture.view : null;
|
|
62
|
+
const renderPassDescriptor = frame_buffer_manager.createStencilRenderPassDescriptor(colorView, stencilView, "load", // カラーは既存の内容を保持
|
|
63
|
+
"load", // ステンシルも既存の内容を保持(マスク情報)
|
|
64
|
+
resolveTarget);
|
|
65
|
+
passEncoder = command_encoder.beginRenderPass(renderPassDescriptor);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// 通常のレンダーパス(MSAA対応)
|
|
69
|
+
const useMsaa = main_attachment.msaa && main_attachment.msaaTexture?.view;
|
|
70
|
+
const colorView = useMsaa ? main_attachment.msaaTexture.view : main_attachment.texture.view;
|
|
71
|
+
const resolveTarget = useMsaa ? main_attachment.texture.view : null;
|
|
72
|
+
const renderPassDescriptor = frame_buffer_manager.createRenderPassDescriptor(colorView, 0, 0, 0, 0, "load", // 既存の内容を保持
|
|
73
|
+
resolveTarget);
|
|
74
|
+
passEncoder = command_encoder.beginRenderPass(renderPassDescriptor);
|
|
75
|
+
}
|
|
76
|
+
passEncoder.setPipeline(pipeline);
|
|
77
|
+
// マスク有効時はステンシル参照値を設定
|
|
78
|
+
if (useStencil) {
|
|
79
|
+
passEncoder.setStencilReference(maskReference);
|
|
80
|
+
}
|
|
81
|
+
// インスタンスバッファを作成
|
|
82
|
+
// renderQueue.offsetは配列のインデックスなので、そのまま使用
|
|
83
|
+
const instanceData = new Float32Array(renderQueue.buffer.buffer, renderQueue.buffer.byteOffset, renderQueue.offset // 要素数
|
|
84
|
+
);
|
|
85
|
+
const instanceBuffer = buffer_manager.acquireVertexBuffer(instanceData.byteLength, instanceData);
|
|
86
|
+
// 頂点バッファ(矩形)を取得(キャッシュ済み)
|
|
87
|
+
const vertexBuffer = buffer_manager.getUnitRectBuffer();
|
|
88
|
+
// アトラステクスチャをバインド(複数アトラス対応)
|
|
89
|
+
// AtlasManagerから取得、フォールバックとしてFrameBufferManagerから取得
|
|
90
|
+
const atlasAttachment = $getAtlasAttachmentObject() || frame_buffer_manager.getAttachment("atlas");
|
|
91
|
+
if (!atlasAttachment) {
|
|
92
|
+
console.error("[WebGPU] Atlas attachment not found");
|
|
93
|
+
passEncoder.end();
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
// アトラス用サンプラーを取得(キャッシュ済み)
|
|
97
|
+
// MIN_FILTER: linear(縮小時・回転時にスムーズ)
|
|
98
|
+
// MAG_FILTER: nearest(拡大時にシャープ)
|
|
99
|
+
const sampler = texture_manager.createSampler("atlas_instanced_sampler", false);
|
|
100
|
+
// バインドグループを作成
|
|
101
|
+
const bindGroupLayout = pipeline_manager.getBindGroupLayout("instanced");
|
|
102
|
+
if (!bindGroupLayout) {
|
|
103
|
+
console.error("[WebGPU] Instanced bind group layout not found");
|
|
104
|
+
passEncoder.end();
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
// BindGroupキャッシュ: アトラスのテクスチャビューが同じなら再利用
|
|
108
|
+
const atlasView = atlasAttachment.texture.view;
|
|
109
|
+
if (!$cachedBindGroup || $cachedAtlasView !== atlasView) {
|
|
110
|
+
$cachedBindGroup = device.createBindGroup({
|
|
111
|
+
"layout": bindGroupLayout,
|
|
112
|
+
"entries": [
|
|
113
|
+
{
|
|
114
|
+
"binding": 0,
|
|
115
|
+
"resource": sampler
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"binding": 1,
|
|
119
|
+
"resource": atlasView
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
});
|
|
123
|
+
$cachedAtlasView = atlasView;
|
|
124
|
+
}
|
|
125
|
+
// 描画
|
|
126
|
+
passEncoder.setVertexBuffer(0, vertexBuffer);
|
|
127
|
+
passEncoder.setVertexBuffer(1, instanceBuffer);
|
|
128
|
+
passEncoder.setBindGroup(0, $cachedBindGroup);
|
|
129
|
+
passEncoder.draw(6, shaderManager.count, 0, 0);
|
|
130
|
+
// レンダーパスを終了
|
|
131
|
+
passEncoder.end();
|
|
132
|
+
// インスタンスデータをクリア
|
|
133
|
+
shaderManager.clear();
|
|
134
|
+
return null;
|
|
135
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IAttachmentObject } from "../../interface/IAttachmentObject";
|
|
2
|
+
import type { BufferManager } from "../../BufferManager";
|
|
3
|
+
import type { FrameBufferManager } from "../../FrameBufferManager";
|
|
4
|
+
import type { TextureManager } from "../../TextureManager";
|
|
5
|
+
import type { PipelineManager } from "../../Shader/PipelineManager";
|
|
6
|
+
export declare const execute: (device: GPUDevice, commandEncoder: GPUCommandEncoder, renderPassEncoder: GPURenderPassEncoder | null, mainAttachment: IAttachmentObject, bufferManager: BufferManager, frameBufferManager: FrameBufferManager, textureManager: TextureManager, pipelineManager: PipelineManager, useIndirect?: boolean, useStorageBuffer?: boolean) => GPURenderPassEncoder | null;
|