diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/GrBatchAtlas.cpp | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/gpu/GrBatchAtlas.cpp b/src/gpu/GrBatchAtlas.cpp index 0bcd2f9e06..faa26c49f4 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; |