Loading core/java/android/view/View.java +1 −1 Original line number Diff line number Diff line Loading @@ -1657,7 +1657,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * Convenience value to check for float values that are close enough to zero to be considered * zero. */ private static float NONZERO_EPSILON = .001f; private static final float NONZERO_EPSILON = .001f; /** * The degrees rotation around the vertical axis through the pivot point. Loading libs/hwui/OpenGLRenderer.cpp +23 −35 Original line number Diff line number Diff line Loading @@ -219,22 +219,16 @@ int OpenGLRenderer::save(int flags) { } void OpenGLRenderer::restore() { if (mSaveCount > 1 && restoreSnapshot()) { setScissorFromClip(); if (mSaveCount > 1) { restoreSnapshot(); } } void OpenGLRenderer::restoreToCount(int saveCount) { if (saveCount < 1) saveCount = 1; bool restoreClip = false; while (mSaveCount > saveCount) { restoreClip |= restoreSnapshot(); } if (restoreClip) { setScissorFromClip(); restoreSnapshot(); } } Loading Loading @@ -267,12 +261,11 @@ bool OpenGLRenderer::restoreSnapshot() { } mSnapshot = previous; if (!skip) { return restoreClip; } else { bool restorePreviousClip = restoreSnapshot(); return restoreClip || restorePreviousClip; if (restoreClip) { setScissorFromClip(); } return restoreClip; } /////////////////////////////////////////////////////////////////////////////// Loading Loading @@ -339,21 +332,15 @@ bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top, snapshot->layer = layer; snapshot->fbo = layer->fbo; // Creates a new snapshot to draw into the FBO saveSnapshot(); mSaveCount--; mSnapshot->skip = true; mSnapshot->transform.loadTranslate(-left, -top, 0.0f); mSnapshot->setClip(0.0f, 0.0f, right - left, bottom - top); mSnapshot->viewport.set(0.0f, 0.0f, right - left, bottom - top); mSnapshot->height = bottom - top; snapshot->transform.loadTranslate(-left, -top, 0.0f); snapshot->setClip(0.0f, 0.0f, right - left, bottom - top); snapshot->viewport.set(0.0f, 0.0f, right - left, bottom - top); snapshot->height = bottom - top; snapshot->flags |= Snapshot::kFlagDirtyOrtho; snapshot->orthoMatrix.load(mOrthoMatrix); setScissorFromClip(); mSnapshot->flags = Snapshot::kFlagDirtyOrtho | Snapshot::kFlagClipSet; mSnapshot->orthoMatrix.load(mOrthoMatrix); // Change the ortho projection glViewport(0, 0, right - left, bottom - top); // Don't flip the FBO, it will get flipped when drawing back to the framebuffer Loading Loading @@ -594,6 +581,12 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count, SkXfermode::Mode mode; getAlphaAndMode(paint, &alpha, &mode); uint32_t color = paint->getColor(); const GLfloat a = alpha / 255.0f; const GLfloat r = a * ((color >> 16) & 0xFF) / 255.0f; const GLfloat g = a * ((color >> 8) & 0xFF) / 255.0f; const GLfloat b = a * ((color ) & 0xFF) / 255.0f; mFontRenderer.setFont(paint, SkTypeface::UniqueID(paint->getTypeface()), paint->getTextSize()); if (mHasShadow) { glActiveTexture(gTextureUnits[0]); Loading @@ -601,19 +594,13 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count, count, mShadowRadius); const AutoTexture autoCleanup(shadow); setupShadow(shadow, x, y, mode); setupShadow(shadow, x, y, mode, a); // Draw the mesh glDrawArrays(GL_TRIANGLE_STRIP, 0, gMeshCount); glDisableVertexAttribArray(mCurrentProgram->getAttrib("texCoords")); } uint32_t color = paint->getColor(); const GLfloat a = alpha / 255.0f; const GLfloat r = a * ((color >> 16) & 0xFF) / 255.0f; const GLfloat g = a * ((color >> 8) & 0xFF) / 255.0f; const GLfloat b = a * ((color ) & 0xFF) / 255.0f; GLuint textureUnit = 0; glActiveTexture(gTextureUnits[textureUnit]); Loading Loading @@ -705,11 +692,12 @@ void OpenGLRenderer::setupShadow(float radius, float dx, float dy, int color) { /////////////////////////////////////////////////////////////////////////////// void OpenGLRenderer::setupShadow(const ShadowTexture* texture, float x, float y, SkXfermode::Mode mode) { SkXfermode::Mode mode, float alpha) { const float sx = x - texture->left + mShadowDx; const float sy = y - texture->top + mShadowDy; const GLfloat a = ((mShadowColor >> 24) & 0xFF) / 255.0f; const int shadowAlpha = ((mShadowColor >> 24) & 0xFF); const GLfloat a = shadowAlpha < 255 ? shadowAlpha / 255.0f : alpha; const GLfloat r = a * ((mShadowColor >> 16) & 0xFF) / 255.0f; const GLfloat g = a * ((mShadowColor >> 8) & 0xFF) / 255.0f; const GLfloat b = a * ((mShadowColor ) & 0xFF) / 255.0f; Loading libs/hwui/OpenGLRenderer.h +4 −3 Original line number Diff line number Diff line Loading @@ -120,8 +120,7 @@ private: /** * Restores the current snapshot; mSnapshot becomes mSnapshot->previous. * * @return True if the clip should be also reapplied by calling * #setScissorFromClip(). * @return True if the clip was modified. */ bool restoreSnapshot(); Loading Loading @@ -232,8 +231,10 @@ private: * @param x The x coordinate of the shadow * @param y The y coordinate of the shadow * @param mode The blending mode * @param alpha The alpha value */ void setupShadow(const ShadowTexture* texture, float x, float y, SkXfermode::Mode mode); void setupShadow(const ShadowTexture* texture, float x, float y, SkXfermode::Mode mode, float alpha); /** * Prepares the renderer to draw the specified Alpha8 texture as a rectangle. Loading libs/hwui/Snapshot.h +1 −8 Original line number Diff line number Diff line Loading @@ -42,7 +42,7 @@ namespace uirenderer { */ class Snapshot: public LightRefBase<Snapshot> { public: Snapshot(): skip(false), flags(0), previous(NULL), layer(NULL), fbo(0) { } Snapshot(): flags(0), previous(NULL), layer(NULL), fbo(0) { } /** * Copies the specified snapshot. Only the transform and clip rectangle Loading @@ -54,7 +54,6 @@ public: height(s->height), transform(s->transform), clipRect(s->clipRect), skip(false), flags(0), previous(s), layer(NULL), Loading Loading @@ -165,12 +164,6 @@ public: */ Rect clipRect; /** * This snapshot should be skipped. Snapshots marked as skipped are * created by the renderer and should be hidden from the user. */ bool skip; /** * Dirty flags. */ Loading tests/HwAccelerationTest/src/com/google/android/test/hwui/TextActivity.java +2 −0 Original line number Diff line number Diff line Loading @@ -73,7 +73,9 @@ public class TextActivity extends Activity { mLargePaint.setShadowLayer(2.5f, 3.0f, 3.0f, 0xff000000); canvas.drawText("Hello OpenGL renderer!", 100, 400, mLargePaint); mLargePaint.setShadowLayer(3.0f, 3.0f, 3.0f, 0xff00ff00); mLargePaint.setAlpha(100); canvas.drawText("Hello OpenGL renderer!", 100, 500, mLargePaint); mLargePaint.setAlpha(255); mLargePaint.clearShadowLayer(); canvas.drawText("Hello OpenGL renderer!", 500, 40, mStrikePaint); Loading Loading
core/java/android/view/View.java +1 −1 Original line number Diff line number Diff line Loading @@ -1657,7 +1657,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility * Convenience value to check for float values that are close enough to zero to be considered * zero. */ private static float NONZERO_EPSILON = .001f; private static final float NONZERO_EPSILON = .001f; /** * The degrees rotation around the vertical axis through the pivot point. Loading
libs/hwui/OpenGLRenderer.cpp +23 −35 Original line number Diff line number Diff line Loading @@ -219,22 +219,16 @@ int OpenGLRenderer::save(int flags) { } void OpenGLRenderer::restore() { if (mSaveCount > 1 && restoreSnapshot()) { setScissorFromClip(); if (mSaveCount > 1) { restoreSnapshot(); } } void OpenGLRenderer::restoreToCount(int saveCount) { if (saveCount < 1) saveCount = 1; bool restoreClip = false; while (mSaveCount > saveCount) { restoreClip |= restoreSnapshot(); } if (restoreClip) { setScissorFromClip(); restoreSnapshot(); } } Loading Loading @@ -267,12 +261,11 @@ bool OpenGLRenderer::restoreSnapshot() { } mSnapshot = previous; if (!skip) { return restoreClip; } else { bool restorePreviousClip = restoreSnapshot(); return restoreClip || restorePreviousClip; if (restoreClip) { setScissorFromClip(); } return restoreClip; } /////////////////////////////////////////////////////////////////////////////// Loading Loading @@ -339,21 +332,15 @@ bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top, snapshot->layer = layer; snapshot->fbo = layer->fbo; // Creates a new snapshot to draw into the FBO saveSnapshot(); mSaveCount--; mSnapshot->skip = true; mSnapshot->transform.loadTranslate(-left, -top, 0.0f); mSnapshot->setClip(0.0f, 0.0f, right - left, bottom - top); mSnapshot->viewport.set(0.0f, 0.0f, right - left, bottom - top); mSnapshot->height = bottom - top; snapshot->transform.loadTranslate(-left, -top, 0.0f); snapshot->setClip(0.0f, 0.0f, right - left, bottom - top); snapshot->viewport.set(0.0f, 0.0f, right - left, bottom - top); snapshot->height = bottom - top; snapshot->flags |= Snapshot::kFlagDirtyOrtho; snapshot->orthoMatrix.load(mOrthoMatrix); setScissorFromClip(); mSnapshot->flags = Snapshot::kFlagDirtyOrtho | Snapshot::kFlagClipSet; mSnapshot->orthoMatrix.load(mOrthoMatrix); // Change the ortho projection glViewport(0, 0, right - left, bottom - top); // Don't flip the FBO, it will get flipped when drawing back to the framebuffer Loading Loading @@ -594,6 +581,12 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count, SkXfermode::Mode mode; getAlphaAndMode(paint, &alpha, &mode); uint32_t color = paint->getColor(); const GLfloat a = alpha / 255.0f; const GLfloat r = a * ((color >> 16) & 0xFF) / 255.0f; const GLfloat g = a * ((color >> 8) & 0xFF) / 255.0f; const GLfloat b = a * ((color ) & 0xFF) / 255.0f; mFontRenderer.setFont(paint, SkTypeface::UniqueID(paint->getTypeface()), paint->getTextSize()); if (mHasShadow) { glActiveTexture(gTextureUnits[0]); Loading @@ -601,19 +594,13 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count, count, mShadowRadius); const AutoTexture autoCleanup(shadow); setupShadow(shadow, x, y, mode); setupShadow(shadow, x, y, mode, a); // Draw the mesh glDrawArrays(GL_TRIANGLE_STRIP, 0, gMeshCount); glDisableVertexAttribArray(mCurrentProgram->getAttrib("texCoords")); } uint32_t color = paint->getColor(); const GLfloat a = alpha / 255.0f; const GLfloat r = a * ((color >> 16) & 0xFF) / 255.0f; const GLfloat g = a * ((color >> 8) & 0xFF) / 255.0f; const GLfloat b = a * ((color ) & 0xFF) / 255.0f; GLuint textureUnit = 0; glActiveTexture(gTextureUnits[textureUnit]); Loading Loading @@ -705,11 +692,12 @@ void OpenGLRenderer::setupShadow(float radius, float dx, float dy, int color) { /////////////////////////////////////////////////////////////////////////////// void OpenGLRenderer::setupShadow(const ShadowTexture* texture, float x, float y, SkXfermode::Mode mode) { SkXfermode::Mode mode, float alpha) { const float sx = x - texture->left + mShadowDx; const float sy = y - texture->top + mShadowDy; const GLfloat a = ((mShadowColor >> 24) & 0xFF) / 255.0f; const int shadowAlpha = ((mShadowColor >> 24) & 0xFF); const GLfloat a = shadowAlpha < 255 ? shadowAlpha / 255.0f : alpha; const GLfloat r = a * ((mShadowColor >> 16) & 0xFF) / 255.0f; const GLfloat g = a * ((mShadowColor >> 8) & 0xFF) / 255.0f; const GLfloat b = a * ((mShadowColor ) & 0xFF) / 255.0f; Loading
libs/hwui/OpenGLRenderer.h +4 −3 Original line number Diff line number Diff line Loading @@ -120,8 +120,7 @@ private: /** * Restores the current snapshot; mSnapshot becomes mSnapshot->previous. * * @return True if the clip should be also reapplied by calling * #setScissorFromClip(). * @return True if the clip was modified. */ bool restoreSnapshot(); Loading Loading @@ -232,8 +231,10 @@ private: * @param x The x coordinate of the shadow * @param y The y coordinate of the shadow * @param mode The blending mode * @param alpha The alpha value */ void setupShadow(const ShadowTexture* texture, float x, float y, SkXfermode::Mode mode); void setupShadow(const ShadowTexture* texture, float x, float y, SkXfermode::Mode mode, float alpha); /** * Prepares the renderer to draw the specified Alpha8 texture as a rectangle. Loading
libs/hwui/Snapshot.h +1 −8 Original line number Diff line number Diff line Loading @@ -42,7 +42,7 @@ namespace uirenderer { */ class Snapshot: public LightRefBase<Snapshot> { public: Snapshot(): skip(false), flags(0), previous(NULL), layer(NULL), fbo(0) { } Snapshot(): flags(0), previous(NULL), layer(NULL), fbo(0) { } /** * Copies the specified snapshot. Only the transform and clip rectangle Loading @@ -54,7 +54,6 @@ public: height(s->height), transform(s->transform), clipRect(s->clipRect), skip(false), flags(0), previous(s), layer(NULL), Loading Loading @@ -165,12 +164,6 @@ public: */ Rect clipRect; /** * This snapshot should be skipped. Snapshots marked as skipped are * created by the renderer and should be hidden from the user. */ bool skip; /** * Dirty flags. */ Loading
tests/HwAccelerationTest/src/com/google/android/test/hwui/TextActivity.java +2 −0 Original line number Diff line number Diff line Loading @@ -73,7 +73,9 @@ public class TextActivity extends Activity { mLargePaint.setShadowLayer(2.5f, 3.0f, 3.0f, 0xff000000); canvas.drawText("Hello OpenGL renderer!", 100, 400, mLargePaint); mLargePaint.setShadowLayer(3.0f, 3.0f, 3.0f, 0xff00ff00); mLargePaint.setAlpha(100); canvas.drawText("Hello OpenGL renderer!", 100, 500, mLargePaint); mLargePaint.setAlpha(255); mLargePaint.clearShadowLayer(); canvas.drawText("Hello OpenGL renderer!", 500, 40, mStrikePaint); Loading