OSDN Git Service

surfaceflinger: a workaround to fix the slow GUI issue on x86
authorChih-Wei Huang <cwhuang@linux.org.tw>
Wed, 29 Sep 2010 11:25:29 +0000 (19:25 +0800)
committerChih-Wei Huang <cwhuang@linux.org.tw>
Fri, 29 Oct 2010 07:45:17 +0000 (15:45 +0800)
libs/surfaceflinger/LayerBase.cpp

index a8b735e..da55d9b 100644 (file)
@@ -438,6 +438,7 @@ void LayerBase::drawWithOpenGL(const Region& clip, const Texture& texture) const
     Region::const_iterator it = clip.begin();
     Region::const_iterator const end = clip.end();
 
+#ifdef __arm__
     //StopWatch watch("GL transformed");
     const GLfixed texCoords[4][2] = {
             { 0,        0 },
@@ -480,6 +481,19 @@ void LayerBase::drawWithOpenGL(const Region& clip, const Texture& texture) const
         glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
     }
     glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+#else
+    GLint crop[4] = { 0, height, width, -height };
+    glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
+    int x = tx();
+    int y = ty();
+    y = fbHeight - (y + height);
+    while (it != end) {
+        const Rect& r = *it++;
+        const GLint sy = fbHeight - (r.top + r.height());
+        glScissor(r.left, sy, r.width(), r.height());
+        glDrawTexiOES(x, y, 0, width, height);
+    }
+#endif
 }
 
 void LayerBase::validateTexture(GLint textureName) const