Le 13/01/2014 22:47, Benjamin Thaut a écrit :
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

I am not sure the issue come really from my code, cause it just works fine on ATI cards, I do something Nvidia drivers dislike.

I tried to replace GL_LINE_LOOP by triangles, increase buffer size, put the GL_ELEMENT_ARRAY_BUFFER buffer type bind right before glDrawElements without success.

Crash only append when I fill text mesh before those ones. So I need dig more.

Reply via email to