首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >opengl es nacl问题

opengl es nacl问题
EN

Stack Overflow用户
提问于 2014-05-11 11:20:02
回答 1查看 91关注 0票数 0

我有一个在NaCl外部工作的opengl es 2代码,但在Chrome中返回此错误:.PPAPIContextGL错误:GL_INVALID_OPERATION : glDrawArrays:尝试访问属性3中的超出范围顶点有我的代码:

代码语言:javascript
复制
  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;
EN

回答 1

Stack Overflow用户

发布于 2014-05-11 11:35:32

在对颜色的glVertexAttribPointer()glEnableVertexAttribArray()调用中,需要使用colLoc作为第一个参数,而不是1

代码语言:javascript
复制
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, ...)调用替换为:

代码语言:javascript
复制
glVertexAttrib4f(colLoc, col[0], col[1], col[2], col[3]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23588544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档