使用VBO而不使用 VAO 的OpenGL绘图

zour9fqk  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(136)

我可以使用 VAO 和VBO渲染一个三角形,代码如下

// reading shader source, compile it and link shader program
    Shader shader("vertexShader.vs", "fragmentShader.fs"); 

    float vertices[] = {
        -0.5f, -0.5f, 0.0f,
         0.5f, -0.5f, 0.0f,
         0.0f,  0.5f, 0.0f
    };

    unsigned VBO_ID;
    unsigned VAO_ID;
    glGenVertexArrays(1, &VAO_ID);
    glBindVertexArray(VAO_ID);

    glGenBuffers(1, &VBO_ID);
    glBindBuffer(GL_ARRAY_BUFFER, VBO_ID);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
    glEnableVertexAttribArray(0);

    // render loop
    while (!glfwWindowShouldClose(window))
    {
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f); 
        glClear(GL_COLOR_BUFFER_BIT); 
        shader.use();
        
        processInput(window);
        glDrawArrays(GL_TRIANGLES, 0, 3);
        
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

上面的代码成功渲染了一个三角形。但是如何渲染这个三角形只使用VBO?如果我这样评论 VAO (glGenVertexArrays和glBindVertexArrays)的使用:

//glGenVertexArrays(1, &VAO_ID);
//glBindVertexArray(VAO_ID);

glGenBuffers(1, &VBO_ID);
glBindBuffer(GL_ARRAY_BUFFER, VBO_ID);
...

我什么也没有得到,只有一个只有背景颜色的窗口。如何只使用VBO渲染这个三角形。
OpenGL版本:3.3.0具有GLAD的核心配置文件上下文22.20.44.47.230323

siv3szwd

siv3szwd1#

你不需要。核心OpenGL 3.2+不允许不使用 VAO 进行渲染。就像它不允许在没有着色器的情况下渲染一样。

相关问题