// Provides common implementation of a GPU memory buffer.
class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
public:
- static scoped_ptr<GpuMemoryBufferImpl> Create(
+ virtual ~GpuMemoryBufferImpl();
+
+ // Creates a GPU memory buffer instance with |size| and |internalformat| for
+ // |usage|.
+ static scoped_ptr<GpuMemoryBufferImpl> Create(const gfx::Size& size,
+ unsigned internalformat,
+ unsigned usage);
+
+ // Allocates a GPU memory buffer with |size| and |internalformat| for |usage|
+ // by |child_process|. The |handle| returned can be used by the
+ // |child_process| to create an instance of this class.
+ static void AllocateForChildProcess(const gfx::Size& size,
+ unsigned internalformat,
+ unsigned usage,
+ base::ProcessHandle child_process,
+ gfx::GpuMemoryBufferHandle* handle);
+
+ // Creates an instance from the given |handle|. |size| and |internalformat|
+ // should match what was used to allocate the |handle|.
+ static scoped_ptr<GpuMemoryBufferImpl> CreateFromHandle(
gfx::GpuMemoryBufferHandle handle,
- gfx::Size size,
+ const gfx::Size& size,
unsigned internalformat);
- virtual ~GpuMemoryBufferImpl();
-
+ // Returns true if |internalformat| is a format recognized by this base class.
static bool IsFormatValid(unsigned internalformat);
+
+ // Returns true if |usage| is recognized by this base class.
+ static bool IsUsageValid(unsigned usage);
+
+ // Returns the number of bytes per pixel that must be used by an
+ // implementation when using |internalformat|.
static size_t BytesPerPixel(unsigned internalformat);
// Overridden from gfx::GpuMemoryBuffer:
virtual bool IsMapped() const OVERRIDE;
- virtual uint32 GetStride() const OVERRIDE;
protected:
- GpuMemoryBufferImpl(gfx::Size size, unsigned internalformat);
+ GpuMemoryBufferImpl(const gfx::Size& size, unsigned internalformat);
const gfx::Size size_;
- unsigned internalformat_;
+ const unsigned internalformat_;
bool mapped_;
DISALLOW_COPY_AND_ASSIGN(GpuMemoryBufferImpl);