@next2d/webgpu 3.0.5 → 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
package/src/TextureManager.js
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import { execute as textureManagerInitializeSamplersService } from "./TextureManager/service/TextureManagerInitializeSamplersService";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
/**
|
|
3
|
+
* @description テクスチャとサンプラーの管理クラス
|
|
4
|
+
* Manager class for textures and samplers
|
|
5
|
+
*/
|
|
4
6
|
export class TextureManager {
|
|
7
|
+
/**
|
|
8
|
+
* @description TextureManagerのコンストラクタ
|
|
9
|
+
* Constructor for TextureManager
|
|
10
|
+
* @param {GPUDevice} device - WebGPUデバイス / WebGPU device
|
|
11
|
+
*/
|
|
5
12
|
constructor(device) {
|
|
6
13
|
Object.defineProperty(this, "device", {
|
|
7
14
|
enumerable: true,
|
|
@@ -26,6 +33,15 @@ export class TextureManager {
|
|
|
26
33
|
this.samplers = new Map();
|
|
27
34
|
textureManagerInitializeSamplersService(device, this.samplers);
|
|
28
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* @description 新しいGPUテクスチャを作成する
|
|
38
|
+
* Create a new GPU texture
|
|
39
|
+
* @param {string} name - テクスチャ名 / Texture name
|
|
40
|
+
* @param {number} width - テクスチャの幅 / Texture width
|
|
41
|
+
* @param {number} height - テクスチャの高さ / Texture height
|
|
42
|
+
* @param {GPUTextureFormat} [format="rgba8unorm"] - テクスチャフォーマット / Texture format
|
|
43
|
+
* @return {GPUTexture}
|
|
44
|
+
*/
|
|
29
45
|
createTexture(name, width, height, format = "rgba8unorm") {
|
|
30
46
|
const texture = this.device.createTexture({
|
|
31
47
|
"size": { width, height },
|
|
@@ -37,24 +53,22 @@ export class TextureManager {
|
|
|
37
53
|
this.textures.set(name, texture);
|
|
38
54
|
return texture;
|
|
39
55
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
updateTexture(name, pixels, width, height) {
|
|
47
|
-
const texture = this.textures.get(name);
|
|
48
|
-
if (texture) {
|
|
49
|
-
this.device.queue.writeTexture({ texture }, pixels.buffer, { "bytesPerRow": width * 4, "offset": pixels.byteOffset }, { width, height });
|
|
50
|
-
}
|
|
51
|
-
}
|
|
56
|
+
/**
|
|
57
|
+
* @description 名前でテクスチャを取得する
|
|
58
|
+
* Get a texture by name
|
|
59
|
+
* @param {string} name - テクスチャ名 / Texture name
|
|
60
|
+
* @return {GPUTexture | undefined}
|
|
61
|
+
*/
|
|
52
62
|
getTexture(name) {
|
|
53
63
|
return this.textures.get(name);
|
|
54
64
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
65
|
+
/**
|
|
66
|
+
* @description サンプラーを作成する(既存の場合は返却)
|
|
67
|
+
* Create a sampler (returns existing if found)
|
|
68
|
+
* @param {string} name - サンプラー名 / Sampler name
|
|
69
|
+
* @param {boolean} [smooth=true] - スムージングを有効にするか / Whether to enable smoothing
|
|
70
|
+
* @return {GPUSampler}
|
|
71
|
+
*/
|
|
58
72
|
createSampler(name, smooth = true) {
|
|
59
73
|
const existing = this.samplers.get(name);
|
|
60
74
|
if (existing) {
|
|
@@ -70,13 +84,11 @@ export class TextureManager {
|
|
|
70
84
|
this.samplers.set(name, sampler);
|
|
71
85
|
return sampler;
|
|
72
86
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
}
|
|
87
|
+
/**
|
|
88
|
+
* @description 全テクスチャとサンプラーを破棄する
|
|
89
|
+
* Dispose all textures and samplers
|
|
90
|
+
* @return {void}
|
|
91
|
+
*/
|
|
80
92
|
dispose() {
|
|
81
93
|
for (const texture of this.textures.values()) {
|
|
82
94
|
texture.destroy();
|
|
@@ -3,12 +3,12 @@ import type { ITexturePoolBuckets } from "../../interface/IPooledTexture";
|
|
|
3
3
|
* @description 古いプールエントリをクリーンアップ(バケットMap版 LRU回収)
|
|
4
4
|
* Cleanup old pool entries (bucket Map version, LRU eviction)
|
|
5
5
|
*
|
|
6
|
-
* @param {ITexturePoolBuckets} buckets
|
|
7
|
-
* @param {number}
|
|
6
|
+
* @param {ITexturePoolBuckets} buckets - テクスチャプールバケット
|
|
7
|
+
* @param {number} current_frame - 現在のフレーム番号
|
|
8
8
|
* @param {number} threshold - フレーム数閾値
|
|
9
|
-
* @param {number[]}
|
|
9
|
+
* @param {number[]} total_count - [0]に現在の合計数を格納
|
|
10
10
|
* @return {void}
|
|
11
11
|
* @method
|
|
12
12
|
* @protected
|
|
13
13
|
*/
|
|
14
|
-
export declare const execute: (buckets: ITexturePoolBuckets,
|
|
14
|
+
export declare const execute: (buckets: ITexturePoolBuckets, current_frame: number, threshold: number, total_count: number[]) => void;
|
|
@@ -2,23 +2,23 @@
|
|
|
2
2
|
* @description 古いプールエントリをクリーンアップ(バケットMap版 LRU回収)
|
|
3
3
|
* Cleanup old pool entries (bucket Map version, LRU eviction)
|
|
4
4
|
*
|
|
5
|
-
* @param {ITexturePoolBuckets} buckets
|
|
6
|
-
* @param {number}
|
|
5
|
+
* @param {ITexturePoolBuckets} buckets - テクスチャプールバケット
|
|
6
|
+
* @param {number} current_frame - 現在のフレーム番号
|
|
7
7
|
* @param {number} threshold - フレーム数閾値
|
|
8
|
-
* @param {number[]}
|
|
8
|
+
* @param {number[]} total_count - [0]に現在の合計数を格納
|
|
9
9
|
* @return {void}
|
|
10
10
|
* @method
|
|
11
11
|
* @protected
|
|
12
12
|
*/
|
|
13
|
-
export const execute = (buckets,
|
|
14
|
-
const frameThreshold =
|
|
13
|
+
export const execute = (buckets, current_frame, threshold, total_count) => {
|
|
14
|
+
const frameThreshold = current_frame - threshold;
|
|
15
15
|
for (const [key, bucket] of buckets) {
|
|
16
16
|
for (let i = bucket.length - 1; i >= 0; i--) {
|
|
17
17
|
const entry = bucket[i];
|
|
18
18
|
if (!entry.inUse && entry.lastUsedFrame < frameThreshold) {
|
|
19
19
|
entry.texture.destroy();
|
|
20
20
|
bucket.splice(i, 1);
|
|
21
|
-
|
|
21
|
+
total_count[0]--;
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
if (bucket.length === 0) {
|
|
@@ -3,11 +3,11 @@ import type { ITexturePoolBuckets } from "../../interface/IPooledTexture";
|
|
|
3
3
|
* @description テクスチャをプールに返却(バケットMap版)
|
|
4
4
|
* Release texture back to pool (bucket Map version)
|
|
5
5
|
*
|
|
6
|
-
* @param {ITexturePoolBuckets} buckets
|
|
7
|
-
* @param {GPUTexture} texture
|
|
8
|
-
* @param {number}
|
|
6
|
+
* @param {ITexturePoolBuckets} buckets - テクスチャプールバケット
|
|
7
|
+
* @param {GPUTexture} texture - 返却するテクスチャ
|
|
8
|
+
* @param {number} current_frame - 現在のフレーム番号
|
|
9
9
|
* @return {void}
|
|
10
10
|
* @method
|
|
11
11
|
* @protected
|
|
12
12
|
*/
|
|
13
|
-
export declare const execute: (buckets: ITexturePoolBuckets, texture: GPUTexture,
|
|
13
|
+
export declare const execute: (buckets: ITexturePoolBuckets, texture: GPUTexture, current_frame: number) => void;
|
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
* @description テクスチャをプールに返却(バケットMap版)
|
|
3
3
|
* Release texture back to pool (bucket Map version)
|
|
4
4
|
*
|
|
5
|
-
* @param {ITexturePoolBuckets} buckets
|
|
6
|
-
* @param {GPUTexture} texture
|
|
7
|
-
* @param {number}
|
|
5
|
+
* @param {ITexturePoolBuckets} buckets - テクスチャプールバケット
|
|
6
|
+
* @param {GPUTexture} texture - 返却するテクスチャ
|
|
7
|
+
* @param {number} current_frame - 現在のフレーム番号
|
|
8
8
|
* @return {void}
|
|
9
9
|
* @method
|
|
10
10
|
* @protected
|
|
11
11
|
*/
|
|
12
|
-
export const execute = (buckets, texture,
|
|
12
|
+
export const execute = (buckets, texture, current_frame) => {
|
|
13
13
|
for (const bucket of buckets.values()) {
|
|
14
14
|
for (let i = 0; i < bucket.length; i++) {
|
|
15
15
|
if (bucket[i].texture === texture) {
|
|
16
16
|
bucket[i].inUse = false;
|
|
17
|
-
bucket[i].lastUsedFrame =
|
|
17
|
+
bucket[i].lastUsedFrame = current_frame;
|
|
18
18
|
return;
|
|
19
19
|
}
|
|
20
20
|
}
|
|
@@ -3,17 +3,17 @@ import type { ITexturePoolBuckets } from "../../interface/IPooledTexture";
|
|
|
3
3
|
* @description テクスチャを取得または作成(バケットMap検索)
|
|
4
4
|
* Acquire texture from pool or create new one (bucket Map lookup)
|
|
5
5
|
*
|
|
6
|
-
* @param {GPUDevice} device
|
|
7
|
-
* @param {ITexturePoolBuckets} buckets
|
|
8
|
-
* @param {number} width
|
|
9
|
-
* @param {number} height
|
|
10
|
-
* @param {GPUTextureFormat} format
|
|
11
|
-
* @param {GPUTextureUsageFlags} usage
|
|
12
|
-
* @param {number}
|
|
13
|
-
* @param {number}
|
|
14
|
-
* @param {number[]}
|
|
6
|
+
* @param {GPUDevice} device - GPUデバイス
|
|
7
|
+
* @param {ITexturePoolBuckets} buckets - テクスチャプールバケット
|
|
8
|
+
* @param {number} width - テクスチャ幅
|
|
9
|
+
* @param {number} height - テクスチャ高さ
|
|
10
|
+
* @param {GPUTextureFormat} format - テクスチャフォーマット
|
|
11
|
+
* @param {GPUTextureUsageFlags} usage - テクスチャ使用フラグ
|
|
12
|
+
* @param {number} current_frame - 現在のフレーム番号
|
|
13
|
+
* @param {number} max_pool_size - プールの最大サイズ
|
|
14
|
+
* @param {number[]} total_count - [0]に現在の合計数を格納
|
|
15
15
|
* @return {GPUTexture}
|
|
16
16
|
* @method
|
|
17
17
|
* @protected
|
|
18
18
|
*/
|
|
19
|
-
export declare const execute: (device: GPUDevice, buckets: ITexturePoolBuckets, width: number, height: number, format: GPUTextureFormat, usage: GPUTextureUsageFlags,
|
|
19
|
+
export declare const execute: (device: GPUDevice, buckets: ITexturePoolBuckets, width: number, height: number, format: GPUTextureFormat, usage: GPUTextureUsageFlags, current_frame: number, max_pool_size: number, total_count: number[]) => GPUTexture;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @description バケットキーを生成(exactサイズ + フォーマット)
|
|
3
|
+
* Build bucket key from exact size and format
|
|
3
4
|
*
|
|
4
|
-
* @param {number} width
|
|
5
|
-
* @param {number} height
|
|
6
|
-
* @param {GPUTextureFormat} format
|
|
5
|
+
* @param {number} width - テクスチャ幅
|
|
6
|
+
* @param {number} height - テクスチャ高さ
|
|
7
|
+
* @param {GPUTextureFormat} format - テクスチャフォーマット
|
|
7
8
|
* @return {string}
|
|
8
9
|
*/
|
|
9
10
|
const buildKey = (width, height, format) => {
|
|
@@ -13,20 +14,20 @@ const buildKey = (width, height, format) => {
|
|
|
13
14
|
* @description テクスチャを取得または作成(バケットMap検索)
|
|
14
15
|
* Acquire texture from pool or create new one (bucket Map lookup)
|
|
15
16
|
*
|
|
16
|
-
* @param {GPUDevice} device
|
|
17
|
-
* @param {ITexturePoolBuckets} buckets
|
|
18
|
-
* @param {number} width
|
|
19
|
-
* @param {number} height
|
|
20
|
-
* @param {GPUTextureFormat} format
|
|
21
|
-
* @param {GPUTextureUsageFlags} usage
|
|
22
|
-
* @param {number}
|
|
23
|
-
* @param {number}
|
|
24
|
-
* @param {number[]}
|
|
17
|
+
* @param {GPUDevice} device - GPUデバイス
|
|
18
|
+
* @param {ITexturePoolBuckets} buckets - テクスチャプールバケット
|
|
19
|
+
* @param {number} width - テクスチャ幅
|
|
20
|
+
* @param {number} height - テクスチャ高さ
|
|
21
|
+
* @param {GPUTextureFormat} format - テクスチャフォーマット
|
|
22
|
+
* @param {GPUTextureUsageFlags} usage - テクスチャ使用フラグ
|
|
23
|
+
* @param {number} current_frame - 現在のフレーム番号
|
|
24
|
+
* @param {number} max_pool_size - プールの最大サイズ
|
|
25
|
+
* @param {number[]} total_count - [0]に現在の合計数を格納
|
|
25
26
|
* @return {GPUTexture}
|
|
26
27
|
* @method
|
|
27
28
|
* @protected
|
|
28
29
|
*/
|
|
29
|
-
export const execute = (device, buckets, width, height, format, usage,
|
|
30
|
+
export const execute = (device, buckets, width, height, format, usage, current_frame, max_pool_size, total_count) => {
|
|
30
31
|
const key = buildKey(width, height, format);
|
|
31
32
|
// バケットから未使用テクスチャを検索(O(1)バケット + O(n)バケット内走査)
|
|
32
33
|
const bucket = buckets.get(key);
|
|
@@ -35,13 +36,13 @@ export const execute = (device, buckets, width, height, format, usage, currentFr
|
|
|
35
36
|
const entry = bucket[i];
|
|
36
37
|
if (!entry.inUse) {
|
|
37
38
|
entry.inUse = true;
|
|
38
|
-
entry.lastUsedFrame =
|
|
39
|
+
entry.lastUsedFrame = current_frame;
|
|
39
40
|
return entry.texture;
|
|
40
41
|
}
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
// プールが満杯なら最も古い未使用エントリを削除(LRU回収)
|
|
44
|
-
if (
|
|
45
|
+
if (total_count[0] >= max_pool_size) {
|
|
45
46
|
let oldestFrame = Infinity;
|
|
46
47
|
let oldestKey = "";
|
|
47
48
|
let oldestIdx = -1;
|
|
@@ -62,7 +63,7 @@ export const execute = (device, buckets, width, height, format, usage, currentFr
|
|
|
62
63
|
if (bEntries.length === 0) {
|
|
63
64
|
buckets.delete(oldestKey);
|
|
64
65
|
}
|
|
65
|
-
|
|
66
|
+
total_count[0]--;
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
// exactサイズで新規作成
|
|
@@ -76,7 +77,7 @@ export const execute = (device, buckets, width, height, format, usage, currentFr
|
|
|
76
77
|
width,
|
|
77
78
|
height,
|
|
78
79
|
format,
|
|
79
|
-
"lastUsedFrame":
|
|
80
|
+
"lastUsedFrame": current_frame,
|
|
80
81
|
"inUse": true
|
|
81
82
|
};
|
|
82
83
|
if (bucket) {
|
|
@@ -85,6 +86,6 @@ export const execute = (device, buckets, width, height, format, usage, currentFr
|
|
|
85
86
|
else {
|
|
86
87
|
buckets.set(key, [entry]);
|
|
87
88
|
}
|
|
88
|
-
|
|
89
|
+
total_count[0]++;
|
|
89
90
|
return texture;
|
|
90
91
|
};
|
package/src/TexturePool.d.ts
CHANGED
|
@@ -7,63 +7,64 @@
|
|
|
7
7
|
* LRUベースで未使用テクスチャを回収。
|
|
8
8
|
*/
|
|
9
9
|
export declare class TexturePool {
|
|
10
|
+
/**
|
|
11
|
+
* @description WebGPUデバイスの参照
|
|
12
|
+
* Reference to the WebGPU device
|
|
13
|
+
* @type {GPUDevice}
|
|
14
|
+
*/
|
|
10
15
|
private device;
|
|
16
|
+
/**
|
|
17
|
+
* @description Power-of-2バケットによるテクスチャプール
|
|
18
|
+
* Texture pool organized by power-of-2 buckets
|
|
19
|
+
* @type {ITexturePoolBuckets}
|
|
20
|
+
*/
|
|
11
21
|
private buckets;
|
|
22
|
+
/**
|
|
23
|
+
* @description 現在のフレーム番号
|
|
24
|
+
* Current frame number for LRU tracking
|
|
25
|
+
* @type {number}
|
|
26
|
+
*/
|
|
12
27
|
private currentFrame;
|
|
28
|
+
/**
|
|
29
|
+
* @description プール内のテクスチャ総数
|
|
30
|
+
* Total count of textures in the pool
|
|
31
|
+
* @type {number[]}
|
|
32
|
+
*/
|
|
13
33
|
private totalCount;
|
|
14
34
|
/**
|
|
15
|
-
* @
|
|
35
|
+
* @description テクスチャプールを生成する
|
|
36
|
+
* Create a new texture pool instance
|
|
37
|
+
* @param {GPUDevice} device - WebGPUデバイス / WebGPU device
|
|
16
38
|
* @constructor
|
|
17
39
|
*/
|
|
18
40
|
constructor(device: GPUDevice);
|
|
19
41
|
/**
|
|
20
|
-
* @description
|
|
42
|
+
* @description フレーム開始時に呼び出し、定期的にプールをクリーンアップする
|
|
43
|
+
* Called at the beginning of each frame; periodically cleans up the pool
|
|
21
44
|
* @return {void}
|
|
22
45
|
*/
|
|
23
46
|
beginFrame(): void;
|
|
24
47
|
/**
|
|
25
|
-
* @description
|
|
26
|
-
*
|
|
27
|
-
* @param {number}
|
|
28
|
-
* @param {
|
|
29
|
-
* @param {
|
|
48
|
+
* @description テクスチャを取得または作成する
|
|
49
|
+
* Acquire a texture from the pool or create a new one
|
|
50
|
+
* @param {number} width - テクスチャの幅 / texture width
|
|
51
|
+
* @param {number} height - テクスチャの高さ / texture height
|
|
52
|
+
* @param {GPUTextureFormat} format - テクスチャフォーマット / texture format
|
|
53
|
+
* @param {GPUTextureUsageFlags} usage - テクスチャ使用フラグ / texture usage flags
|
|
30
54
|
* @return {GPUTexture}
|
|
31
55
|
*/
|
|
32
56
|
acquire(width: number, height: number, format?: GPUTextureFormat, usage?: GPUTextureUsageFlags): GPUTexture;
|
|
33
57
|
/**
|
|
34
|
-
* @description
|
|
35
|
-
*
|
|
58
|
+
* @description テクスチャをプールに返却する
|
|
59
|
+
* Release a texture back to the pool for reuse
|
|
60
|
+
* @param {GPUTexture} texture - 返却するテクスチャ / texture to release
|
|
36
61
|
* @return {void}
|
|
37
62
|
*/
|
|
38
63
|
release(texture: GPUTexture): void;
|
|
39
64
|
/**
|
|
40
|
-
* @description
|
|
41
|
-
*
|
|
42
|
-
*/
|
|
43
|
-
getStats(): {
|
|
44
|
-
total: number;
|
|
45
|
-
inUse: number;
|
|
46
|
-
available: number;
|
|
47
|
-
};
|
|
48
|
-
/**
|
|
49
|
-
* @description 解放
|
|
65
|
+
* @description 全テクスチャを破棄しプールを解放する
|
|
66
|
+
* Destroy all textures and dispose of the pool
|
|
50
67
|
* @return {void}
|
|
51
68
|
*/
|
|
52
69
|
dispose(): void;
|
|
53
70
|
}
|
|
54
|
-
/**
|
|
55
|
-
* @description テクスチャプールを初期化
|
|
56
|
-
* @param {GPUDevice} device
|
|
57
|
-
* @return {void}
|
|
58
|
-
*/
|
|
59
|
-
export declare const initTexturePool: (device: GPUDevice) => void;
|
|
60
|
-
/**
|
|
61
|
-
* @description テクスチャプールを取得
|
|
62
|
-
* @return {TexturePool | null}
|
|
63
|
-
*/
|
|
64
|
-
export declare const getTexturePool: () => TexturePool | null;
|
|
65
|
-
/**
|
|
66
|
-
* @description テクスチャプールをクリア
|
|
67
|
-
* @return {void}
|
|
68
|
-
*/
|
|
69
|
-
export declare const clearTexturePool: () => void;
|
package/src/TexturePool.js
CHANGED
|
@@ -3,12 +3,16 @@ import { execute as texturePoolReleaseService } from "./TexturePool/service/Text
|
|
|
3
3
|
import { execute as texturePoolCleanupService } from "./TexturePool/service/TexturePoolCleanupService";
|
|
4
4
|
/**
|
|
5
5
|
* @description プールの最大サイズ
|
|
6
|
+
* Maximum pool size for texture reuse
|
|
7
|
+
* @type {number}
|
|
6
8
|
*/
|
|
7
|
-
const MAX_POOL_SIZE = 32;
|
|
9
|
+
const $MAX_POOL_SIZE = 32;
|
|
8
10
|
/**
|
|
9
11
|
* @description キャッシュのクリーンアップ閾値(フレーム数)
|
|
12
|
+
* Cache cleanup threshold in frames (3 seconds at 60FPS)
|
|
13
|
+
* @type {number}
|
|
10
14
|
*/
|
|
11
|
-
const CACHE_CLEANUP_THRESHOLD = 180;
|
|
15
|
+
const $CACHE_CLEANUP_THRESHOLD = 180;
|
|
12
16
|
/**
|
|
13
17
|
* @description テクスチャプールマネージャー(Power-of-2バケット版)
|
|
14
18
|
* Texture pool manager for WebGPU optimization
|
|
@@ -19,28 +23,50 @@ const CACHE_CLEANUP_THRESHOLD = 180; // 3秒(60FPS想定)
|
|
|
19
23
|
*/
|
|
20
24
|
export class TexturePool {
|
|
21
25
|
/**
|
|
22
|
-
* @
|
|
26
|
+
* @description テクスチャプールを生成する
|
|
27
|
+
* Create a new texture pool instance
|
|
28
|
+
* @param {GPUDevice} device - WebGPUデバイス / WebGPU device
|
|
23
29
|
* @constructor
|
|
24
30
|
*/
|
|
25
31
|
constructor(device) {
|
|
32
|
+
/**
|
|
33
|
+
* @description WebGPUデバイスの参照
|
|
34
|
+
* Reference to the WebGPU device
|
|
35
|
+
* @type {GPUDevice}
|
|
36
|
+
*/
|
|
26
37
|
Object.defineProperty(this, "device", {
|
|
27
38
|
enumerable: true,
|
|
28
39
|
configurable: true,
|
|
29
40
|
writable: true,
|
|
30
41
|
value: void 0
|
|
31
42
|
});
|
|
43
|
+
/**
|
|
44
|
+
* @description Power-of-2バケットによるテクスチャプール
|
|
45
|
+
* Texture pool organized by power-of-2 buckets
|
|
46
|
+
* @type {ITexturePoolBuckets}
|
|
47
|
+
*/
|
|
32
48
|
Object.defineProperty(this, "buckets", {
|
|
33
49
|
enumerable: true,
|
|
34
50
|
configurable: true,
|
|
35
51
|
writable: true,
|
|
36
52
|
value: void 0
|
|
37
53
|
});
|
|
54
|
+
/**
|
|
55
|
+
* @description 現在のフレーム番号
|
|
56
|
+
* Current frame number for LRU tracking
|
|
57
|
+
* @type {number}
|
|
58
|
+
*/
|
|
38
59
|
Object.defineProperty(this, "currentFrame", {
|
|
39
60
|
enumerable: true,
|
|
40
61
|
configurable: true,
|
|
41
62
|
writable: true,
|
|
42
63
|
value: void 0
|
|
43
64
|
});
|
|
65
|
+
/**
|
|
66
|
+
* @description プール内のテクスチャ総数
|
|
67
|
+
* Total count of textures in the pool
|
|
68
|
+
* @type {number[]}
|
|
69
|
+
*/
|
|
44
70
|
Object.defineProperty(this, "totalCount", {
|
|
45
71
|
enumerable: true,
|
|
46
72
|
configurable: true,
|
|
@@ -53,62 +79,43 @@ export class TexturePool {
|
|
|
53
79
|
this.totalCount = [0];
|
|
54
80
|
}
|
|
55
81
|
/**
|
|
56
|
-
* @description
|
|
82
|
+
* @description フレーム開始時に呼び出し、定期的にプールをクリーンアップする
|
|
83
|
+
* Called at the beginning of each frame; periodically cleans up the pool
|
|
57
84
|
* @return {void}
|
|
58
85
|
*/
|
|
59
86
|
beginFrame() {
|
|
60
87
|
this.currentFrame++;
|
|
61
88
|
// 定期的にプールをクリーンアップ(LRU回収)
|
|
62
89
|
if (this.currentFrame % 60 === 0) {
|
|
63
|
-
texturePoolCleanupService(this.buckets, this.currentFrame, CACHE_CLEANUP_THRESHOLD, this.totalCount);
|
|
90
|
+
texturePoolCleanupService(this.buckets, this.currentFrame, $CACHE_CLEANUP_THRESHOLD, this.totalCount);
|
|
64
91
|
}
|
|
65
92
|
}
|
|
66
93
|
/**
|
|
67
|
-
* @description
|
|
68
|
-
*
|
|
69
|
-
* @param {number}
|
|
70
|
-
* @param {
|
|
71
|
-
* @param {
|
|
94
|
+
* @description テクスチャを取得または作成する
|
|
95
|
+
* Acquire a texture from the pool or create a new one
|
|
96
|
+
* @param {number} width - テクスチャの幅 / texture width
|
|
97
|
+
* @param {number} height - テクスチャの高さ / texture height
|
|
98
|
+
* @param {GPUTextureFormat} format - テクスチャフォーマット / texture format
|
|
99
|
+
* @param {GPUTextureUsageFlags} usage - テクスチャ使用フラグ / texture usage flags
|
|
72
100
|
* @return {GPUTexture}
|
|
73
101
|
*/
|
|
74
102
|
acquire(width, height, format = "rgba8unorm", usage = GPUTextureUsage.TEXTURE_BINDING |
|
|
75
103
|
GPUTextureUsage.COPY_DST |
|
|
76
104
|
GPUTextureUsage.RENDER_ATTACHMENT) {
|
|
77
|
-
return texturePoolAcquireUseCase(this.device, this.buckets, width, height, format, usage, this.currentFrame, MAX_POOL_SIZE, this.totalCount);
|
|
105
|
+
return texturePoolAcquireUseCase(this.device, this.buckets, width, height, format, usage, this.currentFrame, $MAX_POOL_SIZE, this.totalCount);
|
|
78
106
|
}
|
|
79
107
|
/**
|
|
80
|
-
* @description
|
|
81
|
-
*
|
|
108
|
+
* @description テクスチャをプールに返却する
|
|
109
|
+
* Release a texture back to the pool for reuse
|
|
110
|
+
* @param {GPUTexture} texture - 返却するテクスチャ / texture to release
|
|
82
111
|
* @return {void}
|
|
83
112
|
*/
|
|
84
113
|
release(texture) {
|
|
85
114
|
texturePoolReleaseService(this.buckets, texture, this.currentFrame);
|
|
86
115
|
}
|
|
87
116
|
/**
|
|
88
|
-
* @description
|
|
89
|
-
*
|
|
90
|
-
*/
|
|
91
|
-
getStats() {
|
|
92
|
-
let inUse = 0;
|
|
93
|
-
let available = 0;
|
|
94
|
-
for (const bucket of this.buckets.values()) {
|
|
95
|
-
for (const entry of bucket) {
|
|
96
|
-
if (entry.inUse) {
|
|
97
|
-
inUse++;
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
available++;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
return {
|
|
105
|
-
"total": this.totalCount[0],
|
|
106
|
-
inUse,
|
|
107
|
-
available
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* @description 解放
|
|
117
|
+
* @description 全テクスチャを破棄しプールを解放する
|
|
118
|
+
* Destroy all textures and dispose of the pool
|
|
112
119
|
* @return {void}
|
|
113
120
|
*/
|
|
114
121
|
dispose() {
|
|
@@ -121,31 +128,3 @@ export class TexturePool {
|
|
|
121
128
|
this.totalCount[0] = 0;
|
|
122
129
|
}
|
|
123
130
|
}
|
|
124
|
-
/**
|
|
125
|
-
* @description グローバルテクスチャプールインスタンス
|
|
126
|
-
*/
|
|
127
|
-
let $texturePool = null;
|
|
128
|
-
/**
|
|
129
|
-
* @description テクスチャプールを初期化
|
|
130
|
-
* @param {GPUDevice} device
|
|
131
|
-
* @return {void}
|
|
132
|
-
*/
|
|
133
|
-
export const initTexturePool = (device) => {
|
|
134
|
-
$texturePool = new TexturePool(device);
|
|
135
|
-
};
|
|
136
|
-
/**
|
|
137
|
-
* @description テクスチャプールを取得
|
|
138
|
-
* @return {TexturePool | null}
|
|
139
|
-
*/
|
|
140
|
-
export const getTexturePool = () => {
|
|
141
|
-
return $texturePool;
|
|
142
|
-
};
|
|
143
|
-
/**
|
|
144
|
-
* @description テクスチャプールをクリア
|
|
145
|
-
* @return {void}
|
|
146
|
-
*/
|
|
147
|
-
export const clearTexturePool = () => {
|
|
148
|
-
if ($texturePool) {
|
|
149
|
-
$texturePool.dispose();
|
|
150
|
-
}
|
|
151
|
-
};
|