在iOS上的5.1该股的OpenGL ES应用,是他们真正使用顶点数组他们申报的吗?(In the

2019-10-17 06:07发布

在股票的OpenGL ES应用,您可以获得(当你在Xcode中创建一个新的“OpenGL的游戏”),在setupGL功能,还有:

glEnable(GL_DEPTH_TEST);

//glGenVertexArraysOES( 1, &_vertexArray ) ; // va's are not being used!
//glBindVertexArrayOES( _vertexArray ) ;     // we comment these out
// to no ill effect -- are these calls extraneous?

glGenBuffers( 1, &_vertexBuffer ) ;
glBindBuffer( GL_ARRAY_BUFFER, _vertexBuffer ) ;
glBufferData( GL_ARRAY_BUFFER, sizeof(gCubeVertexData), gCubeVertexData, GL_STATIC_DRAW ) ;

glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 24, BUFFER_OFFSET(0));
glEnableVertexAttribArray(GLKVertexAttribNormal);
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 24, BUFFER_OFFSET(12));

//glBindVertexArrayOES(0);

然而,这似乎并不认为顶点正在使用的阵列,(据我所知,顶点数组留在客户端存储器中,而顶点缓冲区停在OpenGL的服务器内存)。

如果您注释掉glBindVertexArrayOES命令,代码似乎工作完全一样。

glBindVertexArrayOES调用此Xcode的样品中多余的?

Answer 1:

你混淆了顶点数组对象顶点数组(该术语混淆)。

这种说法:“(据我所知,顶点数组留在客户端存储器中,而顶点缓冲区停在OpenGL的服务器内存)”适用于客户端的顶点数组。 这些被用来代替“顶点缓冲对象”时,你要保持你的顶点缓冲的地方,从而提供一个原始内存指针glDrawElements / GL *指针。

在另一方面顶点阵列的对象是一个OpenGL构建体,其包含所有必要的绘制对象的指针。 在名称为“VertexArray”任何OpenGL的功能适用于“顶点数组对象”,而不是客户机侧顶点数组。

你可以阅读更多关于VAO这里:

http://www.opengl.org/wiki/Vertex_Specification#Vertex_Array_Object



文章来源: In the stock OpenGL ES app on iOS 5.1, are they really using the vertex arrays they declare?