OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
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 #include "SkComposeShader.h" | 8 #include "SkComposeShader.h" |
9 #include "SkColorFilter.h" | 9 #include "SkColorFilter.h" |
10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 #if SK_SUPPORT_GPU | 179 #if SK_SUPPORT_GPU |
180 | 180 |
181 #include "effects/GrConstColorProcessor.h" | 181 #include "effects/GrConstColorProcessor.h" |
182 #include "effects/GrXfermodeFragmentProcessor.h" | 182 #include "effects/GrXfermodeFragmentProcessor.h" |
183 | 183 |
184 ///////////////////////////////////////////////////////////////////// | 184 ///////////////////////////////////////////////////////////////////// |
185 | 185 |
186 const GrFragmentProcessor* SkComposeShader::asFragmentProcessor(GrContext* conte
xt, | 186 const GrFragmentProcessor* SkComposeShader::asFragmentProcessor(GrContext* conte
xt, |
187 const SkMatrix& view
M, | 187 const SkMatrix& view
M, |
188 const SkMatrix* loca
lMatrix, | 188 const SkMatrix* loca
lMatrix, |
189 SkFilterQuality fq)
const { | 189 SkFilterQuality fq, |
| 190 bool gammaCorrect) c
onst { |
190 // Fragment processor will only support SkXfermode::Mode modes currently. | 191 // Fragment processor will only support SkXfermode::Mode modes currently. |
191 SkXfermode::Mode mode; | 192 SkXfermode::Mode mode; |
192 if (!(SkXfermode::AsMode(fMode, &mode))) { | 193 if (!(SkXfermode::AsMode(fMode, &mode))) { |
193 return nullptr; | 194 return nullptr; |
194 } | 195 } |
195 | 196 |
196 switch (mode) { | 197 switch (mode) { |
197 case SkXfermode::kClear_Mode: | 198 case SkXfermode::kClear_Mode: |
198 return GrConstColorProcessor::Create(GrColor_TRANSPARENT_BLACK, | 199 return GrConstColorProcessor::Create(GrColor_TRANSPARENT_BLACK, |
199 GrConstColorProcessor::kIgnore_
InputMode); | 200 GrConstColorProcessor::kIgnore_
InputMode); |
200 break; | 201 break; |
201 case SkXfermode::kSrc_Mode: | 202 case SkXfermode::kSrc_Mode: |
202 return fShaderB->asFragmentProcessor(context, viewM, localMatrix, fq
); | 203 return fShaderB->asFragmentProcessor(context, viewM, localMatrix, fq
, gammaCorrect); |
203 break; | 204 break; |
204 case SkXfermode::kDst_Mode: | 205 case SkXfermode::kDst_Mode: |
205 return fShaderA->asFragmentProcessor(context, viewM, localMatrix, fq
); | 206 return fShaderA->asFragmentProcessor(context, viewM, localMatrix, fq
, gammaCorrect); |
206 break; | 207 break; |
207 default: | 208 default: |
208 SkAutoTUnref<const GrFragmentProcessor> fpA(fShaderA->asFragmentProc
essor(context, | 209 SkAutoTUnref<const GrFragmentProcessor> fpA(fShaderA->asFragmentProc
essor(context, |
209 viewM, localMatrix, fq))
; | 210 viewM, localMatrix, fq,
gammaCorrect)); |
210 if (!fpA.get()) { | 211 if (!fpA.get()) { |
211 return nullptr; | 212 return nullptr; |
212 } | 213 } |
213 SkAutoTUnref<const GrFragmentProcessor> fpB(fShaderB->asFragmentProc
essor(context, | 214 SkAutoTUnref<const GrFragmentProcessor> fpB(fShaderB->asFragmentProc
essor(context, |
214 viewM, localMatrix, fq))
; | 215 viewM, localMatrix, fq,
gammaCorrect)); |
215 if (!fpB.get()) { | 216 if (!fpB.get()) { |
216 return nullptr; | 217 return nullptr; |
217 } | 218 } |
218 return GrXfermodeFragmentProcessor::CreateFromTwoProcessors(fpB, fpA
, mode); | 219 return GrXfermodeFragmentProcessor::CreateFromTwoProcessors(fpB, fpA
, mode); |
219 } | 220 } |
220 } | 221 } |
221 #endif | 222 #endif |
222 | 223 |
223 #ifndef SK_IGNORE_TO_STRING | 224 #ifndef SK_IGNORE_TO_STRING |
224 void SkComposeShader::toString(SkString* str) const { | 225 void SkComposeShader::toString(SkString* str) const { |
(...skipping 21 matching lines...) Expand all Loading... |
246 if (!dst || !src) { | 247 if (!dst || !src) { |
247 return nullptr; | 248 return nullptr; |
248 } | 249 } |
249 return sk_make_sp<SkComposeShader>(std::move(dst), std::move(src), std::move
(xfer)); | 250 return sk_make_sp<SkComposeShader>(std::move(dst), std::move(src), std::move
(xfer)); |
250 } | 251 } |
251 | 252 |
252 sk_sp<SkShader> SkShader::MakeComposeShader(sk_sp<SkShader> dst, sk_sp<SkShader>
src, | 253 sk_sp<SkShader> SkShader::MakeComposeShader(sk_sp<SkShader> dst, sk_sp<SkShader>
src, |
253 SkXfermode::Mode mode) { | 254 SkXfermode::Mode mode) { |
254 return MakeComposeShader(std::move(dst), std::move(src), SkXfermode::Make(mo
de)); | 255 return MakeComposeShader(std::move(dst), std::move(src), SkXfermode::Make(mo
de)); |
255 } | 256 } |
OLD | NEW |