From 15bc6437f8b4cf10dba55c7638d349e7b9563f4f Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Tue, 13 Dec 2011 13:11:32 -0800 Subject: Reduce the number of GL commands generated by the UI This optimization along with the previous one lets us render an application like Gmail using only 30% of the number of GL commands previously required Change-Id: Ifee63edaf495e04490b5abd5433bb9a07bc327a8 --- libs/hwui/FontRenderer.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'libs/hwui/FontRenderer.cpp') diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp index f04ea6f3cfb4..102aea69f748 100644 --- a/libs/hwui/FontRenderer.cpp +++ b/libs/hwui/FontRenderer.cpp @@ -22,6 +22,7 @@ #include +#include "Caches.h" #include "Debug.h" #include "FontRenderer.h" @@ -536,9 +537,8 @@ void FontRenderer::initVertexArrayBuffers() { } glGenBuffers(1, &mIndexBufferID); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBufferID); + Caches::getInstance().bindIndicesBuffer(mIndexBufferID); glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexBufferSizeBytes, indexBufferData, GL_STATIC_DRAW); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); free(indexBufferData); @@ -597,7 +597,18 @@ void FontRenderer::checkTextureUpdate() { void FontRenderer::issueDrawCommand() { checkTextureUpdate(); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mIndexBufferID); + Caches& caches = Caches::getInstance(); + if (!mDrawn) { + float* buffer = mTextMeshPtr; + int offset = 2; + + bool force = caches.unbindMeshBuffer(); + caches.bindPositionVertexPointer(force, caches.currentProgram->position, buffer); + caches.bindTexCoordsVertexPointer(force, caches.currentProgram->texCoords, + buffer + offset); + } + + caches.bindIndicesBuffer(mIndexBufferID); glDrawElements(GL_TRIANGLES, mCurrentQuadIndex * 6, GL_UNSIGNED_SHORT, NULL); mDrawn = true; -- cgit v1.2.3-59-g8ed1b