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

          Line data    Source code
       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 SkColorLookUpTable_DEFINED
       9             : #define SkColorLookUpTable_DEFINED
      10             : 
      11             : #include "SkRefCnt.h"
      12             : #include "SkTemplates.h"
      13             : 
      14             : static constexpr uint8_t kMaxColorChannels = 4;
      15             : 
      16           0 : class SkColorLookUpTable : public SkRefCnt {
      17             : public:
      18             :     static constexpr uint8_t kOutputChannels = 3;
      19             : 
      20           0 :     SkColorLookUpTable(uint8_t inputChannels, const uint8_t gridPoints[kMaxColorChannels])
      21           0 :         : fInputChannels(inputChannels) {
      22           0 :         SkASSERT(inputChannels >= 1 && inputChannels <= kMaxColorChannels);
      23           0 :         memcpy(fGridPoints, gridPoints, fInputChannels * sizeof(uint8_t));
      24           0 :     }
      25             : 
      26             :     /**
      27             :      *  If fInputChannels == kOutputChannels == 3, performs tetrahedral interpolation, otherwise
      28             :      *  performs multilinear interpolation (ie LERP for n =1, bilinear for n=2, trilinear for n=3)
      29             :      *  with fInputChannels input dimensions and kOutputChannels output dimensions.
      30             :      *  |dst| can be |src| only when fInputChannels == kOutputChannels == 3
      31             :      *  |dst| is the destination pixel, must have at least kOutputChannels elements.
      32             :      *  |src| is the source pixel, must have at least fInputChannels elements.
      33             :      */
      34             :     void interp(float* dst, const float* src) const;
      35             : 
      36           0 :     int inputChannels() const { return fInputChannels; }
      37             : 
      38           0 :     int outputChannels() const { return kOutputChannels; }
      39             :     
      40             :     int gridPoints(int dimension) const {
      41             :         SkASSERT(dimension >= 0 && dimension < inputChannels());
      42             :         return fGridPoints[dimension];
      43             :     }
      44             : 
      45             : private:
      46           0 :     const float* table() const {
      47           0 :         return SkTAddOffset<const float>(this, sizeof(SkColorLookUpTable));
      48             :     }
      49             : 
      50             :     /**
      51             :      *  Performs tetrahedral interpolation with 3 input and 3 output dimensions.
      52             :      *  |dst| can be |src|
      53             :      */
      54             :     void interp3D(float* dst, const float* src) const;
      55             : 
      56             :     // recursively LERPs one dimension at a time. Used by interp() for the general case
      57             :     float interpDimension(const float* src, int inputDimension, int outputDimension,
      58             :                           int index[kMaxColorChannels]) const;
      59             : 
      60             :     uint8_t fInputChannels;
      61             :     uint8_t fGridPoints[kMaxColorChannels];
      62             : 
      63             : public:
      64             :     // Objects of this type are created in a custom fashion using sk_malloc_throw
      65             :     // and therefore must be sk_freed.
      66             :     void* operator new(size_t size) = delete;
      67           0 :     void* operator new(size_t, void* p) { return p; }
      68           0 :     void operator delete(void* p) { sk_free(p); }
      69             : };
      70             : 
      71             : #endif

Generated by: LCOV version 1.13