1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2015 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef sktext_gpu_DistanceFieldAdjustTable_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define sktext_gpu_DistanceFieldAdjustTable_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkScalar.h" 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker template <typename T> class SkNoDestructor; 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker namespace sktext::gpu { 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker // Distance field text needs this table to compute a value for use in the fragment shader. 18*c8dee2aaSAndroid Build Coastguard Worker class DistanceFieldAdjustTable { 19*c8dee2aaSAndroid Build Coastguard Worker public: 20*c8dee2aaSAndroid Build Coastguard Worker static const DistanceFieldAdjustTable* Get(); 21*c8dee2aaSAndroid Build Coastguard Worker ~DistanceFieldAdjustTable()22*c8dee2aaSAndroid Build Coastguard Worker ~DistanceFieldAdjustTable() { 23*c8dee2aaSAndroid Build Coastguard Worker delete[] fTable; 24*c8dee2aaSAndroid Build Coastguard Worker delete[] fGammaCorrectTable; 25*c8dee2aaSAndroid Build Coastguard Worker } 26*c8dee2aaSAndroid Build Coastguard Worker getAdjustment(int lum,bool useGammaCorrectTable)27*c8dee2aaSAndroid Build Coastguard Worker SkScalar getAdjustment(int lum, bool useGammaCorrectTable) const { 28*c8dee2aaSAndroid Build Coastguard Worker lum >>= kDistanceAdjustLumShift; 29*c8dee2aaSAndroid Build Coastguard Worker return useGammaCorrectTable ? fGammaCorrectTable[lum] : fTable[lum]; 30*c8dee2aaSAndroid Build Coastguard Worker } 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker private: 33*c8dee2aaSAndroid Build Coastguard Worker DistanceFieldAdjustTable(); 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard Worker static constexpr int kDistanceAdjustLumShift = 5; 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker SkScalar* fTable; 38*c8dee2aaSAndroid Build Coastguard Worker SkScalar* fGammaCorrectTable; 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker friend class SkNoDestructor<DistanceFieldAdjustTable>; 41*c8dee2aaSAndroid Build Coastguard Worker }; 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard Worker } // namespace sktext::gpu 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker #endif 46