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 "components/mus/public/cpp/surfaces/surfaces_type_converters.h" | 5 #include "components/mus/public/cpp/surfaces/surfaces_type_converters.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <utility> | 10 #include <utility> |
11 | 11 |
12 #include "base/macros.h" | 12 #include "base/macros.h" |
13 #include "cc/output/compositor_frame.h" | 13 #include "cc/output/compositor_frame.h" |
14 #include "cc/output/compositor_frame_metadata.h" | 14 #include "cc/output/compositor_frame_metadata.h" |
15 #include "cc/output/delegated_frame_data.h" | 15 #include "cc/output/delegated_frame_data.h" |
16 #include "cc/quads/debug_border_draw_quad.h" | 16 #include "cc/quads/debug_border_draw_quad.h" |
17 #include "cc/quads/draw_quad.h" | 17 #include "cc/quads/draw_quad.h" |
18 #include "cc/quads/render_pass.h" | 18 #include "cc/quads/render_pass.h" |
19 #include "cc/quads/render_pass_draw_quad.h" | 19 #include "cc/quads/render_pass_draw_quad.h" |
20 #include "cc/quads/shared_quad_state.h" | 20 #include "cc/quads/shared_quad_state.h" |
21 #include "cc/quads/solid_color_draw_quad.h" | 21 #include "cc/quads/solid_color_draw_quad.h" |
22 #include "cc/quads/surface_draw_quad.h" | 22 #include "cc/quads/surface_draw_quad.h" |
23 #include "cc/quads/texture_draw_quad.h" | 23 #include "cc/quads/texture_draw_quad.h" |
24 #include "cc/quads/tile_draw_quad.h" | 24 #include "cc/quads/tile_draw_quad.h" |
25 #include "cc/quads/yuv_video_draw_quad.h" | 25 #include "cc/quads/yuv_video_draw_quad.h" |
26 #include "cc/surfaces/surface_id_allocator.h" | 26 #include "cc/surfaces/surface_id_allocator.h" |
27 #include "components/mus/public/cpp/surfaces/custom_surface_converter.h" | 27 #include "components/mus/public/cpp/surfaces/custom_surface_converter.h" |
28 #include "ui/gfx/geometry/mojo/geometry_type_converters.h" | |
29 #include "ui/gfx/mojo/transform_type_converters.h" | 28 #include "ui/gfx/mojo/transform_type_converters.h" |
30 | 29 |
31 using mus::mojom::Color; | 30 using mus::mojom::Color; |
32 using mus::mojom::ColorPtr; | 31 using mus::mojom::ColorPtr; |
33 using mus::mojom::CompositorFrame; | 32 using mus::mojom::CompositorFrame; |
34 using mus::mojom::CompositorFramePtr; | 33 using mus::mojom::CompositorFramePtr; |
35 using mus::mojom::CompositorFrameMetadata; | 34 using mus::mojom::CompositorFrameMetadata; |
36 using mus::mojom::CompositorFrameMetadataPtr; | 35 using mus::mojom::CompositorFrameMetadataPtr; |
37 using mus::mojom::DebugBorderQuadState; | 36 using mus::mojom::DebugBorderQuadState; |
38 using mus::mojom::DebugBorderQuadStatePtr; | 37 using mus::mojom::DebugBorderQuadStatePtr; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 // TODO(jamesr): Add REC_709 and JPEG to the YUVColorSpace enum upstream in | 84 // TODO(jamesr): Add REC_709 and JPEG to the YUVColorSpace enum upstream in |
86 // mojo. | 85 // mojo. |
87 | 86 |
88 namespace { | 87 namespace { |
89 | 88 |
90 cc::SharedQuadState* ConvertSharedQuadState( | 89 cc::SharedQuadState* ConvertSharedQuadState( |
91 const mus::mojom::SharedQuadStatePtr& input, | 90 const mus::mojom::SharedQuadStatePtr& input, |
92 cc::RenderPass* render_pass) { | 91 cc::RenderPass* render_pass) { |
93 cc::SharedQuadState* state = render_pass->CreateAndAppendSharedQuadState(); | 92 cc::SharedQuadState* state = render_pass->CreateAndAppendSharedQuadState(); |
94 state->SetAll(input->quad_to_target_transform.To<gfx::Transform>(), | 93 state->SetAll(input->quad_to_target_transform.To<gfx::Transform>(), |
95 input->quad_layer_bounds.To<gfx::Size>(), | 94 input->quad_layer_bounds, input->visible_quad_layer_rect, |
96 input->visible_quad_layer_rect.To<gfx::Rect>(), | 95 input->clip_rect, input->is_clipped, input->opacity, |
97 input->clip_rect.To<gfx::Rect>(), input->is_clipped, | |
98 input->opacity, | |
99 static_cast<::SkXfermode::Mode>(input->blend_mode), | 96 static_cast<::SkXfermode::Mode>(input->blend_mode), |
100 input->sorting_context_id); | 97 input->sorting_context_id); |
101 return state; | 98 return state; |
102 } | 99 } |
103 | 100 |
104 bool ConvertDrawQuad(const QuadPtr& input, | 101 bool ConvertDrawQuad(const QuadPtr& input, |
105 const CompositorFrameMetadataPtr& metadata, | 102 const CompositorFrameMetadataPtr& metadata, |
106 cc::SharedQuadState* sqs, | 103 cc::SharedQuadState* sqs, |
107 cc::RenderPass* render_pass, | 104 cc::RenderPass* render_pass, |
108 CustomSurfaceConverter* custom_converter) { | 105 CustomSurfaceConverter* custom_converter) { |
109 switch (input->material) { | 106 switch (input->material) { |
110 case mus::mojom::Material::DEBUG_BORDER: { | 107 case mus::mojom::Material::DEBUG_BORDER: { |
111 cc::DebugBorderDrawQuad* debug_border_quad = | 108 cc::DebugBorderDrawQuad* debug_border_quad = |
112 render_pass->CreateAndAppendDrawQuad<cc::DebugBorderDrawQuad>(); | 109 render_pass->CreateAndAppendDrawQuad<cc::DebugBorderDrawQuad>(); |
113 debug_border_quad->SetAll( | 110 debug_border_quad->SetAll( |
114 sqs, | 111 sqs, input->rect, input->opaque_rect, input->visible_rect, |
115 input->rect.To<gfx::Rect>(), | |
116 input->opaque_rect.To<gfx::Rect>(), | |
117 input->visible_rect.To<gfx::Rect>(), | |
118 input->needs_blending, | 112 input->needs_blending, |
119 input->debug_border_quad_state->color.To<SkColor>(), | 113 input->debug_border_quad_state->color.To<SkColor>(), |
120 input->debug_border_quad_state->width); | 114 input->debug_border_quad_state->width); |
121 break; | 115 break; |
122 } | 116 } |
123 case mus::mojom::Material::RENDER_PASS: { | 117 case mus::mojom::Material::RENDER_PASS: { |
124 cc::RenderPassDrawQuad* render_pass_quad = | 118 cc::RenderPassDrawQuad* render_pass_quad = |
125 render_pass->CreateAndAppendDrawQuad<cc::RenderPassDrawQuad>(); | 119 render_pass->CreateAndAppendDrawQuad<cc::RenderPassDrawQuad>(); |
126 RenderPassQuadState* render_pass_quad_state = | 120 RenderPassQuadState* render_pass_quad_state = |
127 input->render_pass_quad_state.get(); | 121 input->render_pass_quad_state.get(); |
128 gfx::PointF mask_uv_scale_as_point = | |
129 render_pass_quad_state->mask_uv_scale.To<gfx::PointF>(); | |
130 gfx::PointF filter_scale_as_point = | |
131 render_pass_quad_state->filters_scale.To<gfx::PointF>(); | |
132 render_pass_quad->SetAll( | 122 render_pass_quad->SetAll( |
133 sqs, input->rect.To<gfx::Rect>(), input->opaque_rect.To<gfx::Rect>(), | 123 sqs, input->rect, input->opaque_rect, input->visible_rect, |
134 input->visible_rect.To<gfx::Rect>(), input->needs_blending, | 124 input->needs_blending, render_pass_quad_state->render_pass_id, |
135 render_pass_quad_state->render_pass_id, | |
136 render_pass_quad_state->mask_resource_id, | 125 render_pass_quad_state->mask_resource_id, |
137 mask_uv_scale_as_point.OffsetFromOrigin(), | 126 render_pass_quad_state->mask_uv_scale.OffsetFromOrigin(), |
138 render_pass_quad_state->mask_texture_size.To<gfx::Size>(), | 127 render_pass_quad_state->mask_texture_size, |
139 cc::FilterOperations(), // TODO(jamesr): filters | 128 cc::FilterOperations(), // TODO(jamesr): filters |
140 filter_scale_as_point.OffsetFromOrigin(), | 129 render_pass_quad_state->filters_scale.OffsetFromOrigin(), |
141 cc::FilterOperations()); // TODO(jamesr): background_filters | 130 cc::FilterOperations()); // TODO(jamesr): background_filters |
142 break; | 131 break; |
143 } | 132 } |
144 case mus::mojom::Material::SOLID_COLOR: { | 133 case mus::mojom::Material::SOLID_COLOR: { |
145 if (input->solid_color_quad_state.is_null()) | 134 if (input->solid_color_quad_state.is_null()) |
146 return false; | 135 return false; |
147 cc::SolidColorDrawQuad* color_quad = | 136 cc::SolidColorDrawQuad* color_quad = |
148 render_pass->CreateAndAppendDrawQuad<cc::SolidColorDrawQuad>(); | 137 render_pass->CreateAndAppendDrawQuad<cc::SolidColorDrawQuad>(); |
149 color_quad->SetAll( | 138 color_quad->SetAll( |
150 sqs, | 139 sqs, input->rect, input->opaque_rect, input->visible_rect, |
151 input->rect.To<gfx::Rect>(), | |
152 input->opaque_rect.To<gfx::Rect>(), | |
153 input->visible_rect.To<gfx::Rect>(), | |
154 input->needs_blending, | 140 input->needs_blending, |
155 input->solid_color_quad_state->color.To<SkColor>(), | 141 input->solid_color_quad_state->color.To<SkColor>(), |
156 input->solid_color_quad_state->force_anti_aliasing_off); | 142 input->solid_color_quad_state->force_anti_aliasing_off); |
157 break; | 143 break; |
158 } | 144 } |
159 case mus::mojom::Material::SURFACE_CONTENT: { | 145 case mus::mojom::Material::SURFACE_CONTENT: { |
160 if (input->surface_quad_state.is_null()) | 146 if (input->surface_quad_state.is_null()) |
161 return false; | 147 return false; |
162 | 148 |
163 if (custom_converter) { | 149 if (custom_converter) { |
164 return custom_converter->ConvertSurfaceDrawQuad(input, metadata, sqs, | 150 return custom_converter->ConvertSurfaceDrawQuad(input, metadata, sqs, |
165 render_pass); | 151 render_pass); |
166 } | 152 } |
167 cc::SurfaceDrawQuad* surface_quad = | 153 cc::SurfaceDrawQuad* surface_quad = |
168 render_pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>(); | 154 render_pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>(); |
169 surface_quad->SetAll( | 155 surface_quad->SetAll( |
170 sqs, input->rect.To<gfx::Rect>(), input->opaque_rect.To<gfx::Rect>(), | 156 sqs, input->rect, input->opaque_rect, input->visible_rect, |
171 input->visible_rect.To<gfx::Rect>(), input->needs_blending, | 157 input->needs_blending, input->surface_quad_state->surface); |
172 input->surface_quad_state->surface); | |
173 break; | 158 break; |
174 } | 159 } |
175 case mus::mojom::Material::TEXTURE_CONTENT: { | 160 case mus::mojom::Material::TEXTURE_CONTENT: { |
176 TextureQuadStatePtr& texture_quad_state = | 161 TextureQuadStatePtr& texture_quad_state = |
177 input->texture_quad_state; | 162 input->texture_quad_state; |
178 if (texture_quad_state.is_null() || | 163 if (texture_quad_state.is_null() || |
179 texture_quad_state->vertex_opacity.is_null() || | 164 texture_quad_state->vertex_opacity.is_null() || |
180 texture_quad_state->background_color.is_null()) | 165 texture_quad_state->background_color.is_null()) |
181 return false; | 166 return false; |
182 cc::TextureDrawQuad* texture_quad = | 167 cc::TextureDrawQuad* texture_quad = |
183 render_pass->CreateAndAppendDrawQuad<cc::TextureDrawQuad>(); | 168 render_pass->CreateAndAppendDrawQuad<cc::TextureDrawQuad>(); |
184 texture_quad->SetAll( | 169 texture_quad->SetAll( |
185 sqs, input->rect.To<gfx::Rect>(), input->opaque_rect.To<gfx::Rect>(), | 170 sqs, input->rect, input->opaque_rect, input->visible_rect, |
186 input->visible_rect.To<gfx::Rect>(), input->needs_blending, | 171 input->needs_blending, texture_quad_state->resource_id, gfx::Size(), |
187 texture_quad_state->resource_id, gfx::Size(), | |
188 texture_quad_state->premultiplied_alpha, | 172 texture_quad_state->premultiplied_alpha, |
189 texture_quad_state->uv_top_left.To<gfx::PointF>(), | 173 texture_quad_state->uv_top_left, texture_quad_state->uv_bottom_right, |
190 texture_quad_state->uv_bottom_right.To<gfx::PointF>(), | |
191 texture_quad_state->background_color.To<SkColor>(), | 174 texture_quad_state->background_color.To<SkColor>(), |
192 &texture_quad_state->vertex_opacity.storage()[0], | 175 &texture_quad_state->vertex_opacity.storage()[0], |
193 texture_quad_state->y_flipped, texture_quad_state->nearest_neighbor, | 176 texture_quad_state->y_flipped, texture_quad_state->nearest_neighbor, |
194 texture_quad_state->secure_output_only); | 177 texture_quad_state->secure_output_only); |
195 break; | 178 break; |
196 } | 179 } |
197 case mus::mojom::Material::TILED_CONTENT: { | 180 case mus::mojom::Material::TILED_CONTENT: { |
198 TileQuadStatePtr& tile_state = input->tile_quad_state; | 181 TileQuadStatePtr& tile_state = input->tile_quad_state; |
199 if (tile_state.is_null()) | 182 if (tile_state.is_null()) |
200 return false; | 183 return false; |
201 cc::TileDrawQuad* tile_quad = | 184 cc::TileDrawQuad* tile_quad = |
202 render_pass->CreateAndAppendDrawQuad<cc::TileDrawQuad>(); | 185 render_pass->CreateAndAppendDrawQuad<cc::TileDrawQuad>(); |
203 tile_quad->SetAll(sqs, | 186 tile_quad->SetAll(sqs, input->rect, input->opaque_rect, |
204 input->rect.To<gfx::Rect>(), | 187 input->visible_rect, input->needs_blending, |
205 input->opaque_rect.To<gfx::Rect>(), | 188 tile_state->resource_id, tile_state->tex_coord_rect, |
206 input->visible_rect.To<gfx::Rect>(), | 189 tile_state->texture_size, tile_state->swizzle_contents, |
207 input->needs_blending, | |
208 tile_state->resource_id, | |
209 tile_state->tex_coord_rect.To<gfx::RectF>(), | |
210 tile_state->texture_size.To<gfx::Size>(), | |
211 tile_state->swizzle_contents, | |
212 tile_state->nearest_neighbor); | 190 tile_state->nearest_neighbor); |
213 break; | 191 break; |
214 } | 192 } |
215 case mus::mojom::Material::YUV_VIDEO_CONTENT: { | 193 case mus::mojom::Material::YUV_VIDEO_CONTENT: { |
216 YUVVideoQuadStatePtr& yuv_state = input->yuv_video_quad_state; | 194 YUVVideoQuadStatePtr& yuv_state = input->yuv_video_quad_state; |
217 if (yuv_state.is_null()) | 195 if (yuv_state.is_null()) |
218 return false; | 196 return false; |
219 cc::YUVVideoDrawQuad* yuv_quad = | 197 cc::YUVVideoDrawQuad* yuv_quad = |
220 render_pass->CreateAndAppendDrawQuad<cc::YUVVideoDrawQuad>(); | 198 render_pass->CreateAndAppendDrawQuad<cc::YUVVideoDrawQuad>(); |
221 yuv_quad->SetAll( | 199 yuv_quad->SetAll( |
222 sqs, input->rect.To<gfx::Rect>(), input->opaque_rect.To<gfx::Rect>(), | 200 sqs, input->rect, input->opaque_rect, input->visible_rect, |
223 input->visible_rect.To<gfx::Rect>(), input->needs_blending, | 201 input->needs_blending, yuv_state->ya_tex_coord_rect, |
224 yuv_state->ya_tex_coord_rect.To<gfx::RectF>(), | 202 yuv_state->uv_tex_coord_rect, yuv_state->ya_tex_size, |
225 yuv_state->uv_tex_coord_rect.To<gfx::RectF>(), | 203 yuv_state->uv_tex_size, yuv_state->y_plane_resource_id, |
226 yuv_state->ya_tex_size.To<gfx::Size>(), | 204 yuv_state->u_plane_resource_id, yuv_state->v_plane_resource_id, |
227 yuv_state->uv_tex_size.To<gfx::Size>(), | 205 yuv_state->a_plane_resource_id, |
228 yuv_state->y_plane_resource_id, yuv_state->u_plane_resource_id, | 206 static_cast<cc::YUVVideoDrawQuad::ColorSpace>(yuv_state->color_space), |
229 yuv_state->v_plane_resource_id, yuv_state->a_plane_resource_id, | 207 yuv_state->resource_offset, yuv_state->resource_multiplier); |
230 static_cast<cc::YUVVideoDrawQuad::ColorSpace>( | |
231 yuv_state->color_space), | |
232 yuv_state->resource_offset, | |
233 yuv_state->resource_multiplier); | |
234 break; | 208 break; |
235 } | 209 } |
236 default: | 210 default: |
237 NOTREACHED() << "Unsupported material " << input->material; | 211 NOTREACHED() << "Unsupported material " << input->material; |
238 return false; | 212 return false; |
239 } | 213 } |
240 return true; | 214 return true; |
241 } | 215 } |
242 | 216 |
243 } // namespace | 217 } // namespace |
244 | 218 |
245 // static | 219 // static |
246 ColorPtr TypeConverter<ColorPtr, SkColor>::Convert(const SkColor& input) { | 220 ColorPtr TypeConverter<ColorPtr, SkColor>::Convert(const SkColor& input) { |
247 ColorPtr color(Color::New()); | 221 ColorPtr color(Color::New()); |
248 color->rgba = input; | 222 color->rgba = input; |
249 return color; | 223 return color; |
250 } | 224 } |
251 | 225 |
252 // static | 226 // static |
253 SkColor TypeConverter<SkColor, ColorPtr>::Convert(const ColorPtr& input) { | 227 SkColor TypeConverter<SkColor, ColorPtr>::Convert(const ColorPtr& input) { |
254 return input->rgba; | 228 return input->rgba; |
255 } | 229 } |
256 | 230 |
257 // static | 231 // static |
258 QuadPtr TypeConverter<QuadPtr, cc::DrawQuad>::Convert( | 232 QuadPtr TypeConverter<QuadPtr, cc::DrawQuad>::Convert( |
259 const cc::DrawQuad& input) { | 233 const cc::DrawQuad& input) { |
260 QuadPtr quad = Quad::New(); | 234 QuadPtr quad = Quad::New(); |
261 quad->material = static_cast<mus::mojom::Material>(input.material); | 235 quad->material = static_cast<mus::mojom::Material>(input.material); |
262 quad->rect = Rect::From(input.rect); | 236 quad->rect = input.rect; |
263 quad->opaque_rect = Rect::From(input.opaque_rect); | 237 quad->opaque_rect = input.opaque_rect; |
264 quad->visible_rect = Rect::From(input.visible_rect); | 238 quad->visible_rect = input.visible_rect; |
265 quad->needs_blending = input.needs_blending; | 239 quad->needs_blending = input.needs_blending; |
266 // This is intentionally left set to an invalid value here. It's set when | 240 // This is intentionally left set to an invalid value here. It's set when |
267 // converting an entire pass since it's an index into the pass' shared quad | 241 // converting an entire pass since it's an index into the pass' shared quad |
268 // state list. | 242 // state list. |
269 quad->shared_quad_state_index = UINT32_MAX; | 243 quad->shared_quad_state_index = UINT32_MAX; |
270 switch (input.material) { | 244 switch (input.material) { |
271 case cc::DrawQuad::DEBUG_BORDER: { | 245 case cc::DrawQuad::DEBUG_BORDER: { |
272 const cc::DebugBorderDrawQuad* debug_border_quad = | 246 const cc::DebugBorderDrawQuad* debug_border_quad = |
273 cc::DebugBorderDrawQuad::MaterialCast(&input); | 247 cc::DebugBorderDrawQuad::MaterialCast(&input); |
274 DebugBorderQuadStatePtr debug_border_state = | 248 DebugBorderQuadStatePtr debug_border_state = |
275 DebugBorderQuadState::New(); | 249 DebugBorderQuadState::New(); |
276 debug_border_state->color = Color::From(debug_border_quad->color); | 250 debug_border_state->color = Color::From(debug_border_quad->color); |
277 debug_border_state->width = debug_border_quad->width; | 251 debug_border_state->width = debug_border_quad->width; |
278 quad->debug_border_quad_state = std::move(debug_border_state); | 252 quad->debug_border_quad_state = std::move(debug_border_state); |
279 break; | 253 break; |
280 } | 254 } |
281 case cc::DrawQuad::RENDER_PASS: { | 255 case cc::DrawQuad::RENDER_PASS: { |
282 const cc::RenderPassDrawQuad* render_pass_quad = | 256 const cc::RenderPassDrawQuad* render_pass_quad = |
283 cc::RenderPassDrawQuad::MaterialCast(&input); | 257 cc::RenderPassDrawQuad::MaterialCast(&input); |
284 RenderPassQuadStatePtr pass_state = RenderPassQuadState::New(); | 258 RenderPassQuadStatePtr pass_state = RenderPassQuadState::New(); |
285 pass_state->render_pass_id = render_pass_quad->render_pass_id; | 259 pass_state->render_pass_id = render_pass_quad->render_pass_id; |
286 pass_state->mask_resource_id = render_pass_quad->mask_resource_id(); | 260 pass_state->mask_resource_id = render_pass_quad->mask_resource_id(); |
287 pass_state->mask_uv_scale = PointF::From( | 261 pass_state->mask_uv_scale = |
288 gfx::PointAtOffsetFromOrigin(render_pass_quad->mask_uv_scale)); | 262 gfx::PointAtOffsetFromOrigin(render_pass_quad->mask_uv_scale); |
289 pass_state->mask_texture_size = | 263 pass_state->mask_texture_size = render_pass_quad->mask_texture_size; |
290 Size::From(render_pass_quad->mask_texture_size); | |
291 // TODO(jamesr): pass_state->filters | 264 // TODO(jamesr): pass_state->filters |
292 pass_state->filters_scale = PointF::From( | 265 pass_state->filters_scale = |
293 gfx::PointAtOffsetFromOrigin(render_pass_quad->filters_scale)); | 266 gfx::PointAtOffsetFromOrigin(render_pass_quad->filters_scale); |
294 // TODO(jamesr): pass_state->background_filters | 267 // TODO(jamesr): pass_state->background_filters |
295 quad->render_pass_quad_state = std::move(pass_state); | 268 quad->render_pass_quad_state = std::move(pass_state); |
296 break; | 269 break; |
297 } | 270 } |
298 case cc::DrawQuad::SOLID_COLOR: { | 271 case cc::DrawQuad::SOLID_COLOR: { |
299 const cc::SolidColorDrawQuad* color_quad = | 272 const cc::SolidColorDrawQuad* color_quad = |
300 cc::SolidColorDrawQuad::MaterialCast(&input); | 273 cc::SolidColorDrawQuad::MaterialCast(&input); |
301 SolidColorQuadStatePtr color_state = SolidColorQuadState::New(); | 274 SolidColorQuadStatePtr color_state = SolidColorQuadState::New(); |
302 color_state->color = Color::From(color_quad->color); | 275 color_state->color = Color::From(color_quad->color); |
303 color_state->force_anti_aliasing_off = | 276 color_state->force_anti_aliasing_off = |
304 color_quad->force_anti_aliasing_off; | 277 color_quad->force_anti_aliasing_off; |
305 quad->solid_color_quad_state = std::move(color_state); | 278 quad->solid_color_quad_state = std::move(color_state); |
306 break; | 279 break; |
307 } | 280 } |
308 case cc::DrawQuad::SURFACE_CONTENT: { | 281 case cc::DrawQuad::SURFACE_CONTENT: { |
309 const cc::SurfaceDrawQuad* surface_quad = | 282 const cc::SurfaceDrawQuad* surface_quad = |
310 cc::SurfaceDrawQuad::MaterialCast(&input); | 283 cc::SurfaceDrawQuad::MaterialCast(&input); |
311 SurfaceQuadStatePtr surface_state = | 284 SurfaceQuadStatePtr surface_state = |
312 SurfaceQuadState::New(); | 285 SurfaceQuadState::New(); |
313 surface_state->surface = surface_quad->surface_id; | 286 surface_state->surface = surface_quad->surface_id; |
314 quad->surface_quad_state = std::move(surface_state); | 287 quad->surface_quad_state = std::move(surface_state); |
315 break; | 288 break; |
316 } | 289 } |
317 case cc::DrawQuad::TEXTURE_CONTENT: { | 290 case cc::DrawQuad::TEXTURE_CONTENT: { |
318 const cc::TextureDrawQuad* texture_quad = | 291 const cc::TextureDrawQuad* texture_quad = |
319 cc::TextureDrawQuad::MaterialCast(&input); | 292 cc::TextureDrawQuad::MaterialCast(&input); |
320 TextureQuadStatePtr texture_state = TextureQuadState::New(); | 293 TextureQuadStatePtr texture_state = TextureQuadState::New(); |
321 texture_state->resource_id = texture_quad->resource_id(); | 294 texture_state->resource_id = texture_quad->resource_id(); |
322 texture_state->premultiplied_alpha = texture_quad->premultiplied_alpha; | 295 texture_state->premultiplied_alpha = texture_quad->premultiplied_alpha; |
323 texture_state->uv_top_left = PointF::From(texture_quad->uv_top_left); | 296 texture_state->uv_top_left = texture_quad->uv_top_left; |
324 texture_state->uv_bottom_right = | 297 texture_state->uv_bottom_right = texture_quad->uv_bottom_right; |
325 PointF::From(texture_quad->uv_bottom_right); | |
326 texture_state->background_color = | 298 texture_state->background_color = |
327 Color::From(texture_quad->background_color); | 299 Color::From(texture_quad->background_color); |
328 Array<float> vertex_opacity(4); | 300 Array<float> vertex_opacity(4); |
329 for (size_t i = 0; i < 4; ++i) { | 301 for (size_t i = 0; i < 4; ++i) { |
330 vertex_opacity[i] = texture_quad->vertex_opacity[i]; | 302 vertex_opacity[i] = texture_quad->vertex_opacity[i]; |
331 } | 303 } |
332 texture_state->vertex_opacity = std::move(vertex_opacity); | 304 texture_state->vertex_opacity = std::move(vertex_opacity); |
333 texture_state->y_flipped = texture_quad->y_flipped; | 305 texture_state->y_flipped = texture_quad->y_flipped; |
334 texture_state->secure_output_only = texture_quad->secure_output_only; | 306 texture_state->secure_output_only = texture_quad->secure_output_only; |
335 quad->texture_quad_state = std::move(texture_state); | 307 quad->texture_quad_state = std::move(texture_state); |
336 break; | 308 break; |
337 } | 309 } |
338 case cc::DrawQuad::TILED_CONTENT: { | 310 case cc::DrawQuad::TILED_CONTENT: { |
339 const cc::TileDrawQuad* tile_quad = | 311 const cc::TileDrawQuad* tile_quad = |
340 cc::TileDrawQuad::MaterialCast(&input); | 312 cc::TileDrawQuad::MaterialCast(&input); |
341 TileQuadStatePtr tile_state = TileQuadState::New(); | 313 TileQuadStatePtr tile_state = TileQuadState::New(); |
342 tile_state->tex_coord_rect = RectF::From(tile_quad->tex_coord_rect); | 314 tile_state->tex_coord_rect = tile_quad->tex_coord_rect; |
343 tile_state->texture_size = Size::From(tile_quad->texture_size); | 315 tile_state->texture_size = tile_quad->texture_size; |
344 tile_state->swizzle_contents = tile_quad->swizzle_contents; | 316 tile_state->swizzle_contents = tile_quad->swizzle_contents; |
345 tile_state->nearest_neighbor = tile_quad->nearest_neighbor; | 317 tile_state->nearest_neighbor = tile_quad->nearest_neighbor; |
346 tile_state->resource_id = tile_quad->resource_id(); | 318 tile_state->resource_id = tile_quad->resource_id(); |
347 quad->tile_quad_state = std::move(tile_state); | 319 quad->tile_quad_state = std::move(tile_state); |
348 break; | 320 break; |
349 } | 321 } |
350 case cc::DrawQuad::YUV_VIDEO_CONTENT: { | 322 case cc::DrawQuad::YUV_VIDEO_CONTENT: { |
351 const cc::YUVVideoDrawQuad* yuv_quad = | 323 const cc::YUVVideoDrawQuad* yuv_quad = |
352 cc::YUVVideoDrawQuad::MaterialCast(&input); | 324 cc::YUVVideoDrawQuad::MaterialCast(&input); |
353 YUVVideoQuadStatePtr yuv_state = YUVVideoQuadState::New(); | 325 YUVVideoQuadStatePtr yuv_state = YUVVideoQuadState::New(); |
354 yuv_state->ya_tex_coord_rect = RectF::From(yuv_quad->ya_tex_coord_rect); | 326 yuv_state->ya_tex_coord_rect = yuv_quad->ya_tex_coord_rect; |
355 yuv_state->uv_tex_coord_rect = RectF::From(yuv_quad->uv_tex_coord_rect); | 327 yuv_state->uv_tex_coord_rect = yuv_quad->uv_tex_coord_rect; |
356 yuv_state->ya_tex_size = Size::From(yuv_quad->ya_tex_size); | 328 yuv_state->ya_tex_size = yuv_quad->ya_tex_size; |
357 yuv_state->uv_tex_size = Size::From(yuv_quad->uv_tex_size); | 329 yuv_state->uv_tex_size = yuv_quad->uv_tex_size; |
358 yuv_state->y_plane_resource_id = yuv_quad->y_plane_resource_id(); | 330 yuv_state->y_plane_resource_id = yuv_quad->y_plane_resource_id(); |
359 yuv_state->u_plane_resource_id = yuv_quad->u_plane_resource_id(); | 331 yuv_state->u_plane_resource_id = yuv_quad->u_plane_resource_id(); |
360 yuv_state->v_plane_resource_id = yuv_quad->v_plane_resource_id(); | 332 yuv_state->v_plane_resource_id = yuv_quad->v_plane_resource_id(); |
361 yuv_state->a_plane_resource_id = yuv_quad->a_plane_resource_id(); | 333 yuv_state->a_plane_resource_id = yuv_quad->a_plane_resource_id(); |
362 yuv_state->color_space = | 334 yuv_state->color_space = |
363 static_cast<YUVColorSpace>(yuv_quad->color_space); | 335 static_cast<YUVColorSpace>(yuv_quad->color_space); |
364 yuv_state->resource_offset = yuv_quad->resource_offset; | 336 yuv_state->resource_offset = yuv_quad->resource_offset; |
365 yuv_state->resource_multiplier = yuv_quad->resource_multiplier; | 337 yuv_state->resource_multiplier = yuv_quad->resource_multiplier; |
366 quad->yuv_video_quad_state = std::move(yuv_state); | 338 quad->yuv_video_quad_state = std::move(yuv_state); |
367 break; | 339 break; |
368 } | 340 } |
369 | 341 |
370 default: | 342 default: |
371 NOTREACHED() << "Unsupported material " << input.material; | 343 NOTREACHED() << "Unsupported material " << input.material; |
372 } | 344 } |
373 return quad; | 345 return quad; |
374 } | 346 } |
375 | 347 |
376 // static | 348 // static |
377 mus::mojom::SharedQuadStatePtr | 349 mus::mojom::SharedQuadStatePtr |
378 TypeConverter<mus::mojom::SharedQuadStatePtr, cc::SharedQuadState>::Convert( | 350 TypeConverter<mus::mojom::SharedQuadStatePtr, cc::SharedQuadState>::Convert( |
379 const cc::SharedQuadState& input) { | 351 const cc::SharedQuadState& input) { |
380 mus::mojom::SharedQuadStatePtr state = SharedQuadState::New(); | 352 mus::mojom::SharedQuadStatePtr state = SharedQuadState::New(); |
381 state->quad_to_target_transform = | 353 state->quad_to_target_transform = |
382 Transform::From(input.quad_to_target_transform); | 354 Transform::From(input.quad_to_target_transform); |
383 state->quad_layer_bounds = Size::From(input.quad_layer_bounds); | 355 state->quad_layer_bounds = input.quad_layer_bounds; |
384 state->visible_quad_layer_rect = Rect::From(input.visible_quad_layer_rect); | 356 state->visible_quad_layer_rect = input.visible_quad_layer_rect; |
385 state->clip_rect = Rect::From(input.clip_rect); | 357 state->clip_rect = input.clip_rect; |
386 state->is_clipped = input.is_clipped; | 358 state->is_clipped = input.is_clipped; |
387 state->opacity = input.opacity; | 359 state->opacity = input.opacity; |
388 state->blend_mode = static_cast<mus::mojom::SkXfermode>(input.blend_mode); | 360 state->blend_mode = static_cast<mus::mojom::SkXfermode>(input.blend_mode); |
389 state->sorting_context_id = input.sorting_context_id; | 361 state->sorting_context_id = input.sorting_context_id; |
390 return state; | 362 return state; |
391 } | 363 } |
392 | 364 |
393 // static | 365 // static |
394 PassPtr TypeConverter<PassPtr, cc::RenderPass>::Convert( | 366 PassPtr TypeConverter<PassPtr, cc::RenderPass>::Convert( |
395 const cc::RenderPass& input) { | 367 const cc::RenderPass& input) { |
396 PassPtr pass = Pass::New(); | 368 PassPtr pass = Pass::New(); |
397 pass->id = input.id; | 369 pass->id = input.id; |
398 pass->output_rect = Rect::From(input.output_rect); | 370 pass->output_rect = input.output_rect; |
399 pass->damage_rect = Rect::From(input.damage_rect); | 371 pass->damage_rect = input.damage_rect; |
400 pass->transform_to_root_target = | 372 pass->transform_to_root_target = |
401 Transform::From(input.transform_to_root_target); | 373 Transform::From(input.transform_to_root_target); |
402 pass->has_transparent_background = input.has_transparent_background; | 374 pass->has_transparent_background = input.has_transparent_background; |
403 Array<QuadPtr> quads(input.quad_list.size()); | 375 Array<QuadPtr> quads(input.quad_list.size()); |
404 Array<mus::mojom::SharedQuadStatePtr> shared_quad_state( | 376 Array<mus::mojom::SharedQuadStatePtr> shared_quad_state( |
405 input.shared_quad_state_list.size()); | 377 input.shared_quad_state_list.size()); |
406 const cc::SharedQuadState* last_sqs = nullptr; | 378 const cc::SharedQuadState* last_sqs = nullptr; |
407 cc::SharedQuadStateList::ConstIterator next_sqs_iter = | 379 cc::SharedQuadStateList::ConstIterator next_sqs_iter = |
408 input.shared_quad_state_list.begin(); | 380 input.shared_quad_state_list.begin(); |
409 for (auto iter = input.quad_list.cbegin(); iter != input.quad_list.cend(); | 381 for (auto iter = input.quad_list.cbegin(); iter != input.quad_list.cend(); |
(...skipping 17 matching lines...) Expand all Loading... |
427 return pass; | 399 return pass; |
428 } | 400 } |
429 | 401 |
430 // static | 402 // static |
431 std::unique_ptr<cc::RenderPass> ConvertToRenderPass( | 403 std::unique_ptr<cc::RenderPass> ConvertToRenderPass( |
432 const PassPtr& input, | 404 const PassPtr& input, |
433 const CompositorFrameMetadataPtr& metadata, | 405 const CompositorFrameMetadataPtr& metadata, |
434 CustomSurfaceConverter* custom_converter) { | 406 CustomSurfaceConverter* custom_converter) { |
435 std::unique_ptr<cc::RenderPass> pass = cc::RenderPass::Create( | 407 std::unique_ptr<cc::RenderPass> pass = cc::RenderPass::Create( |
436 input->shared_quad_states.size(), input->quads.size()); | 408 input->shared_quad_states.size(), input->quads.size()); |
437 pass->SetAll(input->id, input->output_rect.To<gfx::Rect>(), | 409 pass->SetAll(input->id, input->output_rect, input->damage_rect, |
438 input->damage_rect.To<gfx::Rect>(), | |
439 input->transform_to_root_target.To<gfx::Transform>(), | 410 input->transform_to_root_target.To<gfx::Transform>(), |
440 input->has_transparent_background); | 411 input->has_transparent_background); |
441 for (size_t i = 0; i < input->shared_quad_states.size(); ++i) { | 412 for (size_t i = 0; i < input->shared_quad_states.size(); ++i) { |
442 ConvertSharedQuadState(input->shared_quad_states[i], pass.get()); | 413 ConvertSharedQuadState(input->shared_quad_states[i], pass.get()); |
443 } | 414 } |
444 cc::SharedQuadStateList::Iterator sqs_iter = | 415 cc::SharedQuadStateList::Iterator sqs_iter = |
445 pass->shared_quad_state_list.begin(); | 416 pass->shared_quad_state_list.begin(); |
446 for (size_t i = 0; i < input->quads.size(); ++i) { | 417 for (size_t i = 0; i < input->quads.size(); ++i) { |
447 QuadPtr quad = std::move(input->quads[i]); | 418 QuadPtr quad = std::move(input->quads[i]); |
448 while (quad->shared_quad_state_index > sqs_iter.index()) { | 419 while (quad->shared_quad_state_index > sqs_iter.index()) { |
(...skipping 16 matching lines...) Expand all Loading... |
465 } | 436 } |
466 | 437 |
467 // static | 438 // static |
468 TransferableResourcePtr | 439 TransferableResourcePtr |
469 TypeConverter<TransferableResourcePtr, cc::TransferableResource>::Convert( | 440 TypeConverter<TransferableResourcePtr, cc::TransferableResource>::Convert( |
470 const cc::TransferableResource& input) { | 441 const cc::TransferableResource& input) { |
471 TransferableResourcePtr transferable = TransferableResource::New(); | 442 TransferableResourcePtr transferable = TransferableResource::New(); |
472 transferable->id = input.id; | 443 transferable->id = input.id; |
473 transferable->format = static_cast<ResourceFormat>(input.format); | 444 transferable->format = static_cast<ResourceFormat>(input.format); |
474 transferable->filter = input.filter; | 445 transferable->filter = input.filter; |
475 transferable->size = Size::From(input.size); | 446 transferable->size = input.size; |
476 transferable->mailbox_holder = input.mailbox_holder; | 447 transferable->mailbox_holder = input.mailbox_holder; |
477 transferable->read_lock_fences_enabled = input.read_lock_fences_enabled; | 448 transferable->read_lock_fences_enabled = input.read_lock_fences_enabled; |
478 transferable->is_software = input.is_software; | 449 transferable->is_software = input.is_software; |
479 transferable->is_overlay_candidate = input.is_overlay_candidate; | 450 transferable->is_overlay_candidate = input.is_overlay_candidate; |
480 return transferable; | 451 return transferable; |
481 } | 452 } |
482 | 453 |
483 // static | 454 // static |
484 cc::TransferableResource | 455 cc::TransferableResource |
485 TypeConverter<cc::TransferableResource, TransferableResourcePtr>::Convert( | 456 TypeConverter<cc::TransferableResource, TransferableResourcePtr>::Convert( |
486 const TransferableResourcePtr& input) { | 457 const TransferableResourcePtr& input) { |
487 cc::TransferableResource transferable; | 458 cc::TransferableResource transferable; |
488 transferable.id = input->id; | 459 transferable.id = input->id; |
489 transferable.format = static_cast<cc::ResourceFormat>(input->format); | 460 transferable.format = static_cast<cc::ResourceFormat>(input->format); |
490 transferable.filter = input->filter; | 461 transferable.filter = input->filter; |
491 transferable.size = input->size.To<gfx::Size>(); | 462 transferable.size = input->size; |
492 transferable.mailbox_holder = input->mailbox_holder; | 463 transferable.mailbox_holder = input->mailbox_holder; |
493 transferable.read_lock_fences_enabled = input->read_lock_fences_enabled; | 464 transferable.read_lock_fences_enabled = input->read_lock_fences_enabled; |
494 transferable.is_software = input->is_software; | 465 transferable.is_software = input->is_software; |
495 transferable.is_overlay_candidate = input->is_overlay_candidate; | 466 transferable.is_overlay_candidate = input->is_overlay_candidate; |
496 return transferable; | 467 return transferable; |
497 } | 468 } |
498 | 469 |
499 // static | 470 // static |
500 ReturnedResourcePtr | 471 ReturnedResourcePtr |
501 TypeConverter<ReturnedResourcePtr, cc::ReturnedResource>::Convert( | 472 TypeConverter<ReturnedResourcePtr, cc::ReturnedResource>::Convert( |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
581 } | 552 } |
582 | 553 |
583 // static | 554 // static |
584 std::unique_ptr<cc::CompositorFrame> | 555 std::unique_ptr<cc::CompositorFrame> |
585 TypeConverter<std::unique_ptr<cc::CompositorFrame>, | 556 TypeConverter<std::unique_ptr<cc::CompositorFrame>, |
586 CompositorFramePtr>::Convert(const CompositorFramePtr& input) { | 557 CompositorFramePtr>::Convert(const CompositorFramePtr& input) { |
587 return ConvertToCompositorFrame(input, nullptr); | 558 return ConvertToCompositorFrame(input, nullptr); |
588 } | 559 } |
589 | 560 |
590 } // namespace mojo | 561 } // namespace mojo |
OLD | NEW |