| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/compositor/buffer_queue.h" | 5 #include "content/browser/compositor/buffer_queue.h" |
| 6 | 6 |
| 7 #include "content/browser/compositor/image_transport_factory.h" | 7 #include "content/browser/compositor/image_transport_factory.h" |
| 8 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h" | 8 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h" |
| 9 #include "content/common/gpu/client/context_provider_command_buffer.h" | 9 #include "content/common/gpu/client/context_provider_command_buffer.h" |
| 10 #include "content/common/gpu/client/gl_helper.h" | 10 #include "content/common/gpu/client/gl_helper.h" |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 | 113 |
| 114 // TODO: add stencil buffer when needed. | 114 // TODO: add stencil buffer when needed. |
| 115 gpu::gles2::GLES2Interface* gl = context_provider_->ContextGL(); | 115 gpu::gles2::GLES2Interface* gl = context_provider_->ContextGL(); |
| 116 gl->BindFramebuffer(GL_FRAMEBUFFER, fbo_); | 116 gl->BindFramebuffer(GL_FRAMEBUFFER, fbo_); |
| 117 gl->FramebufferTexture2D( | 117 gl->FramebufferTexture2D( |
| 118 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0); | 118 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 0, 0); |
| 119 | 119 |
| 120 FreeAllSurfaces(); | 120 FreeAllSurfaces(); |
| 121 } | 121 } |
| 122 | 122 |
| 123 void BufferQueue::RecreateBuffers() { |
| 124 AllocatedSurface previous = in_flight_surfaces_.back(); |
| 125 in_flight_surfaces_.pop_back(); |
| 126 FreeAllSurfaces(); |
| 127 FreeSurface(¤t_surface_); |
| 128 |
| 129 AllocatedSurface first_buffer = GetNextSurface(); |
| 130 CopyBufferDamage(first_buffer.texture, previous.texture, gfx::Rect(), |
| 131 gfx::Rect(size_)); |
| 132 in_flight_surfaces_.push_back(first_buffer); |
| 133 |
| 134 AllocatedSurface second_buffer = GetNextSurface(); |
| 135 CopyBufferDamage(second_buffer.texture, previous.texture, gfx::Rect(), |
| 136 gfx::Rect(size_)); |
| 137 available_surfaces_.push_back(second_buffer); |
| 138 |
| 139 BindFramebuffer(); |
| 140 FreeSurface(&previous); |
| 141 } |
| 142 |
| 123 void BufferQueue::PageFlipComplete() { | 143 void BufferQueue::PageFlipComplete() { |
| 124 if (in_flight_surfaces_.size() > 1) { | 144 if (in_flight_surfaces_.size() > 1) { |
| 125 available_surfaces_.push_back(in_flight_surfaces_.front()); | 145 available_surfaces_.push_back(in_flight_surfaces_.front()); |
| 126 in_flight_surfaces_.pop_front(); | 146 in_flight_surfaces_.pop_front(); |
| 127 } | 147 } |
| 128 } | 148 } |
| 129 | 149 |
| 130 void BufferQueue::FreeAllSurfaces() { | 150 void BufferQueue::FreeAllSurfaces() { |
| 131 FreeSurface(¤t_surface_); | 151 FreeSurface(¤t_surface_); |
| 132 while (!in_flight_surfaces_.empty()) { | 152 while (!in_flight_surfaces_.empty()) { |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 gl->DeleteTextures(1, &texture); | 206 gl->DeleteTextures(1, &texture); |
| 187 return AllocatedSurface(); | 207 return AllocatedSurface(); |
| 188 } | 208 } |
| 189 allocated_count_++; | 209 allocated_count_++; |
| 190 gl->BindTexture(GL_TEXTURE_2D, texture); | 210 gl->BindTexture(GL_TEXTURE_2D, texture); |
| 191 gl->BindTexImage2DCHROMIUM(GL_TEXTURE_2D, id); | 211 gl->BindTexImage2DCHROMIUM(GL_TEXTURE_2D, id); |
| 192 return AllocatedSurface(texture, id, gfx::Rect(size_)); | 212 return AllocatedSurface(texture, id, gfx::Rect(size_)); |
| 193 } | 213 } |
| 194 | 214 |
| 195 } // namespace content | 215 } // namespace content |
| OLD | NEW |