| 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 #include "GrGLGpu.h" | 8 #include "GrGLGpu.h" |
| 9 #include "GrGLBuffer.h" | 9 #include "GrGLBuffer.h" |
| 10 #include "GrGLGLSL.h" | 10 #include "GrGLGLSL.h" |
| (...skipping 3174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3185 | 3185 |
| 3186 if (GrTextureParams::kMipMap_FilterMode == filterMode) { | 3186 if (GrTextureParams::kMipMap_FilterMode == filterMode) { |
| 3187 if (!this->caps()->mipMapSupport() || GrPixelConfigIsCompressed(texture-
>config())) { | 3187 if (!this->caps()->mipMapSupport() || GrPixelConfigIsCompressed(texture-
>config())) { |
| 3188 filterMode = GrTextureParams::kBilerp_FilterMode; | 3188 filterMode = GrTextureParams::kBilerp_FilterMode; |
| 3189 } | 3189 } |
| 3190 } | 3190 } |
| 3191 | 3191 |
| 3192 newTexParams.fMinFilter = glMinFilterModes[filterMode]; | 3192 newTexParams.fMinFilter = glMinFilterModes[filterMode]; |
| 3193 newTexParams.fMagFilter = glMagFilterModes[filterMode]; | 3193 newTexParams.fMagFilter = glMagFilterModes[filterMode]; |
| 3194 | 3194 |
| 3195 bool enableSRGBDecode = false; | |
| 3196 if (GrPixelConfigIsSRGB(texture->config())) { | 3195 if (GrPixelConfigIsSRGB(texture->config())) { |
| 3197 enableSRGBDecode = allowSRGBInputs; | 3196 newTexParams.fSRGBDecode = allowSRGBInputs ? GR_GL_DECODE_EXT : GR_GL_SK
IP_DECODE_EXT; |
| 3198 | |
| 3199 newTexParams.fSRGBDecode = enableSRGBDecode ? GR_GL_DECODE_EXT : GR_GL_S
KIP_DECODE_EXT; | |
| 3200 if (setAll || newTexParams.fSRGBDecode != oldTexParams.fSRGBDecode) { | 3197 if (setAll || newTexParams.fSRGBDecode != oldTexParams.fSRGBDecode) { |
| 3201 this->setTextureUnit(unitIdx); | 3198 this->setTextureUnit(unitIdx); |
| 3202 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SRGB_DECODE_EXT, newTexP
arams.fSRGBDecode)); | 3199 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SRGB_DECODE_EXT, newTexP
arams.fSRGBDecode)); |
| 3203 } | 3200 } |
| 3204 } | 3201 } |
| 3205 | 3202 |
| 3206 #ifdef SK_DEBUG | 3203 #ifdef SK_DEBUG |
| 3207 // We were supposed to ensure MipMaps were up-to-date and built correctly be
fore getting here. | 3204 // We were supposed to ensure MipMaps were up-to-date and built correctly be
fore getting here. |
| 3208 if (GrTextureParams::kMipMap_FilterMode == filterMode) { | 3205 if (GrTextureParams::kMipMap_FilterMode == filterMode) { |
| 3209 SkASSERT(!texture->texturePriv().mipMapsAreDirty()); | 3206 SkASSERT(!texture->texturePriv().mipMapsAreDirty()); |
| 3210 if (GrPixelConfigIsSRGB(texture->config())) { | 3207 if (GrPixelConfigIsSRGB(texture->config())) { |
| 3211 SkASSERT(texture->texturePriv().mipMapsAreSRGBCorrect() == enableSRG
BDecode); | 3208 SkSourceGammaTreatment gammaTreatment = allowSRGBInputs ? |
| 3209 SkSourceGammaTreatment::kRespect : SkSourceGammaTreatment::kIgno
re; |
| 3210 SkASSERT(texture->texturePriv().gammaTreatment() == gammaTreatment); |
| 3212 } | 3211 } |
| 3213 } | 3212 } |
| 3214 #endif | 3213 #endif |
| 3215 | 3214 |
| 3216 newTexParams.fMaxMipMapLevel = texture->texturePriv().maxMipMapLevel(); | 3215 newTexParams.fMaxMipMapLevel = texture->texturePriv().maxMipMapLevel(); |
| 3217 | 3216 |
| 3218 newTexParams.fWrapS = tile_to_gl_wrap(params.getTileModeX()); | 3217 newTexParams.fWrapS = tile_to_gl_wrap(params.getTileModeX()); |
| 3219 newTexParams.fWrapT = tile_to_gl_wrap(params.getTileModeY()); | 3218 newTexParams.fWrapT = tile_to_gl_wrap(params.getTileModeY()); |
| 3220 get_tex_param_swizzle(texture->config(), this->glCaps(), newTexParams.fSwizz
leRGBA); | 3219 get_tex_param_swizzle(texture->config(), this->glCaps(), newTexParams.fSwizz
leRGBA); |
| 3221 if (setAll || newTexParams.fMagFilter != oldTexParams.fMagFilter) { | 3220 if (setAll || newTexParams.fMagFilter != oldTexParams.fMagFilter) { |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3314 } | 3313 } |
| 3315 } | 3314 } |
| 3316 | 3315 |
| 3317 if (GrTextureParams::kMipMap_FilterMode != filterMode) { | 3316 if (GrTextureParams::kMipMap_FilterMode != filterMode) { |
| 3318 return; | 3317 return; |
| 3319 } | 3318 } |
| 3320 | 3319 |
| 3321 // If this is an sRGB texture and the mips were previously built the "other"
way | 3320 // If this is an sRGB texture and the mips were previously built the "other"
way |
| 3322 // (gamma-correct vs. not), then we need to rebuild them. We don't need to c
heck for | 3321 // (gamma-correct vs. not), then we need to rebuild them. We don't need to c
heck for |
| 3323 // srgbSupport - we'll *never* get an sRGB pixel config if we don't support
it. | 3322 // srgbSupport - we'll *never* get an sRGB pixel config if we don't support
it. |
| 3323 SkSourceGammaTreatment gammaTreatment = allowSRGBInputs |
| 3324 ? SkSourceGammaTreatment::kRespect : SkSourceGammaTreatment::kIgnore; |
| 3324 if (GrPixelConfigIsSRGB(texture->config()) && | 3325 if (GrPixelConfigIsSRGB(texture->config()) && |
| 3325 allowSRGBInputs != texture->texturePriv().mipMapsAreSRGBCorrect()) { | 3326 gammaTreatment != texture->texturePriv().gammaTreatment()) { |
| 3326 texture->texturePriv().dirtyMipMaps(true); | 3327 texture->texturePriv().dirtyMipMaps(true); |
| 3327 } | 3328 } |
| 3328 | 3329 |
| 3329 // If the mips aren't dirty, we're done: | 3330 // If the mips aren't dirty, we're done: |
| 3330 if (!texture->texturePriv().mipMapsAreDirty()) { | 3331 if (!texture->texturePriv().mipMapsAreDirty()) { |
| 3331 return; | 3332 return; |
| 3332 } | 3333 } |
| 3333 | 3334 |
| 3334 // If we created a rt/tex and rendered to it without using a texture and now
we're texturing | 3335 // If we created a rt/tex and rendered to it without using a texture and now
we're texturing |
| 3335 // from the rt it will still be the last bound texture, but it needs resolvi
ng. | 3336 // from the rt it will still be the last bound texture, but it needs resolvi
ng. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 3347 if (GrPixelConfigIsSRGB(texture->config())) { | 3348 if (GrPixelConfigIsSRGB(texture->config())) { |
| 3348 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SRGB_DECODE_EXT, | 3349 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SRGB_DECODE_EXT, |
| 3349 allowSRGBInputs ? GR_GL_DECODE_EXT : GR_GL_SKIP_DE
CODE_EXT)); | 3350 allowSRGBInputs ? GR_GL_DECODE_EXT : GR_GL_SKIP_DE
CODE_EXT)); |
| 3350 } | 3351 } |
| 3351 | 3352 |
| 3352 // Either do manual mipmap generation or (if that fails), just rely on the d
river: | 3353 // Either do manual mipmap generation or (if that fails), just rely on the d
river: |
| 3353 if (!this->generateMipmap(texture, allowSRGBInputs)) { | 3354 if (!this->generateMipmap(texture, allowSRGBInputs)) { |
| 3354 GL_CALL(GenerateMipmap(target)); | 3355 GL_CALL(GenerateMipmap(target)); |
| 3355 } | 3356 } |
| 3356 | 3357 |
| 3357 texture->texturePriv().dirtyMipMaps(false, allowSRGBInputs); | 3358 texture->texturePriv().dirtyMipMaps(false); |
| 3358 texture->texturePriv().setMaxMipMapLevel(SkMipMap::ComputeLevelCount( | 3359 texture->texturePriv().setMaxMipMapLevel(SkMipMap::ComputeLevelCount( |
| 3359 texture->width(), texture->height())); | 3360 texture->width(), texture->height())); |
| 3361 texture->texturePriv().setGammaTreatment(gammaTreatment); |
| 3360 | 3362 |
| 3361 // We have potentially set lots of state on the texture. Easiest to dirty it
all: | 3363 // We have potentially set lots of state on the texture. Easiest to dirty it
all: |
| 3362 texture->textureParamsModified(); | 3364 texture->textureParamsModified(); |
| 3363 } | 3365 } |
| 3364 | 3366 |
| 3365 void GrGLGpu::setTextureSwizzle(int unitIdx, GrGLenum target, const GrGLenum swi
zzle[]) { | 3367 void GrGLGpu::setTextureSwizzle(int unitIdx, GrGLenum target, const GrGLenum swi
zzle[]) { |
| 3366 this->setTextureUnit(unitIdx); | 3368 this->setTextureUnit(unitIdx); |
| 3367 if (this->glStandard() == kGLES_GrGLStandard) { | 3369 if (this->glStandard() == kGLES_GrGLStandard) { |
| 3368 // ES3 added swizzle support but not GL_TEXTURE_SWIZZLE_RGBA. | 3370 // ES3 added swizzle support but not GL_TEXTURE_SWIZZLE_RGBA. |
| 3369 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_R, swizzle[0])); | 3371 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_R, swizzle[0])); |
| (...skipping 1275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4645 if (GR_GL_TEXTURE_EXTERNAL == glTexture->target() || | 4647 if (GR_GL_TEXTURE_EXTERNAL == glTexture->target() || |
| 4646 GR_GL_TEXTURE_RECTANGLE == glTexture->target()) { | 4648 GR_GL_TEXTURE_RECTANGLE == glTexture->target()) { |
| 4647 copyParams->fFilter = GrTextureParams::kNone_FilterMode; | 4649 copyParams->fFilter = GrTextureParams::kNone_FilterMode; |
| 4648 copyParams->fWidth = texture->width(); | 4650 copyParams->fWidth = texture->width(); |
| 4649 copyParams->fHeight = texture->height(); | 4651 copyParams->fHeight = texture->height(); |
| 4650 return true; | 4652 return true; |
| 4651 } | 4653 } |
| 4652 } | 4654 } |
| 4653 return false; | 4655 return false; |
| 4654 } | 4656 } |
| OLD | NEW |