| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/common/gpu/client/gl_helper.h" | 5 #include "content/common/gpu/client/gl_helper.h" |
| 6 | 6 |
| 7 #include <queue> | 7 #include <queue> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 | 261 |
| 262 void CropScaleReadbackAndCleanTexture( | 262 void CropScaleReadbackAndCleanTexture( |
| 263 WebGLId src_texture, | 263 WebGLId src_texture, |
| 264 const gfx::Size& src_size, | 264 const gfx::Size& src_size, |
| 265 const gfx::Rect& src_subrect, | 265 const gfx::Rect& src_subrect, |
| 266 const gfx::Size& dst_size, | 266 const gfx::Size& dst_size, |
| 267 unsigned char* out, | 267 unsigned char* out, |
| 268 const base::Callback<void(bool)>& callback); | 268 const base::Callback<void(bool)>& callback); |
| 269 | 269 |
| 270 void ReadbackTextureSync(WebGLId texture, | 270 void ReadbackTextureSync(WebGLId texture, |
| 271 const gfx::Size& size, | 271 const gfx::Rect& src_rect, |
| 272 unsigned char* out); | 272 unsigned char* out); |
| 273 | 273 |
| 274 WebKit::WebGLId CopyAndScaleTexture(WebGLId texture, | 274 WebKit::WebGLId CopyAndScaleTexture(WebGLId texture, |
| 275 const gfx::Size& src_size, | 275 const gfx::Size& src_size, |
| 276 const gfx::Size& dst_size, | 276 const gfx::Size& dst_size, |
| 277 bool vertically_flip_texture); | 277 bool vertically_flip_texture); |
| 278 | 278 |
| 279 private: | 279 private: |
| 280 // A single request to CropScaleReadbackAndCleanTexture. | 280 // A single request to CropScaleReadbackAndCleanTexture. |
| 281 // Thread-safety notes: the main thread creates instances of this class. The | 281 // Thread-safety notes: the main thread creates instances of this class. The |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 551 request_queue_.push(request); | 551 request_queue_.push(request); |
| 552 | 552 |
| 553 g_gl_helper_thread.Pointer()->message_loop_proxy()->PostTask(FROM_HERE, | 553 g_gl_helper_thread.Pointer()->message_loop_proxy()->PostTask(FROM_HERE, |
| 554 base::Bind(&ReadBackFramebuffer, | 554 base::Bind(&ReadBackFramebuffer, |
| 555 request, | 555 request, |
| 556 context_for_thread_, | 556 context_for_thread_, |
| 557 base::MessageLoopProxy::current())); | 557 base::MessageLoopProxy::current())); |
| 558 } | 558 } |
| 559 | 559 |
| 560 void GLHelper::CopyTextureToImpl::ReadbackTextureSync(WebGLId texture, | 560 void GLHelper::CopyTextureToImpl::ReadbackTextureSync(WebGLId texture, |
| 561 const gfx::Size& size, | 561 const gfx::Rect& src_rect, |
| 562 unsigned char* out) { | 562 unsigned char* out) { |
| 563 ScopedFramebuffer dst_framebuffer(context_, context_->createFramebuffer()); | 563 ScopedFramebuffer dst_framebuffer(context_, context_->createFramebuffer()); |
| 564 ScopedFramebufferBinder<GL_FRAMEBUFFER> framebuffer_binder( | 564 ScopedFramebufferBinder<GL_FRAMEBUFFER> framebuffer_binder( |
| 565 context_, dst_framebuffer); | 565 context_, dst_framebuffer); |
| 566 ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(context_, texture); | 566 ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(context_, texture); |
| 567 context_->framebufferTexture2D(GL_FRAMEBUFFER, | 567 context_->framebufferTexture2D(GL_FRAMEBUFFER, |
| 568 GL_COLOR_ATTACHMENT0, | 568 GL_COLOR_ATTACHMENT0, |
| 569 GL_TEXTURE_2D, | 569 GL_TEXTURE_2D, |
| 570 texture, | 570 texture, |
| 571 0); | 571 0); |
| 572 context_->readPixels(0, | 572 context_->readPixels(src_rect.x(), |
| 573 0, | 573 src_rect.y(), |
| 574 size.width(), | 574 src_rect.width(), |
| 575 size.height(), | 575 src_rect.height(), |
| 576 GL_RGBA, | 576 GL_RGBA, |
| 577 GL_UNSIGNED_BYTE, | 577 GL_UNSIGNED_BYTE, |
| 578 out); | 578 out); |
| 579 } | 579 } |
| 580 | 580 |
| 581 WebKit::WebGLId GLHelper::CopyTextureToImpl::CopyAndScaleTexture( | 581 WebKit::WebGLId GLHelper::CopyTextureToImpl::CopyAndScaleTexture( |
| 582 WebGLId src_texture, | 582 WebGLId src_texture, |
| 583 const gfx::Size& src_size, | 583 const gfx::Size& src_size, |
| 584 const gfx::Size& dst_size, | 584 const gfx::Size& dst_size, |
| 585 bool vertically_flip_texture) { | 585 bool vertically_flip_texture) { |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 733 InitCopyTextToImpl(); | 733 InitCopyTextToImpl(); |
| 734 copy_texture_to_impl_->CropScaleReadbackAndCleanTexture(src_texture, | 734 copy_texture_to_impl_->CropScaleReadbackAndCleanTexture(src_texture, |
| 735 src_size, | 735 src_size, |
| 736 src_subrect, | 736 src_subrect, |
| 737 dst_size, | 737 dst_size, |
| 738 out, | 738 out, |
| 739 callback); | 739 callback); |
| 740 } | 740 } |
| 741 | 741 |
| 742 void GLHelper::ReadbackTextureSync(WebKit::WebGLId texture, | 742 void GLHelper::ReadbackTextureSync(WebKit::WebGLId texture, |
| 743 const gfx::Size& size, | 743 const gfx::Rect& src_rect, |
| 744 unsigned char* out) { | 744 unsigned char* out) { |
| 745 InitCopyTextToImpl(); | 745 InitCopyTextToImpl(); |
| 746 copy_texture_to_impl_->ReadbackTextureSync(texture, | 746 copy_texture_to_impl_->ReadbackTextureSync(texture, |
| 747 size, | 747 src_rect, |
| 748 out); | 748 out); |
| 749 } | 749 } |
| 750 | 750 |
| 751 WebKit::WebGLId GLHelper::CopyTexture(WebKit::WebGLId texture, | 751 WebKit::WebGLId GLHelper::CopyTexture(WebKit::WebGLId texture, |
| 752 const gfx::Size& size) { | 752 const gfx::Size& size) { |
| 753 InitCopyTextToImpl(); | 753 InitCopyTextToImpl(); |
| 754 return copy_texture_to_impl_->CopyAndScaleTexture(texture, | 754 return copy_texture_to_impl_->CopyAndScaleTexture(texture, |
| 755 size, | 755 size, |
| 756 size, | 756 size, |
| 757 false); | 757 false); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 812 context_->copyTexSubImage2D(GL_TEXTURE_2D, 0, | 812 context_->copyTexSubImage2D(GL_TEXTURE_2D, 0, |
| 813 rect.x(), rect.y(), | 813 rect.x(), rect.y(), |
| 814 rect.x(), rect.y(), | 814 rect.x(), rect.y(), |
| 815 rect.width(), rect.height()); | 815 rect.width(), rect.height()); |
| 816 } | 816 } |
| 817 context_->flush(); | 817 context_->flush(); |
| 818 } | 818 } |
| 819 } | 819 } |
| 820 | 820 |
| 821 } // namespace content | 821 } // namespace content |
| OLD | NEW |