summaryrefslogtreecommitdiff
path: root/libs/hwui/PatchCache.cpp
diff options
context:
space:
mode:
author sergeyv <sergeyv@google.com> 2016-05-11 16:52:33 -0700
committer Sergei Vasilinetc <sergeyv@google.com> 2016-05-11 23:53:39 +0000
commitfd3744b7d88d0015cfb36be2b485c4b6ba0c1b58 (patch)
tree5946f6903d18252a88e1d6de4f8d34823d567dfb /libs/hwui/PatchCache.cpp
parent6d70183ff4980205bb0709829672d3da70175133 (diff)
Move gl calls from PatchCache to MeshState
bug:27358166 Change-Id: I5f544f497e9480e64faa2ddd369eb16318e82dc3
Diffstat (limited to 'libs/hwui/PatchCache.cpp')
-rw-r--r--libs/hwui/PatchCache.cpp29
1 files changed, 9 insertions, 20 deletions
diff --git a/libs/hwui/PatchCache.cpp b/libs/hwui/PatchCache.cpp
index bd6feb9fc762..a6c281dc9839 100644
--- a/libs/hwui/PatchCache.cpp
+++ b/libs/hwui/PatchCache.cpp
@@ -43,21 +43,6 @@ PatchCache::~PatchCache() {
clear();
}
-void PatchCache::init() {
- bool created = false;
- if (!mMeshBuffer) {
- glGenBuffers(1, &mMeshBuffer);
- created = true;
- }
-
- mRenderState.meshState().bindMeshBuffer(mMeshBuffer);
- mRenderState.meshState().resetVertexPointers();
-
- if (created) {
- createVertexBuffer();
- }
-}
-
///////////////////////////////////////////////////////////////////////////////
// Caching
///////////////////////////////////////////////////////////////////////////////
@@ -80,8 +65,7 @@ void PatchCache::clear() {
clearCache();
if (mMeshBuffer) {
- mRenderState.meshState().unbindMeshBuffer();
- glDeleteBuffers(1, &mMeshBuffer);
+ mRenderState.meshState().deleteMeshBuffer(mMeshBuffer);
mMeshBuffer = 0;
mSize = 0;
}
@@ -170,7 +154,8 @@ void PatchCache::clearGarbage() {
}
void PatchCache::createVertexBuffer() {
- glBufferData(GL_ARRAY_BUFFER, mMaxSize, nullptr, GL_DYNAMIC_DRAW);
+ mRenderState.meshState().genOrUpdateMeshBuffer(&mMeshBuffer,
+ mMaxSize, nullptr, GL_DYNAMIC_DRAW);
mSize = 0;
mFreeBlocks = new BufferBlock(0, mMaxSize);
mGenerationId++;
@@ -182,7 +167,9 @@ void PatchCache::createVertexBuffer() {
*/
void PatchCache::setupMesh(Patch* newMesh) {
// This call ensures the VBO exists and that it is bound
- init();
+ if (!mMeshBuffer) {
+ createVertexBuffer();
+ }
// If we're running out of space, let's clear the entire cache
uint32_t size = newMesh->getSize();
@@ -215,7 +202,9 @@ void PatchCache::setupMesh(Patch* newMesh) {
// Copy the 9patch mesh in the VBO
newMesh->positionOffset = (GLintptr) (block->offset);
newMesh->textureOffset = newMesh->positionOffset + kMeshTextureOffset;
- glBufferSubData(GL_ARRAY_BUFFER, newMesh->positionOffset, size, newMesh->vertices.get());
+
+ mRenderState.meshState().updateMeshBufferSubData(mMeshBuffer, newMesh->positionOffset, size,
+ newMesh->vertices.get());
// Remove the block since we've used it entirely
if (block->size == size) {