diff options
author | 2012-04-30 20:01:21 +0000 | |
---|---|---|
committer | 2012-04-30 20:01:21 +0000 | |
commit | 443e5a52b7e85070c26a068cd3b0aad126502395 (patch) | |
tree | 822e09f0b6640f86e82597ee9fc4a7daa3ae4511 /src/gpu/gl/GrGpuGL.cpp | |
parent | a833b5c40d0516237e0889fce8af44880423fc20 (diff) |
Re-adding red texture support (by rolling back r3800)
http://code.google.com/p/skia/source/detail?r=3622 - for original review
http://crbug.com/125596 ('M20 windows renderer stability maze') - for issue
git-svn-id: http://skia.googlecode.com/svn/trunk@3802 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/gpu/gl/GrGpuGL.cpp')
-rw-r--r-- | src/gpu/gl/GrGpuGL.cpp | 44 |
1 files changed, 32 insertions, 12 deletions
diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp index 5f8772e6e5..3b5fffe7ef 100644 --- a/src/gpu/gl/GrGpuGL.cpp +++ b/src/gpu/gl/GrGpuGL.cpp @@ -322,7 +322,8 @@ void GrGpuGL::fillInConfigRenderableTable() { } } else { // On ES we can only hope for R8 - fConfigRenderSupport[kAlpha_8_GrPixelConfig] = false; + fConfigRenderSupport[kAlpha_8_GrPixelConfig] = + this->glCaps().textureRedSupport(); } if (kDesktop_GrGLBinding != this->glBinding()) { @@ -2043,12 +2044,20 @@ unsigned gr_to_gl_filter(GrSamplerState::Filter filter) { } } -const GrGLenum* get_swizzle(GrPixelConfig config, - const GrSamplerState& sampler) { +// get_swizzle is only called from this .cpp so it is OK to inline it here +inline const GrGLenum* get_swizzle(GrPixelConfig config, + const GrSamplerState& sampler, + const GrGLCaps& glCaps) { if (GrPixelConfigIsAlphaOnly(config)) { - static const GrGLenum gAlphaSmear[] = { GR_GL_ALPHA, GR_GL_ALPHA, - GR_GL_ALPHA, GR_GL_ALPHA }; - return gAlphaSmear; + if (glCaps.textureRedSupport()) { + static const GrGLenum gRedSmear[] = { GR_GL_RED, GR_GL_RED, + GR_GL_RED, GR_GL_RED }; + return gRedSmear; + } else { + static const GrGLenum gAlphaSmear[] = { GR_GL_ALPHA, GR_GL_ALPHA, + GR_GL_ALPHA, GR_GL_ALPHA }; + return gAlphaSmear; + } } else if (sampler.swapsRAndB()) { static const GrGLenum gRedBlueSwap[] = { GR_GL_BLUE, GR_GL_GREEN, GR_GL_RED, GR_GL_ALPHA }; @@ -2128,7 +2137,7 @@ bool GrGpuGL::flushGLStateCommon(GrPrimitiveType type) { newTexParams.fWrapS = wraps[sampler.getWrapX()]; newTexParams.fWrapT = wraps[sampler.getWrapY()]; memcpy(newTexParams.fSwizzleRGBA, - get_swizzle(nextTexture->config(), sampler), + get_swizzle(nextTexture->config(), sampler, this->glCaps()), sizeof(newTexParams.fSwizzleRGBA)); if (setAll || newTexParams.fFilter != oldTexParams.fFilter) { setTextureUnit(s); @@ -2370,14 +2379,25 @@ bool GrGpuGL::configToGLFormats(GrPixelConfig config, } break; case kAlpha_8_GrPixelConfig: - *internalFormat = GR_GL_ALPHA; - *externalFormat = GR_GL_ALPHA; - if (getSizedInternalFormat) { - *internalFormat = GR_GL_ALPHA8; + if (this->glCaps().textureRedSupport()) { + *internalFormat = GR_GL_RED; + *externalFormat = GR_GL_RED; + if (getSizedInternalFormat) { + *internalFormat = GR_GL_R8; + } else { + *internalFormat = GR_GL_RED; + } + *externalType = GR_GL_UNSIGNED_BYTE; } else { *internalFormat = GR_GL_ALPHA; + *externalFormat = GR_GL_ALPHA; + if (getSizedInternalFormat) { + *internalFormat = GR_GL_ALPHA8; + } else { + *internalFormat = GR_GL_ALPHA; + } + *externalType = GR_GL_UNSIGNED_BYTE; } - *externalType = GR_GL_UNSIGNED_BYTE; break; default: return false; |