如何在学习openGL时单步调试时,直观看到当前代码的运行结果

来源:互联网 发布:mac预览图片快捷键 编辑:程序博客网 时间:2022/08/16 18:39

是不是很多刚学openGL的人调试代码的时候,有时候都不知道运行这个代码会有什么效果。今天我就写下关于如何在单步调试的情况下,查看当前的代码的运行结果。当然我要说明的是,在openGL代码中设置相关的矩阵,我们是无法立即查看这些矩阵的。所以只能查看当前画图代码的运行结果,比如画线。

glBegin(GL_LINES);glColor3f(1.0,0.0,0.0);glVertex3f(0.0,0.0,0.0);glVertex3f(100,0.0,0.0);glColor3f(0.0,1.0,0.0);glVertex3f(0.0,0.0,0.0);glVertex3f(0.0,100,0.0);glColor3f(0.0,0.0,1.0);glVertex3f(0.0,0.0,0.0);glVertex3f(0.0,0.0,100.0);glEnd();

以上代码当然是画几个轴线。那么怎么才能让你在单步调试的时候把上面的代码立即显示出来呢?就行咱们单步调试让控制台输出结果那样的。其实很简单。那就是在glEnd()语句的后面加上glFinish().稍微了解openGL的都知道,在openGL代码运行的时候,绘制命令不会直接的向GPU发去,而是首先放在命令缓冲区中。那么这个glFinish()和glFlush()则是告诉CPU把当前命令缓冲区的命令向GPU发去。这两个函数的稍微有点的不同是,glFlush()只负责把命令丢给GPU不管GPU执行不执行。它不等GPU返回结果。而glFinish()则需要等待GPU的运行结果返回。当然你要想立即看到效果还有值得注意的是,那就写openGL程序时,一般都是用双缓冲。单缓冲容易出现闪烁的现象。用glFinish()后台在绘制时一般绘制在后台缓冲区。所以调用glFinish()会看不到想要的效果。所以要想在调试的时候看到代码的运行结果,那么必须把缓冲模式设置为单缓冲,这样只需的命令就会立即显示到屏幕上。


以上就是单步调试情况下显示的情况。总之注意两点。一,调用过来Finish()强制把命令缓冲区的命令发送给GPU。因为openGL代码正常循环运行的情况和单步调试情况下是差不多的。所以命令执行的先后顺序是一样的。不会出现调试和运行结果不一样的现象。第二值得注意的是,必须把缓冲模式设置为单缓冲区。这样缓冲区的数据变化会直接反应在屏幕上。就这么多了,希望对需要的一些帮助。

0 0