我正在尝试绘制一行作为学习OpenGL 4.x及更高版本的一部分。以下是我正在使用的着色器。
顶点着色器
"#version 430 core \n"
" \n"
"void main(void) \n"
"{ \n"
" const vec4 vertices[2] = vec4[2](vec4(0.25,-0.25,0.5,1.0),vec4(-0.25,-0.25,0.5,1.0)); \n"
" gl_Position = vertices[gl_VertexID]; n"
"} \n"
和Fragment Shader
"#version 430 core \n"
" \n"
"out vec4 color; \n"
" \n"
"void main(void) \n"
"{ \n"
" color = vec4(0.0, 0.8, 0.0, 1.0); \n"
"} \n"
以下是我在display()
函数中所做的事情。
void display()
{
static const GLfloat red[] = { 1.0f, 0.0f, 0.0f, 1.0f };
glClearBufferfv(GL_COLOR, 0, red);
glUseProgram(program);
glLineWidth(8.0f);
glDrawArrays(GL_LINES, 0, 2);
glFlush();
}
但是,除了红色外,窗口中没有任何内容。 我已阅读this,this和this个问题。其中两个让我使用顶点缓冲区,第三个让我在同一个位置绘制一个带有两个顶点的三角形。
我的问题是,为什么我的代码中的glDrawArrays(GL_LINES, 0, 2)
无法绘制一行?或者,当我需要绘制一条线时,我是否必须使用顶点阵列缓冲区?
更新:
以下是main()
函数的代码。
startShaders();
while (!glfwWindowShouldClose(window))
{
RenderFunction();
glfwSwapBuffers(window);
glfwPollEvents();
}
shutdown();
cout << "INFO: OpenGL Version: " << glGetString(GL_VERSION) << endl;
glfwTerminate();
exit(EXIT_SUCCESS);
这是我的RenderFunction()
调用Display()
函数。
void RenderFunction()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
display();
}
更新2:
这是显示stderr
输出的控制台窗口的图片。