| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 #include "SkArithmeticMode_gpu.h" | 8 #include "SkArithmeticMode_gpu.h" |
| 9 | 9 |
| 10 #if SK_SUPPORT_GPU | 10 #if SK_SUPPORT_GPU |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 return SkNEW_ARGS(ArithmeticXP, (k1, k2, k3, k4, enforcePMColor, dstText
ure, | 165 return SkNEW_ARGS(ArithmeticXP, (k1, k2, k3, k4, enforcePMColor, dstText
ure, |
| 166 willReadDstColor)); | 166 willReadDstColor)); |
| 167 } | 167 } |
| 168 | 168 |
| 169 ~ArithmeticXP() override {}; | 169 ~ArithmeticXP() override {}; |
| 170 | 170 |
| 171 const char* name() const override { return "Arithmetic"; } | 171 const char* name() const override { return "Arithmetic"; } |
| 172 | 172 |
| 173 GrGLXferProcessor* createGLInstance() const override; | 173 GrGLXferProcessor* createGLInstance() const override; |
| 174 | 174 |
| 175 bool hasSecondaryOutput() const override { return false; } | |
| 176 | |
| 177 float k1() const { return fK1; } | 175 float k1() const { return fK1; } |
| 178 float k2() const { return fK2; } | 176 float k2() const { return fK2; } |
| 179 float k3() const { return fK3; } | 177 float k3() const { return fK3; } |
| 180 float k4() const { return fK4; } | 178 float k4() const { return fK4; } |
| 181 bool enforcePMColor() const { return fEnforcePMColor; } | 179 bool enforcePMColor() const { return fEnforcePMColor; } |
| 182 | 180 |
| 183 private: | 181 private: |
| 184 ArithmeticXP(float k1, float k2, float k3, float k4, bool enforcePMColor, | 182 ArithmeticXP(float k1, float k2, float k3, float k4, bool enforcePMColor, |
| 185 const DstTexture*, bool willReadDstColor); | 183 const DstTexture*, bool willReadDstColor); |
| 186 | 184 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 ~GLArithmeticXP() override {} | 219 ~GLArithmeticXP() override {} |
| 222 | 220 |
| 223 static void GenKey(const GrProcessor& processor, const GrGLSLCaps& caps, | 221 static void GenKey(const GrProcessor& processor, const GrGLSLCaps& caps, |
| 224 GrProcessorKeyBuilder* b) { | 222 GrProcessorKeyBuilder* b) { |
| 225 const ArithmeticXP& arith = processor.cast<ArithmeticXP>(); | 223 const ArithmeticXP& arith = processor.cast<ArithmeticXP>(); |
| 226 uint32_t key = arith.enforcePMColor() ? 1 : 0; | 224 uint32_t key = arith.enforcePMColor() ? 1 : 0; |
| 227 b->add32(key); | 225 b->add32(key); |
| 228 } | 226 } |
| 229 | 227 |
| 230 private: | 228 private: |
| 231 void onEmitCode(const EmitArgs& args) override { | 229 void emitBlendCodeForDstRead(GrGLXPBuilder* pb, const char* srcColor, const
char* dstColor, |
| 232 GrGLXPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); | 230 const char* outColor, const GrXferProcessor& pr
oc) override { |
| 231 GrGLXPFragmentBuilder* fsBuilder = pb->getFragmentShaderBuilder(); |
| 233 | 232 |
| 234 const char* dstColor = fsBuilder->dstColor(); | 233 fKUni = pb->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
| 234 kVec4f_GrSLType, kDefault_GrSLPrecision, |
| 235 "k"); |
| 236 const char* kUni = pb->getUniformCStr(fKUni); |
| 235 | 237 |
| 236 fKUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibility, | 238 add_arithmetic_code(fsBuilder, srcColor, dstColor, outColor, kUni, fEnfo
rcePMColor); |
| 237 kVec4f_GrSLType, kDefault_GrSLPrecision, | |
| 238 "k"); | |
| 239 const char* kUni = args.fPB->getUniformCStr(fKUni); | |
| 240 | |
| 241 add_arithmetic_code(fsBuilder, args.fInputColor, dstColor, args.fOutputP
rimary, kUni, | |
| 242 fEnforcePMColor); | |
| 243 | |
| 244 fsBuilder->codeAppendf("%s = %s * %s + (vec4(1.0) - %s) * %s;", | |
| 245 args.fOutputPrimary, args.fOutputPrimary, args.fI
nputCoverage, | |
| 246 args.fInputCoverage, dstColor); | |
| 247 } | 239 } |
| 248 | 240 |
| 249 void onSetData(const GrGLProgramDataManager& pdman, | 241 void onSetData(const GrGLProgramDataManager& pdman, |
| 250 const GrXferProcessor& processor) override { | 242 const GrXferProcessor& processor) override { |
| 251 const ArithmeticXP& arith = processor.cast<ArithmeticXP>(); | 243 const ArithmeticXP& arith = processor.cast<ArithmeticXP>(); |
| 252 pdman.set4f(fKUni, arith.k1(), arith.k2(), arith.k3(), arith.k4()); | 244 pdman.set4f(fKUni, arith.k1(), arith.k2(), arith.k3(), arith.k4()); |
| 253 fEnforcePMColor = arith.enforcePMColor(); | 245 fEnforcePMColor = arith.enforcePMColor(); |
| 254 }; | 246 }; |
| 255 | 247 |
| 256 GrGLProgramDataManager::UniformHandle fKUni; | 248 GrGLProgramDataManager::UniformHandle fKUni; |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 float k1 = random->nextF(); | 317 float k1 = random->nextF(); |
| 326 float k2 = random->nextF(); | 318 float k2 = random->nextF(); |
| 327 float k3 = random->nextF(); | 319 float k3 = random->nextF(); |
| 328 float k4 = random->nextF(); | 320 float k4 = random->nextF(); |
| 329 bool enforcePMColor = random->nextBool(); | 321 bool enforcePMColor = random->nextBool(); |
| 330 | 322 |
| 331 return GrArithmeticXPFactory::Create(k1, k2, k3, k4, enforcePMColor); | 323 return GrArithmeticXPFactory::Create(k1, k2, k3, k4, enforcePMColor); |
| 332 } | 324 } |
| 333 | 325 |
| 334 #endif | 326 #endif |
| OLD | NEW |