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

Side by Side Diff: cc/software_renderer.cc

Issue 11411050: cc: Make the DrawQuad subclasses into struct-like classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « cc/scrollbar_layer_impl.cc ('k') | cc/software_renderer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « cc/scrollbar_layer_impl.cc ('k') | cc/software_renderer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698