Creating PBO
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glGenTextures(1, &TextureId);
glBindTexture(GL_TEXTURE_2D, TextureId));
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPLACE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPLACE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB,TextureSizeX,TextureSizeY,
0,GL_RGB, GL_UNSIGNED_BYTE, pixTexture);
//store on pbo
glGenBuffers(1,&PboId);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER,PboId);
glBufferData(GL_PIXEL_UNPACK_BUFFER,PboSize,pixTexture,GL_STATIC_DRAW);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER,0);
if(pixTexture) free(pixTexture); pixTexture = NULL;
creating VBO
glGenBuffers(1,&VboId);
glBindBuffer(GL_ARRAY_BUFFER, VboId);
glBufferData(GL_ARRAY_BUFFER,
NumVertices*( sizeof(float) * 3)), pVertices,GL_STATIC_DRAW);
before drawing
glEnableClientState(GL_NORMAL_ARRAY);
glNormalPointer(GL_FLOAT,0,pNormals);
glBindBuffer(GL_ARRAY_BUFFER, VboId);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT,0,BUFFER_OFFSET(0));
glEnableClientState(GL_INDEX_ARRAY);
glIndexPointer(GL_UNSIGNED_INT,0,pIndexes);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER,G_iPbo);
glBindTexture(GL_TEXTURE_2D, TextureId);
glColor3f(1.0f, 1.0f, 1.0f);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);
glTexCoordPointer(2,GL_FLOAT,0,pTexCoord);
drawing -
notice - I’m keeping index array on CPU and not making it index buffer
We can assume that all the index (Offset , NumSteps) are correct since it works perfect when I turn off VBO
I’m not posting all the drawing loop since it’s a bit complicated
but the relevant line is this
glDrawRangeElements(GL_TRIANGLE_STRIP,pIndexes[Offset+1],
pIndexes[Offset+NumSteps-2],
NumSteps, GL_UNSIGNED_INT,
pIndexes+Offset);
disabling , unbinding
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_INDEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER,0);
Thanks.