|
|
Created:
4 years, 7 months ago by Stephen White Modified:
4 years, 7 months ago CC:
reviews_skia.org Base URL:
https://skia.googlesource.com/skia.git@master Target Ref:
refs/heads/master Project:
skia Visibility:
Public. |
DescriptionImage filters: implement SkImage::makeWithFilter().
This API provides a way to directly filter a subregion of an SkImage
(usually texture-backed), and returns an SkImage which may include
extra padding, along with a size to indicate the active region.
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1964043002
Committed: https://skia.googlesource.com/skia/+/5878dbdf1b5d86201d299c6e07d53e35048713c7
Patch Set 1 #Patch Set 2 : Use new variant of filterImage instead #Patch Set 3 : Fix comments #Patch Set 4 : Cleanup #Patch Set 5 : Update to ToT #
Total comments: 1
Patch Set 6 : subset SkISize -> SkIRect, Context -> clipBounds #Patch Set 7 : Fix style; revert unrelated change #Patch Set 8 : Move API to SkImage #Patch Set 9 : #Patch Set 10 : Fix comment #Patch Set 11 : Add unit tests #Patch Set 12 : Add a GM #Patch Set 13 : GM tweakage #Patch Set 14 : #Patch Set 15 : Speculative win fix #Patch Set 16 : Fix tests in serialize mode (check for null SkCanvas::makeSurface()). #
Total comments: 2
Patch Set 17 : Clip subset to clipBounds; incorporate GM changes #
Total comments: 12
Patch Set 18 : Fixes per Mike's comments #Patch Set 19 : Docs and formatting fixes per Rob's remarks. #Patch Set 20 : 100-col fix #Patch Set 21 : Ibid #Patch Set 22 : More fixes per Rob #
Total comments: 12
Patch Set 23 : Fixes per Rob's comments #
Messages
Total messages: 72 (28 generated)
Description was changed from ========== Move SkSpecialImage.h to include/core. Move SkNextID.h include to .cpp. BUG=skia: ========== to ========== Move SkSpecialImage.h to include/core. Move SkNextID.h include to .cpp. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ==========
Description was changed from ========== Move SkSpecialImage.h to include/core. Move SkNextID.h include to .cpp. BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ========== to ========== Image filters: expose an SkImage+rect flavour of filterImage() This API provides a way to process a subregion of an SkImage (usually texture-backed), and returns an SkImage which may include extra padding, along with a size to indicate the active region. ==========
Description was changed from ========== Image filters: expose an SkImage+rect flavour of filterImage() This API provides a way to process a subregion of an SkImage (usually texture-backed), and returns an SkImage which may include extra padding, along with a size to indicate the active region. ========== to ========== Image filters: expose an SkImage+rect flavour of filterImage() This API provides a way to process a subregion of an SkImage (usually texture-backed), and returns an SkImage which may include extra padding, along with a size to indicate the active region. GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ==========
senorblanco@chromium.org changed reviewers: + reed@google.com, robertphillips@google.com
Mike, Rob: PTAL. Thanks! (Test to come.)
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1964043002/60001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1964043002/60001
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: Test-Ubuntu-GCC-ShuttleA-GPU-GTX660-x86_64-Release-Trybot on client.skia (JOB_FAILED, http://build.chromium.org/p/client.skia/builders/Test-Ubuntu-GCC-ShuttleA-GPU...)
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1964043002/80001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1964043002/80001
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
Can we have a test and/or a GM? https://codereview.chromium.org/1964043002/diff/80001/src/core/SkImageFilter.cpp File src/core/SkImageFilter.cpp (right): https://codereview.chromium.org/1964043002/diff/80001/src/core/SkImageFilter.... src/core/SkImageFilter.cpp:237: } srcSpecialImage ?
I think it is a better API fit to make the public version sit on SkImage, instead of imagefilter. sk_sp<SkImage> SkImage::makeFromFilter(SkImageFilter* filter, const SkIRect& inSubset, SkIRect* outSubset, SkIPoint* outOffset) const; I am generalizing subsets to be rects, and not assume/require that the subsets are always pinned to the upper-left. Is that something we can support?
On 2016/05/16 16:40:30, reed1 wrote: > I think it is a better API fit to make the public version sit on SkImage, > instead of imagefilter. > > sk_sp<SkImage> SkImage::makeFromFilter(SkImageFilter* filter, const SkIRect& > inSubset, SkIRect* outSubset, SkIPoint* outOffset) const; Maybe makeWithFilter(), since that seems to be more consistent with other "combining" APIs? > I am generalizing subsets to be rects, and not assume/require that the subsets > are always pinned to the upper-left. Is that something we can support? Output subrects will require some support in cc which I'm not certain how to implement ATM. But if we're going to go that way, go ahead and make them rects and I'll look into the cc side further.
On 2016/05/16 19:03:55, Stephen White wrote: > On 2016/05/16 16:40:30, reed1 wrote: > > I think it is a better API fit to make the public version sit on SkImage, > > instead of imagefilter. > > > > sk_sp<SkImage> SkImage::makeFromFilter(SkImageFilter* filter, const SkIRect& > > inSubset, SkIRect* outSubset, SkIPoint* outOffset) const; Also, could you add a const SkImageFilter::Context& to that? At a minimum, I'm going to need the clipBounds and CTM, so alternatively you could add those as separate params if you like. I don't mind if you create the cache internally -- it only has to last as long as the filter traversal (this function). Here's the cc-side patch, if it helps: https://codereview.chromium.org/1959033002/
Do we actually need CTM, given the current use-case? I only see translate in gl_renderer.cc
On 2016/05/16 20:59:16, reed1 wrote: > Do we actually need CTM, given the current use-case? I only see translate in > gl_renderer.cc Actually I think we could get by with putting that translate in the SkLocalMatrixImageFilter (but it does need to be applied to the filter parameters, so I don't think there's another way to get it in). Or we could allow a CTM here, and possibly remove SkLocalMatrixImageFilter entirely in the future. Your call.
BTW, I've updated this patch and the cc patch to use an SkIRect instead of SkISize, and to pass only clipBounds (all matrix-related stuff is now in the SkLocalMatrixImageFilter). All tests still pass, so I'm good with this. Haven't moved the call site to SkImage, since I assume you're doing that.
I think, given the requests for gms, that you should move the API to SkImage as part of this CL, otherwise we'd have to update the gms/tests again. If the caller does not have a particular clip in mind, what should the dox recommend they pass? Perhaps we take a const SkIRect* instead of & ?
On 2016/05/17 13:53:02, reed1 wrote: > I think, given the requests for gms, that you should move the API to SkImage as > part of this CL, otherwise we'd have to update the gms/tests again. Sorry, I thought from your comments above that you were going to add the API to SkImage. I didn't intend to land this patch as-is, just verifying things work on the cc side with the full subset, no CTM etc. I'll move it to SkImage, then. > If the caller does not have a particular clip in mind, what should the dox > recommend they pass? Perhaps we take a const SkIRect* instead of & ? They should pass the bounds of whatever they're going to render the result to. Since the internal callers always have a clip bounds, I think it makes sense to require external callers to have one.
*If* a caller always wanted the "complete" result, what clipbounds should they pass in?
On 2016/05/17 14:43:11, reed1 wrote: > *If* a caller always wanted the "complete" result, what clipbounds should they > pass in? Given that many filters have infinite extent (e.g., lighting, turbulence, color filter which affects transparent black), I don't think a "complete" result can be defined.
Description was changed from ========== Image filters: expose an SkImage+rect flavour of filterImage() This API provides a way to process a subregion of an SkImage (usually texture-backed), and returns an SkImage which may include extra padding, along with a size to indicate the active region. GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ========== to ========== Image filters: expose an SkImage+rect flavour of filterImage() This API provides a way to process a subregion of an SkImage (usually texture-backed), and returns an SkImage which may include extra padding, along with a size to indicate the active region. GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... NOTREECHECKS=true NOTRY=true NOPRESUBMIT=true ==========
PTAL. API moved to SkImage. Unit tests + GM added.
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1964043002/240001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1964043002/240001
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1964043002/260001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1964043002/260001
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
Description was changed from ========== Image filters: expose an SkImage+rect flavour of filterImage() This API provides a way to process a subregion of an SkImage (usually texture-backed), and returns an SkImage which may include extra padding, along with a size to indicate the active region. GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... NOTREECHECKS=true NOTRY=true NOPRESUBMIT=true ========== to ========== Image filters: implement SkImage::makeWithFilter(). This API provides a way to directly filter a subregion of an SkImage (usually texture-backed), and returns an SkImage which may include extra padding, along with a size to indicate the active region. ==========
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1964043002/260001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1964043002/260001
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: Build-Win-MSVC-x86_64-Debug-Trybot on client.skia.compile (JOB_FAILED, http://build.chromium.org/p/client.skia.compile/builders/Build-Win-MSVC-x86_6...)
Description was changed from ========== Image filters: implement SkImage::makeWithFilter(). This API provides a way to directly filter a subregion of an SkImage (usually texture-backed), and returns an SkImage which may include extra padding, along with a size to indicate the active region. ========== to ========== Image filters: implement SkImage::makeWithFilter(). This API provides a way to directly filter a subregion of an SkImage (usually texture-backed), and returns an SkImage which may include extra padding, along with a size to indicate the active region. GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ==========
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1964043002/280001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1964043002/280001
Description was changed from ========== Image filters: implement SkImage::makeWithFilter(). This API provides a way to directly filter a subregion of an SkImage (usually texture-backed), and returns an SkImage which may include extra padding, along with a size to indicate the active region. GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ========== to ========== Image filters: implement SkImage::makeWithFilter(). This API provides a way to directly filter a subregion of an SkImage (usually texture-backed), and returns an SkImage which may include extra padding, along with a size to indicate the active region. GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ==========
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: Try jobs failed on following builders: Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-Shared-Trybot on client.skia (JOB_FAILED, http://build.chromium.org/p/client.skia/builders/Test-Ubuntu-GCC-GCE-CPU-AVX2...)
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1964043002/300001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1964043002/300001
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
Friendly ping. ;)
rob and I are at a google i/o extended event today, but I should be able to test/review this on my laptop.
New patch up: intersect the returned subset with the clipBounds, and incorporate Mike's GM changes.
https://codereview.chromium.org/1964043002/diff/300001/include/core/SkImage.h File include/core/SkImage.h (right): https://codereview.chromium.org/1964043002/diff/300001/include/core/SkImage.h... include/core/SkImage.h:340: SkIPoint* offset); method should be const https://codereview.chromium.org/1964043002/diff/320001/tests/ImageFilterTest.cpp File tests/ImageFilterTest.cpp (right): https://codereview.chromium.org/1964043002/diff/320001/tests/ImageFilterTest.... tests/ImageFilterTest.cpp:1718: REPORTER_ASSERT(reporter, result); What are the pre and post conditions for the api (w.r.t. rects)? preconditions: - src->contains(inSubset) /* else we return null? */ postconditions: - dst->contains(outSubset) - clipBounds.contains(outSubset) 1. are there others? 2. can we tests for these here?
https://codereview.chromium.org/1964043002/diff/320001/gm/imagemakewithfilter... File gm/imagemakewithfilter.cpp (right): https://codereview.chromium.org/1964043002/diff/320001/gm/imagemakewithfilter... gm/imagemakewithfilter.cpp:30: // In this GM we're going to feed the inner portion of a 100x100 checkboard (i.e., strip off a 25 wide border) through the makeWithFilter method. // We'll then draw the appropriate subset of the result to the screen at the given off set. https://codereview.chromium.org/1964043002/diff/320001/gm/imagemakewithfilter... gm/imagemakewithfilter.cpp:62: SkScalar MARGIN = SkIntToScalar(40); constify DX too ? maybe even MARGIN ? https://codereview.chromium.org/1964043002/diff/320001/include/core/SkImage.h File include/core/SkImage.h (right): https://codereview.chromium.org/1964043002/diff/320001/include/core/SkImage.h... include/core/SkImage.h:329: * Doesn't clipBounds also capture the position - not just the size ? https://codereview.chromium.org/1964043002/diff/320001/include/core/SkImage.h... include/core/SkImage.h:335: * If the result image cannot be created, or the result would be transparent black, null subset -> outSubset ? https://codereview.chromium.org/1964043002/diff/320001/src/image/SkImage.cpp File src/image/SkImage.cpp (right): https://codereview.chromium.org/1964043002/diff/320001/src/image/SkImage.cpp#... src/image/SkImage.cpp:352: } srcSpecialImage ?
https://codereview.chromium.org/1964043002/diff/300001/include/core/SkImage.h File include/core/SkImage.h (right): https://codereview.chromium.org/1964043002/diff/300001/include/core/SkImage.h... include/core/SkImage.h:340: SkIPoint* offset); On 2016/05/19 16:33:34, reed1 wrote: > method should be const I tried that, but SkSpecialImage wants to take a ref on "this", so sk_ref_sp complained about the constness. I see SkImage::makeSubset() does a const_cast<SkImage*>. So I'll do that too. (Kind of feels like sk_ref_sp could take a const T*, given that ref() is const and the refcount is mutable.) https://codereview.chromium.org/1964043002/diff/320001/tests/ImageFilterTest.cpp File tests/ImageFilterTest.cpp (right): https://codereview.chromium.org/1964043002/diff/320001/tests/ImageFilterTest.... tests/ImageFilterTest.cpp:1718: REPORTER_ASSERT(reporter, result); On 2016/05/19 16:33:34, reed1 wrote: > What are the pre and post conditions for the api (w.r.t. rects)? > > preconditions: > - src->contains(inSubset) /* else we return null? */ Done. (Test was there, but buggy.) > postconditions: > - dst->contains(outSubset) Test was already there. Made it more explicit. > - clipBounds.contains(outSubset) Not quite -- outSubset is relative to the image origin, not the coordinate space origin. Added the appropriate check.
https://codereview.chromium.org/1964043002/diff/320001/include/core/SkImage.h File include/core/SkImage.h (right): https://codereview.chromium.org/1964043002/diff/320001/include/core/SkImage.h... include/core/SkImage.h:329: * On 2016/05/19 16:35:19, robertphillips wrote: > Doesn't clipBounds also capture the position - not just the size ? Fixed. https://codereview.chromium.org/1964043002/diff/320001/include/core/SkImage.h... include/core/SkImage.h:335: * If the result image cannot be created, or the result would be transparent black, null On 2016/05/19 16:35:19, robertphillips wrote: > subset -> outSubset ? Done. https://codereview.chromium.org/1964043002/diff/320001/src/image/SkImage.cpp File src/image/SkImage.cpp (right): https://codereview.chromium.org/1964043002/diff/320001/src/image/SkImage.cpp#... src/image/SkImage.cpp:352: } On 2016/05/19 16:35:19, robertphillips wrote: > srcSpecialImage ? Done.
Thanks for your reviews. New patch up.
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1964043002/400001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1964043002/400001
(Missed some of Rob's comments the first time.. new patch up.) https://codereview.chromium.org/1964043002/diff/320001/gm/imagemakewithfilter... File gm/imagemakewithfilter.cpp (right): https://codereview.chromium.org/1964043002/diff/320001/gm/imagemakewithfilter... gm/imagemakewithfilter.cpp:30: On 2016/05/19 16:35:19, robertphillips wrote: > // In this GM we're going to feed the inner portion of a 100x100 checkboard > (i.e., strip off a 25 wide border) through the makeWithFilter method. > // We'll then draw the appropriate subset of the result to the screen at the > given off set. Done.. (but isn't that what the code says? :) ) https://codereview.chromium.org/1964043002/diff/320001/gm/imagemakewithfilter... gm/imagemakewithfilter.cpp:62: SkScalar MARGIN = SkIntToScalar(40); On 2016/05/19 16:35:19, robertphillips wrote: > constify DX too ? > maybe even MARGIN ? const POD local variables are a pet peeve of mine: They've always struck me as just noise: I've never, ever seen them catch a bug, and the compiler can optimize perfectly well without them. Is there an argument I'm missing? (But now you've drawn my attention to them, I've removed them all. :)
The CQ bit was checked by senorblanco@chromium.org to run a CQ dry run
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1964043002/420001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1964043002/420001
The CQ bit was unchecked by commit-bot@chromium.org
Dry run: This issue passed the CQ dry run.
lgtm https://codereview.chromium.org/1964043002/diff/420001/tests/ImageFilterTest.cpp File tests/ImageFilterTest.cpp (right): https://codereview.chromium.org/1964043002/diff/420001/tests/ImageFilterTest.... tests/ImageFilterTest.cpp:1720: SkIRect dest_rect = SkIRect::MakeXYWH(offset.x(), offset.y(), nit: can just use outSubset.makeOffset(offset.x(), offset.y())
lgtm https://codereview.chromium.org/1964043002/diff/420001/include/core/SkImage.h File include/core/SkImage.h (right): https://codereview.chromium.org/1964043002/diff/420001/include/core/SkImage.h... include/core/SkImage.h:326: * The subset represents the active portion of this image. The return value is similarly an Skimage -> SkImage ? https://codereview.chromium.org/1964043002/diff/420001/tests/ImageFilterTest.cpp File tests/ImageFilterTest.cpp (right): https://codereview.chromium.org/1964043002/diff/420001/tests/ImageFilterTest.... tests/ImageFilterTest.cpp:1687: SkPaint greenPaint; bluePaint? SK_ColorGreen ? https://codereview.chromium.org/1964043002/diff/420001/tests/ImageFilterTest.... tests/ImageFilterTest.cpp:1712: SkIRect empty = SkIRect::MakeEmpty(); Do you intend the offset out pointer to be null here ? https://codereview.chromium.org/1964043002/diff/420001/tests/ImageFilterTest.... tests/ImageFilterTest.cpp:1719: REPORTER_ASSERT(reporter, result->bounds().contains(outSubset)); destRect ? https://codereview.chromium.org/1964043002/diff/420001/tests/ImageFilterTest.... tests/ImageFilterTest.cpp:1722: REPORTER_ASSERT(reporter, clipBounds.contains(dest_rect)); Do you not want to test the case where clipBounds clips everything out or is empty ?
https://codereview.chromium.org/1964043002/diff/420001/include/core/SkImage.h File include/core/SkImage.h (right): https://codereview.chromium.org/1964043002/diff/420001/include/core/SkImage.h... include/core/SkImage.h:326: * The subset represents the active portion of this image. The return value is similarly an On 2016/05/19 21:14:44, robertphillips wrote: > Skimage -> SkImage ? Done. https://codereview.chromium.org/1964043002/diff/420001/tests/ImageFilterTest.cpp File tests/ImageFilterTest.cpp (right): https://codereview.chromium.org/1964043002/diff/420001/tests/ImageFilterTest.... tests/ImageFilterTest.cpp:1687: SkPaint greenPaint; On 2016/05/19 21:14:44, robertphillips wrote: > bluePaint? SK_ColorGreen ? LOL What... is your favourite colour? https://www.youtube.com/watch?v=aW7QABOM_os https://codereview.chromium.org/1964043002/diff/420001/tests/ImageFilterTest.... tests/ImageFilterTest.cpp:1712: SkIRect empty = SkIRect::MakeEmpty(); On 2016/05/19 21:14:44, robertphillips wrote: > Do you intend the offset out pointer to be null here ? Nope. Thanks. https://codereview.chromium.org/1964043002/diff/420001/tests/ImageFilterTest.... tests/ImageFilterTest.cpp:1719: REPORTER_ASSERT(reporter, result->bounds().contains(outSubset)); On 2016/05/19 21:14:44, robertphillips wrote: > destRect ? Done. https://codereview.chromium.org/1964043002/diff/420001/tests/ImageFilterTest.... tests/ImageFilterTest.cpp:1720: SkIRect dest_rect = SkIRect::MakeXYWH(offset.x(), offset.y(), On 2016/05/19 20:12:10, reed1 wrote: > nit: can just use outSubset.makeOffset(offset.x(), offset.y()) Can't do that; we wan to use only the outSubset size, not its origin. https://codereview.chromium.org/1964043002/diff/420001/tests/ImageFilterTest.... tests/ImageFilterTest.cpp:1722: REPORTER_ASSERT(reporter, clipBounds.contains(dest_rect)); On 2016/05/19 21:14:44, robertphillips wrote: > Do you not want to test the case where clipBounds clips everything out or is > empty ? Good point. Done.
The CQ bit was checked by senorblanco@chromium.org
The patchset sent to the CQ was uploaded after l-g-t-m from robertphillips@google.com, reed@google.com Link to the patchset: https://codereview.chromium.org/1964043002/#ps440001 (title: "Fixes per Rob's comments")
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1964043002/440001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1964043002/440001
Message was sent while issue was closed.
Description was changed from ========== Image filters: implement SkImage::makeWithFilter(). This API provides a way to directly filter a subregion of an SkImage (usually texture-backed), and returns an SkImage which may include extra padding, along with a size to indicate the active region. GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... ========== to ========== Image filters: implement SkImage::makeWithFilter(). This API provides a way to directly filter a subregion of an SkImage (usually texture-backed), and returns an SkImage which may include extra padding, along with a size to indicate the active region. GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&is... Committed: https://skia.googlesource.com/skia/+/5878dbdf1b5d86201d299c6e07d53e35048713c7 ==========
Message was sent while issue was closed.
Committed patchset #23 (id:440001) as https://skia.googlesource.com/skia/+/5878dbdf1b5d86201d299c6e07d53e35048713c7 |