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 |