OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef SkColorSpace_Base_DEFINED | 8 #ifndef SkColorSpace_Base_DEFINED |
9 #define SkColorSpace_Base_DEFINED | 9 #define SkColorSpace_Base_DEFINED |
10 | 10 |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
122 // sk_malloc_throw and therefore must be sk_freed. We overload new to | 122 // sk_malloc_throw and therefore must be sk_freed. We overload new to |
123 // also call sk_malloc_throw so that memory can be unconditionally released | 123 // also call sk_malloc_throw so that memory can be unconditionally released |
124 // using sk_free in an overloaded delete. Overloading regular new means we | 124 // using sk_free in an overloaded delete. Overloading regular new means we |
125 // must also overload placement new. | 125 // must also overload placement new. |
126 void* operator new(size_t size) { return sk_malloc_throw(size); } | 126 void* operator new(size_t size) { return sk_malloc_throw(size); } |
127 void* operator new(size_t, void* p) { return p; } | 127 void* operator new(size_t, void* p) { return p; } |
128 void operator delete(void* p) { sk_free(p); } | 128 void operator delete(void* p) { sk_free(p); } |
129 }; | 129 }; |
130 | 130 |
131 struct SkColorLookUpTable : public SkRefCnt { | 131 struct SkColorLookUpTable : public SkRefCnt { |
132 static constexpr uint8_t kOutputChannels = 3; | |
133 | |
132 uint8_t fInputChannels; | 134 uint8_t fInputChannels; |
mtklein
2016/07/21 19:46:45
Is this one ever going to be not 3?
msarett
2016/07/21 19:49:28
Once we support CMYK, yes. That's why I'm letting
| |
133 uint8_t fOutputChannels; | |
134 uint8_t fGridPoints[3]; | 135 uint8_t fGridPoints[3]; |
135 std::unique_ptr<float[]> fTable; | |
136 | 136 |
137 SkColorLookUpTable() | 137 const float* table() const { |
138 : fInputChannels(0) | 138 return SkTAddOffset<const float>(this, sizeof(SkColorLookUpTable)); |
139 , fOutputChannels(0) | 139 } |
140 , fTable(nullptr) | 140 |
141 SkColorLookUpTable(uint8_t inputChannels, uint8_t gridPoints[3]) | |
142 : fInputChannels(inputChannels) | |
141 { | 143 { |
142 fGridPoints[0] = fGridPoints[1] = fGridPoints[2] = 0; | 144 SkASSERT(3 == inputChannels); |
145 memcpy(fGridPoints, gridPoints, 3 * sizeof(uint8_t)); | |
mtklein
2016/07/21 19:46:45
a.k.a, 3
msarett
2016/07/21 19:49:28
True.
| |
143 } | 146 } |
147 | |
148 // Objects of this type are created in a custom fashion using sk_malloc_thro w | |
149 // and therefore must be sk_freed. | |
150 void* operator new(size_t size) = delete; | |
151 void* operator new(size_t, void* p) { return p; } | |
152 void operator delete(void* p) { sk_free(p); } | |
144 }; | 153 }; |
145 | 154 |
146 class SkColorSpace_Base : public SkColorSpace { | 155 class SkColorSpace_Base : public SkColorSpace { |
147 public: | 156 public: |
148 | 157 |
149 static sk_sp<SkColorSpace> NewRGB(float gammas[3], const SkMatrix44& toXYZD5 0); | 158 static sk_sp<SkColorSpace> NewRGB(float gammas[3], const SkMatrix44& toXYZD5 0); |
150 | 159 |
151 const SkGammas* gammas() const { return fGammas.get(); } | 160 const SkGammas* gammas() const { return fGammas.get(); } |
152 | 161 |
153 const SkColorLookUpTable* colorLUT() const { return fColorLUT.get(); } | 162 const SkColorLookUpTable* colorLUT() const { return fColorLUT.get(); } |
(...skipping 27 matching lines...) Expand all Loading... | |
181 | 190 |
182 static inline const SkColorSpace_Base* as_CSB(const SkColorSpace* colorSpace) { | 191 static inline const SkColorSpace_Base* as_CSB(const SkColorSpace* colorSpace) { |
183 return static_cast<const SkColorSpace_Base*>(colorSpace); | 192 return static_cast<const SkColorSpace_Base*>(colorSpace); |
184 } | 193 } |
185 | 194 |
186 static inline SkColorSpace_Base* as_CSB(const sk_sp<SkColorSpace>& colorSpace) { | 195 static inline SkColorSpace_Base* as_CSB(const sk_sp<SkColorSpace>& colorSpace) { |
187 return static_cast<SkColorSpace_Base*>(colorSpace.get()); | 196 return static_cast<SkColorSpace_Base*>(colorSpace.get()); |
188 } | 197 } |
189 | 198 |
190 #endif | 199 #endif |
OLD | NEW |