change setAlphaType to not modify the pixelref's genID
BUG=skia: R=bsalomon@google.com, halcanary@google.com Review URL: https://codereview.chromium.org/137263009 git-svn-id: http://skia.googlecode.com/svn/trunk@13219 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
a96176dc03
commit
c1587f94a7
@ -131,10 +131,7 @@ public:
|
||||
*
|
||||
* Note: this changes the alphatype for the underlying pixels, which means
|
||||
* that all bitmaps that might be sharing (subsets of) the pixels will
|
||||
* be affected. This is an expensive change for some backends (e.g. GPU)
|
||||
* since changing the alphatype can invalidate internal caches. Thus this
|
||||
* call should only be made if it is associated with real changes to the
|
||||
* pixel data.
|
||||
* be affected.
|
||||
*/
|
||||
bool setAlphaType(SkAlphaType);
|
||||
|
||||
|
@ -130,15 +130,15 @@ public:
|
||||
* Call this if you have changed the contents of the pixels. This will in-
|
||||
* turn cause a different generation ID value to be returned from
|
||||
* getGenerationID().
|
||||
*
|
||||
* If the alphatype has also changed, specify its new value as well. If
|
||||
* the new pixels' alphatype is the same, this can be called with no
|
||||
* parameter.
|
||||
*/
|
||||
void notifyPixelsChanged(SkAlphaType);
|
||||
void notifyPixelsChanged() {
|
||||
this->notifyPixelsChanged(fInfo.fAlphaType);
|
||||
}
|
||||
void notifyPixelsChanged();
|
||||
|
||||
/**
|
||||
* Change the info's AlphaType. Note that this does not automatically
|
||||
* invalidate the generation ID. If the pixel values themselves have
|
||||
* changed, then you must explicitly call notifyPixelsChanged() as well.
|
||||
*/
|
||||
void changeAlphaType(SkAlphaType at);
|
||||
|
||||
/** Returns true if this pixelref is marked as immutable, meaning that the
|
||||
contents of its pixels will not change for the lifetime of the pixelref.
|
||||
|
@ -324,7 +324,7 @@ bool SkBitmap::setAlphaType(SkAlphaType alphaType) {
|
||||
if (fAlphaType != alphaType) {
|
||||
fAlphaType = SkToU8(alphaType);
|
||||
if (fPixelRef) {
|
||||
fPixelRef->notifyPixelsChanged(alphaType);
|
||||
fPixelRef->changeAlphaType(alphaType);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -254,17 +254,20 @@ void SkPixelRef::callGenIDChangeListeners() {
|
||||
fGenIDChangeListeners.deleteAll();
|
||||
}
|
||||
|
||||
void SkPixelRef::notifyPixelsChanged(SkAlphaType at) {
|
||||
void SkPixelRef::notifyPixelsChanged() {
|
||||
#ifdef SK_DEBUG
|
||||
if (fIsImmutable) {
|
||||
SkDebugf("========== notifyPixelsChanged called on immutable pixelref");
|
||||
}
|
||||
#endif
|
||||
*const_cast<SkAlphaType*>(&fInfo.fAlphaType) = at;
|
||||
this->callGenIDChangeListeners();
|
||||
this->needsNewGenID();
|
||||
}
|
||||
|
||||
void SkPixelRef::changeAlphaType(SkAlphaType at) {
|
||||
*const_cast<SkAlphaType*>(&fInfo.fAlphaType) = at;
|
||||
}
|
||||
|
||||
void SkPixelRef::setImmutable() {
|
||||
fIsImmutable = true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user