| Index: third_party/WebKit/Source/modules/webgl/WebGLTexture.cpp
|
| diff --git a/third_party/WebKit/Source/modules/webgl/WebGLTexture.cpp b/third_party/WebKit/Source/modules/webgl/WebGLTexture.cpp
|
| index 80d5bd122550a8930eb8e6535f6b55be582539e1..3b4977663e221ea0fcd0ba6ef1119a9e83063c99 100644
|
| --- a/third_party/WebKit/Source/modules/webgl/WebGLTexture.cpp
|
| +++ b/third_party/WebKit/Source/modules/webgl/WebGLTexture.cpp
|
| @@ -39,11 +39,6 @@ WebGLTexture* WebGLTexture::create(WebGLRenderingContextBase* ctx)
|
| WebGLTexture::WebGLTexture(WebGLRenderingContextBase* ctx)
|
| : WebGLSharedPlatform3DObject(ctx)
|
| , m_target(0)
|
| - , m_minFilter(GL_NEAREST_MIPMAP_LINEAR)
|
| - , m_magFilter(GL_LINEAR)
|
| - , m_wrapR(GL_REPEAT)
|
| - , m_wrapS(GL_REPEAT)
|
| - , m_wrapT(GL_REPEAT)
|
| , m_isNPOT(false)
|
| , m_isCubeComplete(false)
|
| , m_isComplete(false)
|
| @@ -101,7 +96,7 @@ void WebGLTexture::setParameteri(GLenum pname, GLint param)
|
| case GL_LINEAR_MIPMAP_NEAREST:
|
| case GL_NEAREST_MIPMAP_LINEAR:
|
| case GL_LINEAR_MIPMAP_LINEAR:
|
| - m_minFilter = param;
|
| + m_samplerState.minFilter = param;
|
| break;
|
| }
|
| break;
|
| @@ -109,7 +104,7 @@ void WebGLTexture::setParameteri(GLenum pname, GLint param)
|
| switch (param) {
|
| case GL_NEAREST:
|
| case GL_LINEAR:
|
| - m_magFilter = param;
|
| + m_samplerState.magFilter = param;
|
| break;
|
| }
|
| break;
|
| @@ -118,7 +113,7 @@ void WebGLTexture::setParameteri(GLenum pname, GLint param)
|
| case GL_CLAMP_TO_EDGE:
|
| case GL_MIRRORED_REPEAT:
|
| case GL_REPEAT:
|
| - m_wrapR = param;
|
| + m_samplerState.wrapR = param;
|
| break;
|
| }
|
| break;
|
| @@ -127,7 +122,7 @@ void WebGLTexture::setParameteri(GLenum pname, GLint param)
|
| case GL_CLAMP_TO_EDGE:
|
| case GL_MIRRORED_REPEAT:
|
| case GL_REPEAT:
|
| - m_wrapS = param;
|
| + m_samplerState.wrapS = param;
|
| break;
|
| }
|
| break;
|
| @@ -136,7 +131,7 @@ void WebGLTexture::setParameteri(GLenum pname, GLint param)
|
| case GL_CLAMP_TO_EDGE:
|
| case GL_MIRRORED_REPEAT:
|
| case GL_REPEAT:
|
| - m_wrapT = param;
|
| + m_samplerState.wrapT = param;
|
| break;
|
| }
|
| break;
|
| @@ -303,14 +298,15 @@ bool WebGLTexture::isNPOT() const
|
| return m_isNPOT;
|
| }
|
|
|
| -bool WebGLTexture::needToUseBlackTexture(TextureExtensionFlag flag) const
|
| +bool WebGLTexture::needToUseBlackTexture(TextureExtensionFlag flag, const WebGLSamplerState* samplerState) const
|
| {
|
| + ASSERT(samplerState);
|
| if (!object())
|
| return false;
|
| if (m_needToUseBlackTexture)
|
| return true;
|
| if ((m_isFloatType && !(flag & TextureFloatLinearExtensionEnabled)) || (m_isHalfFloatType && !(flag && TextureHalfFloatLinearExtensionEnabled))) {
|
| - if (m_magFilter != GL_NEAREST || (m_minFilter != GL_NEAREST && m_minFilter != GL_NEAREST_MIPMAP_NEAREST))
|
| + if (samplerState->magFilter != GL_NEAREST || (samplerState->minFilter != GL_NEAREST && samplerState->minFilter != GL_NEAREST_MIPMAP_NEAREST))
|
| return true;
|
| }
|
| return false;
|
| @@ -445,16 +441,19 @@ void WebGLTexture::update()
|
| m_isHalfFloatType = m_info[0][0].type == GL_HALF_FLOAT_OES;
|
|
|
| m_needToUseBlackTexture = false;
|
| - // NPOT
|
| - if (!m_isWebGL2OrHigher && m_isNPOT && ((m_minFilter != GL_NEAREST && m_minFilter != GL_LINEAR)
|
| - || m_wrapS != GL_CLAMP_TO_EDGE || m_wrapT != GL_CLAMP_TO_EDGE || (m_target == GL_TEXTURE_3D && m_wrapR != GL_CLAMP_TO_EDGE)))
|
| - m_needToUseBlackTexture = true;
|
| // If it is a Cube texture, check Cube Completeness first
|
| if (m_info.size() > 1 && !m_isCubeComplete)
|
| m_needToUseBlackTexture = true;
|
| - // Completeness
|
| - if (!m_isComplete && m_minFilter != GL_NEAREST && m_minFilter != GL_LINEAR)
|
| - m_needToUseBlackTexture = true;
|
| + if (!m_isWebGL2OrHigher) {
|
| + // We can do these checks up front in WebGL 1 because there's no separate samplers.
|
| + // NPOT
|
| + if (m_isNPOT && ((m_samplerState.minFilter != GL_NEAREST && m_samplerState.minFilter != GL_LINEAR)
|
| + || m_samplerState.wrapS != GL_CLAMP_TO_EDGE || m_samplerState.wrapT != GL_CLAMP_TO_EDGE))
|
| + m_needToUseBlackTexture = true;
|
| + // Completeness
|
| + if (!m_isComplete && m_samplerState.minFilter != GL_NEAREST && m_samplerState.minFilter != GL_LINEAR)
|
| + m_needToUseBlackTexture = true;
|
| + }
|
| }
|
|
|
| const WebGLTexture::LevelInfo* WebGLTexture::getLevelInfo(GLenum target, GLint level) const
|
|
|