【问题标题】:opengl es nacl problemeopengl es nacl问题
【发布时间】:2014-05-11 03:20:01
【问题描述】:

我有一个在 NaCl 之外工作的 opengl es 2 代码,但在 Chrome 中返回此错误: [.PPAPIContext]GL 错误: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;

【问题讨论】:

    标签: c++ opengl-es google-nativeclient


    【解决方案1】:

    在对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]);
    

    【讨论】:

    • 很高兴听到。本网站的运作方式,您可以对所有您认为有帮助的答案进行投票,并接受解决您问题的答案。这样,很明显问题得到了回答。人们经常搜索未回答的问题以查看需要帮助的地方,而明确标记已回答的问题会提高效率。
    猜你喜欢
    • 2011-09-16
    • 2010-11-24
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多