diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp
index 949ad45..f2d344f 100644
--- a/libs/hwui/Caches.cpp
+++ b/libs/hwui/Caches.cpp
@@ -68,8 +68,6 @@
     mRegionMesh = nullptr;
     mProgram = nullptr;
 
-    patchCache.init();
-
     mInitialized = true;
 
     mPixelBufferState = new PixelBufferState();
diff --git a/libs/hwui/PatchCache.cpp b/libs/hwui/PatchCache.cpp
index bd6feb9..a6c281d 100644
--- a/libs/hwui/PatchCache.cpp
+++ b/libs/hwui/PatchCache.cpp
@@ -43,21 +43,6 @@
     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 @@
     clearCache();
 
     if (mMeshBuffer) {
-        mRenderState.meshState().unbindMeshBuffer();
-        glDeleteBuffers(1, &mMeshBuffer);
+        mRenderState.meshState().deleteMeshBuffer(mMeshBuffer);
         mMeshBuffer = 0;
         mSize = 0;
     }
@@ -170,7 +154,8 @@
 }
 
 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::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 @@
     // 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) {
diff --git a/libs/hwui/PatchCache.h b/libs/hwui/PatchCache.h
index 66ef6a0..d1c5dbf 100644
--- a/libs/hwui/PatchCache.h
+++ b/libs/hwui/PatchCache.h
@@ -53,7 +53,6 @@
 public:
     PatchCache(RenderState& renderState);
     ~PatchCache();
-    void init();
 
     const Patch* get(const AssetAtlas::Entry* entry,
             const uint32_t bitmapWidth, const uint32_t bitmapHeight,
diff --git a/libs/hwui/renderstate/MeshState.cpp b/libs/hwui/renderstate/MeshState.cpp
index b575c69..6d02936 100644
--- a/libs/hwui/renderstate/MeshState.cpp
+++ b/libs/hwui/renderstate/MeshState.cpp
@@ -17,8 +17,6 @@
 
 #include "Program.h"
 
-#include "ShadowTessellator.h"
-
 namespace android {
 namespace uirenderer {
 
@@ -100,6 +98,12 @@
     glBufferData(GL_ARRAY_BUFFER, size, data, usage);
 }
 
+void MeshState::updateMeshBufferSubData(GLuint buffer, GLintptr offset,
+        GLsizeiptr size, const void* data) {
+    bindMeshBuffer(buffer);
+    glBufferSubData(GL_ARRAY_BUFFER, offset, size, data);
+}
+
 void MeshState::deleteMeshBuffer(GLuint buffer) {
     if (buffer == mCurrentBuffer) {
         // GL defines that deleting the currently bound VBO rebinds to 0 (no VBO).
diff --git a/libs/hwui/renderstate/MeshState.h b/libs/hwui/renderstate/MeshState.h
index dd68468..17ad462 100644
--- a/libs/hwui/renderstate/MeshState.h
+++ b/libs/hwui/renderstate/MeshState.h
@@ -72,6 +72,7 @@
     void unbindMeshBuffer();
 
     void genOrUpdateMeshBuffer(GLuint* buffer, GLsizeiptr size, const void* data, GLenum usage);
+    void updateMeshBufferSubData(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
     void deleteMeshBuffer(GLuint);
 
     ///////////////////////////////////////////////////////////////////////////////
