Index: src/gpu/gl/GrGLGpu.cpp |
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp |
index a0809c1d7a447ab03b609bbe58f68fee7fc0788e..dc3ea0c3d782afd8afdd6e6172e395b08d87f180 100644 |
--- a/src/gpu/gl/GrGLGpu.cpp |
+++ b/src/gpu/gl/GrGLGpu.cpp |
@@ -2396,6 +2396,22 @@ static inline GrGLenum tile_to_gl_wrap(SkShader::TileMode tm) { |
return gWrapModes[tm]; |
} |
+const GrGLenum* GrGLGpu::GetTexParamSwizzle(GrPixelConfig config, const GrGLCaps& caps) { |
+ if (caps.textureSwizzleSupport() && GrPixelConfigIsAlphaOnly(config)) { |
+ if (caps.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 { |
+ static const GrGLenum gStraight[] = { GR_GL_RED, GR_GL_GREEN, GR_GL_BLUE, GR_GL_ALPHA }; |
+ return gStraight; |
+ } |
+} |
+ |
void GrGLGpu::bindTexture(int unitIdx, const GrTextureParams& params, GrGLTexture* texture) { |
SkASSERT(texture); |
@@ -2462,7 +2478,7 @@ void GrGLGpu::bindTexture(int unitIdx, const GrTextureParams& params, GrGLTextur |
newTexParams.fWrapS = tile_to_gl_wrap(params.getTileModeX()); |
newTexParams.fWrapT = tile_to_gl_wrap(params.getTileModeY()); |
memcpy(newTexParams.fSwizzleRGBA, |
- GrGLShaderBuilder::GetTexParamSwizzle(texture->config(), this->glCaps()), |
+ GetTexParamSwizzle(texture->config(), this->glCaps()), |
sizeof(newTexParams.fSwizzleRGBA)); |
if (setAll || newTexParams.fMagFilter != oldTexParams.fMagFilter) { |
this->setTextureUnit(unitIdx); |