blob: d35540c72847b6f1ecbbb1ceff5e6ab1af677c73 [file] [log] [blame]
/*
* Copyright 2013 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkLumaColorFilter_DEFINED
#define SkLumaColorFilter_DEFINED
#include "include/core/SkColorFilter.h"
#include "include/core/SkRefCnt.h"
class SkRasterPipeline;
/**
* SkLumaColorFilter multiplies the luma of its input into the alpha channel,
* and sets the red, green, and blue channels to zero.
*
* SkLumaColorFilter(r,g,b,a) = {0,0,0, a * luma(r,g,b)}
*
* This is similar to a luminanceToAlpha feColorMatrix,
* but note how this filter folds in the previous alpha,
* something an feColorMatrix cannot do.
*
* feColorMatrix(luminanceToAlpha; r,g,b,a) = {0,0,0, luma(r,g,b)}
*
* (Despite its name, an feColorMatrix using luminanceToAlpha does
* actually compute luma, a dot-product of gamma-encoded color channels,
* not luminance, a dot-product of linear color channels. So at least
* SkLumaColorFilter and feColorMatrix+luminanceToAlpha agree there.)
*/
#include "include/core/SkFlattenable.h"
class SK_API SkLumaColorFilter : public SkColorFilter {
public:
static sk_sp<SkColorFilter> Make();
#if SK_SUPPORT_GPU
std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrRecordingContext*,
const GrColorInfo&) const override;
#endif
protected:
void flatten(SkWriteBuffer&) const override;
private:
SK_FLATTENABLE_HOOKS(SkLumaColorFilter)
SkLumaColorFilter();
bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override;
typedef SkColorFilter INHERITED;
};
#endif