Merge "Correct bitmap merging logic" into klp-dev

This commit is contained in:
Chris Craik
2013-09-21 00:33:36 +00:00
committed by Android (Google) Code Review
5 changed files with 8 additions and 13 deletions

View File

@@ -772,7 +772,7 @@ public:
TextureVertex* vertex = &vertices[0];
const bool hasLayer = renderer.hasLayer();
bool transformed = false;
bool pureTranslate = true;
// TODO: manually handle rect clip for bitmaps by adjusting texCoords per op,
// and allowing them to be merged in getBatchId()
@@ -782,7 +782,7 @@ public:
// When we reach multiDraw(), the matrix can be either
// pureTranslate or simple (translate and/or scale).
// If the matrix is not pureTranslate, then we have a scale
if (state.mMatrix.isPureTranslate()) transformed = true;
pureTranslate &= state.mMatrix.isPureTranslate();
Rect texCoords(0, 0, 1, 1);
((DrawBitmapOp*) ops[i].op)->mUvMapper.map(texCoords);
@@ -801,7 +801,7 @@ public:
}
return renderer.drawBitmaps(mBitmap, mEntry, ops.size(), &vertices[0],
transformed, bounds, mPaint);
pureTranslate, bounds, mPaint);
}
virtual void output(int level, uint32_t logFlags) const {

View File

@@ -110,10 +110,6 @@ uint8_t Matrix4::getType() const {
mType |= kTypeRectToRect;
}
}
if (m00 > 0.0f && m11 > 0.0f) {
mType |= kTypePositiveScale;
}
}
return mType;
}
@@ -127,7 +123,7 @@ bool Matrix4::rectToRect() const {
}
bool Matrix4::positiveScale() const {
return getType() & kTypePositiveScale;
return (data[kScaleX] > 0.0f && data[kScaleY] > 0.0f);
}
bool Matrix4::changesBounds() const {

View File

@@ -64,8 +64,7 @@ public:
kTypeAffine = 0x4,
kTypePerspective = 0x8,
kTypeRectToRect = 0x10,
kTypePositiveScale = 0x20,
kTypeUnknown = 0x40,
kTypeUnknown = 0x20,
};
static const int sGeometryMask = 0xf;

View File

@@ -2096,7 +2096,7 @@ void OpenGLRenderer::drawAlphaBitmap(Texture* texture, float left, float top, Sk
* The caller is responsible for properly dirtying the current layer.
*/
status_t OpenGLRenderer::drawBitmaps(SkBitmap* bitmap, AssetAtlas::Entry* entry, int bitmapCount,
TextureVertex* vertices, bool transformed, const Rect& bounds, SkPaint* paint) {
TextureVertex* vertices, bool pureTranslate, const Rect& bounds, SkPaint* paint) {
mCaches.activeTexture(0);
Texture* texture = entry ? entry->texture : mCaches.textureCache.get(bitmap);
if (!texture) return DrawGlInfo::kStatusDone;
@@ -2108,7 +2108,7 @@ status_t OpenGLRenderer::drawBitmaps(SkBitmap* bitmap, AssetAtlas::Entry* entry,
getAlphaAndMode(paint, &alpha, &mode);
texture->setWrap(GL_CLAMP_TO_EDGE, true);
texture->setFilter(transformed ? FILTER(paint) : GL_NEAREST, true);
texture->setFilter(pureTranslate ? GL_NEAREST : FILTER(paint), true);
const float x = (int) floorf(bounds.left + 0.5f);
const float y = (int) floorf(bounds.top + 0.5f);

View File

@@ -285,7 +285,7 @@ public:
virtual status_t drawLayer(Layer* layer, float x, float y);
virtual status_t drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint);
status_t drawBitmaps(SkBitmap* bitmap, AssetAtlas::Entry* entry, int bitmapCount,
TextureVertex* vertices, bool transformed, const Rect& bounds, SkPaint* paint);
TextureVertex* vertices, bool pureTranslate, const Rect& bounds, SkPaint* paint);
virtual status_t drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint);
virtual status_t drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
float srcRight, float srcBottom, float dstLeft, float dstTop,