1 /* 2 * Copyright 2016 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkColorMatrixFilter_DEFINED 9 #define SkColorMatrixFilter_DEFINED 10 11 #include "SkColorFilter.h" 12 13 class SK_API SkColorMatrixFilterRowMajor255 : public SkColorFilter { 14 public: 15 SkColorMatrixFilterRowMajor255() {} 16 explicit SkColorMatrixFilterRowMajor255(const SkScalar array[20]); 17 18 /** Creates a color matrix filter that returns the same value in all four channels. */ 19 static sk_sp<SkColorFilter> MakeSingleChannelOutput(const SkScalar row[5]); 20 21 void filterSpan(const SkPMColor src[], int count, SkPMColor[]) const override; 22 void filterSpan4f(const SkPM4f src[], int count, SkPM4f[]) const override; 23 uint32_t getFlags() const override; 24 bool asColorMatrix(SkScalar matrix[20]) const override; 25 sk_sp<SkColorFilter> makeComposed(sk_sp<SkColorFilter>) const override; 26 27 #if SK_SUPPORT_GPU 28 sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override; 29 #endif 30 31 SK_TO_STRING_OVERRIDE() 32 33 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorMatrixFilter) 34 35 protected: 36 void flatten(SkWriteBuffer&) const override; 37 38 private: 39 bool onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*, 40 bool shaderIsOpaque) const override; 41 42 SkScalar fMatrix[20]; 43 float fTranspose[20]; // for Sk4s 44 uint32_t fFlags; 45 46 void initState(); 47 48 typedef SkColorFilter INHERITED; 49 }; 50 51 #endif 52