builder->fSampleCoords = varyingFSName;
- GrGLShaderBuilder::SamplerMode sampleMode =
- GrGLShaderBuilder::kExplicitDivide_SamplerMode;
- if (desc.fOptFlags & (StageDesc::kIdentityMatrix_OptFlagBit |
- StageDesc::kNoPerspective_OptFlagBit)) {
- sampleMode = GrGLShaderBuilder::kDefault_SamplerMode;
- } else if (NULL == customStage) {
- sampleMode = GrGLShaderBuilder::kProj_SamplerMode;
- }
- builder->setupTextureAccess(sampleMode, stageNum);
+ builder->setupTextureAccess(stageNum);
builder->computeSwizzle(desc.fInConfigFlags);
builder->computeModulate(fsInColor);
sampler.append("Proj");
break;
case GrGLShaderBuilder::kExplicitDivide_SamplerMode:
- GrAssert(false); // Not Implemented
break;
}
}
}
-void GrGLShaderBuilder::setupTextureAccess(SamplerMode samplerMode,
- int stageNum) {
+void GrGLShaderBuilder::setupTextureAccess(int stageNum) {
SkString retval;
- fTexFunc = "texture2D";
- switch (samplerMode) {
+ SamplerMode mode = kDefault_SamplerMode;
+ // FIXME: we aren't currently using Proj.
+ if (fVaryingDims != fCoordDims) {
+ mode = kExplicitDivide_SamplerMode;
+ }
+
+ switch (mode) {
case kDefault_SamplerMode:
GrAssert(fVaryingDims == fCoordDims);
// Do nothing
break;
case kProj_SamplerMode:
- fTexFunc.append("Proj");
+ // Do nothing
break;
case kExplicitDivide_SamplerMode:
retval = "inCoord";
fSampleCoords = retval;
break;
}
+ fTexFunc = build_sampler_string(mode);
fComplexCoord = false;
}
/** Determines whether we should use texture2D() or texture2Dproj(), and if an explicit divide
is required for the sample coordinates, creates the new variable and emits the code to
initialize it. */
- void setupTextureAccess(SamplerMode samplerMode, int stageNum);
+ void setupTextureAccess(int stageNum);
/** texture2D(samplerName, coordName), with projection if necessary; if coordName is not
specified, uses fSampleCoords. */