Use the underlying *vector.Rasterizer.Draw() fast path when calling canvas.Draw() #151
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.
The underlying
*vector.Rasterizer.Draw()
function has a fast path that only applies when two things are true:*image.Uniform
*image.RGBA
The Rasterizer in the present package wraps a draw.Image of type
*image.RGBA
, but is not, itself, an*image.RGBA
. Therefore, it gets shunted down the slow path.This commit instead passes the
Rasterizer.Image
directly to the call to*vector.Rasterizer.Draw()
, which allows the fast path to be used.In my experiments with drawing a few hundred large (> 500 x 500px) images with
go 1.18
, this reduced the time spent on*vector.Rasterizer.Draw()
calls from 80 seconds to 40 seconds. The call path now routes throughvector (*Rasterizer) rasterizeDstRGBASrcUniformOpOver
instead of the generic and slowervector (*Rasterizer) rasterizeOpOver
.(This may be related to #47 .)