WebStart and Method "glBindBuffer" not available

I have been developing a small application in JOGL, which works without any issues on my MacOS X 10.5 based machine, but fails when I try running it from my Windows XP machine. Can anyone suggest what I am doing wrong? It is being launched via WebStart (JNLP):

http://ajmas.dyndns.org/jnlp/Tetris3D.jnlp

the excpetion I am getting is below:


Exception in thread "AWT-EventQueue-0" javax.media.opengl.GLException: Method "glBindBuffer" not available
	at com.sun.opengl.impl.GLImpl.glBindBuffer(GLImpl.java:373)
	at com.sun.opengl.util.j2d.TextRenderer.endRendering(TextRenderer.java:861)
	at com.sun.opengl.util.j2d.TextRenderer.endRendering(TextRenderer.java:708)
	at ajmas74.tetris3d.Tetris3D.drawStatusPanes(Tetris3D.java:339)
	at ajmas74.tetris3d.Tetris3D.display(Tetris3D.java:192)
	at com.sun.opengl.impl.GLDrawableHelper.display(GLDrawableHelper.java:78)
	at javax.media.opengl.GLCanvas$DisplayAction.run(GLCanvas.java:435)
	at com.sun.opengl.impl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:194)
	at javax.media.opengl.GLCanvas.maybeDoSingleThreadedWorkaround(GLCanvas.java:412)
	at javax.media.opengl.GLCanvas.display(GLCanvas.java:244)
	at javax.media.opengl.GLCanvas.paint(GLCanvas.java:277)
	at javax.media.opengl.GLCanvas.update(GLCanvas.java:354)
	at sun.awt.RepaintArea.updateComponent(Unknown Source)
	at sun.awt.RepaintArea.paint(Unknown Source)
	at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Do you check for either OpenGL 1.5 or greater, or GL_ARB_vertex_buffer_object support before attempting to use it?

I do neither. How would I do that?

Edit: Sorry it’s early and I misread your post…

gl.glGetString(GL.GL_VERSION) to get the version number

gl.isExtensionAvailable(“GL_ARB…”); for what ever extension you want to look for

Thanks, though I do have one question:

While I will add extra checks, should this really be TextRenderer taking care of not calling extenstions & features not supported by the current OpenGL implementation?

Edit: I have now ensured that the OpenGL support is indeed 1.5, and that GL_ARB_vertex_buffer_object is present, on the PC after updating the drivers, and verified with:

http://www.realtech-vr.com/glview/

I am still getting the same exception.

The output from the tool is: http://ajmas.dyndns.org/misc/glview-Intel965.xml

Edit: I misread the results, while GL_ARB_vertex_buffer_object is present, glBindBuffer is not supported and nor are any of the OpenGL 1.5 specific functions. I am not sure how Intel can claim their driver to 1.5 compliant? In this case looks like I need to add gl.isFunctionAvailable("");

It should and probably does, though there are others who would be better suited to confirm that.

Something odd I noticed while glancing through the log was that it seems to have an entry for some ATI drivers as well, and that could be causing some conflicts.

[quote]Edit: I misread the results, while GL_ARB_vertex_buffer_object is present, glBindBuffer is not supported and nor are any of the OpenGL 1.5 specific functions. I am not sure how Intel can claim their driver to 1.5 compliant? In this case looks like I need to add gl.isFunctionAvailable("");
[/quote]
What’s odd is that the vertex buffer object extension is a fairly major extension that is used quite a bit. It’s not the sort of thing Intel would want to screw up. And it looks like there are even newer drivers yet, hopefully this link works…

This is the same driver that I installed, despite the version number indicated here. I’ll contact Intel to see if they can provide any information.

I wrote a small program to query the available functions via the JOGL API and I get:


  Functions:

  OpenGL 1.5
     glBeginQuery: true
     glBindBuffer: true
     glBufferData: true
     glBufferSubData: true
     glDeleteBuffers: true
     glDeleteQueries: true
     glEndQuery: true
     glGenBuffers: true
     glGenQueries: true
     glGetBufferParameteriv: true
     glGetBufferPointerv: true
     glGetBufferSubData: true
     glGetQueryObjectiv: true
     glGetQueryObjectuiv: true
     glGetQueryiv: true
     glIsBuffer: true
     glIsQuery: true
     glMapBuffer: true
     glUnmapBuffer: true

  Extensions:

  OpenGL 1.5
      GL_ARB_vertex_buffer_object: true


This is odd, since it differs from the ‘glview’ tool’s results, suggesting that the driver does support the 1.5 functions, but when TextRenderer calls glBindBuffer() I get the aforementioned exception. Not too sure what to make of this. This is problematic, since this means I can’t check for the presence of the function and assume that it is really there when it is confirmed as being supported.

I should note that my test tool indicates no 2.0 support, so it looks like it working correctly (Intel indicates the driver support up to OpenGL 1.5). As for the extension I only checked for ‘GL_ARB_vertex_buffer_object’.

Have you found a solution for your problem ? ???

