Sign in to follow this  
Estor

glBufferSubData / 0xC0000005 crash

Recommended Posts

Estor    127
Hi I trie to remove glMapBufferARB/glUnmapBufferARB pair from my code using glBufferSubData but i get crash every time i call this function. Here is VBO init part: First i create my mesh in memory. After i finish it looks like this
.---------------------------. - 0
|   Vertexy  - (float)XYZW  |
+---------------------------+ - sizeof(vertex)* vertex_count
|   Normal   - (float)XYZW  |
+---------------------------+ - sizeof(normal)* normal_count + sizeof(vertex)*vertex count
|   Color    - (float)RGBA  | 
+---------------------------+ - etc...
|   TexCoord - (float)XY    |
'---------------------------'

1 long bufer...
    glGenBuffersARB( 1, &_vboVertexId );
    glBindBufferARB( GL_ARRAY_BUFFER_ARB, _vboVertexId );
    glBufferDataARB( GL_ARRAY_BUFFER_ARB, reqMem, sourceBuffer, GL_DYNAMIC_DRAW_ARB );

    int retval = 0;
    glGetBufferParameterivARB( GL_ARRAY_BUFFER_ARB, GL_BUFFER_SIZE_ARB, &retval );
    if( retval != reqMem )
        errorf( "glBufferDataARB failed to allocate any memory!\n" );
    glBindBufferARB( GL_ARRAY_BUFFER_ARB, 0 );



then i modify (skinning) vertex and normals and trie to update them like this
        glBindBufferARB( GL_ARRAY_BUFFER_ARB, _vboVertexId );
        glBufferSubData( GL_ARRAY_BUFFER_ARB, 0, destSize, destData );
        glBindBufferARB( GL_ARRAY_BUFFER_ARB, 0 );



destSize, destData are correct and contain data :/ I made a test like this one:
        glBindBufferARB( GL_ARRAY_BUFFER_ARB, vboVertexId );
        glGetBufferParameterivARB( GL_ARRAY_BUFFER_ARB, GL_BUFFER_SIZE_ARB,   &ret); cout << ret << endl;
        glGetBufferParameterivARB( GL_ARRAY_BUFFER_ARB, GL_BUFFER_USAGE_ARB,  &ret); cout << ret << endl;
        glGetBufferParameterivARB( GL_ARRAY_BUFFER_ARB, GL_BUFFER_ACCESS_ARB, &ret); cout << ret << endl;
        glGetBufferParameterivARB( GL_ARRAY_BUFFER_ARB, GL_BUFFER_MAPPED_ARB,  &ret); cout << ret << endl;
        glBindBufferARB( GL_ARRAY_BUFFER_ARB, 0 );



Of curse return values are as i expected: GL_BUFFER_SIZE_ARB = 11872 - that's correct value GL_BUFFER_USAGE_ARB = GL_DYNAMIC_DRAW_ARB GL_BUFFER_ACCESS_ARB = READ_WRITE_ARB GL_BUFFER_MAPPED_ARB = 0x00000000 Any idea what is wrong ??? Thanks for any halp [Edit] I made one more test:
        float test[10] = {1.f, 1.f, 1.f, 1.f, 1.f };

        glBindBufferARB( GL_ARRAY_BUFFER_ARB, vboVertexId );
        glBufferSubData( GL_ARRAY_BUFFER_ARB, 0, sizeof(test), test );
        glBindBufferARB( GL_ARRAY_BUFFER_ARB, 0 );


of curse it's crashing too ::cry::

Share this post


Link to post
Share on other sites
James Trotter    432
You might have forgotten to initialize the function pointer. I also noticed that you're using the ARB suffix for every function (i.e. glBindBufferARB), except glBufferSubData. Try glBufferSubDataARB.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this