void GrGLNvprProgramBuilder::emitTransforms(const GrPendingFragmentStage& processorStage, GrGLProcessor::TransformedCoordsArray* outCoords, GrGLInstalledFragProc* ifp) { const GrFragmentProcessor* effect = processorStage.getProcessor(); int numTransforms = effect->numTransforms(); ifp->fTransforms.push_back_n(numTransforms); for (int t = 0; t < numTransforms; t++) { GrSLType varyingType = processorStage.isPerspectiveCoordTransform(t) ? kVec3f_GrSLType : kVec2f_GrSLType; const char* varyingName = "MatrixCoord"; SkString suffixedVaryingName; if (0 != t) { suffixedVaryingName.append(varyingName); suffixedVaryingName.appendf("_%i", t); varyingName = suffixedVaryingName.c_str(); } GrGLVertToFrag v(varyingType); ifp->fTransforms[t].fHandle = this->addSeparableVarying(varyingName, &v); ifp->fTransforms[t].fType = varyingType; SkNEW_APPEND_TO_TARRAY(outCoords, GrGLProcessor::TransformedCoords, (SkString(v.fsIn()), varyingType)); } }