Because i’ve the same with an intel 965 under vista. :’(

I would like to develop an application and i’ve this log
javax.media.opengl.GLException: Method “glGenBuffers” not available
at com.sun.opengl.impl.GLImpl.glGenBuffers(GLImpl.java:5513)
at com.sun.opengl.util.j2d.TextRenderer$Pipelined_QuadRenderer.(TextRenderer.java:1407)
at com.sun.opengl.util.j2d.TextRenderer.drawGlyphs(TextRenderer.java:1541)
at com.sun.opengl.util.j2d.TextRenderer.internal_draw3D(TextRenderer.java:1131)
at com.sun.opengl.util.j2d.TextRenderer.draw3D(TextRenderer.java:673)

I’ve the last intel’s driver 8)
i must wait for a new version? or there is an other solution ?

Thx ;D

Voodoo

Can you post the output of demos.printext.PrintExt from the jogl-demos workspace?

I agree this is problematic and we may need to modify JOGL’s extension detection routines to factor in not only the reported GL version but also the “real” availability of the function pointers. However, we do some heuristic parsing of the OpenGL version string and it’s possible we’re incorrectly “promoting” your card from an earlier OpenGL version to 1.5.

we had the very same problem with our game on ATI cards.
it turned out, that the problem could be solved by updating to the latest graphics card drivers:

see
http://www.java-gaming.org/forums/index.php?topic=17892.0

The question is how widespread a problem this is on Vista and whether we should put a workaround into JOGL for it.

My output of demos.printext.PrintExt :

GL vendor: Intel
GL version: 1.5.0 - Build 7.14.10.1364
GL renderer: Intel 965/963 Graphics Media Accelerator
GL extensions:
GL_ARB_depth_texture GL_ARB_fragment_program
GL_ARB_multitexture GL_ARB_occlusion_query
GL_ARB_point_parameters GL_ARB_shadow
GL_ARB_texture_border_clamp GL_ARB_texture_compression
GL_ARB_texture_cube_map GL_ARB_texture_env_add
GL_ARB_texture_env_combine GL_ARB_texture_env_dot3
GL_ARB_texture_env_crossbar GL_ARB_transpose_matrix
GL_ARB_vertex_buffer_object GL_ARB_vertex_program
GL_ARB_window_pos GL_EXT_abgr
GL_EXT_bgra GL_EXT_blend_color
GL_EXT_blend_func_separate GL_EXT_blend_minmax
GL_EXT_blend_subtract GL_EXT_clip_volume_hint
GL_EXT_compiled_vertex_array GL_EXT_draw_range_elements
GL_EXT_fog_coord GL_EXT_multi_draw_arrays
GL_EXT_packed_pixels GL_EXT_rescale_normal
GL_EXT_secondary_color GL_EXT_separate_specular_color
GL_EXT_shadow_funcs GL_EXT_stencil_two_side
GL_ARB_texture_rectangle GL_EXT_texture_rectangle
GL_EXT_stencil_wrap GL_EXT_texture_compression_s3tc
GL_EXT_texture_env_add GL_EXT_texture_env_combine
GL_EXT_texture_lod_bias GL_EXT_texture_filter_anisotropic
GL_EXT_texture3D GL_3DFX_texture_compression_FXT1
GL_IBM_texture_mirrored_repeat GL_NV_blend_square
GL_NV_texgen_reflection GL_SGIS_generate_mipmap
GL_SGIS_texture_edge_clamp GL_SGIS_texture_lod
GL_WIN_swap_hint

voodoo

well, i wouldnt say that the problem is WIDELY spread. however we got about 10 complains from users so far where the game crashed exactly because of this exception.

i would suggest checking explicitly for “glBindBuffer” and “glBufferData” instead just of “GL_VERSION_1_5”.
also performance-wise it would be better to just check for these extensions once and not in every call to end3DRendering()

edit: it just came to my mind, that this is probably not possible, since the functions arent extensions, right?

thanks!

We’ve had a similar problem in the not too distant past with one of our webstart applications that is publically deployed. This is a problem that we’ve specifically narrowed down to the Intel drivers. They say that they support it, but when you attempt to call any of the buffer methods it crashes saying that it can’t find them. Check with all those users about which specific chipset they are using. I’ll place good money that it’s the Intel 465.

This definitely sounds like a bug in Intel’s drivers where they claim to support OpenGL 1.5 but wglGetProcAddress() is returning NULL for glBindBuffer, etc. While it’s true that JOGL assumes that the extensions and OpenGL versions the driver claims to support are correct, I would like to avoid putting hacks into JOGL.

I’ll raise this issue with Intel.

Ken, I know that Alan has sent them test code already for the VBO problems listed here, but hasn’t yet (that I know of) sent code on the other threaded issues yet. I believe the code was sent back in early-mid December.

yes, it is definitely a bug in Intel’s drivers and also apparently in some ATI drivers, as i have reported here:
http://www.java-gaming.org/forums/index.php?topic=17892.0
the ATI one seems to be fixed in the latest version, and i have heard that they are also fixed in the latest Intel drivers. but i cannot 100% confirm this.

however there are groups of users how do not update their drivers (they dont even know what a grapics card is, despite drivers), which means that jogl will never run for them :frowning: