Bug 31946

Summary: useProgram does not accept null
Product: WebKit Reporter: Ben Vanik <ben.vanik>
Component: WebGLAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal CC: cedricv, zmo
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   

Description Ben Vanik 2009-11-27 18:38:49 PST
Per the GL spec, glUseProgram can take 0 as an argument just like glBindTexture to indicate that the current program should be unbound. If you try this today in WebKit (or Chromium), however, you'll get an exception. The issue is that the check on useProgram and the code inside the Mac implementation of useProgram do not check for this case like bindTexture does.

Spec: http://www.khronos.org/opengles/sdk/docs/man/glUseProgram.xml

bindTexture is handled right in the two places that matter (the WebGLRenderingContext and the GraphicsContext3D implementation):
WebGLRenderingContext::bindTexture:
    if (texture && texture->context() != this)
GraphicsContext3D::bindTexture:
    ::glBindTexture(target, texture ? (GLuint) texture->object() : 0);

useProgram is not handled right - the check at the top of it is copy pasted from other program-related calls, which don't allow null.

WebGLRenderingContext::useProgram:
    if (!program || program->context() != this)
GraphicsContext3D::useProgram:
    ::glUseProgram((GLuint) program->object());

So, trivial fix:
WebGLRenderingContext::useProgram:
    if (program && program->context() != this)
GraphicsContext3D::useProgram:
    ::glUseProgram(program ? (GLuint) program->object() : 0);

Still figuring out how to attach patches and stuff, but it should be easy enough without the 2 line diff :)
Comment 1 Zhenyao Mo 2010-06-28 10:47:19 PDT
The issue was fixed in https://bugs.webkit.org/show_bug.cgi?id=34508.  Closing the bug.