I am having trouble with implementing VBOs for my game.
I get crashes at random when calling glDrawElements() directly after
glGenBuffers() / glBufferData().
The crashes disappear when I add printouts which leads me to believe
it might be a race condition between glBufferData() and
glDrawElements() of some sort.
Or I am doing something else that breaks it, but I can't see what.

Here's what I do:

...
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
...
if(geometry not in cache) {
   gl11.glGenBuffers(1, _temp_handle, 0);
   _geo_id = _temp_handle[0];

   // produce text geometry to scratch buffer (allocated with
ByteBuffer.allocateDirect())
   int off = DynamicBuffer.allocate(_buf_size_floats);
   TextProducer.create_geometry(_font, _text, DynamicBuffer._buffer,
off);

   // upload geometry
   gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, _geo_id);

   DynamicBuffer._buffer.position(off);
   gl11.glBufferData(GL11.GL_ARRAY_BUFFER, _buf_size_bytes,
DynamicBuffer._buffer, GL11.GL_STATIC_DRAW);

   DynamicBuffer.deallocate_last(_buf_size_floats);

   // set vertex pointer
   gl11.glVertexPointer(3, GL10.GL_FLOAT, 0, 0);
   gl11.glTexCoordPointer(2, GL10.GL_FLOAT, 0, _pos_size_bytes);

   insert_in_cache();
} else {
        ... bind + set vertex pointer using existing VBO ...
}

...
gl.glDrawElements(); // <--- sometimes this call crashes, always after
buffer was just allocated/produced (ie the geometry-not-in-cache code
path)
...

gl.glDisableClientState(VERTEX...);
gl.glDisableClientState(TEXCOORD...);


Sometimes the call to glDrawElements() crashes. The crash only happens
when glDrawElements() is called right after the buffer has been
allocated and written (ie "geometry not in cache" is true).
The crash seems more common if the produced buffer is a few kb or more
in size.
If I insert a Log.d() call in between glVertexPointer3f() and
glDrawElements() the crash goes away.

I have double checked that the GL calls are not setting the error
flag, and I am not writing past any buffer limit or feeding incorrect
sizes etc to glBufferData(). Note that everything renders correctly
without artifacts up to the crash. The crash does not happen for the
same geometry all the time, a piece of geometry can be produced and
rendered correctly, then be re-produced and crash.

Before I make a minimal reproducible example, I thought I would ask
this group if anyone else
have experienced the same trouble when using a VBO right after call to
glBufferData()?

All answers appreciated!
/Viktor

PS.
This is the crash dump:
02-16 20:23:00.979: INFO/DEBUG(14143): *** *** *** *** *** *** *** ***
*** *** *** *** *** *** *** ***
02-16 20:23:00.979: INFO/DEBUG(14143): Build fingerprint: 'android-
devphone1/dream_devphone/dream/trout:1.6/DRC83/14721:user/gfh,test-
keys'
02-16 20:23:00.979: INFO/DEBUG(14143): pid: 17564, tid: 17580  >>>
com.mygame.mygame <<<
02-16 20:23:00.979: INFO/DEBUG(14143): signal 11 (SIGSEGV), fault addr
002df000
02-16 20:23:00.979: INFO/DEBUG(14143):  r0 001b9c28  r1 002deff0  r2
00000003  r3 001be178
02-16 20:23:00.979: INFO/DEBUG(14143):  r4 002deff4  r5 001be17c  r6
00000044  r7 000003ff
02-16 20:23:00.979: INFO/DEBUG(14143):  r8 00000000  r9 001be170  10
00000003  fp 001b9c14
02-16 20:23:00.979: INFO/DEBUG(14143):  ip 00000002  sp 44944d00  lr
8042b8dc  pc 8043fdf8  cpsr 20000010
02-16 20:23:02.669: INFO/DEBUG(14143):          #00  pc 0003fdf8  /
system/lib/libhgl.so
02-16 20:23:02.669: INFO/DEBUG(14143):          #01  lr 8042b8dc  /
system/lib/libhgl.so
02-16 20:23:02.669: INFO/DEBUG(14143): stack:
02-16 20:23:02.679: INFO/DEBUG(14143):     44944cc0  0000000c
02-16 20:23:02.679: INFO/DEBUG(14143):     44944cc4  001b53d4  [heap]
02-16 20:23:02.679: INFO/DEBUG(14143):     44944cc8  001b39b0  [heap]
02-16 20:23:02.679: INFO/DEBUG(14143):     44944ccc  001b49b0  [heap]
02-16 20:23:02.679: INFO/DEBUG(14143):     44944cd0  00000000
02-16 20:23:02.679: INFO/DEBUG(14143):     44944cd4  00000000
02-16 20:23:02.679: INFO/DEBUG(14143):     44944cd8  001b3db0  [heap]
02-16 20:23:02.679: INFO/DEBUG(14143):     44944cdc  8043c1c0  /system/
lib/libhgl.so
02-16 20:23:02.679: INFO/DEBUG(14143):     44944ce0  001c3e78  [heap]
02-16 20:23:02.689: INFO/DEBUG(14143):     44944ce4  009c8330
02-16 20:23:02.689: INFO/DEBUG(14143):     44944ce8  001b9c08  [heap]
02-16 20:23:02.689: INFO/DEBUG(14143):     44944cec  001b39b0  [heap]
02-16 20:23:02.689: INFO/DEBUG(14143):     44944cf0  001b44ac  [heap]
02-16 20:23:02.689: INFO/DEBUG(14143):     44944cf4  00000005
02-16 20:23:02.689: INFO/DEBUG(14143):     44944cf8  df002777
02-16 20:23:02.689: INFO/DEBUG(14143):     44944cfc  e3a070ad
02-16 20:23:02.689: INFO/DEBUG(14143): #00 44944d00  00000400
02-16 20:23:02.689: INFO/DEBUG(14143):     44944d04  001c3e78  [heap]
02-16 20:23:02.699: INFO/DEBUG(14143):     44944d08  009cd330
02-16 20:23:02.699: INFO/DEBUG(14143):     44944d0c  001b9c08  [heap]
02-16 20:23:02.699: INFO/DEBUG(14143):     44944d10  001b39b0  [heap]
02-16 20:23:02.699: INFO/DEBUG(14143):     44944d14  001b44ac  [heap]
02-16 20:23:02.699: INFO/DEBUG(14143):     44944d18  00000000
02-16 20:23:02.699: INFO/DEBUG(14143):     44944d1c  00000800
02-16 20:23:02.699: INFO/DEBUG(14143):     44944d20  00000008
02-16 20:23:02.699: INFO/DEBUG(14143):     44944d24  00000000
02-16 20:23:02.699: INFO/DEBUG(14143):     44944d28  00000ec4
02-16 20:23:02.699: INFO/DEBUG(14143):     44944d2c  002c3dd0  [heap]
02-16 20:23:02.709: INFO/DEBUG(14143):     44944d30  001b39b0  [heap]
02-16 20:23:02.709: INFO/DEBUG(14143):     44944d34  001b49b0  [heap]
02-16 20:23:02.709: INFO/DEBUG(14143):     44944d38  001b3db0  [heap]
02-16 20:23:02.709: INFO/DEBUG(14143):     44944d3c  001c3e78  [heap]
02-16 20:23:02.709: INFO/DEBUG(14143):     44944d40  00000001
02-16 20:23:02.709: INFO/DEBUG(14143):     44944d44  8041fc14  /system/
lib/libhgl.so

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to