Loading libs/hwui/OpenGLRenderer.cpp +18 −6 Original line number Diff line number Diff line Loading @@ -1407,7 +1407,7 @@ void OpenGLRenderer::drawLinesAsQuads(float *points, int count, bool isAA, bool if (!isAA) { setupDrawVertices(vertices); } else { void *alphaCoords = ((void*) aaVertices) + gVertexAlphaOffset; AlphaVertex* alphaCoords = aaVertices + gVertexAlphaOffset; // innerProportion is the ratio of the inner (non-AA) port of the line to the total // AA stroke width (the base stroke width expanded by a half pixel on either side). // This value is used in the fragment shader to determine how to fill fragments. Loading @@ -1418,7 +1418,9 @@ void OpenGLRenderer::drawLinesAsQuads(float *points, int count, bool isAA, bool int generatedVerticesCount = 0; AlphaVertex *prevAAVertex = NULL; Vertex *prevVertex = NULL; float inverseScaleX, inverseScaleY; float inverseScaleX = 1.0f; float inverseScaleY = 1.0f; if (isHairline) { // The quad that we use for AA hairlines needs to account for scaling because the line // should always be one pixel wide regardless of scale. Loading @@ -1438,6 +1440,7 @@ void OpenGLRenderer::drawLinesAsQuads(float *points, int count, bool isAA, bool inverseScaleY = (scaleY != 0) ? (inverseScaleY / scaleY) : 0; } } for (int i = 0; i < count; i += 4) { // a = start point, b = end point vec2 a(points[i], points[i + 1]); Loading Loading @@ -1767,23 +1770,32 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count, count, mShadowRadius); const AutoTexture autoCleanup(shadow); const float sx = x - shadow->left + mShadowDx; const float sy = y - shadow->top + mShadowDy; const float sx = oldX - shadow->left + mShadowDx; const float sy = oldY - shadow->top + mShadowDy; const int shadowAlpha = ((mShadowColor >> 24) & 0xFF); int shadowColor = mShadowColor; if (mShader) { shadowColor = 0xffffffff; } glActiveTexture(gTextureUnits[0]); setupDraw(); setupDrawWithTexture(true); setupDrawAlpha8Color(mShadowColor, shadowAlpha < 255 ? shadowAlpha : alpha); setupDrawAlpha8Color(shadowColor, shadowAlpha < 255 ? shadowAlpha : alpha); setupDrawColorFilter(); setupDrawShader(); setupDrawBlending(true, mode); setupDrawProgram(); setupDrawModelView(sx, sy, sx + shadow->width, sy + shadow->height, pureTranslate); setupDrawModelView(sx, sy, sx + shadow->width, sy + shadow->height); setupDrawTexture(shadow->id); setupDrawPureColorUniforms(); setupDrawColorFilterUniforms(); setupDrawShaderUniforms(); setupDrawMesh(NULL, (GLvoid*) gMeshTextureOffset); glDrawArrays(GL_TRIANGLE_STRIP, 0, gMeshCount); finishDrawTexture(); } Loading libs/hwui/ProgramCache.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,8 @@ const char* gFS_Fast_SingleModulateGradient = // General case const char* gFS_Main_FetchColor = " fragColor = color;\n"; const char* gFS_Main_ModulateColor = " fragColor *= color.a;\n"; const char* gFS_Main_AccountForWidth = " if (distance < boundaryWidth) {\n" " fragColor *= (distance * inverseBoundaryWidth);\n" Loading Loading @@ -581,6 +583,7 @@ String8 ProgramCache::generateFragmentShader(const ProgramDescription& descripti shader.append(gFS_Main_FetchBitmapNpot); } } bool applyModulate = false; // Case when we have two shaders set if (description.hasGradient && description.hasBitmap) { int op = description.hasAlpha8Texture ? MODULATE_OP_MODULATE_A8 : modulateOp; Loading @@ -590,15 +593,21 @@ String8 ProgramCache::generateFragmentShader(const ProgramDescription& descripti shader.append(gFS_Main_BlendShadersGB); } shader.append(gFS_Main_BlendShaders_Modulate[op]); applyModulate = true; } else { if (description.hasGradient) { int op = description.hasAlpha8Texture ? MODULATE_OP_MODULATE_A8 : modulateOp; shader.append(gFS_Main_GradientShader_Modulate[op]); applyModulate = true; } else if (description.hasBitmap) { int op = description.hasAlpha8Texture ? MODULATE_OP_MODULATE_A8 : modulateOp; shader.append(gFS_Main_BitmapShader_Modulate[op]); applyModulate = true; } } if (description.modulate && applyModulate) { shader.append(gFS_Main_ModulateColor); } // Apply the color op if needed shader.append(gFS_Main_ApplyColorOp[description.colorOp]); // Output the fragment Loading tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java +1 −1 Original line number Diff line number Diff line Loading @@ -75,7 +75,7 @@ public class PathsActivity extends Activity { mLargePaint = new Paint(); mLargePaint.setAntiAlias(true); mLargePaint.setColor(0xff00ff00); mLargePaint.setColor(0x7f00ff00); mLargePaint.setStrokeWidth(15.0f); mLargePaint.setStyle(Paint.Style.FILL); Loading tests/HwAccelerationTest/src/com/android/test/hwui/MoreShadersActivity.java +5 −5 File changed.Contains only whitespace changes. Show changes Loading
libs/hwui/OpenGLRenderer.cpp +18 −6 Original line number Diff line number Diff line Loading @@ -1407,7 +1407,7 @@ void OpenGLRenderer::drawLinesAsQuads(float *points, int count, bool isAA, bool if (!isAA) { setupDrawVertices(vertices); } else { void *alphaCoords = ((void*) aaVertices) + gVertexAlphaOffset; AlphaVertex* alphaCoords = aaVertices + gVertexAlphaOffset; // innerProportion is the ratio of the inner (non-AA) port of the line to the total // AA stroke width (the base stroke width expanded by a half pixel on either side). // This value is used in the fragment shader to determine how to fill fragments. Loading @@ -1418,7 +1418,9 @@ void OpenGLRenderer::drawLinesAsQuads(float *points, int count, bool isAA, bool int generatedVerticesCount = 0; AlphaVertex *prevAAVertex = NULL; Vertex *prevVertex = NULL; float inverseScaleX, inverseScaleY; float inverseScaleX = 1.0f; float inverseScaleY = 1.0f; if (isHairline) { // The quad that we use for AA hairlines needs to account for scaling because the line // should always be one pixel wide regardless of scale. Loading @@ -1438,6 +1440,7 @@ void OpenGLRenderer::drawLinesAsQuads(float *points, int count, bool isAA, bool inverseScaleY = (scaleY != 0) ? (inverseScaleY / scaleY) : 0; } } for (int i = 0; i < count; i += 4) { // a = start point, b = end point vec2 a(points[i], points[i + 1]); Loading Loading @@ -1767,23 +1770,32 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count, count, mShadowRadius); const AutoTexture autoCleanup(shadow); const float sx = x - shadow->left + mShadowDx; const float sy = y - shadow->top + mShadowDy; const float sx = oldX - shadow->left + mShadowDx; const float sy = oldY - shadow->top + mShadowDy; const int shadowAlpha = ((mShadowColor >> 24) & 0xFF); int shadowColor = mShadowColor; if (mShader) { shadowColor = 0xffffffff; } glActiveTexture(gTextureUnits[0]); setupDraw(); setupDrawWithTexture(true); setupDrawAlpha8Color(mShadowColor, shadowAlpha < 255 ? shadowAlpha : alpha); setupDrawAlpha8Color(shadowColor, shadowAlpha < 255 ? shadowAlpha : alpha); setupDrawColorFilter(); setupDrawShader(); setupDrawBlending(true, mode); setupDrawProgram(); setupDrawModelView(sx, sy, sx + shadow->width, sy + shadow->height, pureTranslate); setupDrawModelView(sx, sy, sx + shadow->width, sy + shadow->height); setupDrawTexture(shadow->id); setupDrawPureColorUniforms(); setupDrawColorFilterUniforms(); setupDrawShaderUniforms(); setupDrawMesh(NULL, (GLvoid*) gMeshTextureOffset); glDrawArrays(GL_TRIANGLE_STRIP, 0, gMeshCount); finishDrawTexture(); } Loading
libs/hwui/ProgramCache.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,8 @@ const char* gFS_Fast_SingleModulateGradient = // General case const char* gFS_Main_FetchColor = " fragColor = color;\n"; const char* gFS_Main_ModulateColor = " fragColor *= color.a;\n"; const char* gFS_Main_AccountForWidth = " if (distance < boundaryWidth) {\n" " fragColor *= (distance * inverseBoundaryWidth);\n" Loading Loading @@ -581,6 +583,7 @@ String8 ProgramCache::generateFragmentShader(const ProgramDescription& descripti shader.append(gFS_Main_FetchBitmapNpot); } } bool applyModulate = false; // Case when we have two shaders set if (description.hasGradient && description.hasBitmap) { int op = description.hasAlpha8Texture ? MODULATE_OP_MODULATE_A8 : modulateOp; Loading @@ -590,15 +593,21 @@ String8 ProgramCache::generateFragmentShader(const ProgramDescription& descripti shader.append(gFS_Main_BlendShadersGB); } shader.append(gFS_Main_BlendShaders_Modulate[op]); applyModulate = true; } else { if (description.hasGradient) { int op = description.hasAlpha8Texture ? MODULATE_OP_MODULATE_A8 : modulateOp; shader.append(gFS_Main_GradientShader_Modulate[op]); applyModulate = true; } else if (description.hasBitmap) { int op = description.hasAlpha8Texture ? MODULATE_OP_MODULATE_A8 : modulateOp; shader.append(gFS_Main_BitmapShader_Modulate[op]); applyModulate = true; } } if (description.modulate && applyModulate) { shader.append(gFS_Main_ModulateColor); } // Apply the color op if needed shader.append(gFS_Main_ApplyColorOp[description.colorOp]); // Output the fragment Loading
tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java +1 −1 Original line number Diff line number Diff line Loading @@ -75,7 +75,7 @@ public class PathsActivity extends Activity { mLargePaint = new Paint(); mLargePaint.setAntiAlias(true); mLargePaint.setColor(0xff00ff00); mLargePaint.setColor(0x7f00ff00); mLargePaint.setStrokeWidth(15.0f); mLargePaint.setStyle(Paint.Style.FILL); Loading
tests/HwAccelerationTest/src/com/android/test/hwui/MoreShadersActivity.java +5 −5 File changed.Contains only whitespace changes. Show changes