| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 | 8 |
| 9 #include "GrGpuGL.h" | 9 #include "GrGpuGL.h" |
| 10 #include "GrGLStencilBuffer.h" | 10 #include "GrGLStencilBuffer.h" |
| (...skipping 1957 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1968 fHWBlendState.fConstColor != blendConst)) { | 1968 fHWBlendState.fConstColor != blendConst)) { |
| 1969 GrGLfloat c[4]; | 1969 GrGLfloat c[4]; |
| 1970 GrColorToRGBAFloat(blendConst, c); | 1970 GrColorToRGBAFloat(blendConst, c); |
| 1971 GL_CALL(BlendColor(c[0], c[1], c[2], c[3])); | 1971 GL_CALL(BlendColor(c[0], c[1], c[2], c[3])); |
| 1972 fHWBlendState.fConstColor = blendConst; | 1972 fHWBlendState.fConstColor = blendConst; |
| 1973 fHWBlendState.fConstColorValid = true; | 1973 fHWBlendState.fConstColorValid = true; |
| 1974 } | 1974 } |
| 1975 } | 1975 } |
| 1976 } | 1976 } |
| 1977 } | 1977 } |
| 1978 namespace { | |
| 1979 | 1978 |
| 1980 inline void set_tex_swizzle(GrGLenum swizzle[4], const GrGLInterface* gl) { | 1979 static inline GrGLenum tile_to_gl_wrap(SkShader::TileMode tm) { |
| 1981 GR_GL_CALL(gl, TexParameteriv(GR_GL_TEXTURE_2D, | |
| 1982 GR_GL_TEXTURE_SWIZZLE_RGBA, | |
| 1983 reinterpret_cast<const GrGLint*>(swizzle))); | |
| 1984 } | |
| 1985 | |
| 1986 inline GrGLenum tile_to_gl_wrap(SkShader::TileMode tm) { | |
| 1987 static const GrGLenum gWrapModes[] = { | 1980 static const GrGLenum gWrapModes[] = { |
| 1988 GR_GL_CLAMP_TO_EDGE, | 1981 GR_GL_CLAMP_TO_EDGE, |
| 1989 GR_GL_REPEAT, | 1982 GR_GL_REPEAT, |
| 1990 GR_GL_MIRRORED_REPEAT | 1983 GR_GL_MIRRORED_REPEAT |
| 1991 }; | 1984 }; |
| 1992 GR_STATIC_ASSERT(SkShader::kTileModeCount == SK_ARRAY_COUNT(gWrapModes)); | 1985 GR_STATIC_ASSERT(SkShader::kTileModeCount == SK_ARRAY_COUNT(gWrapModes)); |
| 1993 GR_STATIC_ASSERT(0 == SkShader::kClamp_TileMode); | 1986 GR_STATIC_ASSERT(0 == SkShader::kClamp_TileMode); |
| 1994 GR_STATIC_ASSERT(1 == SkShader::kRepeat_TileMode); | 1987 GR_STATIC_ASSERT(1 == SkShader::kRepeat_TileMode); |
| 1995 GR_STATIC_ASSERT(2 == SkShader::kMirror_TileMode); | 1988 GR_STATIC_ASSERT(2 == SkShader::kMirror_TileMode); |
| 1996 return gWrapModes[tm]; | 1989 return gWrapModes[tm]; |
| 1997 } | 1990 } |
| 1998 | 1991 |
| 1999 } | |
| 2000 | |
| 2001 void GrGpuGL::bindTexture(int unitIdx, const GrTextureParams& params, GrGLTextur
e* texture) { | 1992 void GrGpuGL::bindTexture(int unitIdx, const GrTextureParams& params, GrGLTextur
e* texture) { |
| 2002 SkASSERT(NULL != texture); | 1993 SkASSERT(NULL != texture); |
| 2003 | 1994 |
| 2004 // If we created a rt/tex and rendered to it without using a texture and now
we're texturing | 1995 // If we created a rt/tex and rendered to it without using a texture and now
we're texturing |
| 2005 // from the rt it will still be the last bound texture, but it needs resolvi
ng. So keep this | 1996 // from the rt it will still be the last bound texture, but it needs resolvi
ng. So keep this |
| 2006 // out of the "last != next" check. | 1997 // out of the "last != next" check. |
| 2007 GrGLRenderTarget* texRT = static_cast<GrGLRenderTarget*>(texture->asRenderT
arget()); | 1998 GrGLRenderTarget* texRT = static_cast<GrGLRenderTarget*>(texture->asRenderT
arget()); |
| 2008 if (NULL != texRT) { | 1999 if (NULL != texRT) { |
| 2009 this->onResolveRenderTarget(texRT); | 2000 this->onResolveRenderTarget(texRT); |
| 2010 } | 2001 } |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2069 this->setTextureUnit(unitIdx); | 2060 this->setTextureUnit(unitIdx); |
| 2070 GL_CALL(TexParameteri(GR_GL_TEXTURE_2D, | 2061 GL_CALL(TexParameteri(GR_GL_TEXTURE_2D, |
| 2071 GR_GL_TEXTURE_WRAP_T, | 2062 GR_GL_TEXTURE_WRAP_T, |
| 2072 newTexParams.fWrapT)); | 2063 newTexParams.fWrapT)); |
| 2073 } | 2064 } |
| 2074 if (this->glCaps().textureSwizzleSupport() && | 2065 if (this->glCaps().textureSwizzleSupport() && |
| 2075 (setAll || memcmp(newTexParams.fSwizzleRGBA, | 2066 (setAll || memcmp(newTexParams.fSwizzleRGBA, |
| 2076 oldTexParams.fSwizzleRGBA, | 2067 oldTexParams.fSwizzleRGBA, |
| 2077 sizeof(newTexParams.fSwizzleRGBA)))) { | 2068 sizeof(newTexParams.fSwizzleRGBA)))) { |
| 2078 this->setTextureUnit(unitIdx); | 2069 this->setTextureUnit(unitIdx); |
| 2079 set_tex_swizzle(newTexParams.fSwizzleRGBA, | 2070 if (this->glBinding() == kES_GrGLBinding) { |
| 2080 this->glInterface()); | 2071 // ES3 added swizzle support but not GL_TEXTURE_SWIZZLE_RGBA. |
| 2072 const GrGLenum* swizzle = newTexParams.fSwizzleRGBA; |
| 2073 GL_CALL(TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_SWIZZLE_R, swi
zzle[0])); |
| 2074 GL_CALL(TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_SWIZZLE_G, swi
zzle[1])); |
| 2075 GL_CALL(TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_SWIZZLE_B, swi
zzle[2])); |
| 2076 GL_CALL(TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_SWIZZLE_A, swi
zzle[3])); |
| 2077 } else { |
| 2078 GR_STATIC_ASSERT(sizeof(newTexParams.fSwizzleRGBA[0]) == sizeof(GrGL
int)); |
| 2079 const GrGLint* swizzle = reinterpret_cast<const GrGLint*>(newTexPara
ms.fSwizzleRGBA); |
| 2080 GL_CALL(TexParameteriv(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_SWIZZLE_RGBA,
swizzle)); |
| 2081 } |
| 2081 } | 2082 } |
| 2082 texture->setCachedTexParams(newTexParams, this->getResetTimestamp()); | 2083 texture->setCachedTexParams(newTexParams, this->getResetTimestamp()); |
| 2083 } | 2084 } |
| 2084 | 2085 |
| 2085 void GrGpuGL::flushMiscFixedFunctionState() { | 2086 void GrGpuGL::flushMiscFixedFunctionState() { |
| 2086 | 2087 |
| 2087 const GrDrawState& drawState = this->getDrawState(); | 2088 const GrDrawState& drawState = this->getDrawState(); |
| 2088 | 2089 |
| 2089 if (drawState.isDitherState()) { | 2090 if (drawState.isDitherState()) { |
| 2090 if (kYes_TriState != fHWDitherEnabled) { | 2091 if (kYes_TriState != fHWDitherEnabled) { |
| (...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2552 this->setVertexArrayID(gpu, 0); | 2553 this->setVertexArrayID(gpu, 0); |
| 2553 } | 2554 } |
| 2554 int attrCount = gpu->glCaps().maxVertexAttributes(); | 2555 int attrCount = gpu->glCaps().maxVertexAttributes(); |
| 2555 if (fDefaultVertexArrayAttribState.count() != attrCount) { | 2556 if (fDefaultVertexArrayAttribState.count() != attrCount) { |
| 2556 fDefaultVertexArrayAttribState.resize(attrCount); | 2557 fDefaultVertexArrayAttribState.resize(attrCount); |
| 2557 } | 2558 } |
| 2558 attribState = &fDefaultVertexArrayAttribState; | 2559 attribState = &fDefaultVertexArrayAttribState; |
| 2559 } | 2560 } |
| 2560 return attribState; | 2561 return attribState; |
| 2561 } | 2562 } |
| OLD | NEW |