Bug 31946 - useProgram does not accept null
Summary: useProgram does not accept null
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebGL (show other bugs)
Version: 528+ (Nightly build)
Hardware: All All
: P2 Normal
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-11-27 18:38 PST by Ben Vanik
Modified: 2010-06-28 10:47 PDT (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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.