OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "cc/software_renderer.h" | 5 #include "cc/software_renderer.h" |
6 | 6 |
7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
8 #include "cc/debug_border_draw_quad.h" | 8 #include "cc/debug_border_draw_quad.h" |
9 #include "cc/render_pass_draw_quad.h" | 9 #include "cc/render_pass_draw_quad.h" |
10 #include "cc/solid_color_draw_quad.h" | 10 #include "cc/solid_color_draw_quad.h" |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 | 182 |
183 if (quad->ShouldDrawWithBlending()) { | 183 if (quad->ShouldDrawWithBlending()) { |
184 m_skCurrentPaint.setAlpha(quad->opacity() * 255); | 184 m_skCurrentPaint.setAlpha(quad->opacity() * 255); |
185 m_skCurrentPaint.setXfermodeMode(SkXfermode::kSrcOver_Mode); | 185 m_skCurrentPaint.setXfermodeMode(SkXfermode::kSrcOver_Mode); |
186 } else { | 186 } else { |
187 m_skCurrentPaint.setXfermodeMode(SkXfermode::kSrc_Mode); | 187 m_skCurrentPaint.setXfermodeMode(SkXfermode::kSrc_Mode); |
188 } | 188 } |
189 | 189 |
190 switch (quad->material) { | 190 switch (quad->material) { |
191 case DrawQuad::DEBUG_BORDER: | 191 case DrawQuad::DEBUG_BORDER: |
192 drawDebugBorderQuad(frame, DebugBorderDrawQuad::materialCast(quad)); | 192 drawDebugBorderQuad(frame, DebugBorderDrawQuad::MaterialCast(quad)); |
193 break; | 193 break; |
194 case DrawQuad::SOLID_COLOR: | 194 case DrawQuad::SOLID_COLOR: |
195 drawSolidColorQuad(frame, SolidColorDrawQuad::materialCast(quad)); | 195 drawSolidColorQuad(frame, SolidColorDrawQuad::MaterialCast(quad)); |
196 break; | 196 break; |
197 case DrawQuad::TEXTURE_CONTENT: | 197 case DrawQuad::TEXTURE_CONTENT: |
198 drawTextureQuad(frame, TextureDrawQuad::materialCast(quad)); | 198 drawTextureQuad(frame, TextureDrawQuad::MaterialCast(quad)); |
199 break; | 199 break; |
200 case DrawQuad::TILED_CONTENT: | 200 case DrawQuad::TILED_CONTENT: |
201 drawTileQuad(frame, TileDrawQuad::materialCast(quad)); | 201 drawTileQuad(frame, TileDrawQuad::MaterialCast(quad)); |
202 break; | 202 break; |
203 case DrawQuad::RENDER_PASS: | 203 case DrawQuad::RENDER_PASS: |
204 drawRenderPassQuad(frame, RenderPassDrawQuad::materialCast(quad)); | 204 drawRenderPassQuad(frame, RenderPassDrawQuad::MaterialCast(quad)); |
205 break; | 205 break; |
206 default: | 206 default: |
207 drawUnsupportedQuad(frame, quad); | 207 drawUnsupportedQuad(frame, quad); |
208 break; | 208 break; |
209 } | 209 } |
210 | 210 |
211 m_skCurrentCanvas->resetMatrix(); | 211 m_skCurrentCanvas->resetMatrix(); |
212 } | 212 } |
213 | 213 |
214 void SoftwareRenderer::drawDebugBorderQuad(const DrawingFrame& frame, const Debu
gBorderDrawQuad* quad) | 214 void SoftwareRenderer::drawDebugBorderQuad(const DrawingFrame& frame, const Debu
gBorderDrawQuad* quad) |
215 { | 215 { |
216 // We need to apply the matrix manually to have pixel-sized stroke width. | 216 // We need to apply the matrix manually to have pixel-sized stroke width. |
217 SkPoint vertices[4]; | 217 SkPoint vertices[4]; |
218 gfx::RectFToSkRect(quadVertexRect()).toQuad(vertices); | 218 gfx::RectFToSkRect(quadVertexRect()).toQuad(vertices); |
219 SkPoint transformedVertices[4]; | 219 SkPoint transformedVertices[4]; |
220 m_skCurrentCanvas->getTotalMatrix().mapPoints(transformedVertices, vertices,
4); | 220 m_skCurrentCanvas->getTotalMatrix().mapPoints(transformedVertices, vertices,
4); |
221 m_skCurrentCanvas->resetMatrix(); | 221 m_skCurrentCanvas->resetMatrix(); |
222 | 222 |
223 m_skCurrentPaint.setColor(quad->color()); | 223 m_skCurrentPaint.setColor(quad->color); |
224 m_skCurrentPaint.setAlpha(quad->opacity() * SkColorGetA(quad->color())); | 224 m_skCurrentPaint.setAlpha(quad->opacity() * SkColorGetA(quad->color)); |
225 m_skCurrentPaint.setStyle(SkPaint::kStroke_Style); | 225 m_skCurrentPaint.setStyle(SkPaint::kStroke_Style); |
226 m_skCurrentPaint.setStrokeWidth(quad->width()); | 226 m_skCurrentPaint.setStrokeWidth(quad->width); |
227 m_skCurrentCanvas->drawPoints(SkCanvas::kPolygon_PointMode, 4, transformedVe
rtices, m_skCurrentPaint); | 227 m_skCurrentCanvas->drawPoints(SkCanvas::kPolygon_PointMode, 4, transformedVe
rtices, m_skCurrentPaint); |
228 } | 228 } |
229 | 229 |
230 void SoftwareRenderer::drawSolidColorQuad(const DrawingFrame& frame, const Solid
ColorDrawQuad* quad) | 230 void SoftwareRenderer::drawSolidColorQuad(const DrawingFrame& frame, const Solid
ColorDrawQuad* quad) |
231 { | 231 { |
232 m_skCurrentPaint.setColor(quad->color()); | 232 m_skCurrentPaint.setColor(quad->color); |
233 m_skCurrentPaint.setAlpha(quad->opacity() * SkColorGetA(quad->color())); | 233 m_skCurrentPaint.setAlpha(quad->opacity() * SkColorGetA(quad->color)); |
234 m_skCurrentCanvas->drawRect(gfx::RectFToSkRect(quadVertexRect()), m_skCurren
tPaint); | 234 m_skCurrentCanvas->drawRect(gfx::RectFToSkRect(quadVertexRect()), m_skCurren
tPaint); |
235 } | 235 } |
236 | 236 |
237 void SoftwareRenderer::drawTextureQuad(const DrawingFrame& frame, const TextureD
rawQuad* quad) | 237 void SoftwareRenderer::drawTextureQuad(const DrawingFrame& frame, const TextureD
rawQuad* quad) |
238 { | 238 { |
239 if (!isSoftwareResource(quad->resourceId())) { | 239 if (!isSoftwareResource(quad->resource_id)) { |
240 drawUnsupportedQuad(frame, quad); | 240 drawUnsupportedQuad(frame, quad); |
241 return; | 241 return; |
242 } | 242 } |
243 | 243 |
244 // FIXME: Add support for non-premultiplied alpha. | 244 // FIXME: Add support for non-premultiplied alpha. |
245 ResourceProvider::ScopedReadLockSoftware lock(m_resourceProvider, quad->reso
urceId()); | 245 ResourceProvider::ScopedReadLockSoftware lock(m_resourceProvider, quad->reso
urce_id); |
246 const SkBitmap* bitmap = lock.skBitmap(); | 246 const SkBitmap* bitmap = lock.skBitmap(); |
247 gfx::RectF uvRect = gfx::ScaleRect(quad->uvRect(), bitmap->width(), bitmap->
height()); | 247 gfx::RectF uvRect = gfx::ScaleRect(quad->uv_rect, bitmap->width(), bitmap->h
eight()); |
248 SkRect skUvRect = gfx::RectFToSkRect(uvRect); | 248 SkRect skUvRect = gfx::RectFToSkRect(uvRect); |
249 if (quad->flipped()) | 249 if (quad->flipped) |
250 m_skCurrentCanvas->scale(1, -1); | 250 m_skCurrentCanvas->scale(1, -1); |
251 m_skCurrentCanvas->drawBitmapRectToRect(*bitmap, &skUvRect, | 251 m_skCurrentCanvas->drawBitmapRectToRect(*bitmap, &skUvRect, |
252 gfx::RectFToSkRect(quadVertexRect())
, | 252 gfx::RectFToSkRect(quadVertexRect())
, |
253 &m_skCurrentPaint); | 253 &m_skCurrentPaint); |
254 } | 254 } |
255 | 255 |
256 void SoftwareRenderer::drawTileQuad(const DrawingFrame& frame, const TileDrawQua
d* quad) | 256 void SoftwareRenderer::drawTileQuad(const DrawingFrame& frame, const TileDrawQua
d* quad) |
257 { | 257 { |
258 DCHECK(isSoftwareResource(quad->resourceId())); | 258 DCHECK(isSoftwareResource(quad->resource_id)); |
259 ResourceProvider::ScopedReadLockSoftware lock(m_resourceProvider, quad->reso
urceId()); | 259 ResourceProvider::ScopedReadLockSoftware lock(m_resourceProvider, quad->reso
urce_id); |
260 | 260 |
261 SkRect uvRect = gfx::RectFToSkRect(quad->texCoordRect()); | 261 SkRect uvRect = gfx::RectFToSkRect(quad->tex_coord_rect); |
262 m_skCurrentPaint.setFilterBitmap(true); | 262 m_skCurrentPaint.setFilterBitmap(true); |
263 m_skCurrentCanvas->drawBitmapRectToRect(*lock.skBitmap(), &uvRect, | 263 m_skCurrentCanvas->drawBitmapRectToRect(*lock.skBitmap(), &uvRect, |
264 gfx::RectFToSkRect(quadVertexRect())
, | 264 gfx::RectFToSkRect(quadVertexRect())
, |
265 &m_skCurrentPaint); | 265 &m_skCurrentPaint); |
266 } | 266 } |
267 | 267 |
268 void SoftwareRenderer::drawRenderPassQuad(const DrawingFrame& frame, const Rende
rPassDrawQuad* quad) | 268 void SoftwareRenderer::drawRenderPassQuad(const DrawingFrame& frame, const Rende
rPassDrawQuad* quad) |
269 { | 269 { |
270 CachedResource* contentTexture = m_renderPassTextures.get(quad->renderPassId
()); | 270 CachedResource* contentTexture = m_renderPassTextures.get(quad->render_pass_
id); |
271 if (!contentTexture || !contentTexture->id()) | 271 if (!contentTexture || !contentTexture->id()) |
272 return; | 272 return; |
273 | 273 |
274 const RenderPass* renderPass = frame.renderPassesById->get(quad->renderPassI
d()); | 274 const RenderPass* renderPass = frame.renderPassesById->get(quad->render_pass
_id); |
275 DCHECK(renderPass); | 275 DCHECK(renderPass); |
276 if (!renderPass) | 276 if (!renderPass) |
277 return; | 277 return; |
278 | 278 |
279 DCHECK(isSoftwareResource(contentTexture->id())); | 279 DCHECK(isSoftwareResource(contentTexture->id())); |
280 ResourceProvider::ScopedReadLockSoftware lock(m_resourceProvider, contentTex
ture->id()); | 280 ResourceProvider::ScopedReadLockSoftware lock(m_resourceProvider, contentTex
ture->id()); |
281 | 281 |
282 SkRect destRect = gfx::RectFToSkRect(quadVertexRect()); | 282 SkRect destRect = gfx::RectFToSkRect(quadVertexRect()); |
283 | 283 |
284 const SkBitmap* content = lock.skBitmap(); | 284 const SkBitmap* content = lock.skBitmap(); |
285 | 285 |
286 SkRect contentRect; | 286 SkRect contentRect; |
287 content->getBounds(&contentRect); | 287 content->getBounds(&contentRect); |
288 | 288 |
289 SkMatrix contentMat; | 289 SkMatrix contentMat; |
290 contentMat.setRectToRect(contentRect, destRect, SkMatrix::kFill_ScaleToFit); | 290 contentMat.setRectToRect(contentRect, destRect, SkMatrix::kFill_ScaleToFit); |
291 | 291 |
292 SkAutoTUnref<SkShader> shader(SkShader::CreateBitmapShader(*content, | 292 SkAutoTUnref<SkShader> shader(SkShader::CreateBitmapShader(*content, |
293 SkShader::kClamp_
TileMode, | 293 SkShader::kClamp_
TileMode, |
294 SkShader::kClamp_
TileMode)); | 294 SkShader::kClamp_
TileMode)); |
295 shader->setLocalMatrix(contentMat); | 295 shader->setLocalMatrix(contentMat); |
296 m_skCurrentPaint.setShader(shader); | 296 m_skCurrentPaint.setShader(shader); |
297 | 297 |
298 SkImageFilter* filter = renderPass->filter(); | 298 SkImageFilter* filter = renderPass->filter(); |
299 if (filter) | 299 if (filter) |
300 m_skCurrentPaint.setImageFilter(filter); | 300 m_skCurrentPaint.setImageFilter(filter); |
301 | 301 |
302 if (quad->maskResourceId()) { | 302 if (quad->mask_resource_id) { |
303 ResourceProvider::ScopedReadLockSoftware maskLock(m_resourceProvider, qu
ad->maskResourceId()); | 303 ResourceProvider::ScopedReadLockSoftware maskLock(m_resourceProvider, qu
ad->mask_resource_id); |
304 | 304 |
305 const SkBitmap* mask = maskLock.skBitmap(); | 305 const SkBitmap* mask = maskLock.skBitmap(); |
306 | 306 |
307 SkRect maskRect = SkRect::MakeXYWH( | 307 SkRect maskRect = SkRect::MakeXYWH( |
308 quad->maskTexCoordOffsetX() * mask->width(), | 308 quad->mask_tex_coord_offset_x * mask->width(), |
309 quad->maskTexCoordOffsetY() * mask->height(), | 309 quad->mask_tex_coord_offset_y * mask->height(), |
310 quad->maskTexCoordScaleX() * mask->width(), | 310 quad->mask_tex_coord_scale_x * mask->width(), |
311 quad->maskTexCoordScaleY() * mask->height()); | 311 quad->mask_tex_coord_scale_y * mask->height()); |
312 | 312 |
313 SkMatrix maskMat; | 313 SkMatrix maskMat; |
314 maskMat.setRectToRect(maskRect, destRect, SkMatrix::kFill_ScaleToFit); | 314 maskMat.setRectToRect(maskRect, destRect, SkMatrix::kFill_ScaleToFit); |
315 | 315 |
316 SkAutoTUnref<SkShader> maskShader(SkShader::CreateBitmapShader(*mask, | 316 SkAutoTUnref<SkShader> maskShader(SkShader::CreateBitmapShader(*mask, |
317 SkShader:
:kClamp_TileMode, | 317 SkShader:
:kClamp_TileMode, |
318 SkShader:
:kClamp_TileMode)); | 318 SkShader:
:kClamp_TileMode)); |
319 maskShader->setLocalMatrix(maskMat); | 319 maskShader->setLocalMatrix(maskMat); |
320 | 320 |
321 SkPaint maskPaint; | 321 SkPaint maskPaint; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 } | 358 } |
359 | 359 |
360 void SoftwareRenderer::setVisible(bool visible) | 360 void SoftwareRenderer::setVisible(bool visible) |
361 { | 361 { |
362 if (m_visible == visible) | 362 if (m_visible == visible) |
363 return; | 363 return; |
364 m_visible = visible; | 364 m_visible = visible; |
365 } | 365 } |
366 | 366 |
367 } // namespace cc | 367 } // namespace cc |
OLD | NEW |