GLUT程序启动后始终显示空白窗口,求助问题原因
问题原因分析及修复方案
你的窗口始终空白的核心原因是循环变量未初始化,导致绘制逻辑完全没执行:
- 外层循环的
float xpos没有赋值初始值,C语言中局部变量默认会保留内存中的随机垃圾值,大概率大于等于1.0f,直接跳过整个外层循环,没有绘制任何多边形。 - 内层循环的
float ypos同样未初始化,哪怕外层循环意外执行,内层也会因为相同原因跳过。
另外还有一个冗余操作:glutSwapBuffers()之后调用glFlush()完全没必要,双缓冲模式下glutSwapBuffers()已经完成了缓冲区交换的核心操作,额外调用glFlush()不会产生任何作用。
修复后的代码
void display() { glClear(GL_COLOR_BUFFER_BIT); frame++; glColor3f(1.0f, 0.0f, 0.0f); // 为循环变量初始化起始值0.0f for (float xpos = 0.0f; xpos < 1.0f; xpos = xpos + 0.1f) { for (float ypos = 0.0f; ypos < 1.0f; ypos = ypos + 0.1f) { glBegin(GL_POLYGON); glVertex2f(xpos-0.075f,ypos-0.075f); glVertex2f(xpos,ypos-0.075f); glVertex2f(xpos,ypos); glVertex2f(xpos-0.075f,ypos); glEnd(); } } glutSwapBuffers(); // 双缓冲模式下完成缓冲区交换 }
额外提示
- 务必养成局部变量初始化的习惯,C语言不会自动将局部变量置0,未初始化的变量会引发各类隐性问题。
- 单缓冲模式下才需要使用
glFlush()刷新绘制指令,双缓冲场景下只用glutSwapBuffers()即可。
内容的提问来源于stack exchange,提问作者Viraxor
相关产品推荐
相关产品推荐

