16c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org/*
26c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org * Copyright 2013 Google Inc.
36c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org *
46c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be
56c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org * found in the LICENSE file.
66c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org */
76c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org
86c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org#include "SkLumaColorFilter.h"
9b9641bd55a8f63757a63d9302755feb55d2e9502Mike Reed#include "SkPM4f.h"
10a4083c97d48e8a4f88e2797d7363f141e3d42553Cary Clark#include "SkColorData.h"
111f49f26353997195030aeab41c8665e1860d2958Mike Klein#include "SkRasterPipeline.h"
126c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org#include "SkString.h"
136c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org
146c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org#if SK_SUPPORT_GPU
156c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org#include "GrContext.h"
1614efcbf3497e6a280cc141e6dec179b4ad4565afEthan Nicholas#include "effects/GrLumaColorFilterEffect.h"
1764c4728c70001ed074fecf5c4e083781987b12e9egdaniel#include "glsl/GrGLSLFragmentProcessor.h"
182d721d33aad192cc8a7a1321504b39bdca2a57ceegdaniel#include "glsl/GrGLSLFragmentShaderBuilder.h"
196c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org#endif
206c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org
21fdf31035a9639c2d377bdf2ddb404d269f8ca42aMike Kleinvoid SkLumaColorFilter::onAppendStages(SkRasterPipeline* p,
22744908e5e81f81f34288a1b5547aa4ea990ad13dMike Klein                                       SkColorSpace* dst,
23ac04fef619ad3939a25e66bdaef6f6b1e7f5ca50Herb Derby                                       SkArenaAlloc* scratch,
24744908e5e81f81f34288a1b5547aa4ea990ad13dMike Klein                                       bool shaderIsOpaque) const {
251f49f26353997195030aeab41c8665e1860d2958Mike Klein    p->append(SkRasterPipeline::luminance_to_alpha);
261f49f26353997195030aeab41c8665e1860d2958Mike Klein}
271f49f26353997195030aeab41c8665e1860d2958Mike Klein
28d053ce9c54d4e5937a142278359e5a4cde18095ereedsk_sp<SkColorFilter> SkLumaColorFilter::Make() {
29d053ce9c54d4e5937a142278359e5a4cde18095ereed    return sk_sp<SkColorFilter>(new SkLumaColorFilter);
30d053ce9c54d4e5937a142278359e5a4cde18095ereed}
316c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org
329fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reedSkLumaColorFilter::SkLumaColorFilter() : INHERITED() {}
336c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org
3460c9b58b3214b0154c931656e91e39b230e987d8reedsk_sp<SkFlattenable> SkLumaColorFilter::CreateProc(SkReadBuffer&) {
3560c9b58b3214b0154c931656e91e39b230e987d8reed    return Make();
3660c9b58b3214b0154c931656e91e39b230e987d8reed}
376c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org
389fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reedvoid SkLumaColorFilter::flatten(SkWriteBuffer&) const {}
399fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed
400f10f7bf1fb43ca6346dc220a076773b1f19a367commit-bot@chromium.org#ifndef SK_IGNORE_TO_STRING
416c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.orgvoid SkLumaColorFilter::toString(SkString* str) const {
426c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org    str->append("SkLumaColorFilter ");
436c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org}
446c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org#endif
456c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org
466c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org#if SK_SUPPORT_GPU
474cbb6e6d551e8bea2c040b1aa9dce253cffb9af0Brian Salomonstd::unique_ptr<GrFragmentProcessor> SkLumaColorFilter::asFragmentProcessor(
484cbb6e6d551e8bea2c040b1aa9dce253cffb9af0Brian Salomon        GrContext*, const GrColorSpaceInfo&) const {
4914efcbf3497e6a280cc141e6dec179b4ad4565afEthan Nicholas    return GrLumaColorFilterEffect::Make();
506c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org}
516c1ee2d4e727357451c8a6fcf4a08e75890b5d6dcommit-bot@chromium.org#endif
52