Am 13.01.2014 21:52, schrieb Xavier Bigand:
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,9)
glBindBuffer(GL_ARRAY_BUFFER,10)
glEnableVertexAttribArray(0)
glVertexAttribPointer(0,3,GL_FLOAT,false,12,00000000)
glBindBuffer(GL_ARRAY_BUFFER,11)
glEnableVertexAttribArray(1)
glVertexAttribPointer(1,4,GL_FLOAT,false,16,00000000)
glDrawElements(GL_LINE_LOOP,4,GL_UNSIGNED_INT,00000000) GLSL=4
----->glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT)
----->----->glUseProgram(4)
----->----->glUniformMatrix4fv(0,1,false,[0.002497,0.000000,0.000000,0.000000,0.000000,-0.003333,0.000000,0.000000,0.000000,0.000000,-0.010000,0.000000,-1.000000,1.000000,0.000000,1.000000])

----->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,9)
----->----->glBindBuffer(GL_ARRAY_BUFFER,10)
----->----->glEnableVertexAttribArray(0)
----->----->glVertexAttribPointer(0,3,GL_FLOAT,false,12,00000000)
----->----->glBindBuffer(GL_ARRAY_BUFFER,11)
----->----->glEnableVertexAttribArray(1)
----->----->glVertexAttribPointer(1,4,GL_FLOAT,false,16,00000000)
----->----->glDrawElements(GL_LINE_LOOP,4,GL_UNSIGNED_INT,00000000) GLSL=4

This extract seems to correspond of latest gl command called just before
the crash after the window resize. It doesn't seems to have any error here.


Yes this indeed looks correct.
Maybe its even a bug in the driver. Because it happens right after the window resize graphic resource might got invalid and the driver would need to re-create them. The problem ist most likely that you use two array buffers, one for each attribute, instead of using one array buffer and interleaving the attribute (this is the usual way). I could bet, that if you switch over to the interleaved variant, the problem goes away.

You could also try to make the three buffers slightly larger and specifiy different pointers to see which one actually causes the invalid read. So that the calls become:

> ----->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,9)
> ----->----->glBindBuffer(GL_ARRAY_BUFFER,10)
> ----->----->glEnableVertexAttribArray(0)
> ----->----->glVertexAttribPointer(0,3,GL_FLOAT,false,12,00000000)
> ----->----->glBindBuffer(GL_ARRAY_BUFFER,11)
> ----->----->glEnableVertexAttribArray(1)
> ----->----->glVertexAttribPointer(1,4,GL_FLOAT,false,16,00000016)
> ----->----->glDrawElements(GL_LINE_LOOP,4,GL_UNSIGNED_INT,00000004) GLSL=4

You could then see from the access violation which of the three buffers the read attempt fails.

You could also try to move the glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,9) right before the glDrawElements call.

Kind Regards
Benjamin Thaut

Reply via email to