OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
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 #ifndef SkGradientShaderPriv_DEFINED | 8 #ifndef SkGradientShaderPriv_DEFINED |
9 #define SkGradientShaderPriv_DEFINED | 9 #define SkGradientShaderPriv_DEFINED |
10 | 10 |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 | 291 |
292 static inline int next_dither_toggle16(int toggle) { | 292 static inline int next_dither_toggle16(int toggle) { |
293 return toggle ^ SkGradientShaderBase::kDitherStride16; | 293 return toggle ^ SkGradientShaderBase::kDitherStride16; |
294 } | 294 } |
295 | 295 |
296 /////////////////////////////////////////////////////////////////////////////// | 296 /////////////////////////////////////////////////////////////////////////////// |
297 | 297 |
298 #if SK_SUPPORT_GPU | 298 #if SK_SUPPORT_GPU |
299 | 299 |
300 #include "GrCoordTransform.h" | 300 #include "GrCoordTransform.h" |
301 #include "gl/GrGLEffect.h" | 301 #include "gl/GrGLProcessor.h" |
302 | 302 |
303 class GrEffectStage; | 303 class GrProcessorStage; |
304 class GrBackendEffectFactory; | 304 class GrBackendProcessorFactory; |
305 | 305 |
306 /* | 306 /* |
307 * The interpretation of the texture matrix depends on the sample mode. The | 307 * The interpretation of the texture matrix depends on the sample mode. The |
308 * texture matrix is applied both when the texture coordinates are explicit | 308 * texture matrix is applied both when the texture coordinates are explicit |
309 * and when vertex positions are used as texture coordinates. In the latter | 309 * and when vertex positions are used as texture coordinates. In the latter |
310 * case the texture matrix is applied to the pre-view-matrix position | 310 * case the texture matrix is applied to the pre-view-matrix position |
311 * values. | 311 * values. |
312 * | 312 * |
313 * Normal SampleMode | 313 * Normal SampleMode |
314 * The post-matrix texture coordinates are in normalize space with (0,0) at | 314 * The post-matrix texture coordinates are in normalize space with (0,0) at |
315 * the top-left and (1,1) at the bottom right. | 315 * the top-left and (1,1) at the bottom right. |
316 * RadialGradient | 316 * RadialGradient |
317 * The matrix specifies the radial gradient parameters. | 317 * The matrix specifies the radial gradient parameters. |
318 * (0,0) in the post-matrix space is center of the radial gradient. | 318 * (0,0) in the post-matrix space is center of the radial gradient. |
319 * Radial2Gradient | 319 * Radial2Gradient |
320 * Matrix transforms to space where first circle is centered at the | 320 * Matrix transforms to space where first circle is centered at the |
321 * origin. The second circle will be centered (x, 0) where x may be | 321 * origin. The second circle will be centered (x, 0) where x may be |
322 * 0 and is provided by setRadial2Params. The post-matrix space is | 322 * 0 and is provided by setRadial2Params. The post-matrix space is |
323 * normalized such that 1 is the second radius - first radius. | 323 * normalized such that 1 is the second radius - first radius. |
324 * SweepGradient | 324 * SweepGradient |
325 * The angle from the origin of texture coordinates in post-matrix space | 325 * The angle from the origin of texture coordinates in post-matrix space |
326 * determines the gradient value. | 326 * determines the gradient value. |
327 */ | 327 */ |
328 | 328 |
329 class GrTextureStripAtlas; | 329 class GrTextureStripAtlas; |
330 | 330 |
331 // Base class for Gr gradient effects | 331 // Base class for Gr gradient effects |
332 class GrGradientEffect : public GrEffect { | 332 class GrGradientEffect : public GrFragmentProcessor { |
333 public: | 333 public: |
334 | 334 |
335 GrGradientEffect(GrContext* ctx, | 335 GrGradientEffect(GrContext* ctx, |
336 const SkGradientShaderBase& shader, | 336 const SkGradientShaderBase& shader, |
337 const SkMatrix& matrix, | 337 const SkMatrix& matrix, |
338 SkShader::TileMode tileMode); | 338 SkShader::TileMode tileMode); |
339 | 339 |
340 virtual ~GrGradientEffect(); | 340 virtual ~GrGradientEffect(); |
341 | 341 |
342 bool useAtlas() const { return SkToBool(-1 != fRow); } | 342 bool useAtlas() const { return SkToBool(-1 != fRow); } |
(...skipping 24 matching lines...) Expand all Loading... |
367 sized to be at least kMaxRandomGradientColors. stops is a pointer to an
array of at least | 367 sized to be at least kMaxRandomGradientColors. stops is a pointer to an
array of at least |
368 size kMaxRandomGradientColors. It may be updated to NULL, indicating tha
t NULL should be | 368 size kMaxRandomGradientColors. It may be updated to NULL, indicating tha
t NULL should be |
369 passed to the gradient factory rather than the array. | 369 passed to the gradient factory rather than the array. |
370 */ | 370 */ |
371 static const int kMaxRandomGradientColors = 4; | 371 static const int kMaxRandomGradientColors = 4; |
372 static int RandomGradientParams(SkRandom* r, | 372 static int RandomGradientParams(SkRandom* r, |
373 SkColor colors[kMaxRandomGradientColors], | 373 SkColor colors[kMaxRandomGradientColors], |
374 SkScalar** stops, | 374 SkScalar** stops, |
375 SkShader::TileMode* tm); | 375 SkShader::TileMode* tm); |
376 | 376 |
377 virtual bool onIsEqual(const GrEffect& effect) const SK_OVERRIDE; | 377 virtual bool onIsEqual(const GrProcessor&) const SK_OVERRIDE; |
378 | 378 |
379 const GrCoordTransform& getCoordTransform() const { return fCoordTransform;
} | 379 const GrCoordTransform& getCoordTransform() const { return fCoordTransform;
} |
380 | 380 |
381 private: | 381 private: |
382 static const GrCoordSet kCoordSet = kLocal_GrCoordSet; | 382 static const GrCoordSet kCoordSet = kLocal_GrCoordSet; |
383 | 383 |
384 GrCoordTransform fCoordTransform; | 384 GrCoordTransform fCoordTransform; |
385 GrTextureAccess fTextureAccess; | 385 GrTextureAccess fTextureAccess; |
386 SkScalar fYCoord; | 386 SkScalar fYCoord; |
387 GrTextureStripAtlas* fAtlas; | 387 GrTextureStripAtlas* fAtlas; |
388 int fRow; | 388 int fRow; |
389 bool fIsOpaque; | 389 bool fIsOpaque; |
390 SkGradientShaderBase::GpuColorType fColorType; | 390 SkGradientShaderBase::GpuColorType fColorType; |
391 SkColor fColors[3]; // More than 3 colors we use texture | 391 SkColor fColors[3]; // More than 3 colors we use texture |
392 PremulType fPremulType; // This only changes behavior for two and three colo
r special cases. | 392 PremulType fPremulType; // This only changes behavior for two and three colo
r special cases. |
393 // It is already baked into to the table for texture
gradients. | 393 // It is already baked into to the table for texture
gradients. |
394 typedef GrEffect INHERITED; | 394 typedef GrFragmentProcessor INHERITED; |
395 | 395 |
396 }; | 396 }; |
397 | 397 |
398 /////////////////////////////////////////////////////////////////////////////// | 398 /////////////////////////////////////////////////////////////////////////////// |
399 | 399 |
400 // Base class for GL gradient effects | 400 // Base class for GL gradient effects |
401 class GrGLGradientEffect : public GrGLEffect { | 401 class GrGLGradientEffect : public GrGLFragmentProcessor { |
402 public: | 402 public: |
403 GrGLGradientEffect(const GrBackendEffectFactory& factory); | 403 GrGLGradientEffect(const GrBackendProcessorFactory& factory); |
404 virtual ~GrGLGradientEffect(); | 404 virtual ~GrGLGradientEffect(); |
405 | 405 |
406 virtual void setData(const GrGLProgramDataManager&, const GrEffect&) SK_OVER
RIDE; | 406 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O
VERRIDE; |
407 | 407 |
408 protected: | 408 protected: |
409 /** | 409 /** |
410 * Subclasses must call this. It will return a key for the part of the shade
r code controlled | 410 * Subclasses must call this. It will return a key for the part of the shade
r code controlled |
411 * by the base class. The subclasses must stick it in their key and then pas
s it to the below | 411 * by the base class. The subclasses must stick it in their key and then pas
s it to the below |
412 * emit* functions from their emitCode function. | 412 * emit* functions from their emitCode function. |
413 */ | 413 */ |
414 static uint32_t GenBaseGradientKey(const GrEffect&); | 414 static uint32_t GenBaseGradientKey(const GrProcessor&); |
415 | 415 |
416 // Emits the uniform used as the y-coord to texture samples in derived class
es. Subclasses | 416 // Emits the uniform used as the y-coord to texture samples in derived class
es. Subclasses |
417 // should call this method from their emitCode(). | 417 // should call this method from their emitCode(). |
418 void emitUniforms(GrGLProgramBuilder* builder, uint32_t baseKey); | 418 void emitUniforms(GrGLProgramBuilder* builder, uint32_t baseKey); |
419 | 419 |
420 | 420 |
421 // emit code that gets a fragment's color from an expression for t; Has bran
ches for 3 separate | 421 // emit code that gets a fragment's color from an expression for t; Has bran
ches for 3 separate |
422 // control flows inside -- 2 color gradients, 3 color symmetric gradients (b
oth using | 422 // control flows inside -- 2 color gradients, 3 color symmetric gradients (b
oth using |
423 // native GLSL mix), and 4+ color gradients that use the traditional texture
lookup. | 423 // native GLSL mix), and 4+ color gradients that use the traditional texture
lookup. |
424 void emitColor(GrGLProgramBuilder* builder, | 424 void emitColor(GrGLProgramBuilder* builder, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 return GrGradientEffect::kAfterInterp_PremulType; | 460 return GrGradientEffect::kAfterInterp_PremulType; |
461 } | 461 } |
462 } | 462 } |
463 | 463 |
464 SkScalar fCachedYCoord; | 464 SkScalar fCachedYCoord; |
465 GrGLProgramDataManager::UniformHandle fFSYUni; | 465 GrGLProgramDataManager::UniformHandle fFSYUni; |
466 GrGLProgramDataManager::UniformHandle fColorStartUni; | 466 GrGLProgramDataManager::UniformHandle fColorStartUni; |
467 GrGLProgramDataManager::UniformHandle fColorMidUni; | 467 GrGLProgramDataManager::UniformHandle fColorMidUni; |
468 GrGLProgramDataManager::UniformHandle fColorEndUni; | 468 GrGLProgramDataManager::UniformHandle fColorEndUni; |
469 | 469 |
470 typedef GrGLEffect INHERITED; | 470 typedef GrGLFragmentProcessor INHERITED; |
471 }; | 471 }; |
472 | 472 |
473 #endif | 473 #endif |
474 | 474 |
475 #endif | 475 #endif |
OLD | NEW |