[Windows & DMD] No callstack when crash with Access violation reading location 0x00000000

Xavier Bigand flamaros.xavier at gmail.com
Sat Jan 18 11:40:34 PST 2014


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.


More information about the Digitalmars-d-learn mailing list