Stop using GrSamplerState to track the texture parameters for GL textures. It has become larger and now holds state that isn't tracked per-texture by GL. Also remove unused setSamplerStateImm from GrGpuGL
git-svn-id: http://skia.googlecode.com/svn/trunk@659 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/GrGpuGL.cpp b/gpu/src/GrGpuGL.cpp
index 7a73006..5198dbb 100644
--- a/gpu/src/GrGpuGL.cpp
+++ b/gpu/src/GrGpuGL.cpp
@@ -426,7 +426,7 @@
#if GR_GL_DESKTOP
GR_GL(Disable(GL_LINE_SMOOTH));
GR_GL(Disable(GL_POINT_SMOOTH));
- GR_GL(Disable(GL_MULTISAMPLE));
+ GR_GL(Disable(GL_MULTISAMPLE));
#endif
// we only ever use lines in hairline mode
@@ -533,6 +533,13 @@
#if GR_COLLECT_STATS
++fStats.fTextureCreateCnt;
#endif
+
+ static const GrGLTexture::TexParams DEFAULT_PARAMS = {
+ GL_NEAREST,
+ GL_CLAMP_TO_EDGE,
+ GL_CLAMP_TO_EDGE
+ };
+
GrGLTexture::GLTextureDesc glDesc;
GLenum internalFormat;
@@ -607,6 +614,18 @@
}
GR_GL(BindTexture(GL_TEXTURE_2D, glDesc.fTextureID));
+ GR_GL(TexParameteri(GL_TEXTURE_2D,
+ GL_TEXTURE_MAG_FILTER,
+ DEFAULT_PARAMS.fFilter));
+ GR_GL(TexParameteri(GL_TEXTURE_2D,
+ GL_TEXTURE_MIN_FILTER,
+ DEFAULT_PARAMS.fFilter));
+ GR_GL(TexParameteri(GL_TEXTURE_2D,
+ GL_TEXTURE_WRAP_S,
+ DEFAULT_PARAMS.fWrapS));
+ GR_GL(TexParameteri(GL_TEXTURE_2D,
+ GL_TEXTURE_WRAP_T,
+ DEFAULT_PARAMS.fWrapT));
#if GR_COLLECT_STATS
++fStats.fTextureChngCnt;
#endif
@@ -898,7 +917,7 @@
GrPrintf("--- new texture [%d] size=(%d %d) bpp=%d\n",
tex->fTextureID, width, height, tex->fUploadByteCount);
#endif
- GrGLTexture* tex = new GrGLTexture(glDesc, rtIDs, this);
+ GrGLTexture* tex = new GrGLTexture(glDesc, rtIDs, DEFAULT_PARAMS, this);
if (0 != rtIDs.fTexFBOID) {
GrRenderTarget* rt = tex->asRenderTarget();
@@ -1014,18 +1033,6 @@
}
}
-void GrGpuGL::setSamplerStateImm(const GrSamplerState& state) {
-
- GLenum filter = state.isFilter() ? GL_LINEAR : GL_NEAREST;
- GR_GL(TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter));
- GR_GL(TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter));
- GR_GL(TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
- GrGLTexture::gWrapMode2GLWrap[state.getWrapX()]));
- GR_GL(TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
- GrGLTexture::gWrapMode2GLWrap[state.getWrapY()]));
-
-}
-
void GrGpuGL::eraseColor(GrColor color) {
flushRenderTarget();
if (fHWBounds.fScissorEnabled) {
@@ -1433,27 +1440,33 @@
//GrPrintf("---- bindtexture %d\n", nextTexture->textureID());
fHWDrawState.fTexture = nextTexture;
}
- const GrSamplerState& lastSampler = nextTexture->samplerState();
- if (lastSampler.isFilter() != fCurrDrawState.fSamplerState.isFilter()) {
- GLenum filter = fCurrDrawState.fSamplerState.isFilter() ?
- GL_LINEAR :
- GL_NEAREST;
- GR_GL(TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
- filter));
- GR_GL(TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
- filter));
+ const GrGLTexture::TexParams& oldTexParams = nextTexture->getTexParams();
+ GrGLTexture::TexParams newTexParams;
+ newTexParams.fFilter = fCurrDrawState.fSamplerState.isFilter() ?
+ GL_LINEAR :
+ GL_NEAREST;
+ newTexParams.fWrapS = GrGLTexture::gWrapMode2GLWrap[fCurrDrawState.fSamplerState.getWrapX()];
+ newTexParams.fWrapT = GrGLTexture::gWrapMode2GLWrap[fCurrDrawState.fSamplerState.getWrapY()];
+
+ if (newTexParams.fFilter != oldTexParams.fFilter) {
+ GR_GL(TexParameteri(GL_TEXTURE_2D,
+ GL_TEXTURE_MAG_FILTER,
+ newTexParams.fFilter));
+ GR_GL(TexParameteri(GL_TEXTURE_2D,
+ GL_TEXTURE_MIN_FILTER,
+ newTexParams.fFilter));
}
- if (lastSampler.getWrapX() != fCurrDrawState.fSamplerState.getWrapX()) {
- GR_GL(TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
- GrGLTexture::gWrapMode2GLWrap[
- fCurrDrawState.fSamplerState.getWrapX()]));
+ if (newTexParams.fWrapS != oldTexParams.fWrapS) {
+ GR_GL(TexParameteri(GL_TEXTURE_2D,
+ GL_TEXTURE_WRAP_S,
+ newTexParams.fWrapS));
}
- if (lastSampler.getWrapY() != fCurrDrawState.fSamplerState.getWrapY()) {
- GR_GL(TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
- GrGLTexture::gWrapMode2GLWrap[
- fCurrDrawState.fSamplerState.getWrapY()]));
+ if (newTexParams.fWrapT != oldTexParams.fWrapT) {
+ GR_GL(TexParameteri(GL_TEXTURE_2D,
+ GL_TEXTURE_WRAP_T,
+ newTexParams.fWrapT));
}
- nextTexture->setSamplerState(fCurrDrawState.fSamplerState);
+ nextTexture->setTexParams(newTexParams);
} else {
GrAssert(!"Rendering with texture vert flag set but no texture");
if (NULL != fHWDrawState.fTexture) {