Merge "Don't increment the paint's generation ID when drawing bitmaps" into jb-mr2-dev

This commit is contained in:
Romain Guy
2013-02-27 22:08:31 +00:00
committed by Android (Google) Code Review
3 changed files with 15 additions and 12 deletions

View File

@@ -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;
}

View File

@@ -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();

View File

@@ -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