summaryrefslogtreecommitdiff
path: root/libs/hwui/OpenGLRenderer.cpp
diff options
context:
space:
mode:
author Romain Guy <romainguy@google.com> 2013-02-27 22:16:22 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2013-02-27 22:16:22 +0000
commita6456d0d7ea2a65474b8a3db5dbf001880c40a71 (patch)
tree9e456a81714eaf92a8be5f6cd7b75a831e91c663 /libs/hwui/OpenGLRenderer.cpp
parent13e3891b20133d131ba61fa86bcd8b6ee1e50199 (diff)
parent768bffc9b814f6a1f7d9ff59d91285895c23bbe9 (diff)
Merge "Draw text drop shadows even when the text color is transparent" into jb-mr2-dev
Diffstat (limited to 'libs/hwui/OpenGLRenderer.cpp')
-rw-r--r--libs/hwui/OpenGLRenderer.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 9df0c5852189..6c8f38d2fd9b 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -2555,10 +2555,14 @@ void OpenGLRenderer::drawTextShadow(SkPaint* paint, const char* text, int bytesC
glDrawArrays(GL_TRIANGLE_STRIP, 0, gMeshCount);
}
+bool OpenGLRenderer::canSkipText(const SkPaint* paint) const {
+ float alpha = (mDrawModifiers.mHasShadow ? 1.0f : paint->getAlpha()) * mSnapshot->alpha;
+ return alpha == 0.0f && getXfermode(paint->getXfermode()) == SkXfermode::kSrcOver_Mode;
+}
+
status_t OpenGLRenderer::drawPosText(const char* text, int bytesCount, int count,
const float* positions, SkPaint* paint) {
- if (text == NULL || count == 0 || mSnapshot->isIgnored() ||
- (paint->getAlpha() * mSnapshot->alpha == 0 && paint->getXfermode() == NULL)) {
+ if (text == NULL || count == 0 || mSnapshot->isIgnored() || canSkipText(paint)) {
return DrawGlInfo::kStatusDone;
}
@@ -2630,8 +2634,7 @@ status_t OpenGLRenderer::drawPosText(const char* text, int bytesCount, int count
status_t OpenGLRenderer::drawText(const char* text, int bytesCount, int count,
float x, float y, const float* positions, SkPaint* paint, float length) {
- if (text == NULL || count == 0 || mSnapshot->isIgnored() ||
- (paint->getAlpha() * mSnapshot->alpha == 0 && paint->getXfermode() == NULL)) {
+ if (text == NULL || count == 0 || mSnapshot->isIgnored() || canSkipText(paint)) {
return DrawGlInfo::kStatusDone;
}
@@ -2735,8 +2738,7 @@ status_t OpenGLRenderer::drawText(const char* text, int bytesCount, int count,
status_t OpenGLRenderer::drawTextOnPath(const char* text, int bytesCount, int count, SkPath* path,
float hOffset, float vOffset, SkPaint* paint) {
- if (text == NULL || count == 0 || mSnapshot->isIgnored() ||
- (paint->getAlpha() == 0 && paint->getXfermode() == NULL)) {
+ if (text == NULL || count == 0 || mSnapshot->isIgnored() || canSkipText(paint)) {
return DrawGlInfo::kStatusDone;
}