Repository navigation
Conversation
… GPU performance The KawaseBlurFilter used internally by DropShadowFilter was not receiving the resolution parameter, causing it to inherit the renderer's devicePixelRatio. On Apple Retina displays (DPR 2-3x), this resulted in the blur being rendered at unnecessarily high resolution, causing severe performance issues (~3 FPS). Additionally, recalculate padding when kernels or pixelSize changes at runtime. Fixes pixijs#327
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
DropShadowFilter has severe performance issues on Apple devices (Mac/iPhone) with Retina displays. On these devices, the filter runs at ~3 FPS even with low quality settings.
Root Cause
The inner
KawaseBlurFilterwas not receiving theresolutionparameter from the parentDropShadowFilter. Without an explicit resolution, PixiJS's filter system defaults to inheriting the renderer'sdevicePixelRatio. On Apple Retina displays (DPR 2-3x), this causes the blur to be rendered at 2-3x the necessary resolution, resulting in 4-9x more pixels to process.Changes
this._blurFilter.resolutionto match the parent filter's resolution (lines 152-156)_updatePadding()calls whenkernels,pixelSize,pixelSizeX, orpixelSizeYare modified at runtime (similar to PR fix(drop-shadow): recalc padding when kernel/pixel size changes #520)Impact
resolution=1is sufficient for drop shadow effectsRelated
Testing
The fix can be verified by checking that
DropShadowFilter._blurFilter.resolutionequals the filter's resolution on construction, rather than defaulting to the renderer's DPR.