Abort AA rect path when index buffer allocation fails

Review URL http://codereview.appspot.com/4984041/



git-svn-id: http://skia.googlecode.com/svn/trunk@2204 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/GrContext.cpp b/gpu/src/GrContext.cpp
index a97c857..689cb57 100644
--- a/gpu/src/GrContext.cpp
+++ b/gpu/src/GrContext.cpp
@@ -957,13 +957,14 @@
     if (NULL == fAAFillRectIndexBuffer) {
         fAAFillRectIndexBuffer = fGpu->createIndexBuffer(sizeof(gFillAARectIdx),
                                                          false);
-        GrAssert(NULL != fAAFillRectIndexBuffer);
-#if GR_DEBUG
-        bool updated =
-#endif
-        fAAFillRectIndexBuffer->updateData(gFillAARectIdx,
-                                           sizeof(gFillAARectIdx));
-        GR_DEBUGASSERT(updated);
+        if (NULL != fAAFillRectIndexBuffer) {
+    #if GR_DEBUG
+            bool updated =
+    #endif
+            fAAFillRectIndexBuffer->updateData(gFillAARectIdx,
+                                               sizeof(gFillAARectIdx));
+            GR_DEBUGASSERT(updated);
+        }
     }
     return fAAFillRectIndexBuffer;
 }
@@ -993,13 +994,14 @@
     if (NULL == fAAStrokeRectIndexBuffer) {
         fAAStrokeRectIndexBuffer = fGpu->createIndexBuffer(sizeof(gStrokeAARectIdx),
                                                            false);
-        GrAssert(NULL != fAAStrokeRectIndexBuffer);
-#if GR_DEBUG
-        bool updated =
-#endif
-        fAAStrokeRectIndexBuffer->updateData(gStrokeAARectIdx,
-                                             sizeof(gStrokeAARectIdx));
-        GR_DEBUGASSERT(updated);
+        if (NULL != fAAStrokeRectIndexBuffer) {
+    #if GR_DEBUG
+            bool updated =
+    #endif
+            fAAStrokeRectIndexBuffer->updateData(gStrokeAARectIdx,
+                                                 sizeof(gStrokeAARectIdx));
+            GR_DEBUGASSERT(updated);
+        }
     }
     return fAAStrokeRectIndexBuffer;
 }
@@ -1017,6 +1019,11 @@
         GrPrintf("Failed to get space for vertices!\n");
         return;
     }
+    GrIndexBuffer* indexBuffer = this->aaFillRectIndexBuffer();
+    if (NULL == indexBuffer) {
+        GrPrintf("Failed to create index buffer!\n");
+        return;
+    }
 
     intptr_t verts = reinterpret_cast<intptr_t>(geo.vertices());
 
@@ -1037,7 +1044,7 @@
         *reinterpret_cast<GrColor*>(verts + i * vsize) = innerColor;
     }
 
-    target->setIndexSourceToBuffer(this->aaFillRectIndexBuffer());
+    target->setIndexSourceToBuffer(indexBuffer);
 
     target->drawIndexed(kTriangles_PrimitiveType, 0,
                          0, 8, this->aaFillRectIndexCount());
@@ -1074,6 +1081,11 @@
         GrPrintf("Failed to get space for vertices!\n");
         return;
     }
+    GrIndexBuffer* indexBuffer = this->aaStrokeRectIndexBuffer();
+    if (NULL == indexBuffer) {
+        GrPrintf("Failed to create index buffer!\n");
+        return;
+    }
 
     intptr_t verts = reinterpret_cast<intptr_t>(geo.vertices());
 
@@ -1103,7 +1115,7 @@
         *reinterpret_cast<GrColor*>(verts + i * vsize) = 0;
     }
 
-    target->setIndexSourceToBuffer(aaStrokeRectIndexBuffer());
+    target->setIndexSourceToBuffer(indexBuffer);
     target->drawIndexed(kTriangles_PrimitiveType,
                         0, 0, 16, aaStrokeRectIndexCount());
 }