| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/bitmap_uploader/bitmap_uploader.h" | 5 #include "components/bitmap_uploader/bitmap_uploader.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/callback.h" | 11 #include "base/callback.h" |
| 12 #include "cc/ipc/compositor_frame.mojom.h" | 12 #include "cc/ipc/compositor_frame.mojom.h" |
| 13 #include "cc/quads/render_pass.h" | 13 #include "cc/quads/render_pass.h" |
| 14 #include "cc/quads/solid_color_draw_quad.h" | 14 #include "cc/quads/solid_color_draw_quad.h" |
| 15 #include "cc/quads/texture_draw_quad.h" | 15 #include "cc/quads/texture_draw_quad.h" |
| 16 #include "components/mus/public/cpp/gles2_context.h" | 16 #include "components/mus/public/cpp/gles2_context.h" |
| 17 #include "components/mus/public/cpp/surfaces/surfaces_type_converters.h" | |
| 18 #include "components/mus/public/cpp/window.h" | 17 #include "components/mus/public/cpp/window.h" |
| 19 #include "components/mus/public/cpp/window_surface.h" | 18 #include "components/mus/public/cpp/window_surface.h" |
| 20 | 19 |
| 21 namespace bitmap_uploader { | 20 namespace bitmap_uploader { |
| 22 namespace { | 21 namespace { |
| 23 | 22 |
| 24 const uint32_t g_transparent_color = 0x00000000; | 23 const uint32_t g_transparent_color = 0x00000000; |
| 25 | 24 |
| 26 } // namespace | 25 } // namespace |
| 27 | 26 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 height_ = height; | 67 height_ = height; |
| 69 bitmap_ = std::move(data); | 68 bitmap_ = std::move(data); |
| 70 format_ = format; | 69 format_ = format; |
| 71 if (surface_) | 70 if (surface_) |
| 72 Upload(); | 71 Upload(); |
| 73 } | 72 } |
| 74 | 73 |
| 75 void BitmapUploader::Upload() { | 74 void BitmapUploader::Upload() { |
| 76 const gfx::Rect bounds(window_->bounds().size()); | 75 const gfx::Rect bounds(window_->bounds().size()); |
| 77 | 76 |
| 78 cc::mojom::CompositorFramePtr frame = cc::mojom::CompositorFrame::New(); | 77 std::unique_ptr<cc::CompositorFrame> frame(cc::CompositorFrame::Create()); |
| 79 // TODO(rjkroege): Support device scale factors other than 1. | 78 // TODO(rjkroege): Support device scale factors other than 1. |
| 80 frame->metadata.device_scale_factor = 1.0f; | 79 frame->metadata.device_scale_factor = 1.0f; |
| 81 frame->resources.resize(0u); | 80 frame->delegated_frame_data.reset(new cc::DelegatedFrameData()); |
| 81 frame->delegated_frame_data->resource_list.resize(0u); |
| 82 | 82 |
| 83 cc::RenderPassId render_pass_id(1, 1); | 83 cc::RenderPassId render_pass_id(1, 1); |
| 84 std::unique_ptr<cc::RenderPass> pass = cc::RenderPass::Create(); | 84 std::unique_ptr<cc::RenderPass> pass = cc::RenderPass::Create(); |
| 85 pass->SetAll(cc::RenderPassId(1, 1), bounds, bounds, gfx::Transform(), | 85 pass->SetAll(cc::RenderPassId(1, 1), bounds, bounds, gfx::Transform(), |
| 86 true /* has_transparent_background */); | 86 true /* has_transparent_background */); |
| 87 | 87 |
| 88 // The SharedQuadState is owned by the SharedQuadStateList | 88 // The SharedQuadState is owned by the SharedQuadStateList |
| 89 // shared_quad_state_list. | 89 // shared_quad_state_list. |
| 90 cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); | 90 cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
| 91 sqs->SetAll(gfx::Transform(), bounds.size(), bounds, bounds, | 91 sqs->SetAll(gfx::Transform(), bounds.size(), bounds, bounds, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 114 resource.id = next_resource_id_++; | 114 resource.id = next_resource_id_++; |
| 115 resource_to_texture_id_map_[resource.id] = texture_id; | 115 resource_to_texture_id_map_[resource.id] = texture_id; |
| 116 resource.format = cc::ResourceFormat::RGBA_8888; | 116 resource.format = cc::ResourceFormat::RGBA_8888; |
| 117 resource.filter = GL_LINEAR; | 117 resource.filter = GL_LINEAR; |
| 118 resource.size = bitmap_size; | 118 resource.size = bitmap_size; |
| 119 resource.mailbox_holder = | 119 resource.mailbox_holder = |
| 120 gpu::MailboxHolder(mailbox, sync_token, GL_TEXTURE_2D); | 120 gpu::MailboxHolder(mailbox, sync_token, GL_TEXTURE_2D); |
| 121 resource.read_lock_fences_enabled = false; | 121 resource.read_lock_fences_enabled = false; |
| 122 resource.is_software = false; | 122 resource.is_software = false; |
| 123 resource.is_overlay_candidate = false; | 123 resource.is_overlay_candidate = false; |
| 124 frame->resources.push_back(std::move(resource)); | 124 frame->delegated_frame_data->resource_list.push_back(std::move(resource)); |
| 125 | 125 |
| 126 cc::TextureDrawQuad* quad = | 126 cc::TextureDrawQuad* quad = |
| 127 pass->CreateAndAppendDrawQuad<cc::TextureDrawQuad>(); | 127 pass->CreateAndAppendDrawQuad<cc::TextureDrawQuad>(); |
| 128 | 128 |
| 129 gfx::Size rect_size; | 129 gfx::Size rect_size; |
| 130 if (width_ <= bounds.width() && height_ <= bounds.height()) { | 130 if (width_ <= bounds.width() && height_ <= bounds.height()) { |
| 131 rect_size.SetSize(width_, height_); | 131 rect_size.SetSize(width_, height_); |
| 132 } else { | 132 } else { |
| 133 // The source bitmap is larger than the viewport. Resize it while | 133 // The source bitmap is larger than the viewport. Resize it while |
| 134 // maintaining the aspect ratio. | 134 // maintaining the aspect ratio. |
| (...skipping 22 matching lines...) Expand all Loading... |
| 157 if (color_ != g_transparent_color) { | 157 if (color_ != g_transparent_color) { |
| 158 cc::SolidColorDrawQuad* quad = | 158 cc::SolidColorDrawQuad* quad = |
| 159 pass->CreateAndAppendDrawQuad<cc::SolidColorDrawQuad>(); | 159 pass->CreateAndAppendDrawQuad<cc::SolidColorDrawQuad>(); |
| 160 const bool force_antialiasing_off = false; | 160 const bool force_antialiasing_off = false; |
| 161 const gfx::Rect opaque_rect(0, 0, 0, 0); | 161 const gfx::Rect opaque_rect(0, 0, 0, 0); |
| 162 const bool needs_blending = true; | 162 const bool needs_blending = true; |
| 163 quad->SetAll(sqs, bounds, opaque_rect, bounds, needs_blending, color_, | 163 quad->SetAll(sqs, bounds, opaque_rect, bounds, needs_blending, color_, |
| 164 force_antialiasing_off); | 164 force_antialiasing_off); |
| 165 } | 165 } |
| 166 | 166 |
| 167 frame->passes.push_back(std::move(pass)); | 167 frame->delegated_frame_data->render_pass_list.push_back(std::move(pass)); |
| 168 | 168 |
| 169 // TODO(rjkroege, fsamuel): We should throttle frames. | 169 // TODO(rjkroege, fsamuel): We should throttle frames. |
| 170 surface_->SubmitCompositorFrame(std::move(frame), base::Closure()); | 170 surface_->SubmitCompositorFrame(std::move(frame), base::Closure()); |
| 171 } | 171 } |
| 172 | 172 |
| 173 uint32_t BitmapUploader::BindTextureForSize(const gfx::Size& size) { | 173 uint32_t BitmapUploader::BindTextureForSize(const gfx::Size& size) { |
| 174 gpu::gles2::GLES2Interface* gl = gles2_context_->interface(); | 174 gpu::gles2::GLES2Interface* gl = gles2_context_->interface(); |
| 175 // TODO(jamesr): Recycle textures. | 175 // TODO(jamesr): Recycle textures. |
| 176 GLuint texture = 0u; | 176 GLuint texture = 0u; |
| 177 gl->GenTextures(1, &texture); | 177 gl->GenTextures(1, &texture); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 198 DCHECK_EQ(1, resource.count); | 198 DCHECK_EQ(1, resource.count); |
| 199 gl->WaitSyncTokenCHROMIUM(resource.sync_token.GetConstData()); | 199 gl->WaitSyncTokenCHROMIUM(resource.sync_token.GetConstData()); |
| 200 uint32_t texture_id = resource_to_texture_id_map_[resource.id]; | 200 uint32_t texture_id = resource_to_texture_id_map_[resource.id]; |
| 201 DCHECK_NE(0u, texture_id); | 201 DCHECK_NE(0u, texture_id); |
| 202 resource_to_texture_id_map_.erase(resource.id); | 202 resource_to_texture_id_map_.erase(resource.id); |
| 203 gl->DeleteTextures(1, &texture_id); | 203 gl->DeleteTextures(1, &texture_id); |
| 204 } | 204 } |
| 205 } | 205 } |
| 206 | 206 |
| 207 } // namespace bitmap_uploader | 207 } // namespace bitmap_uploader |
| OLD | NEW |