我试着让一个超级简单的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);
}
}
我绝对错过了一些东西,但不知道它是什么。这是显示的内容:
答案 0 :(得分:0)
发现问题。
glVertexPointer(3, GL_FLOAT, 0, 0L);
用于无着色缓冲区描述
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0L);
用于缓冲区描述,也将缓冲区绑定到着色器输入