| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 "GrGLProgram.h" | 8 #include "GrGLProgram.h" |
| 9 | 9 |
| 10 #include "GrAllocator.h" | 10 #include "GrAllocator.h" |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 } | 221 } |
| 222 | 222 |
| 223 // incoming color to current stage being processed. | 223 // incoming color to current stage being processed. |
| 224 SkString inColor = builder.getInputColor(); | 224 SkString inColor = builder.getInputColor(); |
| 225 GrSLConstantVec knownColorValue = builder.getKnownColorValue(); | 225 GrSLConstantVec knownColorValue = builder.getKnownColorValue(); |
| 226 | 226 |
| 227 // Get the coeffs for the Mode-based color filter, determine if color is nee
ded. | 227 // Get the coeffs for the Mode-based color filter, determine if color is nee
ded. |
| 228 SkXfermode::Coeff colorCoeff; | 228 SkXfermode::Coeff colorCoeff; |
| 229 SkXfermode::Coeff filterColorCoeff; | 229 SkXfermode::Coeff filterColorCoeff; |
| 230 SkAssertResult( | 230 SkAssertResult( |
| 231 SkXfermode::ModeAsCoeff(static_cast<SkXfermode::Mode>(header.fColorFilte
rXfermode), | 231 SkXfermode::ModeAsCoeff(header.fColorFilterXfermode, |
| 232 &filterColorCoeff, | 232 &filterColorCoeff, |
| 233 &colorCoeff)); | 233 &colorCoeff)); |
| 234 bool needColor, needFilterColor; | 234 bool needColor, needFilterColor; |
| 235 need_blend_inputs(filterColorCoeff, colorCoeff, &needFilterColor, &needColor
); | 235 need_blend_inputs(filterColorCoeff, colorCoeff, &needFilterColor, &needColor
); |
| 236 | 236 |
| 237 // used in order for builder to return the per-stage uniform handles. | 237 // used in order for builder to return the per-stage uniform handles. |
| 238 typedef SkTArray<GrGLUniformManager::UniformHandle, true>* UniHandleArrayPtr
; | 238 typedef SkTArray<GrGLUniformManager::UniformHandle, true>* UniHandleArrayPtr
; |
| 239 int maxColorOrCovEffectCnt = GrMax(fDesc.numColorEffects(), fDesc.numCoverag
eEffects()); | 239 int maxColorOrCovEffectCnt = GrMax(fDesc.numColorEffects(), fDesc.numCoverag
eEffects()); |
| 240 SkAutoTArray<UniHandleArrayPtr> effectUniformArrays(maxColorOrCovEffectCnt); | 240 SkAutoTArray<UniHandleArrayPtr> effectUniformArrays(maxColorOrCovEffectCnt); |
| 241 SkAutoTArray<GrGLEffect*> glEffects(maxColorOrCovEffectCnt); | 241 SkAutoTArray<GrGLEffect*> glEffects(maxColorOrCovEffectCnt); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 if (header.fDiscardIfZeroCoverage && kOnes_GrSLConstantVec != knownCoverageV
alue) { | 304 if (header.fDiscardIfZeroCoverage && kOnes_GrSLConstantVec != knownCoverageV
alue) { |
| 305 if (kZeros_GrSLConstantVec == knownCoverageValue) { | 305 if (kZeros_GrSLConstantVec == knownCoverageValue) { |
| 306 // This is unfortunate. | 306 // This is unfortunate. |
| 307 builder.fsCodeAppend("\tdiscard;\n"); | 307 builder.fsCodeAppend("\tdiscard;\n"); |
| 308 } else { | 308 } else { |
| 309 builder.fsCodeAppendf("\tif (all(lessThanEqual(%s, vec4(0.0)))) {\n\
t\tdiscard;\n\t}\n", | 309 builder.fsCodeAppendf("\tif (all(lessThanEqual(%s, vec4(0.0)))) {\n\
t\tdiscard;\n\t}\n", |
| 310 inCoverage.c_str()); | 310 inCoverage.c_str()); |
| 311 } | 311 } |
| 312 } | 312 } |
| 313 | 313 |
| 314 GrGLProgramDesc::CoverageOutput coverageOutput = | 314 if (GrGLProgramDesc::CoverageOutputUsesSecondaryOutput(header.fCoverageOutpu
t)) { |
| 315 static_cast<GrGLProgramDesc::CoverageOutput>(header.fCoverageOutput); | |
| 316 if (GrGLProgramDesc::CoverageOutputUsesSecondaryOutput(coverageOutput)) { | |
| 317 const char* secondaryOutputName = builder.enableSecondaryOutput(); | 315 const char* secondaryOutputName = builder.enableSecondaryOutput(); |
| 318 | 316 |
| 319 // default coeff to ones for kCoverage_DualSrcOutput | 317 // default coeff to ones for kCoverage_DualSrcOutput |
| 320 SkString coeff; | 318 SkString coeff; |
| 321 GrSLConstantVec knownCoeffValue = kOnes_GrSLConstantVec; | 319 GrSLConstantVec knownCoeffValue = kOnes_GrSLConstantVec; |
| 322 if (GrGLProgramDesc::kSecondaryCoverageISA_CoverageOutput == header.fCov
erageOutput) { | 320 if (GrGLProgramDesc::kSecondaryCoverageISA_CoverageOutput == header.fCov
erageOutput) { |
| 323 // Get (1-A) into coeff | 321 // Get (1-A) into coeff |
| 324 SkString inColorAlpha; | 322 SkString inColorAlpha; |
| 325 GrGLSLGetComponent4f(&inColorAlpha, | 323 GrGLSLGetComponent4f(&inColorAlpha, |
| 326 inColor.c_str(), | 324 inColor.c_str(), |
| 327 kA_GrColorComponentFlag, | 325 kA_GrColorComponentFlag, |
| 328 knownColorValue, | 326 knownColorValue, |
| 329 true); | 327 true); |
| 330 knownCoeffValue = GrGLSLSubtractf<1>(&coeff, | 328 knownCoeffValue = GrGLSLSubtractf<1>(&coeff, |
| 331 NULL, | 329 NULL, |
| 332 inColorAlpha.c_str(), | 330 inColorAlpha.c_str(), |
| 333 kOnes_GrSLConstantVec, | 331 kOnes_GrSLConstantVec, |
| 334 knownColorValue, | 332 knownColorValue, |
| 335 true); | 333 true); |
| 336 } else if (GrGLProgramDesc::kSecondaryCoverageISC_CoverageOutput == cove
rageOutput) { | 334 } else if (GrGLProgramDesc::kSecondaryCoverageISC_CoverageOutput == head
er.fCoverageOutput) { |
| 337 // Get (1-RGBA) into coeff | 335 // Get (1-RGBA) into coeff |
| 338 knownCoeffValue = GrGLSLSubtractf<4>(&coeff, | 336 knownCoeffValue = GrGLSLSubtractf<4>(&coeff, |
| 339 NULL, | 337 NULL, |
| 340 inColor.c_str(), | 338 inColor.c_str(), |
| 341 kOnes_GrSLConstantVec, | 339 kOnes_GrSLConstantVec, |
| 342 knownColorValue, | 340 knownColorValue, |
| 343 true); | 341 true); |
| 344 } | 342 } |
| 345 // Get coeff * coverage into modulate and then write that to the dual so
urce output. | 343 // Get coeff * coverage into modulate and then write that to the dual so
urce output. |
| 346 SkString modulate; | 344 SkString modulate; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 358 | 356 |
| 359 // Get "color * coverage" into fragColor | 357 // Get "color * coverage" into fragColor |
| 360 SkString fragColor; | 358 SkString fragColor; |
| 361 GrSLConstantVec knownFragColorValue = GrGLSLModulatef<4>(&fragColor, | 359 GrSLConstantVec knownFragColorValue = GrGLSLModulatef<4>(&fragColor, |
| 362 inColor.c_str(), | 360 inColor.c_str(), |
| 363 inCoverage.c_str(), | 361 inCoverage.c_str(), |
| 364 knownColorValue, | 362 knownColorValue, |
| 365 knownCoverageValue, | 363 knownCoverageValue, |
| 366 true); | 364 true); |
| 367 // Now tack on "+(1-coverage)dst onto the frag color if we were asked to do
so. | 365 // Now tack on "+(1-coverage)dst onto the frag color if we were asked to do
so. |
| 368 if (GrGLProgramDesc::kCombineWithDst_CoverageOutput == coverageOutput) { | 366 if (GrGLProgramDesc::kCombineWithDst_CoverageOutput == header.fCoverageOutpu
t) { |
| 369 SkString dstCoeff; | 367 SkString dstCoeff; |
| 370 GrSLConstantVec knownDstCoeffValue = GrGLSLSubtractf<4>(&dstCoeff, | 368 GrSLConstantVec knownDstCoeffValue = GrGLSLSubtractf<4>(&dstCoeff, |
| 371 NULL, | 369 NULL, |
| 372 inCoverage.c_str
(), | 370 inCoverage.c_str
(), |
| 373 kOnes_GrSLConsta
ntVec, | 371 kOnes_GrSLConsta
ntVec, |
| 374 knownCoverageVal
ue, | 372 knownCoverageVal
ue, |
| 375 true); | 373 true); |
| 376 SkString dstContribution; | 374 SkString dstContribution; |
| 377 GrSLConstantVec knownDstContributionValue = GrGLSLModulatef<4>(&dstContr
ibution, | 375 GrSLConstantVec knownDstContributionValue = GrGLSLModulatef<4>(&dstContr
ibution, |
| 378 dstCoeff.
c_str(), | 376 dstCoeff.
c_str(), |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 627 | 625 |
| 628 fMatrixState.fViewMatrix = drawState.getViewMatrix(); | 626 fMatrixState.fViewMatrix = drawState.getViewMatrix(); |
| 629 fMatrixState.fRenderTargetSize = size; | 627 fMatrixState.fRenderTargetSize = size; |
| 630 fMatrixState.fRenderTargetOrigin = rt->origin(); | 628 fMatrixState.fRenderTargetOrigin = rt->origin(); |
| 631 | 629 |
| 632 GrGLfloat viewMatrix[3 * 3]; | 630 GrGLfloat viewMatrix[3 * 3]; |
| 633 fMatrixState.getGLMatrix<3>(viewMatrix); | 631 fMatrixState.getGLMatrix<3>(viewMatrix); |
| 634 fUniformManager.setMatrix3f(fUniformHandles.fViewMatrixUni, viewMatrix); | 632 fUniformManager.setMatrix3f(fUniformHandles.fViewMatrixUni, viewMatrix); |
| 635 } | 633 } |
| 636 } | 634 } |
| OLD | NEW |