这是一个简单的opengl程序.在绘制三角形之前,我正试图清除屏幕.我在我的init()函数中调用了glClear(),但它似乎无法清除屏幕.
#include <stdio.h>
#include <stdlib.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
void myIdleFunc()
{
glBegin(GL_TRIANGLES);
{
glColor3f(1.0f, 1.0f, 1.0f);
glVertex2f(0.0f, 1.0f);
glVertex2f(-1.0f, -1.0f);
glVertex2f(1.0f, -1.0f);
}
glEnd();
glFlush();
usleep(1000000);
}
void init()
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE);
glutCreateWindow("Hello, World!");
init();
glutIdleFunc(myIdleFunc);
glutMainLoop();
return 1;
}
Run Code Online (Sandbox Code Playgroud)
这是一个屏幕截图,文本来自后面的gnome终端.

你的显示回调在哪里?您不应该使用空闲函数进行绘图。
所有绘图都需要在适当的回调中进行,GL 上下文可能在glutMainLoop开始运行之前才处于活动状态,并且如果没有活动上下文,您的命令就会被忽略(如果没有上下文,甚至可能没有地方存储用于检索的错误)和glGetError)。
注意:通常您希望在每帧开始时清除缓冲区。使用单缓冲可能只需要清除一次,但双缓冲更好,并且需要您以某种方式渲染每次交换之间的整个区域。
| 归档时间: |
|
| 查看次数: |
14583 次 |
| 最近记录: |