Index: src/gpu/GrBatchAtlas.cpp |
diff --git a/src/gpu/GrBatchAtlas.cpp b/src/gpu/GrBatchAtlas.cpp |
index 0bcd2f9e06325cd81bcbcce2435d104a6f83b027..faa26c49f4f13988befcac19d74eb1fd8b7cb592 100644 |
--- a/src/gpu/GrBatchAtlas.cpp |
+++ b/src/gpu/GrBatchAtlas.cpp |
@@ -50,7 +50,10 @@ public: |
return false; |
} |
- SkASSERT(fData); |
+ if (!fData) { |
+ fData = reinterpret_cast<unsigned char*>(sk_calloc_throw(fBytesPerPixel * fWidth * |
+ fHeight)); |
+ } |
const unsigned char* imagePtr = (const unsigned char*)image; |
// point ourselves at the right starting spot |
unsigned char* dataPtr = fData; |
@@ -88,9 +91,8 @@ public: |
void uploadToTexture(GrBatchTarget::TextureUploader uploader) { |
// We should only be issuing uploads if we are in fact dirty |
- SkASSERT(fDirty); |
+ SkASSERT(fDirty && fData && fTexture); |
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("skia.gpu"), "GrBatchPlot::uploadToTexture"); |
- SkASSERT(fTexture); |
size_t rowBytes = fBytesPerPixel * fRects->width(); |
const unsigned char* dataPtr = fData; |
dataPtr += rowBytes * fDirtyRect.fTop; |
@@ -110,8 +112,9 @@ public: |
fID = create_id(fIndex, fGenID); |
// zero out the plot |
- SkASSERT(fData); |
- memset(fData, 0, fBytesPerPixel * fWidth * fHeight); |
+ if (fData) { |
+ sk_bzero(fData, fBytesPerPixel * fWidth * fHeight); |
+ } |
fDirtyRect.setEmpty(); |
SkDEBUGCODE(fDirty = false;) |
@@ -166,10 +169,6 @@ private: |
fDirtyRect.setEmpty(); |
SkDEBUGCODE(fDirty = false;) |
fTexture = texture; |
- |
- // allocate backing store |
- fData = SkNEW_ARRAY(unsigned char, fBytesPerPixel * width * height); |
- memset(fData, 0, fBytesPerPixel * width * height); |
} |
BatchToken fLastUpload; |