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

Side by Side Diff: include/core/SkShader.h

Issue 221923007: Initial picture shader implementation (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Remove unneeded suppression. Created 6 years, 8 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 8
9 #ifndef SkShader_DEFINED 9 #ifndef SkShader_DEFINED
10 #define SkShader_DEFINED 10 #define SkShader_DEFINED
11 11
12 #include "SkBitmap.h" 12 #include "SkBitmap.h"
13 #include "SkFlattenable.h" 13 #include "SkFlattenable.h"
14 #include "SkMask.h" 14 #include "SkMask.h"
15 #include "SkMatrix.h" 15 #include "SkMatrix.h"
16 #include "SkPaint.h" 16 #include "SkPaint.h"
17 17
18 class SkPath; 18 class SkPath;
19 class SkPicture;
19 class GrContext; 20 class GrContext;
20 class GrEffectRef; 21 class GrEffectRef;
21 22
22 /** \class SkShader 23 /** \class SkShader
23 * 24 *
24 * Shaders specify the source color(s) for what is being drawn. If a paint 25 * Shaders specify the source color(s) for what is being drawn. If a paint
25 * has no shader, then the paint's color is used. If the paint has a 26 * has no shader, then the paint's color is used. If the paint has a
26 * shader, then the shader's color(s) are use instead, but they are 27 * shader, then the shader's color(s) are use instead, but they are
27 * modulated by the paint's alpha. This makes it easy to create a shader 28 * modulated by the paint's alpha. This makes it easy to create a shader
28 * once (e.g. bitmap tiling or gradient) and then change its transparency 29 * once (e.g. bitmap tiling or gradient) and then change its transparency
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 * the paint. 339 * the paint.
339 * 340 *
340 * @param src The bitmap to use inside the shader 341 * @param src The bitmap to use inside the shader
341 * @param tmx The tiling mode to use when sampling the bitmap in the x-dir ection. 342 * @param tmx The tiling mode to use when sampling the bitmap in the x-dir ection.
342 * @param tmy The tiling mode to use when sampling the bitmap in the y-dir ection. 343 * @param tmy The tiling mode to use when sampling the bitmap in the y-dir ection.
343 * @return Returns a new shader object. Note: this function never retur ns null. 344 * @return Returns a new shader object. Note: this function never retur ns null.
344 */ 345 */
345 static SkShader* CreateBitmapShader(const SkBitmap& src, 346 static SkShader* CreateBitmapShader(const SkBitmap& src,
346 TileMode tmx, TileMode tmy); 347 TileMode tmx, TileMode tmy);
347 348
349 /** Call this to create a new shader that will draw with the specified pictu re.
350 *
351 * @param src The picture to use inside the shader (if not NULL, its ref c ount
scroggo 2014/04/11 15:23:15 Is it part of the intended use case to allow the c
f(malita) 2014/04/11 16:05:18 The intent is to treat the picture (playback) as i
352 * is incremented).
353 * @param tmx The tiling mode to use when sampling the bitmap in the x-dir ection.
354 * @param tmy The tiling mode to use when sampling the bitmap in the y-dir ection.
355 * @return Returns a new shader object. Note: this function never retur ns null.
356 */
357 static SkShader* CreatePictureShader(SkPicture* src, TileMode tmx, TileMode tmy);
358
348 SK_TO_STRING_VIRT() 359 SK_TO_STRING_VIRT()
349 SK_DEFINE_FLATTENABLE_TYPE(SkShader) 360 SK_DEFINE_FLATTENABLE_TYPE(SkShader)
350 361
351 protected: 362 protected:
352 enum MatrixClass { 363 enum MatrixClass {
353 kLinear_MatrixClass, // no perspective 364 kLinear_MatrixClass, // no perspective
354 kFixedStepInX_MatrixClass, // fast perspective, need to call fixedS tepInX() each scanline 365 kFixedStepInX_MatrixClass, // fast perspective, need to call fixedS tepInX() each scanline
355 kPerspective_MatrixClass // slow perspective, need to mappoints e ach pixel 366 kPerspective_MatrixClass // slow perspective, need to mappoints e ach pixel
356 }; 367 };
357 static MatrixClass ComputeMatrixClass(const SkMatrix&); 368 static MatrixClass ComputeMatrixClass(const SkMatrix&);
358 369
359 // These can be called by your subclass after setContext() has been called 370 // These can be called by your subclass after setContext() has been called
360 uint8_t getPaintAlpha() const { return fPaintAlpha; } 371 uint8_t getPaintAlpha() const { return fPaintAlpha; }
361 const SkMatrix& getTotalInverse() const { return fTotalInverse; } 372 const SkMatrix& getTotalInverse() const { return fTotalInverse; }
362 MatrixClass getInverseClass() const { return (MatrixClass)fTotalInve rseClass; } 373 MatrixClass getInverseClass() const { return (MatrixClass)fTotalInve rseClass; }
363 374
364 SkShader(SkReadBuffer& ); 375 SkShader(SkReadBuffer& );
365 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; 376 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
366 private: 377 private:
367 SkMatrix fLocalMatrix; 378 SkMatrix fLocalMatrix;
368 SkMatrix fTotalInverse; 379 SkMatrix fTotalInverse;
369 uint8_t fPaintAlpha; 380 uint8_t fPaintAlpha;
370 uint8_t fTotalInverseClass; 381 uint8_t fTotalInverseClass;
371 SkDEBUGCODE(SkBool8 fInSetContext;) 382 SkDEBUGCODE(SkBool8 fInSetContext;)
372 383
373 typedef SkFlattenable INHERITED; 384 typedef SkFlattenable INHERITED;
374 }; 385 };
375 386
376 #endif 387 #endif
OLDNEW
« no previous file with comments | « gyp/gmslides.gypi ('k') | src/core/SkPictureShader.h » ('j') | src/core/SkPictureShader.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698