Chromium Code Reviews| Index: cc/output/gl_renderer.cc |
| diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc |
| index 86b6f13b545c3b5b9c783e51ad64a30ed5b7b5cb..2b57d5c4dcddb5bda0638352c6439752bc9abe1b 100644 |
| --- a/cc/output/gl_renderer.cc |
| +++ b/cc/output/gl_renderer.cc |
| @@ -2366,26 +2366,14 @@ void GLRenderer::GetFramebufferPixelsAsync( |
| DCHECK_LE(window_rect.bottom(), current_surface_size_.height()); |
| if (!request->force_bitmap_result()) { |
| - bool own_mailbox = !request->has_texture_mailbox(); |
| - |
| - GLuint texture_id = 0; |
| - gl_->GenTextures(1, &texture_id); |
| - |
| gpu::Mailbox mailbox; |
| + scoped_ptr<SingleReleaseCallback> release_callback; |
| + bool own_mailbox = !request->has_texture_mailbox(); |
| if (own_mailbox) { |
| - GLC(gl_, gl_->GenMailboxCHROMIUM(mailbox.name)); |
| - } else { |
| - mailbox = request->texture_mailbox().mailbox(); |
| - DCHECK_EQ(static_cast<unsigned>(GL_TEXTURE_2D), |
| - request->texture_mailbox().target()); |
| - DCHECK(!mailbox.IsZero()); |
| - unsigned incoming_sync_point = request->texture_mailbox().sync_point(); |
| - if (incoming_sync_point) |
| - GLC(gl_, gl_->WaitSyncPointCHROMIUM(incoming_sync_point)); |
| - } |
| + GLuint texture_id = 0; |
| + gl_->GenTextures(1, &texture_id); |
| + GLC(gl_, gl_->BindTexture(GL_TEXTURE_2D, texture_id)); |
| - GLC(gl_, gl_->BindTexture(GL_TEXTURE_2D, texture_id)); |
| - if (own_mailbox) { |
| GLC(gl_, |
| gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); |
| GLC(gl_, |
| @@ -2396,24 +2384,34 @@ void GLRenderer::GetFramebufferPixelsAsync( |
| GLC(gl_, |
| gl_->TexParameteri( |
| GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)); |
| + GLC(gl_, gl_->GenMailboxCHROMIUM(mailbox.name)); |
| GLC(gl_, gl_->ProduceTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name)); |
| - } else { |
| - GLC(gl_, gl_->ConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name)); |
| - } |
| - GetFramebufferTexture(texture_id, RGBA_8888, window_rect); |
| - GLC(gl_, gl_->BindTexture(GL_TEXTURE_2D, 0)); |
| - unsigned sync_point = gl_->InsertSyncPointCHROMIUM(); |
| - TextureMailbox texture_mailbox(mailbox, GL_TEXTURE_2D, sync_point); |
| + GetFramebufferTexture(texture_id, RGBA_8888, window_rect); |
|
danakj
2014/07/07 16:47:06
I liked that this call wasn't duplicated, only cod
|
| + GLC(gl_, gl_->BindTexture(GL_TEXTURE_2D, 0)); |
| - scoped_ptr<SingleReleaseCallback> release_callback; |
| - if (own_mailbox) { |
| release_callback = texture_mailbox_deleter_->GetReleaseCallback( |
| output_surface_->context_provider(), texture_id); |
| } else { |
| + mailbox = request->texture_mailbox().mailbox(); |
| + DCHECK_EQ(static_cast<unsigned>(GL_TEXTURE_2D), |
| + request->texture_mailbox().target()); |
| + DCHECK(!mailbox.IsZero()); |
| + unsigned incoming_sync_point = request->texture_mailbox().sync_point(); |
| + if (incoming_sync_point) |
| + GLC(gl_, gl_->WaitSyncPointCHROMIUM(incoming_sync_point)); |
| + |
| + GLuint texture_id = GLC( |
| + gl_, |
| + gl_->CreateAndConsumeTextureCHROMIUM(GL_TEXTURE_2D, mailbox.name)); |
| + |
| + GetFramebufferTexture(texture_id, RGBA_8888, window_rect); |
| + |
| gl_->DeleteTextures(1, &texture_id); |
| } |
| + unsigned sync_point = gl_->InsertSyncPointCHROMIUM(); |
| + TextureMailbox texture_mailbox(mailbox, GL_TEXTURE_2D, sync_point); |
| request->SendTextureResult( |
| window_rect.size(), texture_mailbox, release_callback.Pass()); |
| return; |