- Vertex arrays using a mapped buffer object for array data and an
- unmapped buffer object for indices:
- // Create system memory buffer for indices
- indexdata = malloc(400);
- // Fill system memory buffer with 100 indices
- ...
- // Create index buffer object
- BindBufferARB(ELEMENT_ARRAY_BUFFER_ARB, 2);
- BufferDataARB(ELEMENT_ARRAY_BUFFER_ARB, 400, indexdata,
- STATIC_DRAW_ARB);
- // Free system memory buffer
- free(indexdata);
- // Frame rendering loop
- while (...) {
- // Define arrays (and create buffer object in first pass)
- BindBufferARB(ARRAY_BUFFER_ARB, 1);
- VertexPointer(4, FLOAT, 0, BUFFER_OFFSET(0));
- ColorPointer(4, UNSIGNED_BYTE, 0, BUFFER_OFFSET(256));
- BindBufferARB(ELEMENT_ARRAY_BUFFER_ARB, 2);
- // Enable arrays
- EnableClientState(VERTEX_ARRAY);
- EnableClientState(COLOR_ARRAY);
- // Initialize data store of buffer object
- BufferDataARB(ARRAY_BUFFER_ARB, 320, NULL, STREAM_DRAW_ARB);
- // Map the buffer object
- float *p = MapBufferARB(ARRAY_BUFFER_ARB, WRITE_ONLY);
- // Compute and store data in mapped buffer object
- ...
- // Unmap buffer object and draw arrays
- if (UnmapBufferARB(ARRAY_BUFFER_ARB)) {
- DrawElements(TRIANGLE_STRIP, 100, UNSIGNED_INT,
- BUFFER_OFFSET(0));
- }
- // Disable arrays
- DisableClientState(VERTEX_ARRAY);
- DisableClientState(COLOR_ARRAY);
- // Other rendering commands
- ...
- }