【发布时间】:2020-12-08 00:15:46
【问题描述】:
我正在尝试在屏幕上绘制一个简单的三角形。窗口设置正确,一切似乎都很好,我正在尝试实际绘制东西。我有以下代码,但由于某种原因它不起作用。
default_shader_program是函数代码后显示的程序链接着色器
void window::run(void(*update)(), void(*draw)()) {
while (glfwWindowShouldClose(wnd) == 0)
{
update();
glClear(GL_COLOR_BUFFER_BIT);
draw();
GLuint vb;
GLfloat data[12]{
1.f, 1.f, 0.f,
1.f, -1.f, 0.f,
-1.f, 0.f, 0.f
};
glGenBuffers(1, &vb);
glBindBuffer(GL_ARRAY_BUFFER, vb);
glBufferData(GL_ARRAY_BUFFER, 12, data, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
GLuint va;
glGenVertexArrays(1, &va);
glBindVertexArray(va);
glUseProgram(default_shader_program);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vb);
glVertexAttribPointer(
0, // attribute 0. No particular reason for 0, but must match the layout in the shader.
3, // size
GL_FLOAT, // type
GL_FALSE, // normalized?
0, // stride
(void*)0 // array buffer offset
);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
glfwSwapBuffers(wnd);
glfwPollEvents();
}
glfwDestroyWindow(wnd);
}
着色器: 顶点着色器:
#version 330 core
layout(location=0) in vec3 vertexPosition;
void main() {
gl_Position = vec4(vertexPosition, 1);
}
片段着色器:
#version 330 core
out vec3 color;
void main() {
color = vec3(1.0, 0.0, 0.0);
}
是的,我知道,我正在缓冲数据并在 while 循环中做其他事情。我知道不应该那样做,但实际问题发生在其他地方,我想看看代码是否可以直接在循环内正常工作。
【问题讨论】:
-
为什么你的数据数组有 12 个元素?我不认为这是一个问题,但它只是奇怪