我是不是很讨厌glVertexAttribPointer(),还是我的HD6480G驱动程序很可能应该归咎于我,我有什么追索权?

时间:2019-06-24 17:29:30

标签: linux opengl glfw vao

我正在尝试在opengl上下文中利用VAO(顶点数组对象)功能。我的非vao缓冲对象可以很好地绘制,但是当我绑定VAO并进行绘制时,不会绘制任何对象。我基本上是使用一些示例代码,并认为它应该工作。但是我有一个混合双显卡设置,该设置有点旧,并且引起了深深的悲伤和遗憾,并且在过去的几轮转弯中,我进行了研究,发现了一些暗示,它可能与它有关或与gpu同步和资源调用。。但是需要专家为我整理事物并定义土地布局。

我正在Linux Ubuntu上使用opengl版本is..3.3(Core Profile)Mesa 18.2.8。我已经关闭了所有其他代码并运行设置,并在尽力地进行drawcall的同时进行。我设置了错误回调并使用了
的值 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); 我认为这是我的格里夫之源。我已经阅读了默认情况下未启用这些功能,并在下面将介绍的绘图调用和初始化中将其激活。

这是我创建VAO的地方


void createSquare() {
  float vertices1[] = {
         0.5f,  0.5f, 0.0f,  // top right
         0.5f, -0.5f, 0.0f,  // bottom right
        -0.5f, -0.5f, 0.0f,  // bottom left
        -0.5f,  0.5f, 0.0f   // top left
    };
    unsigned int indices1[] = {  // note that we start from 0!
        0, 1, 3,  // first Triangle
        1, 2, 3   // second Triangle
    };
  glGenVertexArrays(1, &VAO);
      glGenBuffers(1, &VBO);
      glGenBuffers(1, &EBO);
      // bind the Vertex Array Object first, then bind and set vertex buffer(s), and then configure vertex attributes(s).
      glBindVertexArray(VAO);

      glBindBuffer(GL_ARRAY_BUFFER, VBO);
      glBufferData(GL_ARRAY_BUFFER, sizeof(vertices1), vertices1, GL_STATIC_DRAW);

      glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
      glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices1), indices1, GL_STATIC_DRAW);

          glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
      glEnableVertexAttribArray(0);

      // note that this is allowed, the call to glVertexAttribPointer registered VBO as the vertex attribute's bound vertex buffer object so afterwards we can safely unbind
      glBindBuffer(GL_ARRAY_BUFFER, 0);

      // remember: do NOT unbind the EBO while a VAO is active as the bound element buffer object IS stored in the VAO; keep the EBO bound.
      //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

      // You can unbind the VAO afterwards so other VAO calls won't accidentally modify this VAO, but this rarely happens. Modifying other
      // VAOs requires a call to glBindVertexArray anyways so we generally don't unbind VAOs (nor VBOs) when it's not directly necessary.
      glBindVertexArray(0);


}

这是我绘制函数中所有内容的总和。


glUseProgram(programID);


glBindVertexArray(VAO); 
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

正如我之前所说,会抛出此错误---> glVertexAttribPointerARB(idx)中的GL_INVALID_VALUE并没有绘制正方形。

1 个答案:

答案 0 :(得分:0)

看来我不在核心环境中。.so,这很可能是导致混乱的答案。感谢您的快速回复。