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 #include "SkString.h" | 7 #include "SkString.h" |
8 | 8 |
9 class SkTable_ColorFilter : public SkColorFilter { | 9 class SkTable_ColorFilter : public SkColorFilter { |
10 public: | 10 public: |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 }; | 264 }; |
265 | 265 |
266 class GLColorTableEffect : public GrGLEffect { | 266 class GLColorTableEffect : public GrGLEffect { |
267 public: | 267 public: |
268 GLColorTableEffect(const GrBackendEffectFactory&, const GrDrawEffect&); | 268 GLColorTableEffect(const GrBackendEffectFactory&, const GrDrawEffect&); |
269 | 269 |
270 virtual void emitCode(GrGLShaderBuilder*, | 270 virtual void emitCode(GrGLShaderBuilder*, |
271 const GrDrawEffect&, | 271 const GrDrawEffect&, |
272 EffectKey, | 272 EffectKey, |
273 const char* outputColor, | 273 const char* outputColor, |
274 const char* inputColor, | 274 const GrGLSLExpr4& inputColor, |
275 const TransformedCoordsArray&, | 275 const TransformedCoordsArray&, |
276 const TextureSamplerArray&) SK_OVERRIDE; | 276 const TextureSamplerArray&) SK_OVERRIDE; |
277 | 277 |
278 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE {} | 278 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE {} |
279 | 279 |
280 static EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&); | 280 static EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&); |
281 | 281 |
282 private: | 282 private: |
283 | 283 |
284 typedef GrGLEffect INHERITED; | 284 typedef GrGLEffect INHERITED; |
285 }; | 285 }; |
286 | 286 |
287 GLColorTableEffect::GLColorTableEffect(const GrBackendEffectFactory& factory, co
nst GrDrawEffect&) | 287 GLColorTableEffect::GLColorTableEffect(const GrBackendEffectFactory& factory, co
nst GrDrawEffect&) |
288 : INHERITED(factory) { | 288 : INHERITED(factory) { |
289 } | 289 } |
290 | 290 |
291 void GLColorTableEffect::emitCode(GrGLShaderBuilder* builder, | 291 void GLColorTableEffect::emitCode(GrGLShaderBuilder* builder, |
292 const GrDrawEffect&, | 292 const GrDrawEffect&, |
293 EffectKey, | 293 EffectKey, |
294 const char* outputColor, | 294 const char* outputColor, |
295 const char* inputColor, | 295 const GrGLSLExpr4& inputColor, |
296 const TransformedCoordsArray&, | 296 const TransformedCoordsArray&, |
297 const TextureSamplerArray& samplers) { | 297 const TextureSamplerArray& samplers) { |
298 | 298 |
299 static const float kColorScaleFactor = 255.0f / 256.0f; | 299 static const float kColorScaleFactor = 255.0f / 256.0f; |
300 static const float kColorOffsetFactor = 1.0f / 512.0f; | 300 static const float kColorOffsetFactor = 1.0f / 512.0f; |
301 if (NULL == inputColor) { | 301 if (inputColor.isOnes()) { |
302 // the input color is solid white (all ones). | 302 // the input color is solid white (all ones). |
303 static const float kMaxValue = kColorScaleFactor + kColorOffsetFactor; | 303 static const float kMaxValue = kColorScaleFactor + kColorOffsetFactor; |
304 builder->fsCodeAppendf("\t\tvec4 coord = vec4(%f, %f, %f, %f);\n", | 304 builder->fsCodeAppendf("\t\tvec4 coord = vec4(%f, %f, %f, %f);\n", |
305 kMaxValue, kMaxValue, kMaxValue, kMaxValue); | 305 kMaxValue, kMaxValue, kMaxValue, kMaxValue); |
306 | 306 |
307 } else { | 307 } else { |
308 builder->fsCodeAppendf("\t\tfloat nonZeroAlpha = max(%s.a, .0001);\n", i
nputColor); | 308 builder->fsCodeAppendf("\t\tfloat nonZeroAlpha = %s;\n", GrGLSL::max(inp
utColor.a(), 0.0001f).c_str()); |
309 builder->fsCodeAppendf("\t\tvec4 coord = vec4(%s.rgb / nonZeroAlpha, non
ZeroAlpha);\n", inputColor); | 309 builder->fsCodeAppendf("\t\tvec4 coord = vec4(%s.rgb / nonZeroAlpha, non
ZeroAlpha);\n", inputColor.c_str()); |
310 builder->fsCodeAppendf("\t\tcoord = coord * %f + vec4(%f, %f, %f, %f);\n
", | 310 builder->fsCodeAppendf("\t\tcoord = coord * %f + vec4(%f, %f, %f, %f);\n
", |
311 kColorScaleFactor, | 311 kColorScaleFactor, |
312 kColorOffsetFactor, kColorOffsetFactor, | 312 kColorOffsetFactor, kColorOffsetFactor, |
313 kColorOffsetFactor, kColorOffsetFactor); | 313 kColorOffsetFactor, kColorOffsetFactor); |
314 } | 314 } |
315 | 315 |
316 builder->fsCodeAppendf("\t\t%s.a = ", outputColor); | 316 builder->fsCodeAppendf("\t\t%s.a = ", outputColor); |
317 builder->fsAppendTextureLookup(samplers[0], "vec2(coord.a, 0.125)"); | 317 builder->fsAppendTextureLookup(samplers[0], "vec2(coord.a, 0.125)"); |
318 builder->fsCodeAppend(";\n"); | 318 builder->fsCodeAppend(";\n"); |
319 | 319 |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
424 SkColorFilter* SkTableColorFilter::CreateARGB(const uint8_t tableA[256], | 424 SkColorFilter* SkTableColorFilter::CreateARGB(const uint8_t tableA[256], |
425 const uint8_t tableR[256], | 425 const uint8_t tableR[256], |
426 const uint8_t tableG[256], | 426 const uint8_t tableG[256], |
427 const uint8_t tableB[256]) { | 427 const uint8_t tableB[256]) { |
428 return SkNEW_ARGS(SkTable_ColorFilter, (tableA, tableR, tableG, tableB)); | 428 return SkNEW_ARGS(SkTable_ColorFilter, (tableA, tableR, tableG, tableB)); |
429 } | 429 } |
430 | 430 |
431 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkTableColorFilter) | 431 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkTableColorFilter) |
432 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkTable_ColorFilter) | 432 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkTable_ColorFilter) |
433 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 433 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
OLD | NEW |