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 "GrGLGpu.h" | 9 #include "GrGLGpu.h" |
10 #include "GrGLGLSL.h" | 10 #include "GrGLGLSL.h" |
(...skipping 2467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2478 return GR_GL_ALPHA; | 2478 return GR_GL_ALPHA; |
2479 default: | 2479 default: |
2480 SkFAIL("Unsupported component"); | 2480 SkFAIL("Unsupported component"); |
2481 return 0; | 2481 return 0; |
2482 } | 2482 } |
2483 } | 2483 } |
2484 | 2484 |
2485 /** If texture swizzling is available using tex parameters then it is preferred
over mangling | 2485 /** If texture swizzling is available using tex parameters then it is preferred
over mangling |
2486 the generated shader code. This potentially allows greater reuse of cached sha
ders. */ | 2486 the generated shader code. This potentially allows greater reuse of cached sha
ders. */ |
2487 static void get_tex_param_swizzle(GrPixelConfig config, | 2487 static void get_tex_param_swizzle(GrPixelConfig config, |
2488 const GrGLCaps& caps, | 2488 const GrGLSLCaps& caps, |
2489 GrGLenum* glSwizzle) { | 2489 GrGLenum* glSwizzle) { |
2490 const GrSwizzle& swizzle = caps.configSwizzle(config); | 2490 const char* swizzle = caps.getSwizzleMap(config); |
2491 for (int i = 0; i < 4; ++i) { | 2491 for (int i = 0; i < 4; ++i) { |
2492 glSwizzle[i] = get_component_enum_from_char(swizzle.c_str()[i]); | 2492 glSwizzle[i] = get_component_enum_from_char(swizzle[i]); |
2493 } | 2493 } |
2494 } | 2494 } |
2495 | 2495 |
2496 void GrGLGpu::bindTexture(int unitIdx, const GrTextureParams& params, GrGLTextur
e* texture) { | 2496 void GrGLGpu::bindTexture(int unitIdx, const GrTextureParams& params, GrGLTextur
e* texture) { |
2497 SkASSERT(texture); | 2497 SkASSERT(texture); |
2498 | 2498 |
2499 #ifdef SK_DEBUG | 2499 #ifdef SK_DEBUG |
2500 if (!this->caps()->npotTextureTileSupport()) { | 2500 if (!this->caps()->npotTextureTileSupport()) { |
2501 const bool tileX = SkShader::kClamp_TileMode != params.getTileModeX(); | 2501 const bool tileX = SkShader::kClamp_TileMode != params.getTileModeX(); |
2502 const bool tileY = SkShader::kClamp_TileMode != params.getTileModeY(); | 2502 const bool tileY = SkShader::kClamp_TileMode != params.getTileModeY(); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2551 newTexParams.fMagFilter = glMagFilterModes[filterMode]; | 2551 newTexParams.fMagFilter = glMagFilterModes[filterMode]; |
2552 | 2552 |
2553 if (GrTextureParams::kMipMap_FilterMode == filterMode && | 2553 if (GrTextureParams::kMipMap_FilterMode == filterMode && |
2554 texture->texturePriv().mipMapsAreDirty()) { | 2554 texture->texturePriv().mipMapsAreDirty()) { |
2555 GL_CALL(GenerateMipmap(target)); | 2555 GL_CALL(GenerateMipmap(target)); |
2556 texture->texturePriv().dirtyMipMaps(false); | 2556 texture->texturePriv().dirtyMipMaps(false); |
2557 } | 2557 } |
2558 | 2558 |
2559 newTexParams.fWrapS = tile_to_gl_wrap(params.getTileModeX()); | 2559 newTexParams.fWrapS = tile_to_gl_wrap(params.getTileModeX()); |
2560 newTexParams.fWrapT = tile_to_gl_wrap(params.getTileModeY()); | 2560 newTexParams.fWrapT = tile_to_gl_wrap(params.getTileModeY()); |
2561 get_tex_param_swizzle(texture->config(), this->glCaps(), newTexParams.fSwizz
leRGBA); | 2561 get_tex_param_swizzle(texture->config(), *this->glCaps().glslCaps(), newTexP
arams.fSwizzleRGBA); |
2562 if (setAll || newTexParams.fMagFilter != oldTexParams.fMagFilter) { | 2562 if (setAll || newTexParams.fMagFilter != oldTexParams.fMagFilter) { |
2563 this->setTextureUnit(unitIdx); | 2563 this->setTextureUnit(unitIdx); |
2564 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_MAG_FILTER, newTexParams.fMa
gFilter)); | 2564 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_MAG_FILTER, newTexParams.fMa
gFilter)); |
2565 } | 2565 } |
2566 if (setAll || newTexParams.fMinFilter != oldTexParams.fMinFilter) { | 2566 if (setAll || newTexParams.fMinFilter != oldTexParams.fMinFilter) { |
2567 this->setTextureUnit(unitIdx); | 2567 this->setTextureUnit(unitIdx); |
2568 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_MIN_FILTER, newTexParams.fMi
nFilter)); | 2568 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_MIN_FILTER, newTexParams.fMi
nFilter)); |
2569 } | 2569 } |
2570 if (setAll || newTexParams.fWrapS != oldTexParams.fWrapS) { | 2570 if (setAll || newTexParams.fWrapS != oldTexParams.fWrapS) { |
2571 this->setTextureUnit(unitIdx); | 2571 this->setTextureUnit(unitIdx); |
2572 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_WRAP_S, newTexParams.fWrapS)
); | 2572 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_WRAP_S, newTexParams.fWrapS)
); |
2573 } | 2573 } |
2574 if (setAll || newTexParams.fWrapT != oldTexParams.fWrapT) { | 2574 if (setAll || newTexParams.fWrapT != oldTexParams.fWrapT) { |
2575 this->setTextureUnit(unitIdx); | 2575 this->setTextureUnit(unitIdx); |
2576 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_WRAP_T, newTexParams.fWrapT)
); | 2576 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_WRAP_T, newTexParams.fWrapT)
); |
2577 } | 2577 } |
2578 if (this->glCaps().textureSwizzleSupport() && | 2578 if (!this->glCaps().glslCaps()->mustSwizzleInShader() && |
2579 (setAll || memcmp(newTexParams.fSwizzleRGBA, | 2579 (setAll || memcmp(newTexParams.fSwizzleRGBA, |
2580 oldTexParams.fSwizzleRGBA, | 2580 oldTexParams.fSwizzleRGBA, |
2581 sizeof(newTexParams.fSwizzleRGBA)))) { | 2581 sizeof(newTexParams.fSwizzleRGBA)))) { |
2582 this->setTextureUnit(unitIdx); | 2582 this->setTextureUnit(unitIdx); |
2583 if (this->glStandard() == kGLES_GrGLStandard) { | 2583 if (this->glStandard() == kGLES_GrGLStandard) { |
2584 // ES3 added swizzle support but not GL_TEXTURE_SWIZZLE_RGBA. | 2584 // ES3 added swizzle support but not GL_TEXTURE_SWIZZLE_RGBA. |
2585 const GrGLenum* swizzle = newTexParams.fSwizzleRGBA; | 2585 const GrGLenum* swizzle = newTexParams.fSwizzleRGBA; |
2586 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_R, swizzle[0])); | 2586 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_R, swizzle[0])); |
2587 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_G, swizzle[1])); | 2587 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_G, swizzle[1])); |
2588 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_B, swizzle[2])); | 2588 GL_CALL(TexParameteri(target, GR_GL_TEXTURE_SWIZZLE_B, swizzle[2])); |
(...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3427 this->setVertexArrayID(gpu, 0); | 3427 this->setVertexArrayID(gpu, 0); |
3428 } | 3428 } |
3429 int attrCount = gpu->glCaps().maxVertexAttributes(); | 3429 int attrCount = gpu->glCaps().maxVertexAttributes(); |
3430 if (fDefaultVertexArrayAttribState.count() != attrCount) { | 3430 if (fDefaultVertexArrayAttribState.count() != attrCount) { |
3431 fDefaultVertexArrayAttribState.resize(attrCount); | 3431 fDefaultVertexArrayAttribState.resize(attrCount); |
3432 } | 3432 } |
3433 attribState = &fDefaultVertexArrayAttribState; | 3433 attribState = &fDefaultVertexArrayAttribState; |
3434 } | 3434 } |
3435 return attribState; | 3435 return attribState; |
3436 } | 3436 } |
OLD | NEW |