| 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 "SkFlattenableBuffers.h" | 5 #include "SkFlattenableBuffers.h" |
| 6 #include "SkUnPreMultiply.h" | 6 #include "SkUnPreMultiply.h" |
| 7 | 7 |
| 8 class SkTable_ColorFilter : public SkColorFilter { | 8 class SkTable_ColorFilter : public SkColorFilter { |
| 9 public: | 9 public: |
| 10 SkTable_ColorFilter(const uint8_t tableA[], const uint8_t tableR[], | 10 SkTable_ColorFilter(const uint8_t tableA[], const uint8_t tableR[], |
| (...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 void GLColorTableEffect::emitCode(GrGLShaderBuilder* builder, | 282 void GLColorTableEffect::emitCode(GrGLShaderBuilder* builder, |
| 283 const GrEffectStage&, | 283 const GrEffectStage&, |
| 284 EffectKey, | 284 EffectKey, |
| 285 const char* vertexCoords, | 285 const char* vertexCoords, |
| 286 const char* outputColor, | 286 const char* outputColor, |
| 287 const char* inputColor, | 287 const char* inputColor, |
| 288 const TextureSamplerArray& samplers) { | 288 const TextureSamplerArray& samplers) { |
| 289 | 289 |
| 290 static const float kColorScaleFactor = 255.0f / 256.0f; | 290 static const float kColorScaleFactor = 255.0f / 256.0f; |
| 291 static const float kColorOffsetFactor = 1.0f / 512.0f; | 291 static const float kColorOffsetFactor = 1.0f / 512.0f; |
| 292 SkString* code = &builder->fFSCode; | |
| 293 if (NULL == inputColor) { | 292 if (NULL == inputColor) { |
| 294 // the input color is solid white (all ones). | 293 // the input color is solid white (all ones). |
| 295 static const float kMaxValue = kColorScaleFactor + kColorOffsetFactor; | 294 static const float kMaxValue = kColorScaleFactor + kColorOffsetFactor; |
| 296 code->appendf("\t\tvec4 coord = vec4(%f, %f, %f, %f);\n", | 295 builder->fsCodeAppendf("\t\tvec4 coord = vec4(%f, %f, %f, %f);\n", |
| 297 kMaxValue, kMaxValue, kMaxValue, kMaxValue); | 296 kMaxValue, kMaxValue, kMaxValue, kMaxValue); |
| 298 | 297 |
| 299 } else { | 298 } else { |
| 300 code->appendf("\t\tfloat nonZeroAlpha = max(%s.a, .0001);\n", inputColor
); | 299 builder->fsCodeAppendf("\t\tfloat nonZeroAlpha = max(%s.a, .0001);\n", i
nputColor); |
| 301 code->appendf("\t\tvec4 coord = vec4(%s.rgb / nonZeroAlpha, nonZeroAlpha
);\n", inputColor); | 300 builder->fsCodeAppendf("\t\tvec4 coord = vec4(%s.rgb / nonZeroAlpha, non
ZeroAlpha);\n", inputColor); |
| 302 code->appendf("\t\tcoord = coord * %f + vec4(%f, %f, %f, %f);\n", | 301 builder->fsCodeAppendf("\t\tcoord = coord * %f + vec4(%f, %f, %f, %f);\n
", |
| 303 kColorScaleFactor, | 302 kColorScaleFactor, |
| 304 kColorOffsetFactor, kColorOffsetFactor, | 303 kColorOffsetFactor, kColorOffsetFactor, |
| 305 kColorOffsetFactor, kColorOffsetFactor); | 304 kColorOffsetFactor, kColorOffsetFactor); |
| 306 } | 305 } |
| 307 | 306 |
| 308 code->appendf("\t\t%s.a = ", outputColor); | 307 builder->fsCodeAppendf("\t\t%s.a = ", outputColor); |
| 309 builder->appendTextureLookup(code, samplers[0], "vec2(coord.a, 0.125)"); | 308 builder->appendTextureLookup(GrGLShaderBuilder::kFragment_ShaderType, sample
rs[0], "vec2(coord.a, 0.125)"); |
| 310 code->append(";\n"); | 309 builder->fsCodeAppend(";\n"); |
| 311 | 310 |
| 312 code->appendf("\t\t%s.r = ", outputColor); | 311 builder->fsCodeAppendf("\t\t%s.r = ", outputColor); |
| 313 builder->appendTextureLookup(code, samplers[0], "vec2(coord.r, 0.375)"); | 312 builder->appendTextureLookup(GrGLShaderBuilder::kFragment_ShaderType, sample
rs[0], "vec2(coord.r, 0.375)"); |
| 314 code->append(";\n"); | 313 builder->fsCodeAppend(";\n"); |
| 315 | 314 |
| 316 code->appendf("\t\t%s.g = ", outputColor); | 315 builder->fsCodeAppendf("\t\t%s.g = ", outputColor); |
| 317 builder->appendTextureLookup(code, samplers[0], "vec2(coord.g, 0.625)"); | 316 builder->appendTextureLookup(GrGLShaderBuilder::kFragment_ShaderType, sample
rs[0], "vec2(coord.g, 0.625)"); |
| 318 code->append(";\n"); | 317 builder->fsCodeAppend(";\n"); |
| 319 | 318 |
| 320 code->appendf("\t\t%s.b = ", outputColor); | 319 builder->fsCodeAppendf("\t\t%s.b = ", outputColor); |
| 321 builder->appendTextureLookup(code, samplers[0], "vec2(coord.b, 0.875)"); | 320 builder->appendTextureLookup(GrGLShaderBuilder::kFragment_ShaderType, sample
rs[0], "vec2(coord.b, 0.875)"); |
| 322 code->append(";\n"); | 321 builder->fsCodeAppend(";\n"); |
| 323 | 322 |
| 324 code->appendf("\t\t%s.rgb *= %s.a;\n", outputColor, outputColor); | 323 builder->fsCodeAppendf("\t\t%s.rgb *= %s.a;\n", outputColor, outputColor); |
| 325 } | 324 } |
| 326 | 325 |
| 327 GrGLEffect::EffectKey GLColorTableEffect::GenKey(const GrEffectStage&, const GrG
LCaps&) { | 326 GrGLEffect::EffectKey GLColorTableEffect::GenKey(const GrEffectStage&, const GrG
LCaps&) { |
| 328 return 0; | 327 return 0; |
| 329 } | 328 } |
| 330 | 329 |
| 331 /////////////////////////////////////////////////////////////////////////////// | 330 /////////////////////////////////////////////////////////////////////////////// |
| 332 | 331 |
| 333 ColorTableEffect::ColorTableEffect(GrTexture* texture, unsigned flags) | 332 ColorTableEffect::ColorTableEffect(GrTexture* texture, unsigned flags) |
| 334 : fTextureAccess(texture, "a") | 333 : fTextureAccess(texture, "a") |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 412 SkColorFilter* SkTableColorFilter::CreateARGB(const uint8_t tableA[256], | 411 SkColorFilter* SkTableColorFilter::CreateARGB(const uint8_t tableA[256], |
| 413 const uint8_t tableR[256], | 412 const uint8_t tableR[256], |
| 414 const uint8_t tableG[256], | 413 const uint8_t tableG[256], |
| 415 const uint8_t tableB[256]) { | 414 const uint8_t tableB[256]) { |
| 416 return SkNEW_ARGS(SkTable_ColorFilter, (tableA, tableR, tableG, tableB)); | 415 return SkNEW_ARGS(SkTable_ColorFilter, (tableA, tableR, tableG, tableB)); |
| 417 } | 416 } |
| 418 | 417 |
| 419 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkTableColorFilter) | 418 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkTableColorFilter) |
| 420 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkTable_ColorFilter) | 419 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkTable_ColorFilter) |
| 421 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 420 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |