LCOV - code coverage report
Current view: top level - gfx/skia/skia/src/gpu/effects - GrNonlinearColorSpaceXformEffect.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 6 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 7 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2017 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 GrNonlinearColorSpaceXformEffect_DEFINED
       9             : #define GrNonlinearColorSpaceXformEffect_DEFINED
      10             : 
      11             : #include "GrFragmentProcessor.h"
      12             : #include "SkColorSpace.h"
      13             : #include "SkMatrix44.h"
      14             : 
      15             : /**
      16             :  * The output of this effect is the input, transformed into a different color space.
      17             :  * This effect is used for nonlinear blending color space support - it does not assume HW sRGB
      18             :  * capabilities, and performs both the source and destination transfer functions numerically in
      19             :  * the shader. Any parametric transfer function is supported. Because of the nonlinear blending,
      20             :  * premultiplication is also nonlinear - source pixels are unpremultiplied before the source
      21             :  * transfer function, and then premultiplied after the destination transfer function.
      22             :  */
      23           0 : class GrNonlinearColorSpaceXformEffect : public GrFragmentProcessor {
      24             : public:
      25             :     /**
      26             :      * The conversion effect is only well defined with a valid source and destination color space.
      27             :      * This will return nullptr if either space is nullptr, if both spaces are equal, or if either
      28             :      * space has a non-parametric transfer funcion (e.g. lookup table or A2B).
      29             :      */
      30             :     static sk_sp<GrFragmentProcessor> Make(const SkColorSpace* src, const SkColorSpace* dst);
      31             : 
      32           0 :     const char* name() const override { return "NonlinearColorSpaceXform"; }
      33             : 
      34             :     static const int kNumTransferFnCoeffs = 7;
      35             : 
      36             :     /**
      37             :      * Flags that specify which operations are performed for one particular conversion.
      38             :      * Some color space pairs may not need all operations, if one or both transfer functions
      39             :      * is linear, or if the gamuts are the same.
      40             :      */
      41             :     enum Ops {
      42             :         kSrcTransfer_Op = 0x1,
      43             :         kGamutXform_Op  = 0x2,
      44             :         kDstTransfer_Op = 0x4,
      45             :     };
      46             : 
      47           0 :     uint32_t ops() const { return fOps; }
      48           0 :     const float* srcTransferFnCoeffs() const { return fSrcTransferFnCoeffs; }
      49           0 :     const float* dstTransferFnCoeffs() const { return fDstTransferFnCoeffs; }
      50           0 :     const SkMatrix44& gamutXform() const { return fGamutXform; }
      51             : 
      52             : private:
      53             :     GrNonlinearColorSpaceXformEffect(uint32_t ops,
      54             :                                      const SkColorSpaceTransferFn& srcTransferFn,
      55             :                                      const SkColorSpaceTransferFn& dstTransferFn,
      56             :                                      const SkMatrix44& gamutXform);
      57             : 
      58             :     GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
      59             :     void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
      60             :     bool onIsEqual(const GrFragmentProcessor&) const override;
      61             : 
      62             :     float fSrcTransferFnCoeffs[kNumTransferFnCoeffs];
      63             :     float fDstTransferFnCoeffs[kNumTransferFnCoeffs];
      64             :     SkMatrix44 fGamutXform;
      65             :     uint32_t fOps;
      66             : 
      67             :     GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
      68             : 
      69             :     typedef GrFragmentProcessor INHERITED;
      70             : };
      71             : 
      72             : #endif

Generated by: LCOV version 1.13