我正在使用 GLKit(OpenGL ES 2)为 iOS 制作游戏,并且想使用 VBO 和 VAO,因为我认为它们会大大提高性能(当我在其中测试我的应用程序时,Instruments 会推荐它)。
我有很多纹理对象实际上不会改变位置、大小、纹理等,所以我认为 VBO 会有所帮助。
目前我正在使用 GLKVector2 数组来存储顶点和纹理坐标数据,我不太确定如何从这里转到 VBO。
有人能帮忙吗?
干杯,尼克。
您可以将它们直接传递给glBufferData ()
,如下所示:
GLKVector2 objects[k];
// ... Fill out your objects vertices in objects
GLuint buffer = 0;
glGenBuffers (1, &buffer);
glBindBuffer (GL_ARRAY_BUFFER, buffer);
glBufferData (GL_ARRAY_BUFFER, sizeof (objects), objects, GL_STATIC_DRAW);
glEnableClientState (GL_VERTEX_ARRAY);
glVertexPointer (2, GL_FLOAT, sizeof (GLKVertex2), 0);
这告诉 OpenGL 生成一个缓冲区并绑定它。glBufferData()
实际上将其上传到卡上。调用glVertexPointer ()
说明您要从数组中的哪个位置开始提取顶点。当您使用 VBO 时,最后一个参数中的指针变为偏移量。
编辑:对不起 - 填写了一些细节。脑袋放了个屁。有关详细信息,请参见此处。