Closed Bug 598517 Opened 11 years ago Closed 10 years ago

X3DOM demo causes bad glBindTexture call in fake-black-texture code


(Core :: Canvas: WebGL, defect)

Windows 7
Not set





(Reporter: bjacob, Unassigned)


Discussed on public_webgl.

This demo:

When run in with MOZ_GL_DEBUG_ABORT_ON_ERROR from the opengl debug mode (bug 597881) in a 32bit Windows build/ Win 7 / NVIDIA gives this stack trace leading to a GL error (calling glBindTexture again with a different target):

 	mozalloc.dll!mozalloc_abort(const char * const msg)  Line 77	C++
 	xul.dll!Abort(const char * aMsg)  Line 379 + 0xa bytes	C++
 	xul.dll!NS_DebugBreak_P(unsigned int aSeverity, const char * aStr, const char * aExpr, const char * aFile, int aLine)  Line 337 + 0xc bytes	C++
 	xul.dll!mozilla::gl::GLContext::AfterGLCall(const char * glFunction)  Line 1046 + 0x15 bytes	C++
 	xul.dll!mozilla::gl::GLContext::fBindTexture(unsigned int target, unsigned int texture)  Line 1100	C++
>	xul.dll!mozilla::WebGLContext::UnbindFakeBlackTextures()  Line 1011	C++
 	xul.dll!mozilla::WebGLContext::DrawElements(unsigned int mode, int count, unsigned int type, int byteOffset)  Line 1133	C++
 	xul.dll!nsICanvasRenderingContextWebGL_DrawElements(JSContext * cx, unsigned int argc, jsval_layout * vp)  Line 28301 + 0x21 bytes	C++
 	xul.dll!CallCompiler::generateNativeStub()  Line 455 + 0x23 bytes	C++
 	xul.dll!js::mjit::ic::NativeCall(js::VMFrame & f, unsigned long index)  Line 709 + 0x8 bytes	C++
 	nspr4.dll!_MD_CURRENT_THREAD()  Line 308 + 0xc bytes	C
 	nspr4.dll!_MD_CURRENT_THREAD()  Line 308 + 0xc bytes	C
 	nspr4.dll!PR_Sleep(unsigned int timeout)  Line 152	C
 	nspr4.dll!PR_GetThreadPrivate(unsigned int index)  Line 232 + 0x5 bytes	C

This means that when we unbind our fake black textures, in this code,

    for (PRInt32 i = 0; i < mGLMaxTextureImageUnits; ++i) {
        if (mBound2DTextures[i] && mBound2DTextures[i]->NeedFakeBlack()) {
            gl->fActiveTexture(LOCAL_GL_TEXTURE0 + i);
            gl->fBindTexture(LOCAL_GL_TEXTURE_2D, mBound2DTextures[i]->GLName());
        if (mBoundCubeMapTextures[i] && mBoundCubeMapTextures[i]->NeedFakeBlack()) {
            gl->fActiveTexture(LOCAL_GL_TEXTURE0 + i);
            gl->fBindTexture(LOCAL_GL_TEXTURE_CUBE_MAP, mBoundCubeMapTextures[i]->GLName());

we are making glBindTexture calls that we shouldn't.
On the same machine, I can't reproduce in linux x86-64.
Build : Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b7pre) Gecko/20100929 Firefox/4.0b7pre

With Intel GMA 4500MHD, there are 2 errors in error console :

Error: not well-formed
Source File: 
Line: 1, Column: 58
Source Code:
<p xmlns="">ERROR: No errors.

Error: uncaught exception: [Exception... "An invalid or illegal string was specified"  code: "12" nsresult: "0x8053000c (NS_ERROR_DOM_SYNTAX_ERR)"  location: " Line: 86"]
This needs more detail from the stack trace (a stack trace is generally not very useful by itself; if you have something in the debugger, it's worth getting as much information around the location where the error occurred):

  - which texture ID was being bound
  - was it a 2D or cubemap target
  - what are the values of the mBound2DTextures[i] or mBoundCubeMapTextures[i] struct?
Good point! Will check ASAP.
This got fixed a while ago, we were mis-querying the number of texture units so we were iterating over an array of the wrong size here.
Closed: 10 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.