无法使用 EBO 渲染三角形

Can't render a triangle with EBO

我想用 GL_ELEMENT_ARRAY_BUFFER 渲染一个矩形,但我只得到一行渲染。使用 GL_ARRAY_BUFFER 它可以工作。例如,我尝试只渲染一个三角形,但它也不起作用。

Screenshot

初始化:

Vertex[] vertices = [
    Vertex(-0.5, -0.5, 0), Vertex(0.5, -0.5, 0), Vertex(0, 0.5, 0)
];
GLuint[] indices = [0, 1, 2];
GLuint VAO, VBO, EBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glGenBuffers(1, &EBO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, vertices.length * Vertex.sizeof, vertices.ptr, GL_STATIC_DRAW);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glBindBuffer(GL_TRIANGLES, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.sizeof, &indices, GL_STATIC_DRAW);
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(vertexShader, 1, &vertexShaderSource, null);
glCompileShader(vertexShader);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, null);
glCompileShader(fragmentShader);
GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);

渲染:

glClearColor(0.2, 0.2, 0.2, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glVertexAttribPointer(0,3,GL_FLOAT, GL_FALSE, float.sizeof * 3, cast(void*) 0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glUseProgram(shaderProgram);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, &indices);

Full code.

怎么了?

我有办法了。存在以下问题:

glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, &indices);

&indices 是指向整个数组的指针。但似乎 OpenGL 需要 ptr 到每个数组元素 indices.ptr.