Merge "Don't increment the paint's generation ID when drawing bitmaps" into jb-mr2-dev
This commit is contained in:
@@ -176,8 +176,8 @@ public:
|
||||
*/
|
||||
DeferredDisplayState state;
|
||||
protected:
|
||||
SkPaint* getPaint(OpenGLRenderer& renderer) {
|
||||
return renderer.filterPaint(mPaint);
|
||||
SkPaint* getPaint(OpenGLRenderer& renderer, bool alwaysCopy = false) {
|
||||
return renderer.filterPaint(mPaint, alwaysCopy);
|
||||
}
|
||||
|
||||
SkPaint* mPaint; // should be accessed via getPaint() when applying
|
||||
@@ -643,16 +643,13 @@ public:
|
||||
|
||||
virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty, uint32_t level,
|
||||
bool caching, int multipliedAlpha) {
|
||||
SkPaint* paint = getPaint(renderer);
|
||||
int oldAlpha = -1;
|
||||
if (caching && multipliedAlpha < 255) {
|
||||
oldAlpha = paint->getAlpha();
|
||||
bool makeCopy = caching && multipliedAlpha < 255;
|
||||
SkPaint* paint = getPaint(renderer, makeCopy);
|
||||
if (makeCopy) {
|
||||
// The paint is safe to modify since we're working on a copy
|
||||
paint->setAlpha(multipliedAlpha);
|
||||
}
|
||||
status_t ret = renderer.drawBitmap(mBitmap, mLocalBounds.left, mLocalBounds.top, paint);
|
||||
if (oldAlpha >= 0) {
|
||||
paint->setAlpha(oldAlpha);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -2942,8 +2942,14 @@ void OpenGLRenderer::setupPaintFilter(int clearBits, int setBits) {
|
||||
mDrawModifiers.mPaintFilterSetBits = setBits & SkPaint::kAllFlags;
|
||||
}
|
||||
|
||||
SkPaint* OpenGLRenderer::filterPaint(SkPaint* paint) {
|
||||
if (CC_LIKELY(!mDrawModifiers.mHasDrawFilter || !paint)) return paint;
|
||||
SkPaint* OpenGLRenderer::filterPaint(SkPaint* paint, bool alwaysCopy) {
|
||||
if (CC_LIKELY(!mDrawModifiers.mHasDrawFilter || !paint)) {
|
||||
if (CC_UNLIKELY(alwaysCopy)) {
|
||||
mFilteredPaint = *paint;
|
||||
return &mFilteredPaint;
|
||||
}
|
||||
return paint;
|
||||
}
|
||||
|
||||
uint32_t flags = paint->getFlags();
|
||||
|
||||
|
||||
@@ -259,7 +259,7 @@ public:
|
||||
virtual void resetPaintFilter();
|
||||
virtual void setupPaintFilter(int clearBits, int setBits);
|
||||
|
||||
SkPaint* filterPaint(SkPaint* paint);
|
||||
SkPaint* filterPaint(SkPaint* paint, bool alwaysCopy = false);
|
||||
|
||||
bool disallowDeferral() {
|
||||
// returns true if the OpenGLRenderer's state can be completely represented by
|
||||
|
||||
Reference in New Issue
Block a user