glDrawArrays访问错误

glDrawArrays bad access

本文关键字:错误 访问 glDrawArrays      更新时间:2023-10-16

我想做一个简单的乒乓球游戏,但遇到了一些问题。本质上,我有一个由四个点组成的数组,其中有一个x&y值表示一个硬编码的球,我需要让这个球正确显示。当我尝试使用glDrawArray时,我一直崩溃,因为我在最后一个参数中传递的四个(用于绘制四个顶点)超出了界限。知道为什么吗?

在我的设置中:

//put in vertices for ball
//point 1
ballPosArr[0] = 0.1; //x
ballPosArr[1] = 0.1; //y
//pt 2
ballPosArr[2] = -0.1;
ballPosArr[3] = 0.1;
//pt 3
ballPosArr[4] = 0.1;
ballPosArr[5] = -0.1;
//pt 4
ballPosArr[6] = -0.1;
ballPosArr[7] = 0.1;

//ball position buffer
GLuint buffer;
glGenBuffers( 1, &buffer);
glBindBuffer( GL_ARRAY_BUFFER, buffer);
glBufferData( GL_ARRAY_BUFFER, 8*sizeof(GLuint), ballPosArr, GL_STATIC_DRAW );
_buffers.push_back(buffer); //_buffers is a vector of GLuint's
// Initialize the attributes from the vertex shader
GLuint bPos = glGetAttribLocation(_shaderProgram, "ballPosition" );
glEnableVertexAttribArray(bPos);
glVertexAttribPointer(bPos, 2, GL_FLOAT, GL_FALSE, 0, &ballPosArr[0]);

在我的显示回调中:

GLuint bPos = glGetAttribLocation(_shaderProgram, "ballPosition");
glEnableVertexAttribArray(bPos);
//rebind buffers and send data again
//ball position
glBindBuffer(GL_ARRAY_BUFFER, _buffers[0]);
glVertexAttribPointer(bPos, 2, GL_FLOAT, GL_FALSE, 0, &ballPosArr[0]);
glDrawArrays( GL_POLYGON, 0, 4); //bad access error at 4

在我的vshader.txt中:

attribute vec2 ballPosition;
void main() {
}

如果使用VBO,glVertexAttribPointer的最后一个参数是缓冲区的相对偏移量,而不是缓冲区的CPU地址。在您的情况下,为最后一个参数传递0,因为要使用的顶点数据位于缓冲区的开头。