OpenGL 3.x: Access violation when using vertex buffer object and glDrawElements(...) -


i have trouble rendering geometry using vertex buffer object. intend draw plane of points, 1 vertex @ every discrete position in space. however, cannot render plane, every time call gldrawelements(...), application crashes returning access violation exception. there must mistake while initialization, guess.

this have far:


#define space_x 512 #define space_z 512  typedef struct{     glfloat x, y, z; // position     glfloat nx, ny, nz; // normals     glfloat r, g, b, a; // colors } vertex;  typedef struct{     gluint i; // index } index;  // create vertex buffer gluint vertexbufferobject; glgenbuffers(1, &vertexbufferobject);  // create index buffer gluint indexbufferobject; glgenbuffers(1, &indexbufferobject);  // determine number of vertices / primitives const int numberofvertices = space_x * space_z; const int numberofprimitives = numberofvertices; // i'm going render gl_points, number of primitives same number of vertices  // create vertex array vertex* vertexarray = new vertex[numberofvertices];  // create index array index* indexarray = new index[numberofprimitives];  // create planes (vertex array) // color of vertices red int index = -1; for(glfloat x = -space_x / 2; x < space_x / 2; x++) {     for(glfloat z = -space_z / 2; z < space_z / 2; z++) {         index++;         vertexarray[index].x = x;         vertexarray[index].y = 0.0f;         vertexarray[index].z = z;         vertexarray[index].nx = 0.0f;         vertexarray[index].ny = 0.0f;         vertexarray[index].nz = 1.0f;         vertexarray[index].r = 1.0;         vertexarray[index].g = 0.0;         vertexarray[index].b = 0.0;         vertexarray[index].a = 1.0;     } }  // bind vertex buffer glbindbuffer(gl_array_buffer, vertexbufferobject);  // buffer vertex array glbufferdata(gl_array_buffer, numberofvertices * sizeof(vertex), vertexarray, gl_dtream_draw);  // bind vertex buffer again glbindbuffer(gl_array_buffer, vertexbufferobject);  // enable attrib index 0 (positions) glenablevertexattribarray(0);  // pass positions in glvertexattribpointer((gluint)0, 3, gl_float, gl_false, sizeof(vertex), vertexarray);  // enable attribute index 1 (normals) glenablevertexattribarray(1);  // pass normals in glvertexattribpointer((gluint)1, 3, gl_float, gl_false, sizeof(vertex), &vertexarray[0].nx);  // enable attribute index 2 (colors) glenablevertexattribarray(2);  // pass colors in glvertexattribpointer((gluint)2, 4, gl_float, gl_false, sizeof(vertex), &vertexarray[0].r);  // create index array for(glunit = 0; < numberofprimitives; i++) {     indexarray[i].i = i; }  // bind buffer glbindbuffer(gl_elemenet_array_buffer, indexbufferobject);  // buffer indices glbufferdata(gl_elemenet_array_buffer, numberofprimitives * sizeof(index), indexarray, gl_stream_draw);  // bind buffer again glbindbuffer(gl_elemenet_array_buffer, indexbufferobject);  // , here crashes! // draw plane of gl_points gldrawelements(gl_points, numberofprimitives, gl_unsigned_int, indexarray);  // bind default buffers glbindbuffer(gl_array_buffer, 0); glbindbuffer(gl_element_array_buffer, 0);  // delete vertex / index buffers gldeletebuffers(1, &vertexbufferobject); gldeletebuffers(1, &indexbufferobject);  delete[] vertexarray; vertexarray = null;  delete[] indexarray; indexarray = null; 

when using buffer objects, last parameters in gl*pointer , 4th parameter in gldrawelements no longer addresses in main memory (yours still are!), offsets buffer objects. make sure compute these offsets in bytes! "offsetof" macro helpful there.


Comments

Popular posts from this blog

Add email recipient to all new Trac tickets -

400 Bad Request on Apache/PHP AddHandler wrapper -

php - Change action and image src url's with jQuery -