基本 LWJGL 程序中的黑屏

Black screen in basic LWJGL program

所以,我一直在看一些 OpenGL 的 C++ 教程,我试图将代码移植到 Java,但我得到的只是黑屏。我真的找不到这里的错误,我想我已经根据 LWJGL 修改了一些东西。着色器实际上是从教程中复制的,因此它们应该可以工作。我也试过 glfwSetErrorCallback() 但它没有给我任何东西。
主要:

public static void main(String[] args) {
    long window;
    float[] positions = new float[]{
        0.5f, -0.5f,
        0.0f, 0.5f,
        0.5f, -0.5f
    };

    if(!glfwInit()){
        System.err.println("GLFW Failed to initialize");
        System.exit(1);
    }

    window = glfwCreateWindow(800,600,"Game",0,0);
    glfwMakeContextCurrent(window);
    GL.createCapabilities();
    int id = glGenBuffers();
    glBindBuffer(GL_ARRAY_BUFFER, id); 
    glBufferData(GL_ARRAY_BUFFER, createBuffer(positions), GL_STATIC_DRAW); 

    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 2, GL_FLOAT, false, 0, 0);

    int shader = createShader(readFile("vertexShader.shader"), readFile("fragmentShader.shader"));
    glUseProgram(shader);

    while(!glfwWindowShouldClose(window)){
        glfwPollEvents();
        glClear(GL_COLOR_BUFFER_BIT);
        glDrawArrays(GL_TRIANGLES, 0, 3);
        glfwSwapBuffers(window);
    }
    glfwTerminate();
}

创建缓冲区:

public static FloatBuffer createBuffer(float[] data) {
    FloatBuffer buffer = BufferUtils.createFloatBuffer(data.length);
    buffer.put(data);
    buffer.flip();
    return buffer;
}

创建着色器:

public static int createShader(String vertexShader, String fragmentShader){
    int program = glCreateProgram();
    int vs = compileShader(vertexShader, GL_VERTEX_SHADER);
    int fs = compileShader(fragmentShader, GL_FRAGMENT_SHADER);

    glAttachShader(program, vs);
    glAttachShader(program, fs);
    glLinkProgram(program);
    glValidateProgram(program);

    glDeleteShader(vs);
    glDeleteShader(fs);

    return program;
}

编译着色器:

public static int compileShader(String source, int type){
    int id = glCreateShader(type);
    glShaderSource(id, source);
    glCompileShader(id);

    if(glGetShaderi(id, GL_COMPILE_STATUS) == GL_FALSE){
        System.out.println(glGetShaderInfoLog(id));
        glDeleteShader(id);
        System.exit(1);
    }
    return id;
}

您绘制的几何图形不是三角形。第一个和第三个顶点相同。