Loading libs/hwui/OpenGLRenderer.cpp +2 −16 Original line number Diff line number Diff line Loading @@ -1403,10 +1403,6 @@ void OpenGLRenderer::setupDrawAALine(GLvoid* vertices, GLvoid* widthCoords, int boundaryWidthSlot = mCaches.currentProgram->getUniform("boundaryWidth"); glUniform1f(boundaryWidthSlot, boundaryWidthProportion); // Setting the inverse value saves computations per-fragment in the shader int inverseBoundaryWidthSlot = mCaches.currentProgram->getUniform("inverseBoundaryWidth"); glUniform1f(inverseBoundaryWidthSlot, 1.0f / boundaryWidthProportion); } void OpenGLRenderer::finishDrawAALine(const int widthSlot, const int lengthSlot) { Loading Loading @@ -1810,15 +1806,13 @@ void OpenGLRenderer::drawAARect(float left, float top, float right, float bottom float width = right - left; float height = bottom - top; float boundaryWidthProportion = (width != 0) ? (2 * boundarySizeX) / width : 0; float boundaryHeightProportion = (height != 0) ? (2 * boundarySizeY) / height : 0; float boundaryWidthProportion = .5 - ((width != 0) ? (2 * boundarySizeX) / width : 0); float boundaryHeightProportion = .5 - ((height != 0) ? (2 * boundarySizeY) / height : 0); setupDrawAALine((void*) aaVertices, widthCoords, lengthCoords, boundaryWidthProportion, widthSlot, lengthSlot); int boundaryLengthSlot = mCaches.currentProgram->getUniform("boundaryLength"); int inverseBoundaryLengthSlot = mCaches.currentProgram->getUniform("inverseBoundaryLength"); glUniform1f(boundaryLengthSlot, boundaryHeightProportion); glUniform1f(inverseBoundaryLengthSlot, (1.0f / boundaryHeightProportion)); AAVertex::set(aaVertices++, left, bottom, 1, 1); AAVertex::set(aaVertices++, left, top, 1, 0); Loading Loading @@ -1955,9 +1949,7 @@ status_t OpenGLRenderer::drawLines(float* points, int count, SkPaint* paint) { Vertex* prevVertex = NULL; int boundaryLengthSlot = -1; int inverseBoundaryLengthSlot = -1; int boundaryWidthSlot = -1; int inverseBoundaryWidthSlot = -1; for (int i = 0; i < count; i += 4) { // a = start point, b = end point Loading Loading @@ -2060,22 +2052,16 @@ status_t OpenGLRenderer::drawLines(float* points, int count, SkPaint* paint) { if (boundaryWidthSlot < 0) { boundaryWidthSlot = mCaches.currentProgram->getUniform("boundaryWidth"); inverseBoundaryWidthSlot = mCaches.currentProgram->getUniform("inverseBoundaryWidth"); } glUniform1f(boundaryWidthSlot, boundaryWidthProportion); glUniform1f(inverseBoundaryWidthSlot, (1 / boundaryWidthProportion)); } if (boundaryLengthSlot < 0) { boundaryLengthSlot = mCaches.currentProgram->getUniform("boundaryLength"); inverseBoundaryLengthSlot = mCaches.currentProgram->getUniform("inverseBoundaryLength"); } glUniform1f(boundaryLengthSlot, boundaryLengthProportion); glUniform1f(inverseBoundaryLengthSlot, (1 / boundaryLengthProportion)); if (prevAAVertex != NULL) { // Issue two repeat vertices to create degenerate triangles to bridge Loading libs/hwui/ProgramCache.cpp +4 −13 Original line number Diff line number Diff line Loading @@ -129,9 +129,7 @@ const char* gFS_Uniforms_Color = "uniform vec4 color;\n"; const char* gFS_Uniforms_AA = "uniform float boundaryWidth;\n" "uniform float inverseBoundaryWidth;\n" "uniform float boundaryLength;\n" "uniform float inverseBoundaryLength;\n"; "uniform float boundaryLength;\n"; const char* gFS_Header_Uniforms_PointHasBitmap = "uniform vec2 textureDimension;\n" "uniform float pointSize;\n"; Loading Loading @@ -242,16 +240,9 @@ const char* gFS_Main_ModulateColor = const char* gFS_Main_ModulateColor_ApplyGamma = " fragColor *= pow(color.a, gamma);\n"; const char* gFS_Main_AccountForAA = " if (widthProportion < boundaryWidth) {\n" " fragColor *= (widthProportion * inverseBoundaryWidth);\n" " } else if (widthProportion > (1.0 - boundaryWidth)) {\n" " fragColor *= ((1.0 - widthProportion) * inverseBoundaryWidth);\n" " }\n" " if (lengthProportion < boundaryLength) {\n" " fragColor *= (lengthProportion * inverseBoundaryLength);\n" " } else if (lengthProportion > (1.0 - boundaryLength)) {\n" " fragColor *= ((1.0 - lengthProportion) * inverseBoundaryLength);\n" " }\n"; " fragColor *= (1.0 - smoothstep(boundaryWidth, 0.5, abs(0.5 - widthProportion)))\n" " * (1.0 - smoothstep(boundaryLength, 0.5, abs(0.5 - lengthProportion)));\n"; const char* gFS_Main_FetchTexture[2] = { // Don't modulate " fragColor = texture2D(sampler, outTexCoords);\n", Loading Loading
libs/hwui/OpenGLRenderer.cpp +2 −16 Original line number Diff line number Diff line Loading @@ -1403,10 +1403,6 @@ void OpenGLRenderer::setupDrawAALine(GLvoid* vertices, GLvoid* widthCoords, int boundaryWidthSlot = mCaches.currentProgram->getUniform("boundaryWidth"); glUniform1f(boundaryWidthSlot, boundaryWidthProportion); // Setting the inverse value saves computations per-fragment in the shader int inverseBoundaryWidthSlot = mCaches.currentProgram->getUniform("inverseBoundaryWidth"); glUniform1f(inverseBoundaryWidthSlot, 1.0f / boundaryWidthProportion); } void OpenGLRenderer::finishDrawAALine(const int widthSlot, const int lengthSlot) { Loading Loading @@ -1810,15 +1806,13 @@ void OpenGLRenderer::drawAARect(float left, float top, float right, float bottom float width = right - left; float height = bottom - top; float boundaryWidthProportion = (width != 0) ? (2 * boundarySizeX) / width : 0; float boundaryHeightProportion = (height != 0) ? (2 * boundarySizeY) / height : 0; float boundaryWidthProportion = .5 - ((width != 0) ? (2 * boundarySizeX) / width : 0); float boundaryHeightProportion = .5 - ((height != 0) ? (2 * boundarySizeY) / height : 0); setupDrawAALine((void*) aaVertices, widthCoords, lengthCoords, boundaryWidthProportion, widthSlot, lengthSlot); int boundaryLengthSlot = mCaches.currentProgram->getUniform("boundaryLength"); int inverseBoundaryLengthSlot = mCaches.currentProgram->getUniform("inverseBoundaryLength"); glUniform1f(boundaryLengthSlot, boundaryHeightProportion); glUniform1f(inverseBoundaryLengthSlot, (1.0f / boundaryHeightProportion)); AAVertex::set(aaVertices++, left, bottom, 1, 1); AAVertex::set(aaVertices++, left, top, 1, 0); Loading Loading @@ -1955,9 +1949,7 @@ status_t OpenGLRenderer::drawLines(float* points, int count, SkPaint* paint) { Vertex* prevVertex = NULL; int boundaryLengthSlot = -1; int inverseBoundaryLengthSlot = -1; int boundaryWidthSlot = -1; int inverseBoundaryWidthSlot = -1; for (int i = 0; i < count; i += 4) { // a = start point, b = end point Loading Loading @@ -2060,22 +2052,16 @@ status_t OpenGLRenderer::drawLines(float* points, int count, SkPaint* paint) { if (boundaryWidthSlot < 0) { boundaryWidthSlot = mCaches.currentProgram->getUniform("boundaryWidth"); inverseBoundaryWidthSlot = mCaches.currentProgram->getUniform("inverseBoundaryWidth"); } glUniform1f(boundaryWidthSlot, boundaryWidthProportion); glUniform1f(inverseBoundaryWidthSlot, (1 / boundaryWidthProportion)); } if (boundaryLengthSlot < 0) { boundaryLengthSlot = mCaches.currentProgram->getUniform("boundaryLength"); inverseBoundaryLengthSlot = mCaches.currentProgram->getUniform("inverseBoundaryLength"); } glUniform1f(boundaryLengthSlot, boundaryLengthProportion); glUniform1f(inverseBoundaryLengthSlot, (1 / boundaryLengthProportion)); if (prevAAVertex != NULL) { // Issue two repeat vertices to create degenerate triangles to bridge Loading
libs/hwui/ProgramCache.cpp +4 −13 Original line number Diff line number Diff line Loading @@ -129,9 +129,7 @@ const char* gFS_Uniforms_Color = "uniform vec4 color;\n"; const char* gFS_Uniforms_AA = "uniform float boundaryWidth;\n" "uniform float inverseBoundaryWidth;\n" "uniform float boundaryLength;\n" "uniform float inverseBoundaryLength;\n"; "uniform float boundaryLength;\n"; const char* gFS_Header_Uniforms_PointHasBitmap = "uniform vec2 textureDimension;\n" "uniform float pointSize;\n"; Loading Loading @@ -242,16 +240,9 @@ const char* gFS_Main_ModulateColor = const char* gFS_Main_ModulateColor_ApplyGamma = " fragColor *= pow(color.a, gamma);\n"; const char* gFS_Main_AccountForAA = " if (widthProportion < boundaryWidth) {\n" " fragColor *= (widthProportion * inverseBoundaryWidth);\n" " } else if (widthProportion > (1.0 - boundaryWidth)) {\n" " fragColor *= ((1.0 - widthProportion) * inverseBoundaryWidth);\n" " }\n" " if (lengthProportion < boundaryLength) {\n" " fragColor *= (lengthProportion * inverseBoundaryLength);\n" " } else if (lengthProportion > (1.0 - boundaryLength)) {\n" " fragColor *= ((1.0 - lengthProportion) * inverseBoundaryLength);\n" " }\n"; " fragColor *= (1.0 - smoothstep(boundaryWidth, 0.5, abs(0.5 - widthProportion)))\n" " * (1.0 - smoothstep(boundaryLength, 0.5, abs(0.5 - lengthProportion)));\n"; const char* gFS_Main_FetchTexture[2] = { // Don't modulate " fragColor = texture2D(sampler, outTexCoords);\n", Loading