Để đẩy dữ liệu (vertice, normal, texcoordinate) xuống card màn hình, mình tạo ra 1 VBO cho toàn bộ các Objects như sau:
C++ Code:
glGenBuffersARB(1, &vboId); glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboId); glBufferDataARB(GL_ARRAY_BUFFER_ARB, totalSize, NULL, GL_STATIC_DRAW_ARB);
Sau đó, mình sử dụng glBufferSubDataARB() để cập nhật dữ liệu cho từng object:
C++ Code:
unsigned int offset = 0; for(int i = 0; i < numOfObjects;i++) { vboOffset[i] = offset; glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, offset, sizeOfObjects , &objPointer); offset += sizeOfObjects; }
Sau khi quá trình Build VBO hoàn thành, khi mình vẽ Object 0, thì chuơng trình chạy bình thường (vẽ được object 0). Nhưng mà khi vẽ object 1, 2, ... thì vẽ lại bị lỗi truy cập vùng nhớ. Ai biết giúp mình với.
Code vẽ Object i:
C++ Code:
glDrawArrays( GL_TRIANGLES,vboOffset[i], numOfTriangle);
Bạn đổi GL_STATIC_DRAW_ARB thành GL_DYNAMIC_DRAW_ARB
Lý dó khi bạn khởi tạo VBO bằng GL_STATIC_DRAW thì nó chỉ cho phép bạn ghi dữ liệu 1 lần duy nhât vào vùng nhớ đó, chính vì thế mà bạn có thể vẽ được Object đầu tiên. Lần vẽ tiếp theo phát sinh lỗi.
Nguồn
http://www.songho.ca/opengl/gl_vbo.html