glutDisplayFunc() 不绘制,但正常的函数调用会绘制
glutDisplayFunc() doesn't draw but normal function call does
我无法在屏幕上显示一个简单的移动三角形,只有当我使用 glutDisplayFunc(render) 调用我的函数时才会出现这种情况。如果我像普通调用 render() 一样调用我的函数,它会很好地显示三角形,但在这种情况下,它不会为我的三角形设置动画。
基本上我有两个问题:
- 使用 glutDisplayFunc(render) 调用函数时无法绘制三角形
- 当像 render() 这样的函数调用时无法为三角形设置动画,但它可以绘制三角形。
下面是我的主要代码和显示代码:
void render()
{
currentTime = glutGet(GLUT_ELAPSED_TIME);
glClear(GL_COLOR_BUFFER_BIT);
GLfloat color[] = { (float)sin(currentTime) * 0.5f + 0.5f, (float)cos(currentTime) * 0.5f + 0.5f, 0.0f, 1.0f };
glClearBufferfv(GL_COLOR, 0, color);
GLfloat attrib[] = { (float)sin(currentTime) * 0.5f, (float)cos(currentTime) * 0.6f, 0.0f, 0.0f };
glVertexAttrib4fv(0, attrib);
// Use the program object we created earlier for rendering
glUseProgram(rendering_program);
//Draw triangle
glDrawArrays(GL_TRIANGLES,0,3);
glutSwapBuffers();
}
主要:
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutInitWindowSize(600,600);
glutInitContextVersion(4,3);
glutInitContextProfile(GLUT_CORE_PROFILE);
glutCreateWindow("Shader");
if (glewInit()) {
cerr << "Unable to initialize GLEW ... exiting" << endl;
exit(EXIT_FAILURE);
}
startup();
// render(); // WORKS FINE AND DRAW TRIANGLE
glutDisplayFunc(render); //DOESN'T DRAW TRIANGLE
shutdown();
glutMainLoop();
return 0;
}
我相信着色器编译得很好并且那部分代码没有错误,因为它在没有 glutDisplayFunc() 的情况下绘制三角形;唯一的问题是当我使用 glutDisplayFunc(render);什么都没画。
我哪里错了?我该如何解决我上面提到的两个问题?
glutDisplayFunc
不渲染自身。它注册了一个函数,在必须完成渲染时应该由 glut 使用。调用 ifsef 发生在 glutMainLoop()
内的某处。由于您在开始渲染过程之前关闭了所有内容,因此当系统尝试渲染时数据不可用。
我无法在屏幕上显示一个简单的移动三角形,只有当我使用 glutDisplayFunc(render) 调用我的函数时才会出现这种情况。如果我像普通调用 render() 一样调用我的函数,它会很好地显示三角形,但在这种情况下,它不会为我的三角形设置动画。
基本上我有两个问题:
- 使用 glutDisplayFunc(render) 调用函数时无法绘制三角形
- 当像 render() 这样的函数调用时无法为三角形设置动画,但它可以绘制三角形。
下面是我的主要代码和显示代码:
void render()
{
currentTime = glutGet(GLUT_ELAPSED_TIME);
glClear(GL_COLOR_BUFFER_BIT);
GLfloat color[] = { (float)sin(currentTime) * 0.5f + 0.5f, (float)cos(currentTime) * 0.5f + 0.5f, 0.0f, 1.0f };
glClearBufferfv(GL_COLOR, 0, color);
GLfloat attrib[] = { (float)sin(currentTime) * 0.5f, (float)cos(currentTime) * 0.6f, 0.0f, 0.0f };
glVertexAttrib4fv(0, attrib);
// Use the program object we created earlier for rendering
glUseProgram(rendering_program);
//Draw triangle
glDrawArrays(GL_TRIANGLES,0,3);
glutSwapBuffers();
}
主要:
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutInitWindowSize(600,600);
glutInitContextVersion(4,3);
glutInitContextProfile(GLUT_CORE_PROFILE);
glutCreateWindow("Shader");
if (glewInit()) {
cerr << "Unable to initialize GLEW ... exiting" << endl;
exit(EXIT_FAILURE);
}
startup();
// render(); // WORKS FINE AND DRAW TRIANGLE
glutDisplayFunc(render); //DOESN'T DRAW TRIANGLE
shutdown();
glutMainLoop();
return 0;
}
我相信着色器编译得很好并且那部分代码没有错误,因为它在没有 glutDisplayFunc() 的情况下绘制三角形;唯一的问题是当我使用 glutDisplayFunc(render);什么都没画。
我哪里错了?我该如何解决我上面提到的两个问题?
glutDisplayFunc
不渲染自身。它注册了一个函数,在必须完成渲染时应该由 glut 使用。调用 ifsef 发生在 glutMainLoop()
内的某处。由于您在开始渲染过程之前关闭了所有内容,因此当系统尝试渲染时数据不可用。