Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(414)

Side by Side Diff: cc/output/overlay_strategy_common.cc

Issue 1142343008: cc: Rework overlays to not use the ResourceProvider and pass texture size (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "cc/output/overlay_strategy_common.h" 5 #include "cc/output/overlay_strategy_common.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "cc/quads/solid_color_draw_quad.h" 9 #include "cc/quads/solid_color_draw_quad.h"
10 #include "cc/quads/stream_video_draw_quad.h" 10 #include "cc/quads/stream_video_draw_quad.h"
11 #include "cc/quads/texture_draw_quad.h" 11 #include "cc/quads/texture_draw_quad.h"
12 #include "ui/gfx/geometry/point3_f.h" 12 #include "ui/gfx/geometry/point3_f.h"
13 #include "ui/gfx/geometry/rect_conversions.h" 13 #include "ui/gfx/geometry/rect_conversions.h"
14 #include "ui/gfx/transform.h" 14 #include "ui/gfx/transform.h"
15 15
16 namespace cc { 16 namespace cc {
17 17
18 OverlayStrategyCommon::OverlayStrategyCommon( 18 OverlayStrategyCommon::OverlayStrategyCommon() {
19 OverlayCandidateValidator* capability_checker,
20 ResourceProvider* resource_provider)
21 : capability_checker_(capability_checker),
22 resource_provider_(resource_provider) {
23 } 19 }
24 20
25 OverlayStrategyCommon::~OverlayStrategyCommon() { 21 OverlayStrategyCommon::~OverlayStrategyCommon() {
26 } 22 }
27 23
28 bool OverlayStrategyCommon::IsOverlayQuad(const DrawQuad* draw_quad) { 24 bool OverlayStrategyCommon::IsOverlayQuad(const DrawQuad* draw_quad) {
29 unsigned int resource_id;
30 switch (draw_quad->material) { 25 switch (draw_quad->material) {
31 case DrawQuad::TEXTURE_CONTENT: 26 case DrawQuad::TEXTURE_CONTENT:
32 resource_id = TextureDrawQuad::MaterialCast(draw_quad)->resource_id; 27 return TextureDrawQuad::MaterialCast(draw_quad)->allow_overlay;
33 break; 28 break;
34 case DrawQuad::STREAM_VIDEO_CONTENT: 29 case DrawQuad::STREAM_VIDEO_CONTENT:
35 resource_id = StreamVideoDrawQuad::MaterialCast(draw_quad)->resource_id; 30 return StreamVideoDrawQuad::MaterialCast(draw_quad)->allow_overlay;
36 break; 31 break;
37 default: 32 default:
38 return false; 33 return false;
39 } 34 }
40 return resource_provider_->AllowOverlay(resource_id);
41 } 35 }
42 36
43 bool OverlayStrategyCommon::IsInvisibleQuad(const DrawQuad* draw_quad) { 37 bool OverlayStrategyCommon::IsInvisibleQuad(const DrawQuad* draw_quad) {
44 if (draw_quad->material == DrawQuad::SOLID_COLOR) { 38 if (draw_quad->material == DrawQuad::SOLID_COLOR) {
45 const SolidColorDrawQuad* solid_quad = 39 const SolidColorDrawQuad* solid_quad =
46 SolidColorDrawQuad::MaterialCast(draw_quad); 40 SolidColorDrawQuad::MaterialCast(draw_quad);
47 SkColor color = solid_quad->color; 41 SkColor color = solid_quad->color;
48 float opacity = solid_quad->opacity(); 42 float opacity = solid_quad->opacity();
49 float alpha = (SkColorGetA(color) * (1.0f / 255.0f)) * opacity; 43 float alpha = (SkColorGetA(color) * (1.0f / 255.0f)) * opacity;
50 return solid_quad->ShouldDrawWithBlending() && 44 return solid_quad->ShouldDrawWithBlending() &&
51 alpha < std::numeric_limits<float>::epsilon(); 45 alpha < std::numeric_limits<float>::epsilon();
52 } 46 }
53 return false; 47 return false;
54 } 48 }
55 49
56 bool OverlayStrategyCommon::GetTextureQuadInfo(const TextureDrawQuad& quad, 50 bool OverlayStrategyCommon::GetTextureQuadInfo(const TextureDrawQuad& quad,
57 OverlayCandidate* quad_info) { 51 OverlayCandidate* quad_info) {
58 gfx::OverlayTransform overlay_transform = 52 gfx::OverlayTransform overlay_transform =
59 OverlayCandidate::GetOverlayTransform(quad.quadTransform(), 53 OverlayCandidate::GetOverlayTransform(quad.quadTransform(),
60 quad.y_flipped); 54 quad.y_flipped);
61 if (quad.background_color != SK_ColorTRANSPARENT || 55 if (quad.background_color != SK_ColorTRANSPARENT ||
62 quad.premultiplied_alpha || 56 quad.premultiplied_alpha ||
63 overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID) 57 overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID)
64 return false; 58 return false;
65 quad_info->resource_id = quad.resource_id; 59 quad_info->resource_id = quad.resource_id;
60 quad_info->resource_size_in_pixels = quad.resource_size_in_pixels;
66 quad_info->transform = overlay_transform; 61 quad_info->transform = overlay_transform;
67 quad_info->uv_rect = BoundingRect(quad.uv_top_left, quad.uv_bottom_right); 62 quad_info->uv_rect = BoundingRect(quad.uv_top_left, quad.uv_bottom_right);
68 return true; 63 return true;
69 } 64 }
70 65
71 bool OverlayStrategyCommon::GetVideoQuadInfo(const StreamVideoDrawQuad& quad, 66 bool OverlayStrategyCommon::GetVideoQuadInfo(const StreamVideoDrawQuad& quad,
72 OverlayCandidate* quad_info) { 67 OverlayCandidate* quad_info) {
73 gfx::OverlayTransform overlay_transform = 68 gfx::OverlayTransform overlay_transform =
74 OverlayCandidate::GetOverlayTransform(quad.quadTransform(), false); 69 OverlayCandidate::GetOverlayTransform(quad.quadTransform(), false);
75 if (overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID) 70 if (overlay_transform == gfx::OVERLAY_TRANSFORM_INVALID)
76 return false; 71 return false;
77 if (!quad.matrix.IsScaleOrTranslation()) { 72 if (!quad.matrix.IsScaleOrTranslation()) {
78 // We cannot handle anything other than scaling & translation for texture 73 // We cannot handle anything other than scaling & translation for texture
79 // coordinates yet. 74 // coordinates yet.
80 return false; 75 return false;
81 } 76 }
82 quad_info->resource_id = quad.resource_id; 77 quad_info->resource_id = quad.resource_id;
78 quad_info->resource_size_in_pixels = quad.resource_size_in_pixels;
83 quad_info->transform = overlay_transform; 79 quad_info->transform = overlay_transform;
84 80
85 gfx::Point3F uv0 = gfx::Point3F(0, 0, 0); 81 gfx::Point3F uv0 = gfx::Point3F(0, 0, 0);
86 gfx::Point3F uv1 = gfx::Point3F(1, 1, 0); 82 gfx::Point3F uv1 = gfx::Point3F(1, 1, 0);
87 quad.matrix.TransformPoint(&uv0); 83 quad.matrix.TransformPoint(&uv0);
88 quad.matrix.TransformPoint(&uv1); 84 quad.matrix.TransformPoint(&uv1);
89 gfx::Vector3dF delta = uv1 - uv0; 85 gfx::Vector3dF delta = uv1 - uv0;
90 if (delta.x() < 0) { 86 if (delta.x() < 0) {
91 quad_info->transform = OverlayCandidate::ModifyTransform( 87 quad_info->transform = OverlayCandidate::ModifyTransform(
92 quad_info->transform, gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL); 88 quad_info->transform, gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 return false; 123 return false;
128 } 124 }
129 125
130 quad_info->format = RGBA_8888; 126 quad_info->format = RGBA_8888;
131 quad_info->display_rect = OverlayCandidate::GetOverlayRect( 127 quad_info->display_rect = OverlayCandidate::GetOverlayRect(
132 draw_quad.quadTransform(), draw_quad.rect); 128 draw_quad.quadTransform(), draw_quad.rect);
133 return true; 129 return true;
134 } 130 }
135 131
136 } // namespace cc 132 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698