Index: src/gpu/gl/GrGpuGL.cpp |
diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp |
index 92e496c3eebfd5076d8c43bb71c7969665150d1d..2e325d486b1eb97b1cc62b6d0279a4f8313de572 100644 |
--- a/src/gpu/gl/GrGpuGL.cpp |
+++ b/src/gpu/gl/GrGpuGL.cpp |
@@ -2104,9 +2104,7 @@ void GrGpuGL::setProjectionMatrix(const SkMatrix& matrix, |
void GrGpuGL::enableTexGen(int unitIdx, |
TexGenComponents components, |
const GrGLfloat* coefficients) { |
- |
SkASSERT(this->glCaps().fixedFunctionSupport()); |
- SkASSERT(this->caps()->pathRenderingSupport()); |
SkASSERT(components >= kS_TexGenComponents && components <= kSTR_TexGenComponents); |
SkASSERT(this->glCaps().maxFixedFunctionTextureCoords() >= unitIdx); |
@@ -2142,19 +2140,18 @@ void GrGpuGL::enableTexGen(int unitIdx, |
GL_CALL(TexGenfv(GR_GL_S + i, GR_GL_OBJECT_PLANE, plane)); |
} |
- GL_CALL(PathTexGen(GR_GL_TEXTURE0 + unitIdx, |
- GR_GL_OBJECT_LINEAR, |
- components, |
- coefficients)); |
+ if (this->caps()->pathRenderingSupport()) { |
+ GL_CALL(PathTexGen(GR_GL_TEXTURE0 + unitIdx, |
+ GR_GL_OBJECT_LINEAR, |
+ components, |
+ coefficients)); |
+ } |
memcpy(fHWTexGenSettings[unitIdx].fCoefficients, coefficients, |
3 * components * sizeof(GrGLfloat)); |
- |
- fHWActiveTexGenSets = SkTMax(fHWActiveTexGenSets, unitIdx); |
} |
void GrGpuGL::enableTexGen(int unitIdx, TexGenComponents components, const SkMatrix& matrix) { |
- |
GrGLfloat coefficients[3 * 3]; |
SkASSERT(this->glCaps().fixedFunctionSupport()); |
SkASSERT(components >= kS_TexGenComponents && components <= kSTR_TexGenComponents); |
@@ -2178,25 +2175,35 @@ void GrGpuGL::enableTexGen(int unitIdx, TexGenComponents components, const SkMat |
enableTexGen(unitIdx, components, coefficients); |
} |
-void GrGpuGL::disableUnusedTexGen(int numUsedTexCoordSets) { |
- |
+void GrGpuGL::flushTexGenSettings(int numUsedTexCoordSets) { |
SkASSERT(this->glCaps().fixedFunctionSupport()); |
SkASSERT(this->glCaps().maxFixedFunctionTextureCoords() >= numUsedTexCoordSets); |
- for (int i = numUsedTexCoordSets; i < fHWActiveTexGenSets; i++) { |
- if (0 == fHWTexGenSettings[i].fNumComponents) { |
- continue; |
+ // Only write the inactive tex gens, since active tex gens were written |
+ // when they were enabled. |
+ |
+ SkDEBUGCODE( |
+ for (int i = 0; i < numUsedTexCoordSets; i++) { |
+ SkASSERT(0 != fHWTexGenSettings[i].fNumComponents); |
} |
+ ); |
+ |
+ for (int i = numUsedTexCoordSets; i < fHWActiveTexGenSets; i++) { |
+ SkASSERT(0 != fHWTexGenSettings[i].fNumComponents); |
this->setTextureUnit(i); |
for (int j = 0; j < fHWTexGenSettings[i].fNumComponents; j++) { |
GL_CALL(Disable(GR_GL_TEXTURE_GEN_S + j)); |
} |
- GL_CALL(PathTexGen(GR_GL_TEXTURE0 + i, GR_GL_NONE, 0, NULL)); |
+ |
+ if (this->caps()->pathRenderingSupport()) { |
+ GL_CALL(PathTexGen(GR_GL_TEXTURE0 + i, GR_GL_NONE, 0, NULL)); |
+ } |
+ |
fHWTexGenSettings[i].fNumComponents = 0; |
} |
- fHWActiveTexGenSets = SkTMin(fHWActiveTexGenSets, numUsedTexCoordSets); |
+ fHWActiveTexGenSets = numUsedTexCoordSets; |
} |
void GrGpuGL::flushMiscFixedFunctionState() { |