OLD | NEW |
1 | 1 |
2 #include "SkBitmap.h" | 2 #include "SkBitmap.h" |
3 #include "SkTableColorFilter.h" | 3 #include "SkTableColorFilter.h" |
4 #include "SkColorPriv.h" | 4 #include "SkColorPriv.h" |
5 #include "SkReadBuffer.h" | 5 #include "SkReadBuffer.h" |
6 #include "SkWriteBuffer.h" | 6 #include "SkWriteBuffer.h" |
7 #include "SkUnPreMultiply.h" | 7 #include "SkUnPreMultiply.h" |
8 #include "SkString.h" | 8 #include "SkString.h" |
9 | 9 |
10 class SkTable_ColorFilter : public SkColorFilter { | 10 class SkTable_ColorFilter : public SkColorFilter { |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 unsigned fFlags; // currently not used in shader code, just to assist | 309 unsigned fFlags; // currently not used in shader code, just to assist |
310 // onComputeInvariantOutput(). | 310 // onComputeInvariantOutput(). |
311 | 311 |
312 typedef GrFragmentProcessor INHERITED; | 312 typedef GrFragmentProcessor INHERITED; |
313 }; | 313 }; |
314 | 314 |
315 class GLColorTableEffect : public GrGLFragmentProcessor { | 315 class GLColorTableEffect : public GrGLFragmentProcessor { |
316 public: | 316 public: |
317 GLColorTableEffect(const GrBackendProcessorFactory&, const GrProcessor&); | 317 GLColorTableEffect(const GrBackendProcessorFactory&, const GrProcessor&); |
318 | 318 |
319 virtual void emitCode(GrGLProgramBuilder*, | 319 virtual void emitCode(GrGLFPBuilder*, |
320 const GrFragmentProcessor&, | 320 const GrFragmentProcessor&, |
321 const GrProcessorKey&, | 321 const GrProcessorKey&, |
322 const char* outputColor, | 322 const char* outputColor, |
323 const char* inputColor, | 323 const char* inputColor, |
324 const TransformedCoordsArray&, | 324 const TransformedCoordsArray&, |
325 const TextureSamplerArray&) SK_OVERRIDE; | 325 const TextureSamplerArray&) SK_OVERRIDE; |
326 | 326 |
327 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O
VERRIDE {} | 327 virtual void setData(const GrGLProgramDataManager&, const GrProcessor&) SK_O
VERRIDE {} |
328 | 328 |
329 static void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilde
r* b) {} | 329 static void GenKey(const GrProcessor&, const GrGLCaps&, GrProcessorKeyBuilde
r* b) {} |
330 | 330 |
331 private: | 331 private: |
332 | 332 |
333 typedef GrGLFragmentProcessor INHERITED; | 333 typedef GrGLFragmentProcessor INHERITED; |
334 }; | 334 }; |
335 | 335 |
336 GLColorTableEffect::GLColorTableEffect(const GrBackendProcessorFactory& factory,
const GrProcessor&) | 336 GLColorTableEffect::GLColorTableEffect(const GrBackendProcessorFactory& factory,
const GrProcessor&) |
337 : INHERITED(factory) { | 337 : INHERITED(factory) { |
338 } | 338 } |
339 | 339 |
340 void GLColorTableEffect::emitCode(GrGLProgramBuilder* builder, | 340 void GLColorTableEffect::emitCode(GrGLFPBuilder* builder, |
341 const GrFragmentProcessor&, | 341 const GrFragmentProcessor&, |
342 const GrProcessorKey&, | 342 const GrProcessorKey&, |
343 const char* outputColor, | 343 const char* outputColor, |
344 const char* inputColor, | 344 const char* inputColor, |
345 const TransformedCoordsArray&, | 345 const TransformedCoordsArray&, |
346 const TextureSamplerArray& samplers) { | 346 const TextureSamplerArray& samplers) { |
347 | 347 |
348 static const float kColorScaleFactor = 255.0f / 256.0f; | 348 static const float kColorScaleFactor = 255.0f / 256.0f; |
349 static const float kColorOffsetFactor = 1.0f / 512.0f; | 349 static const float kColorOffsetFactor = 1.0f / 512.0f; |
350 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder(); | 350 GrGLFPFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder(); |
351 if (NULL == inputColor) { | 351 if (NULL == inputColor) { |
352 // the input color is solid white (all ones). | 352 // the input color is solid white (all ones). |
353 static const float kMaxValue = kColorScaleFactor + kColorOffsetFactor; | 353 static const float kMaxValue = kColorScaleFactor + kColorOffsetFactor; |
354 fsBuilder->codeAppendf("\t\tvec4 coord = vec4(%f, %f, %f, %f);\n", | 354 fsBuilder->codeAppendf("\t\tvec4 coord = vec4(%f, %f, %f, %f);\n", |
355 kMaxValue, kMaxValue, kMaxValue, kMaxValue); | 355 kMaxValue, kMaxValue, kMaxValue, kMaxValue); |
356 | 356 |
357 } else { | 357 } else { |
358 fsBuilder->codeAppendf("\t\tfloat nonZeroAlpha = max(%s.a, .0001);\n", i
nputColor); | 358 fsBuilder->codeAppendf("\t\tfloat nonZeroAlpha = max(%s.a, .0001);\n", i
nputColor); |
359 fsBuilder->codeAppendf("\t\tvec4 coord = vec4(%s.rgb / nonZeroAlpha, non
ZeroAlpha);\n", inputColor); | 359 fsBuilder->codeAppendf("\t\tvec4 coord = vec4(%s.rgb / nonZeroAlpha, non
ZeroAlpha);\n", inputColor); |
360 fsBuilder->codeAppendf("\t\tcoord = coord * %f + vec4(%f, %f, %f, %f);\n
", | 360 fsBuilder->codeAppendf("\t\tcoord = coord * %f + vec4(%f, %f, %f, %f);\n
", |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
461 SkColorFilter* SkTableColorFilter::CreateARGB(const uint8_t tableA[256], | 461 SkColorFilter* SkTableColorFilter::CreateARGB(const uint8_t tableA[256], |
462 const uint8_t tableR[256], | 462 const uint8_t tableR[256], |
463 const uint8_t tableG[256], | 463 const uint8_t tableG[256], |
464 const uint8_t tableB[256]) { | 464 const uint8_t tableB[256]) { |
465 return SkNEW_ARGS(SkTable_ColorFilter, (tableA, tableR, tableG, tableB)); | 465 return SkNEW_ARGS(SkTable_ColorFilter, (tableA, tableR, tableG, tableB)); |
466 } | 466 } |
467 | 467 |
468 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkTableColorFilter) | 468 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkTableColorFilter) |
469 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkTable_ColorFilter) | 469 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkTable_ColorFilter) |
470 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 470 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
OLD | NEW |