我有一个在NaCl外部工作的opengl es 2代码,但在Chrome中返回此错误:.PPAPIContextGL错误:GL_INVALID_OPERATION : glDrawArrays:尝试访问属性3中的超出范围顶点有我的代码:
static float theta = 0.0;
glClearColor(0.5, 0.5, 0.5, 1);
glClearDepthf(1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
g_matrices.PushMatrix();
g_matrices.Rotatef( theta, 0.0f, 0.0f, 1.0f );
EnableGUIShader(SM_DEFAULT);
GLfloat col[4] = {1.0f, 0.33f, 0.0f, 0.11f};
GLfloat ver[3][3];
ver[0][0] = 0.0f;
ver[0][1] = 1.0f;
ver[0][2] = 0.0f;
ver[1][0] = 0.87f;
ver[1][1] = -0.5f;
ver[1][2] = 0.0f;
ver[2][0] = -0.87f;
ver[2][1] = -0.5f;
ver[2][2] = 0.0f;
GLint posLoc = GUIShaderGetPos();
GLint colLoc = GUIShaderGetCol();
glVertexAttribPointer(posLoc, 3, GL_FLOAT, 0, sizeof(ver), ver);
glVertexAttribPointer(1, 4, GL_FLOAT, 0, sizeof(col), col);
glEnableVertexAttribArray(posLoc);
glEnableVertexAttribArray(1);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(posLoc);
glDisableVertexAttribArray(1);
DisableGUIShader();
g_matrices.PopMatrix();
theta += 1.0f;发布于 2014-05-11 11:35:32
在对颜色的glVertexAttribPointer()和glEnableVertexAttribArray()调用中,需要使用colLoc作为第一个参数,而不是1
GLint posLoc = GUIShaderGetPos();
GLint colLoc = GUIShaderGetCol();
glVertexAttribPointer(posLoc, 3, GL_FLOAT, 0, sizeof(ver), ver);
glVertexAttribPointer(colLoc, 4, GL_FLOAT, 0, sizeof(col), col);
glEnableVertexAttribArray(posLoc);
glEnableVertexAttribArray(colLoc);此外,如果您希望将颜色作为数组传递,则需要每个顶点一个颜色。所以对于你的3个顶点,颜色数组必须是col[3][4]。如果要对所有顶点使用相同的颜色,请将glVertexAttribPointer(colLoc, ...)调用替换为:
glVertexAttrib4f(colLoc, col[0], col[1], col[2], col[3]);https://stackoverflow.com/questions/23588544
复制相似问题