如何在学习openGL时单步调试时,直观看到当前代码的运行结果
来源:互联网 发布:mac预览图片快捷键 编辑:程序博客网 时间:2024/04/25 17:05
是不是很多刚学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
- 如何在学习openGL时单步调试时,直观看到当前代码的运行结果
- Linux/Android内核代码在运行时是如何调试的?
- 在keil上如何看到各个线程的运行状态
- 运行时如何获取运行当前代码所在的函数,一个神奇的宏
- 当前管理员看到上一个管理员的查询到的结果
- C#开发的程序如何在运行的时候弹出选择调试器的代码
- 如何在Visual Studio中运行和调试汇编代码
- 如何在Visual Studio中运行和调试汇编代码?
- 在程序在Unity中运行时,如何在 Unity不是当前窗口的时候,使程序一直在运行?
- 如何将MTK的代码分模块在eclipse中单独编译运行起来调试
- 提升当前用户在MOSS中代码的运行权限
- Netty笔记一(可以运行看到结果的简单例子)
- NSIS如何在安装前结束当前运行的进程
- 【QTP】【头脑风暴】如何在脚本运行时,Log中能记录当前进入的函数
- 如何在Eclipse下,实现ant的web项目修改保存后,实时部署,直接刷新即可看到结果
- 使用gdb调试当前运行的程序
- 使用gdb调试当前运行的程序
- 使用gdb调试当前运行的程序
- 求100以内的素数
- 搭建一个多任务调度环境
- poj 1185 状态压缩DP
- c语言队列基本操作代码
- 华为2014暑期实习生招聘机试考题回忆
- 如何在学习openGL时单步调试时,直观看到当前代码的运行结果
- [VC] ADO访问本地数据库应用
- 二维码的生成细节和原理
- 浏览器缓存
- Python3.x区别
- tabHost的两种实现方式
- android基础入门Gallery与ImageView视图(10)
- DACE- a matlab Kriging toolbox
- Listview异步加载图片之优化篇(有图有码有解释)