lwjgl没有绘制顶点缓冲区

时间:2017-02-02 09:23:39

标签: lwjgl

我试着让一个超级简单的lwjgl应用程序进行绘制一个简单的三角形,但是无法找到正确的调用顺序以使任何有意义的内容出现。我使用一个简单的顶点缓冲区,没有着色器。

由于某种原因,无论实际的顶点缓冲区是什么,每个帧都是帧右下方的白色三角形。

public void run() {

    GLFWErrorCallback.createThrow().set();
    glfwInit();
    glfwDefaultWindowHints();
    glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE);
    glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);

    long h_window = glfwCreateWindow(640, 480, "test", 0, 0);
    glfwShowWindow(h_window);
    glfwMakeContextCurrent(h_window);
    GL.createCapabilities();

    glEnableClientState(GL_VERTEX_ARRAY);

    int b_vertex = glGenBuffers();
    float[] vertex = {
            0,0,0,
            0,0,0,
            0,0,0
    };
    glBindBuffer(GL_ARRAY_BUFFER, b_vertex);
    glBufferData(GL_ARRAY_BUFFER, vertex, GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    while (!glfwWindowShouldClose(h_window)) {
        glClearColor(0, 0, 0, 0);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glEnableVertexAttribArray(0);
        glBindBuffer(GL_ARRAY_BUFFER, b_vertex);
        glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0L);
        glDrawArrays(GL_TRIANGLES, 0, 3);
        glDisableVertexAttribArray(0);

        glfwSwapBuffers(h_window);
        glfwWaitEventsTimeout(1f / 30f);
    }

}
我绝对错过了一些东西,但不知道它是什么。这是显示的内容:

Screenshot of Running app

1 个答案:

答案 0 :(得分:0)

发现问题。

glVertexPointer(3, GL_FLOAT, 0, 0L);

用于无着色缓冲区描述

glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0L);

用于缓冲区描述,也将缓冲区绑定到着色器输入