Index: cc/resources/resource_provider.cc |
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc |
index da90a4432b5aa099a9dabee688fe846cc0ad4e2f..ba196bffbe71e84ab76b795bbdb75585bc7ed743 100644 |
--- a/cc/resources/resource_provider.cc |
+++ b/cc/resources/resource_provider.cc |
@@ -275,7 +275,13 @@ ResourceProvider::ResourceId ResourceProvider::CreateResourceFromTextureMailbox( |
ResourceId id = next_id_++; |
DCHECK(mailbox.IsValid()); |
Resource& resource = resources_[id]; |
- if (mailbox.IsTexture()) { |
+ if (mailbox.IsBitmap()) { |
+ SkBitmap bitmap = mailbox.bitmap(); |
+ SkAutoLockPixels bitmapLock(bitmap); |
tfarina
2013/06/26 16:27:38
minornit: bitmap_lock
|
+ uint8_t* pixels = reinterpret_cast<uint8_t*>(bitmap.getPixels()); |
+ resource = Resource(pixels, mailbox.shared_memory_size(), |
+ GL_RGBA, GL_LINEAR); |
+ } else if (mailbox.IsTexture()) { |
resource = Resource(0, gfx::Size(), 0, GL_LINEAR, 0, TextureUsageAny); |
} else { |
DCHECK(mailbox.IsSharedMemory()); |
@@ -354,10 +360,11 @@ void ResourceProvider::DeleteResourceInternal(ResourceMap::iterator it, |
if (!lost_resource && resource->gl_id) |
sync_point = context3d->insertSyncPoint(); |
} else { |
- DCHECK(resource->mailbox.IsSharedMemory()); |
+ DCHECK(resource->mailbox.IsSharedMemory() || |
+ resource->mailbox.IsBitmap()); |
base::SharedMemory* shared_memory = resource->mailbox.shared_memory(); |
- if (resource->pixels && shared_memory) { |
- DCHECK(shared_memory->memory() == resource->pixels); |
+ if (resource->pixels) { |
+ DCHECK(!shared_memory || shared_memory->memory() == resource->pixels); |
resource->pixels = NULL; |
} |
} |