Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(223)

Unified Diff: src/gpu/GrGeometryBuffer.h

Issue 272503009: store map ptr in GrGeometryBuffer base class (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Address comments Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/gpu/gl/GrGLBufferImpl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrGeometryBuffer.h
diff --git a/src/gpu/GrGeometryBuffer.h b/src/gpu/GrGeometryBuffer.h
index 1e1a367260216d01fe94f74c783aabd7d6c60716..67e91cc4d90a45a239159904edbb84360fb965cf 100644
--- a/src/gpu/GrGeometryBuffer.h
+++ b/src/gpu/GrGeometryBuffer.h
@@ -45,42 +45,58 @@ public:
* Currently only one map at a time is supported (no nesting of
* map/unmap).
*
+ * Note that buffer mapping does not go through GrContext and therefore is
+ * not serialized with other operations.
+ *
* @return a pointer to the data or NULL if the map fails.
*/
- virtual void* map() = 0;
+ void* map() { return (fMapPtr = this->onMap()); }
/**
- * Returns the same ptr that map() returned at time of map or NULL if the
- * is not mapped.
+ * Unmaps the buffer.
*
- * @return ptr to mapped buffer data or undefined if buffer is not mapped.
+ * The pointer returned by the previous map call will no longer be valid.
*/
- virtual void* mapPtr() const = 0;
+ void unmap() {
+ SkASSERT(NULL != fMapPtr);
+ this->onUnmap();
+ fMapPtr = NULL;
+ }
/**
- * Unmaps the buffer.
+ * Returns the same ptr that map() returned at time of map or NULL if the
+ * is not mapped.
*
- * The pointer returned by the previous map call will no longer be valid.
+ * @return ptr to mapped buffer data or NULL if buffer is not mapped.
*/
- virtual void unmap() = 0;
+ void* mapPtr() const { return fMapPtr; }
/**
Queries whether the buffer has been mapped.
@return true if the buffer is mapped, false otherwise.
*/
- virtual bool isMapped() const = 0;
+ bool isMapped() const { return NULL != fMapPtr; }
/**
* Updates the buffer data.
*
* The size of the buffer will be preserved. The src data will be
* placed at the beginning of the buffer and any remaining contents will
- * be undefined.
+ * be undefined. srcSizeInBytes must be <= to the buffer size.
+ *
+ * The buffer must not be mapped.
+ *
+ * Note that buffer updates do not go through GrContext and therefore are
+ * not serialized with other operations.
*
* @return returns true if the update succeeds, false otherwise.
*/
- virtual bool updateData(const void* src, size_t srcSizeInBytes) = 0;
+ bool updateData(const void* src, size_t srcSizeInBytes) {
+ SkASSERT(!this->isMapped());
+ SkASSERT(srcSizeInBytes <= fGpuMemorySize);
+ return this->onUpdateData(src, srcSizeInBytes);
+ }
// GrGpuObject overrides
virtual size_t gpuMemorySize() const { return fGpuMemorySize; }
@@ -88,11 +104,17 @@ public:
protected:
GrGeometryBuffer(GrGpu* gpu, bool isWrapped, size_t gpuMemorySize, bool dynamic, bool cpuBacked)
: INHERITED(gpu, isWrapped)
+ , fMapPtr(NULL)
, fGpuMemorySize(gpuMemorySize)
, fDynamic(dynamic)
, fCPUBacked(cpuBacked) {}
private:
+ virtual void* onMap() = 0;
+ virtual void onUnmap() = 0;
+ virtual bool onUpdateData(const void* src, size_t srcSizeInBytes) = 0;
+
+ void* fMapPtr;
size_t fGpuMemorySize;
bool fDynamic;
bool fCPUBacked;
« no previous file with comments | « no previous file | src/gpu/gl/GrGLBufferImpl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698