Index: third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
index b15bd9c96145d3fb6e73a99c40716aff14ab7733..5576c80b60797e34cc3161045ca99d56cce5f704 100644 |
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp |
@@ -5524,14 +5524,16 @@ ScriptValue WebGLRenderingContextBase::getWebGLIntArrayParameter(ScriptState* sc |
void WebGLRenderingContextBase::handleTextureCompleteness(const char* functionName, bool prepareToDraw) |
{ |
// All calling functions check isContextLost, so a duplicate check is not needed here. |
+ // We only handle the situation with float/half_float textures here. Other situations are handled in command buffer. |
bool resetActiveUnit = false; |
WebGLTexture::TextureExtensionFlag flag = static_cast<WebGLTexture::TextureExtensionFlag>((extensionEnabled(OESTextureFloatLinearName) ? WebGLTexture::TextureFloatLinearExtensionEnabled : 0) |
| ((extensionEnabled(OESTextureHalfFloatLinearName) || isWebGL2OrHigher()) ? WebGLTexture::TextureHalfFloatLinearExtensionEnabled : 0)); |
for (unsigned ii = 0; ii < m_onePlusMaxNonDefaultTextureUnit; ++ii) { |
const WebGLSamplerState* samplerState2D = getTextureUnitSamplerState(GL_TEXTURE_2D, ii); |
const WebGLSamplerState* samplerStateCubeMap = getTextureUnitSamplerState(GL_TEXTURE_CUBE_MAP, ii); |
- if ((m_textureUnits[ii].m_texture2DBinding.get() && m_textureUnits[ii].m_texture2DBinding->needToUseBlackTexture(flag, samplerState2D)) |
- || (m_textureUnits[ii].m_textureCubeMapBinding.get() && m_textureUnits[ii].m_textureCubeMapBinding->needToUseBlackTexture(flag, samplerStateCubeMap))) { |
+ bool needToUseBlackTex2D = (m_textureUnits[ii].m_texture2DBinding.get() && m_textureUnits[ii].m_texture2DBinding->needToUseBlackTexture(flag, samplerState2D)); |
+ bool needToUseBlackTexCubeMap = (m_textureUnits[ii].m_textureCubeMapBinding.get() && m_textureUnits[ii].m_textureCubeMapBinding->needToUseBlackTexture(flag, samplerStateCubeMap)); |
+ if (needToUseBlackTex2D || needToUseBlackTexCubeMap) { |
if (ii != m_activeTextureUnit) { |
webContext()->activeTexture(GL_TEXTURE0 + ii); |
resetActiveUnit = true; |
@@ -5543,8 +5545,7 @@ void WebGLRenderingContextBase::handleTextureCompleteness(const char* functionNa |
WebGLTexture* texCubeMap; |
if (prepareToDraw) { |
String msg(String("texture bound to texture unit ") + String::number(ii) |
- + " is not renderable. It maybe non-power-of-2 and have incompatible texture filtering or is not 'texture complete'." |
- + " Or the texture is Float or Half Float type with linear filtering while OES_float_linear or OES_half_float_linear extension is not enabled."); |
+ + " is not renderable. Texture is Float or Half Float type with linear filtering while OES_float_linear or OES_half_float_linear extension is not enabled."); |
emitGLWarning(functionName, msg.utf8().data()); |
tex2D = m_blackTexture2D.get(); |
texCubeMap = m_blackTextureCubeMap.get(); |
@@ -5552,9 +5553,9 @@ void WebGLRenderingContextBase::handleTextureCompleteness(const char* functionNa |
tex2D = m_textureUnits[ii].m_texture2DBinding.get(); |
texCubeMap = m_textureUnits[ii].m_textureCubeMapBinding.get(); |
} |
- if (m_textureUnits[ii].m_texture2DBinding && m_textureUnits[ii].m_texture2DBinding->needToUseBlackTexture(flag, samplerState2D)) |
+ if (needToUseBlackTex2D) |
webContext()->bindTexture(GL_TEXTURE_2D, objectOrZero(tex2D)); |
- if (m_textureUnits[ii].m_textureCubeMapBinding && m_textureUnits[ii].m_textureCubeMapBinding->needToUseBlackTexture(flag, samplerStateCubeMap)) |
+ if (needToUseBlackTexCubeMap) |
webContext()->bindTexture(GL_TEXTURE_CUBE_MAP, objectOrZero(texCubeMap)); |
} |
} |