- size_t size = width * height *
- GpuMemoryBufferImpl::BytesPerPixel(internalformat);
- scoped_ptr<base::SharedMemory> shm(new base::SharedMemory());
- if (!shm->CreateAnonymous(size))
- return scoped_ptr<gfx::GpuMemoryBuffer>();
-
- scoped_ptr<GpuMemoryBufferImplShm> buffer(
- new GpuMemoryBufferImplShm(gfx::Size(width, height), internalformat));
- if (!buffer->InitializeFromSharedMemory(shm.Pass()))
- return scoped_ptr<gfx::GpuMemoryBuffer>();
-
- return buffer.PassAs<gfx::GpuMemoryBuffer>();
+ return GpuMemoryBufferImpl::Create(gfx::Size(width, height),
+ internalformat,
+ usage).PassAs<gfx::GpuMemoryBuffer>();