/* * Copyright 2016 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "SkGammaColorFilter.h" #include "SkReadBuffer.h" #include "SkString.h" #if SK_SUPPORT_GPU #include "effects/GrGammaEffect.h" #endif void SkGammaColorFilter::filterSpan(const SkPMColor src[], int count, SkPMColor dst[]) const { // Gamma-correcting bytes to bytes is pretty questionable. SkASSERT(0); for (int i = 0; i < count; ++i) { SkPMColor c = src[i]; // TODO: implement cpu gamma correction? dst[i] = c; } } sk_sp SkGammaColorFilter::Make(SkScalar gamma) { return sk_sp(new SkGammaColorFilter(gamma)); } SkGammaColorFilter::SkGammaColorFilter(SkScalar gamma) : fGamma(gamma) {} sk_sp SkGammaColorFilter::CreateProc(SkReadBuffer& buffer) { SkScalar gamma = buffer.readScalar(); return Make(gamma); } void SkGammaColorFilter::flatten(SkWriteBuffer& buffer) const { this->INHERITED::flatten(buffer); buffer.writeScalar(fGamma); } #ifndef SK_IGNORE_TO_STRING void SkGammaColorFilter::toString(SkString* str) const { str->appendf("SkGammaColorFilter (%.2f)", fGamma); } #endif #if SK_SUPPORT_GPU sk_sp SkGammaColorFilter::asFragmentProcessor(GrContext*) const { return GrGammaEffect::Make(fGamma); } #endif