Home | History | Annotate | Download | only in effects
      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 #include "SkColorFilter.h"
      9 #include "SkFlattenable.h"
     10 
     11 #ifndef SkOverdrawColorFilter_DEFINED
     12 #define SkOverdrawColorFilter_DEFINED
     13 
     14 /**
     15  *  Uses the value in the src alpha channel to set the dst pixel.
     16  *  0             -> fColors[0]
     17  *  1             -> fColors[1]
     18  *  ...
     19  *  5 (or larger) -> fColors[5]
     20  *
     21  */
     22 class SK_API SkOverdrawColorFilter : public SkColorFilter {
     23 public:
     24     static constexpr int kNumColors = 6;
     25 
     26     static sk_sp<SkOverdrawColorFilter> Make(const SkPMColor colors[kNumColors]) {
     27         return sk_sp<SkOverdrawColorFilter>(new SkOverdrawColorFilter(colors));
     28     }
     29 
     30 #if SK_SUPPORT_GPU
     31     std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(
     32             GrContext*, const GrColorSpaceInfo&) const override;
     33 #endif
     34 
     35     void toString(SkString* str) const override;
     36 
     37     static sk_sp<SkFlattenable> CreateProc(SkReadBuffer& buffer);
     38     Factory getFactory() const override { return CreateProc; }
     39     SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
     40 
     41 protected:
     42     void flatten(SkWriteBuffer& buffer) const override;
     43 
     44 private:
     45     SkOverdrawColorFilter(const SkPMColor colors[kNumColors]) {
     46         memcpy(fColors, colors, kNumColors * sizeof(SkPMColor));
     47     }
     48 
     49     void onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*, bool) const override;
     50 
     51     SkPMColor fColors[kNumColors];
     52 
     53     typedef SkColorFilter INHERITED;
     54 };
     55 
     56 #endif // SkOverdrawColorFilter_DEFINED
     57