| 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 |