| OLD | NEW |
| 1 // Copyright 2010 The Chromium Authors. All rights reserved. | 1 // Copyright 2010 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 "cc/output/gl_renderer.h" | 5 #include "cc/output/gl_renderer.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 829 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 840 ScopedResource::Create(resource_provider_); | 840 ScopedResource::Create(resource_provider_); |
| 841 // CopyTexImage2D fails when called on a texture having immutable storage. | 841 // CopyTexImage2D fails when called on a texture having immutable storage. |
| 842 device_background_texture->Allocate( | 842 device_background_texture->Allocate( |
| 843 bounding_rect.size(), ResourceProvider::TEXTURE_HINT_DEFAULT, | 843 bounding_rect.size(), ResourceProvider::TEXTURE_HINT_DEFAULT, |
| 844 resource_provider_->best_texture_format()); | 844 resource_provider_->best_texture_format()); |
| 845 { | 845 { |
| 846 ResourceProvider::ScopedWriteLockGL lock(resource_provider_, | 846 ResourceProvider::ScopedWriteLockGL lock(resource_provider_, |
| 847 device_background_texture->id()); | 847 device_background_texture->id()); |
| 848 GetFramebufferTexture(lock.texture_id(), RGBA_8888, bounding_rect); | 848 GetFramebufferTexture(lock.texture_id(), RGBA_8888, bounding_rect); |
| 849 } | 849 } |
| 850 return device_background_texture.Pass(); | 850 return device_background_texture; |
| 851 } | 851 } |
| 852 | 852 |
| 853 skia::RefPtr<SkImage> GLRenderer::ApplyBackgroundFilters( | 853 skia::RefPtr<SkImage> GLRenderer::ApplyBackgroundFilters( |
| 854 DrawingFrame* frame, | 854 DrawingFrame* frame, |
| 855 const RenderPassDrawQuad* quad, | 855 const RenderPassDrawQuad* quad, |
| 856 ScopedResource* background_texture) { | 856 ScopedResource* background_texture) { |
| 857 DCHECK(ShouldApplyBackgroundFilters(quad)); | 857 DCHECK(ShouldApplyBackgroundFilters(quad)); |
| 858 skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( | 858 skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( |
| 859 quad->background_filters, gfx::SizeF(background_texture->size())); | 859 quad->background_filters, gfx::SizeF(background_texture->size())); |
| 860 | 860 |
| (...skipping 1576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2437 gfx::RectF(quad->rect), *clip_region, binding.matrix_location, uvs); | 2437 gfx::RectF(quad->rect), *clip_region, binding.matrix_location, uvs); |
| 2438 } | 2438 } |
| 2439 | 2439 |
| 2440 gl_->BindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); | 2440 gl_->BindTexture(GL_TEXTURE_RECTANGLE_ARB, 0); |
| 2441 } | 2441 } |
| 2442 | 2442 |
| 2443 void GLRenderer::FinishDrawingFrame(DrawingFrame* frame) { | 2443 void GLRenderer::FinishDrawingFrame(DrawingFrame* frame) { |
| 2444 if (use_sync_query_) { | 2444 if (use_sync_query_) { |
| 2445 DCHECK(current_sync_query_); | 2445 DCHECK(current_sync_query_); |
| 2446 current_sync_query_->End(); | 2446 current_sync_query_->End(); |
| 2447 pending_sync_queries_.push_back(current_sync_query_.Pass()); | 2447 pending_sync_queries_.push_back(std::move(current_sync_query_)); |
| 2448 } | 2448 } |
| 2449 | 2449 |
| 2450 current_framebuffer_lock_ = nullptr; | 2450 current_framebuffer_lock_ = nullptr; |
| 2451 swap_buffer_rect_.Union(frame->root_damage_rect); | 2451 swap_buffer_rect_.Union(frame->root_damage_rect); |
| 2452 | 2452 |
| 2453 gl_->Disable(GL_BLEND); | 2453 gl_->Disable(GL_BLEND); |
| 2454 blend_shadow_ = false; | 2454 blend_shadow_ = false; |
| 2455 | 2455 |
| 2456 ScheduleCALayers(frame); | 2456 ScheduleCALayers(frame); |
| 2457 ScheduleOverlays(frame); | 2457 ScheduleOverlays(frame); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2490 is_scissor_enabled_ = false; | 2490 is_scissor_enabled_ = false; |
| 2491 } | 2491 } |
| 2492 | 2492 |
| 2493 void GLRenderer::CopyCurrentRenderPassToBitmap( | 2493 void GLRenderer::CopyCurrentRenderPassToBitmap( |
| 2494 DrawingFrame* frame, | 2494 DrawingFrame* frame, |
| 2495 scoped_ptr<CopyOutputRequest> request) { | 2495 scoped_ptr<CopyOutputRequest> request) { |
| 2496 TRACE_EVENT0("cc", "GLRenderer::CopyCurrentRenderPassToBitmap"); | 2496 TRACE_EVENT0("cc", "GLRenderer::CopyCurrentRenderPassToBitmap"); |
| 2497 gfx::Rect copy_rect = frame->current_render_pass->output_rect; | 2497 gfx::Rect copy_rect = frame->current_render_pass->output_rect; |
| 2498 if (request->has_area()) | 2498 if (request->has_area()) |
| 2499 copy_rect.Intersect(request->area()); | 2499 copy_rect.Intersect(request->area()); |
| 2500 GetFramebufferPixelsAsync(frame, copy_rect, request.Pass()); | 2500 GetFramebufferPixelsAsync(frame, copy_rect, std::move(request)); |
| 2501 } | 2501 } |
| 2502 | 2502 |
| 2503 void GLRenderer::ToGLMatrix(float* gl_matrix, const gfx::Transform& transform) { | 2503 void GLRenderer::ToGLMatrix(float* gl_matrix, const gfx::Transform& transform) { |
| 2504 transform.matrix().asColMajorf(gl_matrix); | 2504 transform.matrix().asColMajorf(gl_matrix); |
| 2505 } | 2505 } |
| 2506 | 2506 |
| 2507 void GLRenderer::SetShaderQuadF(const gfx::QuadF& quad, int quad_location) { | 2507 void GLRenderer::SetShaderQuadF(const gfx::QuadF& quad, int quad_location) { |
| 2508 if (quad_location == -1) | 2508 if (quad_location == -1) |
| 2509 return; | 2509 return; |
| 2510 | 2510 |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2719 | 2719 |
| 2720 scoped_ptr<SingleReleaseCallback> release_callback; | 2720 scoped_ptr<SingleReleaseCallback> release_callback; |
| 2721 if (own_mailbox) { | 2721 if (own_mailbox) { |
| 2722 gl_->BindTexture(GL_TEXTURE_2D, 0); | 2722 gl_->BindTexture(GL_TEXTURE_2D, 0); |
| 2723 release_callback = texture_mailbox_deleter_->GetReleaseCallback( | 2723 release_callback = texture_mailbox_deleter_->GetReleaseCallback( |
| 2724 output_surface_->context_provider(), texture_id); | 2724 output_surface_->context_provider(), texture_id); |
| 2725 } else { | 2725 } else { |
| 2726 gl_->DeleteTextures(1, &texture_id); | 2726 gl_->DeleteTextures(1, &texture_id); |
| 2727 } | 2727 } |
| 2728 | 2728 |
| 2729 request->SendTextureResult( | 2729 request->SendTextureResult(window_rect.size(), texture_mailbox, |
| 2730 window_rect.size(), texture_mailbox, release_callback.Pass()); | 2730 std::move(release_callback)); |
| 2731 return; | 2731 return; |
| 2732 } | 2732 } |
| 2733 | 2733 |
| 2734 DCHECK(request->force_bitmap_result()); | 2734 DCHECK(request->force_bitmap_result()); |
| 2735 | 2735 |
| 2736 scoped_ptr<PendingAsyncReadPixels> pending_read(new PendingAsyncReadPixels); | 2736 scoped_ptr<PendingAsyncReadPixels> pending_read(new PendingAsyncReadPixels); |
| 2737 pending_read->copy_request = request.Pass(); | 2737 pending_read->copy_request = std::move(request); |
| 2738 pending_async_read_pixels_.insert(pending_async_read_pixels_.begin(), | 2738 pending_async_read_pixels_.insert(pending_async_read_pixels_.begin(), |
| 2739 pending_read.Pass()); | 2739 std::move(pending_read)); |
| 2740 | 2740 |
| 2741 bool do_workaround = NeedsIOSurfaceReadbackWorkaround(); | 2741 bool do_workaround = NeedsIOSurfaceReadbackWorkaround(); |
| 2742 | 2742 |
| 2743 unsigned temporary_texture = 0; | 2743 unsigned temporary_texture = 0; |
| 2744 unsigned temporary_fbo = 0; | 2744 unsigned temporary_fbo = 0; |
| 2745 | 2745 |
| 2746 if (do_workaround) { | 2746 if (do_workaround) { |
| 2747 // On Mac OS X, calling glReadPixels() against an FBO whose color attachment | 2747 // On Mac OS X, calling glReadPixels() against an FBO whose color attachment |
| 2748 // is an IOSurface-backed texture causes corruption of future glReadPixels() | 2748 // is an IOSurface-backed texture causes corruption of future glReadPixels() |
| 2749 // calls, even those on different OpenGL contexts. It is believed that this | 2749 // calls, even those on different OpenGL contexts. It is believed that this |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2869 } | 2869 } |
| 2870 } | 2870 } |
| 2871 | 2871 |
| 2872 gl_->UnmapBufferCHROMIUM(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM); | 2872 gl_->UnmapBufferCHROMIUM(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM); |
| 2873 } | 2873 } |
| 2874 gl_->BindBuffer(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM, 0); | 2874 gl_->BindBuffer(GL_PIXEL_PACK_TRANSFER_BUFFER_CHROMIUM, 0); |
| 2875 gl_->DeleteBuffers(1, &source_buffer); | 2875 gl_->DeleteBuffers(1, &source_buffer); |
| 2876 } | 2876 } |
| 2877 | 2877 |
| 2878 if (bitmap) | 2878 if (bitmap) |
| 2879 current_read->copy_request->SendBitmapResult(bitmap.Pass()); | 2879 current_read->copy_request->SendBitmapResult(std::move(bitmap)); |
| 2880 | 2880 |
| 2881 // Conversion from reverse iterator to iterator: | 2881 // Conversion from reverse iterator to iterator: |
| 2882 // Iterator |iter.base() - 1| points to the same element with reverse iterator | 2882 // Iterator |iter.base() - 1| points to the same element with reverse iterator |
| 2883 // |iter|. The difference |-1| is due to the fact of correspondence of end() | 2883 // |iter|. The difference |-1| is due to the fact of correspondence of end() |
| 2884 // with rbegin(). | 2884 // with rbegin(). |
| 2885 pending_async_read_pixels_.erase(iter.base() - 1); | 2885 pending_async_read_pixels_.erase(iter.base() - 1); |
| 2886 } | 2886 } |
| 2887 | 2887 |
| 2888 void GLRenderer::GetFramebufferTexture(unsigned texture_id, | 2888 void GLRenderer::GetFramebufferTexture(unsigned texture_id, |
| 2889 ResourceFormat texture_format, | 2889 ResourceFormat texture_format, |
| (...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3572 texture_id = pending_overlay_resources_.back()->texture_id(); | 3572 texture_id = pending_overlay_resources_.back()->texture_id(); |
| 3573 } | 3573 } |
| 3574 | 3574 |
| 3575 context_support_->ScheduleOverlayPlane( | 3575 context_support_->ScheduleOverlayPlane( |
| 3576 overlay.plane_z_order, overlay.transform, texture_id, | 3576 overlay.plane_z_order, overlay.transform, texture_id, |
| 3577 ToNearestRect(overlay.display_rect), overlay.uv_rect); | 3577 ToNearestRect(overlay.display_rect), overlay.uv_rect); |
| 3578 } | 3578 } |
| 3579 } | 3579 } |
| 3580 | 3580 |
| 3581 } // namespace cc | 3581 } // namespace cc |
| OLD | NEW |