@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,61 @@
|
|
|
1
|
+
import type { IAttachmentObject } from "../interface/IAttachmentObject";
|
|
2
|
+
/**
|
|
3
|
+
* @description GPUDeviceを設定
|
|
4
|
+
* Set GPUDevice
|
|
5
|
+
*
|
|
6
|
+
* @param {GPUDevice} device
|
|
7
|
+
* @return {void}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const $setGradientLUTDevice: (device: GPUDevice) => void;
|
|
12
|
+
/**
|
|
13
|
+
* @description 指定解像度のAttachmentObjectを返却
|
|
14
|
+
* Returns AttachmentObject with specified resolution
|
|
15
|
+
*
|
|
16
|
+
* @param {number} resolution
|
|
17
|
+
* @return {IAttachmentObject}
|
|
18
|
+
* @method
|
|
19
|
+
* @protected
|
|
20
|
+
*/
|
|
21
|
+
export declare const $getGradientAttachmentObjectWithResolution: (resolution: number) => IAttachmentObject;
|
|
22
|
+
/**
|
|
23
|
+
* @description デフォルトの256解像度のAttachmentObjectを返却
|
|
24
|
+
* Returns default 256 resolution AttachmentObject
|
|
25
|
+
*
|
|
26
|
+
* @return {IAttachmentObject}
|
|
27
|
+
* @method
|
|
28
|
+
* @protected
|
|
29
|
+
*/
|
|
30
|
+
export declare const $getGradientAttachmentObject: () => IAttachmentObject;
|
|
31
|
+
/**
|
|
32
|
+
* @description 全ての共有アタッチメントを破棄してクリア
|
|
33
|
+
* Destroy and clear all shared attachments
|
|
34
|
+
*
|
|
35
|
+
* @return {void}
|
|
36
|
+
* @method
|
|
37
|
+
* @protected
|
|
38
|
+
*/
|
|
39
|
+
export declare const $clearGradientAttachmentObjects: () => void;
|
|
40
|
+
interface IGradientLUTEntry {
|
|
41
|
+
texture: GPUTexture;
|
|
42
|
+
view: GPUTextureView;
|
|
43
|
+
lastUsedFrame: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @description キャッシュからLUTテクスチャを取得。ヒットしなければnullを返す。
|
|
47
|
+
*/
|
|
48
|
+
export declare const $getLUTFromCache: (stops: number[], spread: number, interpolation: number) => IGradientLUTEntry | null;
|
|
49
|
+
/**
|
|
50
|
+
* @description LUTテクスチャをキャッシュに格納
|
|
51
|
+
*/
|
|
52
|
+
export declare const $putLUTToCache: (stops: number[], spread: number, interpolation: number, texture: GPUTexture, view: GPUTextureView) => void;
|
|
53
|
+
/**
|
|
54
|
+
* @description フレーム終了時にTTL超過エントリを解放
|
|
55
|
+
*/
|
|
56
|
+
export declare const $cleanupLUTCache: () => void;
|
|
57
|
+
/**
|
|
58
|
+
* @description 全LUTキャッシュを破棄
|
|
59
|
+
*/
|
|
60
|
+
export declare const $clearLUTCache: () => void;
|
|
61
|
+
export {};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { $releaseFillTexture } from "../FillTexturePool";
|
|
2
|
+
/**
|
|
3
|
+
* @description 解像度別のAttachmentObjectキャッシュ
|
|
4
|
+
* Attachment object cache by resolution
|
|
5
|
+
* 注意: グラデーションLUTは共有テクスチャに描画されるため、
|
|
6
|
+
* キャッシュは使用しません。各フレームで再描画が必要です。
|
|
7
|
+
* Note: Gradient LUT is drawn to a shared texture, so caching
|
|
8
|
+
* is not used. Re-drawing is required each frame.
|
|
9
|
+
*
|
|
10
|
+
* @type {Map<number, IAttachmentObject>}
|
|
11
|
+
* @private
|
|
12
|
+
*/
|
|
13
|
+
const $gradientAttachmentObjects = new Map();
|
|
14
|
+
/**
|
|
15
|
+
* @description GPUDeviceの参照
|
|
16
|
+
* @private
|
|
17
|
+
*/
|
|
18
|
+
let $device = null;
|
|
19
|
+
/**
|
|
20
|
+
* @description GPUDeviceを設定
|
|
21
|
+
* Set GPUDevice
|
|
22
|
+
*
|
|
23
|
+
* @param {GPUDevice} device
|
|
24
|
+
* @return {void}
|
|
25
|
+
* @method
|
|
26
|
+
* @protected
|
|
27
|
+
*/
|
|
28
|
+
export const $setGradientLUTDevice = (device) => {
|
|
29
|
+
$device = device;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* @description 指定解像度のAttachmentObjectを返却
|
|
33
|
+
* Returns AttachmentObject with specified resolution
|
|
34
|
+
*
|
|
35
|
+
* @param {number} resolution
|
|
36
|
+
* @return {IAttachmentObject}
|
|
37
|
+
* @method
|
|
38
|
+
* @protected
|
|
39
|
+
*/
|
|
40
|
+
export const $getGradientAttachmentObjectWithResolution = (resolution) => {
|
|
41
|
+
if (!$gradientAttachmentObjects.has(resolution) && $device) {
|
|
42
|
+
// 1xN テクスチャを作成
|
|
43
|
+
const texture = $device.createTexture({
|
|
44
|
+
"size": { "width": resolution, "height": 1 },
|
|
45
|
+
"format": "rgba8unorm",
|
|
46
|
+
"usage": GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT
|
|
47
|
+
});
|
|
48
|
+
const attachment = {
|
|
49
|
+
"id": resolution,
|
|
50
|
+
"width": resolution,
|
|
51
|
+
"height": 1,
|
|
52
|
+
"clipLevel": 0,
|
|
53
|
+
"msaa": false,
|
|
54
|
+
"mask": false,
|
|
55
|
+
"color": null,
|
|
56
|
+
"texture": {
|
|
57
|
+
"id": resolution,
|
|
58
|
+
"resource": texture,
|
|
59
|
+
"view": texture.createView(),
|
|
60
|
+
"width": resolution,
|
|
61
|
+
"height": 1,
|
|
62
|
+
"area": resolution,
|
|
63
|
+
"smooth": true
|
|
64
|
+
},
|
|
65
|
+
"stencil": null,
|
|
66
|
+
"msaaTexture": null,
|
|
67
|
+
"msaaStencil": null
|
|
68
|
+
};
|
|
69
|
+
$gradientAttachmentObjects.set(resolution, attachment);
|
|
70
|
+
}
|
|
71
|
+
return $gradientAttachmentObjects.get(resolution);
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* @description デフォルトの256解像度のAttachmentObjectを返却
|
|
75
|
+
* Returns default 256 resolution AttachmentObject
|
|
76
|
+
*
|
|
77
|
+
* @return {IAttachmentObject}
|
|
78
|
+
* @method
|
|
79
|
+
* @protected
|
|
80
|
+
*/
|
|
81
|
+
export const $getGradientAttachmentObject = () => {
|
|
82
|
+
return $getGradientAttachmentObjectWithResolution(256);
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* @description 全ての共有アタッチメントを破棄してクリア
|
|
86
|
+
* Destroy and clear all shared attachments
|
|
87
|
+
*
|
|
88
|
+
* @return {void}
|
|
89
|
+
* @method
|
|
90
|
+
* @protected
|
|
91
|
+
*/
|
|
92
|
+
export const $clearGradientAttachmentObjects = () => {
|
|
93
|
+
for (const attachment of $gradientAttachmentObjects.values()) {
|
|
94
|
+
if (attachment.texture?.resource) {
|
|
95
|
+
attachment.texture.resource.destroy();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
$gradientAttachmentObjects.clear();
|
|
99
|
+
};
|
|
100
|
+
const $lutCache = new Map();
|
|
101
|
+
let $currentFrame = 0;
|
|
102
|
+
const $LUT_TTL = 60;
|
|
103
|
+
/**
|
|
104
|
+
* @description グラデーションLUTのキャッシュキーを生成
|
|
105
|
+
*/
|
|
106
|
+
const $buildLUTKey = (stops, spread, interpolation) => {
|
|
107
|
+
return `${spread}_${interpolation}_${stops.join(",")}`;
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* @description キャッシュからLUTテクスチャを取得。ヒットしなければnullを返す。
|
|
111
|
+
*/
|
|
112
|
+
export const $getLUTFromCache = (stops, spread, interpolation) => {
|
|
113
|
+
const key = $buildLUTKey(stops, spread, interpolation);
|
|
114
|
+
const entry = $lutCache.get(key);
|
|
115
|
+
if (entry) {
|
|
116
|
+
entry.lastUsedFrame = $currentFrame;
|
|
117
|
+
return entry;
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* @description LUTテクスチャをキャッシュに格納
|
|
123
|
+
*/
|
|
124
|
+
export const $putLUTToCache = (stops, spread, interpolation, texture, view) => {
|
|
125
|
+
const key = $buildLUTKey(stops, spread, interpolation);
|
|
126
|
+
$lutCache.set(key, {
|
|
127
|
+
texture,
|
|
128
|
+
view,
|
|
129
|
+
"lastUsedFrame": $currentFrame
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* @description フレーム終了時にTTL超過エントリを解放
|
|
134
|
+
*/
|
|
135
|
+
export const $cleanupLUTCache = () => {
|
|
136
|
+
$currentFrame++;
|
|
137
|
+
for (const [key, entry] of $lutCache) {
|
|
138
|
+
if ($currentFrame - entry.lastUsedFrame > $LUT_TTL) {
|
|
139
|
+
$releaseFillTexture(entry.texture);
|
|
140
|
+
$lutCache.delete(key);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* @description 全LUTキャッシュを破棄
|
|
146
|
+
*/
|
|
147
|
+
export const $clearLUTCache = () => {
|
|
148
|
+
for (const entry of $lutCache.values()) {
|
|
149
|
+
$releaseFillTexture(entry.texture);
|
|
150
|
+
}
|
|
151
|
+
$lutCache.clear();
|
|
152
|
+
$currentFrame = 0;
|
|
153
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description グラデーションLUTテクスチャ生成
|
|
3
|
+
* Gradient LUT texture generator
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @description ストップ数に応じた適応解像度を取得
|
|
7
|
+
* @param {number} stopsLength
|
|
8
|
+
* @return {number}
|
|
9
|
+
*/
|
|
10
|
+
export declare const getAdaptiveResolution: (stopsLength: number) => number;
|
|
11
|
+
/**
|
|
12
|
+
* @description グラデーションLUTテクスチャデータを生成
|
|
13
|
+
* stops配列: [offset, R, G, B, A, offset, R, G, B, A, ...]
|
|
14
|
+
* 注意: R, G, B, A は 0-255 範囲
|
|
15
|
+
* LUTは0-1の範囲の色を生成し、spread処理はシェーダー側で行う
|
|
16
|
+
* @param {number[]} stops - グラデーションストップ配列
|
|
17
|
+
* @param {number} _spread - スプレッドメソッド(未使用、シェーダー側で処理)
|
|
18
|
+
* @param {number} interpolation - 補間方法 (0: linearRGB, 1: RGB) ※WebGL互換
|
|
19
|
+
* @return {Uint8Array}
|
|
20
|
+
*/
|
|
21
|
+
export declare const generateGradientLUT: (stops: number[], _spread: number, interpolation: number) => Uint8Array;
|
|
22
|
+
/**
|
|
23
|
+
* @description フィルター用グラデーションLUTテクスチャデータを生成
|
|
24
|
+
* ratios, colors, alphas配列から1D LUTを生成
|
|
25
|
+
* @param {Float32Array} ratios - 比率配列 (0-255)
|
|
26
|
+
* @param {Float32Array} colors - 色配列 (32bit整数)
|
|
27
|
+
* @param {Float32Array} alphas - アルファ配列 (0-1)
|
|
28
|
+
* @return {Uint8Array}
|
|
29
|
+
*/
|
|
30
|
+
export declare const generateFilterGradientLUT: (ratios: Float32Array, colors: Float32Array, alphas: Float32Array) => Uint8Array;
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description グラデーションLUTテクスチャ生成
|
|
3
|
+
* Gradient LUT texture generator
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @description ストップ数に応じた適応解像度を取得
|
|
7
|
+
* @param {number} stopsLength
|
|
8
|
+
* @return {number}
|
|
9
|
+
*/
|
|
10
|
+
export const getAdaptiveResolution = (stopsLength) => {
|
|
11
|
+
if (stopsLength <= 4) {
|
|
12
|
+
return 256;
|
|
13
|
+
}
|
|
14
|
+
if (stopsLength <= 8) {
|
|
15
|
+
return 512;
|
|
16
|
+
}
|
|
17
|
+
return 1024;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* @description グラデーションLUTテクスチャデータを生成
|
|
21
|
+
* stops配列: [offset, R, G, B, A, offset, R, G, B, A, ...]
|
|
22
|
+
* 注意: R, G, B, A は 0-255 範囲
|
|
23
|
+
* LUTは0-1の範囲の色を生成し、spread処理はシェーダー側で行う
|
|
24
|
+
* @param {number[]} stops - グラデーションストップ配列
|
|
25
|
+
* @param {number} _spread - スプレッドメソッド(未使用、シェーダー側で処理)
|
|
26
|
+
* @param {number} interpolation - 補間方法 (0: linearRGB, 1: RGB) ※WebGL互換
|
|
27
|
+
* @return {Uint8Array}
|
|
28
|
+
*/
|
|
29
|
+
export const generateGradientLUT = (stops, _spread, interpolation) => {
|
|
30
|
+
// ストップ数を計算(5要素ずつ: offset, R, G, B, A)
|
|
31
|
+
const stopsLength = stops.length / 5;
|
|
32
|
+
const resolution = getAdaptiveResolution(stopsLength);
|
|
33
|
+
// RGBA形式のLUTデータを作成
|
|
34
|
+
const lutData = new Uint8Array(resolution * 4);
|
|
35
|
+
// 各ピクセルの色を補間
|
|
36
|
+
// spread処理はシェーダー側で行うため、LUTは単純に0-1の範囲を生成
|
|
37
|
+
for (let i = 0; i < resolution; i++) {
|
|
38
|
+
const t = i / (resolution - 1);
|
|
39
|
+
// 色を補間(色は0-255範囲で返される)
|
|
40
|
+
const color = interpolateColor(stops, t, interpolation);
|
|
41
|
+
// WebGL版と同じ: プリマルチプライドアルファは適用しない
|
|
42
|
+
// LUTにはストレート(非プリマルチプライド)の色を格納
|
|
43
|
+
// プリマルチプライドはシェーダー側でサンプリング後に行う
|
|
44
|
+
// これにより、線形補間時に正しい色が得られる
|
|
45
|
+
// LUTデータに書き込み(非プリマルチプライド)
|
|
46
|
+
const offset = i * 4;
|
|
47
|
+
lutData[offset + 0] = Math.round(Math.max(0, Math.min(255, color.r)));
|
|
48
|
+
lutData[offset + 1] = Math.round(Math.max(0, Math.min(255, color.g)));
|
|
49
|
+
lutData[offset + 2] = Math.round(Math.max(0, Math.min(255, color.b)));
|
|
50
|
+
lutData[offset + 3] = Math.round(Math.max(0, Math.min(255, color.a)));
|
|
51
|
+
}
|
|
52
|
+
return lutData;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* @description 色を補間
|
|
56
|
+
* 色は0-255範囲で入力され、0-255範囲で出力される
|
|
57
|
+
* @param {number[]} stops
|
|
58
|
+
* @param {number} t
|
|
59
|
+
* @param {number} interpolation - 0: linearRGB, 1: RGB(WebGL互換)
|
|
60
|
+
* @return {{ r: number, g: number, b: number, a: number }}
|
|
61
|
+
*/
|
|
62
|
+
const interpolateColor = (stops, t, interpolation) => {
|
|
63
|
+
const stopsLength = stops.length / 5;
|
|
64
|
+
// 最初と最後のストップを見つける
|
|
65
|
+
let startIdx = 0;
|
|
66
|
+
let endIdx = 0;
|
|
67
|
+
for (let i = 0; i < stopsLength; i++) {
|
|
68
|
+
// offset は既に 0-1 範囲
|
|
69
|
+
const offset = stops[i * 5];
|
|
70
|
+
if (offset <= t) {
|
|
71
|
+
startIdx = i;
|
|
72
|
+
}
|
|
73
|
+
if (offset >= t && endIdx === 0) {
|
|
74
|
+
endIdx = i;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// 最後のストップを超えている場合
|
|
79
|
+
if (endIdx === 0) {
|
|
80
|
+
endIdx = stopsLength - 1;
|
|
81
|
+
}
|
|
82
|
+
// 同じストップの場合(色は0-255範囲)
|
|
83
|
+
if (startIdx === endIdx) {
|
|
84
|
+
const idx = startIdx * 5;
|
|
85
|
+
return {
|
|
86
|
+
"r": stops[idx + 1],
|
|
87
|
+
"g": stops[idx + 2],
|
|
88
|
+
"b": stops[idx + 3],
|
|
89
|
+
"a": stops[idx + 4]
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// 補間係数を計算(offset は既に 0-1 範囲)
|
|
93
|
+
const startOffset = stops[startIdx * 5];
|
|
94
|
+
const endOffset = stops[endIdx * 5];
|
|
95
|
+
const localT = (t - startOffset) / (endOffset - startOffset);
|
|
96
|
+
// 色を取得(0-255範囲)
|
|
97
|
+
const startR = stops[startIdx * 5 + 1];
|
|
98
|
+
const startG = stops[startIdx * 5 + 2];
|
|
99
|
+
const startB = stops[startIdx * 5 + 3];
|
|
100
|
+
const startA = stops[startIdx * 5 + 4];
|
|
101
|
+
const endR = stops[endIdx * 5 + 1];
|
|
102
|
+
const endG = stops[endIdx * 5 + 2];
|
|
103
|
+
const endB = stops[endIdx * 5 + 3];
|
|
104
|
+
const endA = stops[endIdx * 5 + 4];
|
|
105
|
+
// 補間(WebGL互換: interpolation === 0 がlinearRGB)
|
|
106
|
+
if (interpolation === 0) {
|
|
107
|
+
// linearRGB補間(ガンマ補正)
|
|
108
|
+
// 0-255 → 0-1に正規化してからリニア変換
|
|
109
|
+
return {
|
|
110
|
+
"r": linearToSRGB(lerp(sRGBToLinear(startR / 255), sRGBToLinear(endR / 255), localT)) * 255,
|
|
111
|
+
"g": linearToSRGB(lerp(sRGBToLinear(startG / 255), sRGBToLinear(endG / 255), localT)) * 255,
|
|
112
|
+
"b": linearToSRGB(lerp(sRGBToLinear(startB / 255), sRGBToLinear(endB / 255), localT)) * 255,
|
|
113
|
+
"a": lerp(startA, endA, localT)
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// RGB補間(リニア、デフォルト)- 0-255範囲でそのまま補間
|
|
117
|
+
return {
|
|
118
|
+
"r": lerp(startR, endR, localT),
|
|
119
|
+
"g": lerp(startG, endG, localT),
|
|
120
|
+
"b": lerp(startB, endB, localT),
|
|
121
|
+
"a": lerp(startA, endA, localT)
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* @description 線形補間
|
|
126
|
+
*/
|
|
127
|
+
const lerp = (a, b, t) => {
|
|
128
|
+
return a + (b - a) * t;
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* @description sRGBからリニアへ変換(入力: 0-1正規化値)
|
|
132
|
+
* WebGL版と同じガンマ値 2.23333333 を使用
|
|
133
|
+
*/
|
|
134
|
+
const sRGBToLinear = (value) => {
|
|
135
|
+
// WebGL版と同じ簡易ガンマ補正
|
|
136
|
+
return Math.pow(value, 2.23333333);
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* @description リニアからsRGBへ変換(出力: 0-1正規化値)
|
|
140
|
+
* WebGL版と同じガンマ値 0.45454545 (= 1/2.2) を使用
|
|
141
|
+
*/
|
|
142
|
+
const linearToSRGB = (value) => {
|
|
143
|
+
// WebGL版と同じ簡易ガンマ補正
|
|
144
|
+
return Math.pow(value, 0.45454545);
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* @description フィルター用グラデーションLUTテクスチャデータを生成
|
|
148
|
+
* ratios, colors, alphas配列から1D LUTを生成
|
|
149
|
+
* @param {Float32Array} ratios - 比率配列 (0-255)
|
|
150
|
+
* @param {Float32Array} colors - 色配列 (32bit整数)
|
|
151
|
+
* @param {Float32Array} alphas - アルファ配列 (0-1)
|
|
152
|
+
* @return {Uint8Array}
|
|
153
|
+
*/
|
|
154
|
+
export const generateFilterGradientLUT = (ratios, colors, alphas) => {
|
|
155
|
+
const resolution = 256;
|
|
156
|
+
const lutData = new Uint8Array(resolution * 4);
|
|
157
|
+
const stopsLength = ratios.length;
|
|
158
|
+
// ストップデータを構築
|
|
159
|
+
const stops = [];
|
|
160
|
+
for (let i = 0; i < stopsLength; i++) {
|
|
161
|
+
const color = colors[i];
|
|
162
|
+
stops.push({
|
|
163
|
+
"offset": ratios[i] / 255,
|
|
164
|
+
"r": (color >> 16 & 0xFF) / 255,
|
|
165
|
+
"g": (color >> 8 & 0xFF) / 255,
|
|
166
|
+
"b": (color & 0xFF) / 255,
|
|
167
|
+
"a": alphas[i]
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
// 各ピクセルの色を補間
|
|
171
|
+
for (let i = 0; i < resolution; i++) {
|
|
172
|
+
const t = i / (resolution - 1);
|
|
173
|
+
// ストップを見つける
|
|
174
|
+
let startIdx = 0;
|
|
175
|
+
let endIdx = stopsLength - 1;
|
|
176
|
+
for (let j = 0; j < stopsLength - 1; j++) {
|
|
177
|
+
if (stops[j].offset <= t && stops[j + 1].offset >= t) {
|
|
178
|
+
startIdx = j;
|
|
179
|
+
endIdx = j + 1;
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// 補間
|
|
184
|
+
const start = stops[startIdx];
|
|
185
|
+
const end = stops[endIdx];
|
|
186
|
+
let localT = 0;
|
|
187
|
+
if (end.offset !== start.offset) {
|
|
188
|
+
localT = (t - start.offset) / (end.offset - start.offset);
|
|
189
|
+
}
|
|
190
|
+
const r = lerp(start.r, end.r, localT);
|
|
191
|
+
const g = lerp(start.g, end.g, localT);
|
|
192
|
+
const b = lerp(start.b, end.b, localT);
|
|
193
|
+
const a = lerp(start.a, end.a, localT);
|
|
194
|
+
// プリマルチプライドアルファで書き込み
|
|
195
|
+
const offset = i * 4;
|
|
196
|
+
lutData[offset + 0] = Math.round(r * a * 255);
|
|
197
|
+
lutData[offset + 1] = Math.round(g * a * 255);
|
|
198
|
+
lutData[offset + 2] = Math.round(b * a * 255);
|
|
199
|
+
lutData[offset + 3] = Math.round(a * 255);
|
|
200
|
+
}
|
|
201
|
+
return lutData;
|
|
202
|
+
};
|
package/src/Grid.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description グリッドデータマップ(9-slice用)
|
|
3
|
+
* Grid data map for 9-slice transformation
|
|
4
|
+
* @type {Map<number, Float32Array | null>}
|
|
5
|
+
*/
|
|
6
|
+
export declare const $gridDataMap: Map<number, Float32Array | null>;
|
|
7
|
+
/**
|
|
8
|
+
* @description 現在のフィルバッファインデックス
|
|
9
|
+
* Current fill buffer index
|
|
10
|
+
* @type {number}
|
|
11
|
+
*/
|
|
12
|
+
export declare let $fillBufferIndex: number;
|
|
13
|
+
/**
|
|
14
|
+
* @description グリッド情報を初期化
|
|
15
|
+
* Initialize grid information
|
|
16
|
+
* @return {void}
|
|
17
|
+
*/
|
|
18
|
+
export declare const $terminateGrid: () => void;
|
package/src/Grid.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description グリッドデータマップ(9-slice用)
|
|
3
|
+
* Grid data map for 9-slice transformation
|
|
4
|
+
* @type {Map<number, Float32Array | null>}
|
|
5
|
+
*/
|
|
6
|
+
export const $gridDataMap = new Map();
|
|
7
|
+
/**
|
|
8
|
+
* @description 現在のフィルバッファインデックス
|
|
9
|
+
* Current fill buffer index
|
|
10
|
+
* @type {number}
|
|
11
|
+
*/
|
|
12
|
+
export let $fillBufferIndex = 0;
|
|
13
|
+
/**
|
|
14
|
+
* @description グリッド情報を初期化
|
|
15
|
+
* Initialize grid information
|
|
16
|
+
* @return {void}
|
|
17
|
+
*/
|
|
18
|
+
export const $terminateGrid = () => {
|
|
19
|
+
$gridDataMap.clear();
|
|
20
|
+
$fillBufferIndex = 0;
|
|
21
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { $isMaskDrawing, $setMaskDrawing, $clipLevels } from "../../Mask";
|
|
2
|
+
import { $context } from "../../WebGPUUtil";
|
|
3
|
+
/**
|
|
4
|
+
* @description マスク描画の開始準備
|
|
5
|
+
* Prepare to start drawing the mask
|
|
6
|
+
*
|
|
7
|
+
* @return {void}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export const execute = () => {
|
|
12
|
+
const currentAttachmentObject = $context.currentAttachmentObject;
|
|
13
|
+
if (!currentAttachmentObject) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
currentAttachmentObject.mask = true;
|
|
17
|
+
currentAttachmentObject.clipLevel++;
|
|
18
|
+
$clipLevels.set(currentAttachmentObject.clipLevel, currentAttachmentObject.clipLevel);
|
|
19
|
+
if (!$isMaskDrawing()) {
|
|
20
|
+
$setMaskDrawing(true);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description マスクの描画を終了
|
|
3
|
+
* End mask drawing
|
|
4
|
+
*
|
|
5
|
+
* WebGPU版: ビット単位のマスキングを使用(WebGL版と同様)
|
|
6
|
+
* 各レベルに対応するビットが設定されたマスク値を計算し、
|
|
7
|
+
* EQUALテストで累積マスク値と一致する領域のみ描画
|
|
8
|
+
*
|
|
9
|
+
* WebGL版: stencilFunc(EQUAL, mask & 0xff, mask)
|
|
10
|
+
*
|
|
11
|
+
* @return {void}
|
|
12
|
+
* @method
|
|
13
|
+
* @protected
|
|
14
|
+
*/
|
|
15
|
+
export declare const execute: () => void;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { $context } from "../../WebGPUUtil";
|
|
2
|
+
import { $setMaskTestEnabled, $setMaskStencilReference, $setMaskDrawing } from "../../Mask";
|
|
3
|
+
/**
|
|
4
|
+
* @description マスクの描画を終了
|
|
5
|
+
* End mask drawing
|
|
6
|
+
*
|
|
7
|
+
* WebGPU版: ビット単位のマスキングを使用(WebGL版と同様)
|
|
8
|
+
* 各レベルに対応するビットが設定されたマスク値を計算し、
|
|
9
|
+
* EQUALテストで累積マスク値と一致する領域のみ描画
|
|
10
|
+
*
|
|
11
|
+
* WebGL版: stencilFunc(EQUAL, mask & 0xff, mask)
|
|
12
|
+
*
|
|
13
|
+
* @return {void}
|
|
14
|
+
* @method
|
|
15
|
+
* @protected
|
|
16
|
+
*/
|
|
17
|
+
export const execute = () => {
|
|
18
|
+
const currentAttachmentObject = $context.currentAttachmentObject;
|
|
19
|
+
if (!currentAttachmentObject) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const clipLevel = currentAttachmentObject.clipLevel;
|
|
23
|
+
// 累積マスク値を計算(WebGL版と同じアルゴリズム)
|
|
24
|
+
// 簡略化: mask = (1 << clipLevel) - 1
|
|
25
|
+
// level 1: mask = 1 (0x01)
|
|
26
|
+
// level 2: mask = 3 (0x03)
|
|
27
|
+
// level 3: mask = 7 (0x07)
|
|
28
|
+
// ...
|
|
29
|
+
const mask = (1 << clipLevel) - 1;
|
|
30
|
+
// マスクテストを有効化
|
|
31
|
+
// EQUALテストで、累積マスク値と一致するピクセルのみ描画を許可
|
|
32
|
+
$setMaskTestEnabled(true);
|
|
33
|
+
$setMaskStencilReference(mask & 0xFF); // EQUAL テスト用の参照値
|
|
34
|
+
// マスク描画フェーズは終了
|
|
35
|
+
$setMaskDrawing(false);
|
|
36
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description マスク範囲の設定
|
|
3
|
+
* Set mask bounds
|
|
4
|
+
*
|
|
5
|
+
* @param {number} x_min
|
|
6
|
+
* @param {number} y_min
|
|
7
|
+
* @param {number} x_max
|
|
8
|
+
* @param {number} y_max
|
|
9
|
+
* @return {void}
|
|
10
|
+
* @method
|
|
11
|
+
* @protected
|
|
12
|
+
*/
|
|
13
|
+
export declare const execute: (x_min: number, y_min: number, x_max: number, y_max: number) => void;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { $clipBounds } from "../../Mask";
|
|
2
|
+
import { $context, $getFloat32Array4 } from "../../WebGPUUtil";
|
|
3
|
+
/**
|
|
4
|
+
* @description マスク範囲の設定
|
|
5
|
+
* Set mask bounds
|
|
6
|
+
*
|
|
7
|
+
* @param {number} x_min
|
|
8
|
+
* @param {number} y_min
|
|
9
|
+
* @param {number} x_max
|
|
10
|
+
* @param {number} y_max
|
|
11
|
+
* @return {void}
|
|
12
|
+
* @method
|
|
13
|
+
* @protected
|
|
14
|
+
*/
|
|
15
|
+
export const execute = (x_min, y_min, x_max, y_max) => {
|
|
16
|
+
const currentAttachmentObject = $context.currentAttachmentObject;
|
|
17
|
+
if (!currentAttachmentObject) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const clipLevel = currentAttachmentObject.clipLevel;
|
|
21
|
+
let bounds = $clipBounds.get(clipLevel);
|
|
22
|
+
if (bounds) {
|
|
23
|
+
bounds[0] = Math.min(bounds[0], x_min);
|
|
24
|
+
bounds[1] = Math.min(bounds[1], y_min);
|
|
25
|
+
bounds[2] = Math.max(bounds[2], x_max);
|
|
26
|
+
bounds[3] = Math.max(bounds[3], y_max);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
bounds = $getFloat32Array4();
|
|
30
|
+
bounds[0] = x_min;
|
|
31
|
+
bounds[1] = y_min;
|
|
32
|
+
bounds[2] = x_max;
|
|
33
|
+
bounds[3] = y_max;
|
|
34
|
+
$clipBounds.set(clipLevel, bounds);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { BufferManager } from "../../BufferManager";
|
|
2
|
+
import type { PipelineManager } from "../../Shader/PipelineManager";
|
|
3
|
+
import type { IAttachmentObject } from "../../interface/IAttachmentObject";
|
|
4
|
+
export declare const execute: (device: GPUDevice, renderPassEncoder: GPURenderPassEncoder, bufferManager: BufferManager, pipelineManager: PipelineManager, currentAttachment: IAttachmentObject) => void;
|