SharpGL中Finish和Flush的区别
通常情况下,OpenGL指令不是立即执行的。它们首先被送到指令缓冲区,然后才被送到硬件执行。glFinish和glFlush都是强制将命令缓冲区的内容提交给硬件执行。
一、glFinish()函数
glFinish()将缓冲区的指令立即送往硬件执行,但是要一直等到硬件执行完这些指令之后才返回。
如果直接绘制到前缓冲,那么在你想保存屏幕截图之前,就需要调用这个函数,确保绘制完毕。
如果使用双缓冲,则这个函数不会有太大作用。
二、glFlush()
glFlush()清空缓冲区,将指令送往缓硬件立即执行,但是它是将命令传送完毕之后立即返回,不会等待指令执行完毕。这些指令会在有限时间内执行完毕。
如果直接绘制到前缓冲,那么OpenGL的绘制将不会有任何延迟。设想有一个复杂的场景,有很多物体需要绘制。当调用glFlush时,物体会一个一个地出现在屏幕上。但是,如果使用双缓冲,这个函数将不会有什么影响,因为直到交换缓冲区的时候变化才显现出来。
如果你使用的是双缓冲,那么可能这两个函数都不需要用到。缓冲区交换操作会隐式将命令送去执行。
三、glFinish和glFlush的区别
看起来这两个函数很相似,但是仍然是有区别的。
一般,使用glFlush的目的是确保在调用之后,CPU没有OpenGL相关的事情需要做-命令会送到硬件执行。调用glFinish的目的是确保当返回之后,没有相关工作留下需要继续做。
glFinish会造成性能下降
如果调用glFinish,通常会带来性能上的损失。因为它会是的GPU和CPU之间的并行性丧失。
一般,我们提交给驱动的任务被分组,然后被送到硬件上(在缓冲区交换的时候)。如果调用glFinish,就强制驱动将命令送到GPU。然后CPU等待直到被传送的命令全部执行完毕。这样在GPU工作的整个期间内,CPU没有工作(至少在这个线程上)。而在CPU工作时(通常是在对命令分组),GPU没有工作。因此造成性能上的下降。
因此,应该尽量减少使用此函数。此函数的一个应用是:调试bug。如果我传输到硬件的某条命令造成了GPU的崩溃,找出使得GPU崩溃的那条指令的简单方法是在每个绘制操作之后调用这个函数。这样就可以准确找出造成崩溃的命令。
SharpGL中Finish和Flush的区别相关推荐
- Activity中finish()和onDestroy()的区别
finish()方法用于结束一个Activity的生命周期,而onDestory()方法则是Activity的一个生命周期方法,其作用是在一个Activity对象被销毁之前,Android系统会调用该 ...
- fileoutputstream路径 android,Android编程中FileOutputStream与openFileOutput()的区别分析
本文实例分析了Android编程中FileOutputStream与openFileOutput()的区别.分享给大家供大家参考,具体如下: openFileOutput() 首先给大家介绍使用文件如 ...
- 页面静态化2 --- 使用PHP缓存机制来完成页面静态化(上)(ob_flush和flush函数区别用法)...
我们可以使用PHP自带的缓存机制来完成页面静态化,但在这里,需要说明一点,仅靠PHP缓存机制并不能完美的解决页面静态化,往往需要和其他页面静态技术(通常是伪静态技术)结合使用 例子: 当访问一个页面时 ...
- Linux中exit与_exit的区别
在exit,_exit的区别 - exit()与_exit()函数的区别(Linux系统中)2012-03-20 15:19:53 分类: LINUX 注:exit()就是退出,传入的参数是程序退出时 ...
- linux中exit和fatal区别,关于Linux系统命令中exit与exit的区别
关于Linux系统命令中exit与exit的区别 注:exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1或者1,标准C里有EXIT_SUCCESS和 ...
- MySQL 5.7中sync_binlog参数和半同步中after_commit和after_sync的区别
导 读 作者:高鹏(重庆八怪) 原文地址:https://www.jianshu.com/p/59c6ecb46fe5 本文为我的一些零散记录供以后参考,但里面的部分问题经常会有朋友问到,翻以往的记 ...
- python中break和continue的区别
python中break和continue的区别 break 结束for 或者while 循环 后面还没循环到的 不再循环 continue 当满足某种条件时结束当前值的循环 后面没有循环的继续循环 ...
- java中separator_java - File.separator和路径中的斜杠之间的区别
java - File.separator和路径中的斜杠之间的区别 在Java Path-String中使用/和普通的File.separator有什么区别? 与双反斜杠相比,/平台独立似乎不是原因, ...
- PHP中self和static的区别,php中self与static的区别
原文链接,猛击这里. php中self与static的区别 通过一些示例,我们可以很容易看出self和static的区别.假定我们有class Car – 它有两个方法,model和getModel. ...
最新文章
- UITableView数据的添加、删除、移动
- 某大厂女程序员哀叹:还不到三十岁,父母竟让自己和一个离异有娃的男人相亲!
- 窗口缩放导致页面排版错乱的解决方法
- hdu 4358(莫队算法+dfs序列)
- central maven_一键发布到Maven Central的方法
- (笔记)学习C语言经典书籍推荐
- 苹果流媒体电视业务姗姗来迟 Netflix和亚马逊丝毫不虚...
- 如何形象地理解 Python 中的 int 类型是任意精度这一概念?
- Java如何连接Mysql数据库
- linux 命令:chmod详解
- matlab axis函数_又是被Matlab整疯的一天!来学点简单操作!
- 计算机界面没磁盘驱动器,驱动器中没有磁盘的原因和解决办法
- 梦幻西游手游海外服务器维护,梦幻西游手游维护 新神器任务轩辕丘之祸开启...
- c# 操作ppt 设置背景色、字体颜色、PPT转图片
- spring-boot文件上传限制
- linux内核漫游实验目的,Linux内核源代码漫游——
- github上很好的iOS资源集锦
- YOLOv3 ubuntu 配置及训练自己的VOC格式数据集
- 光纤熔接操作步骤——详细图文光纤熔接教程
- dy是怎么算收益的?武汉新时标文化传媒
热门文章
- 图的绝对中心(bzoj 2180: 最小直径生成树)
- 2017 Multi-University Training Contest - Team 7:1010. Just do it(组合数?)
- 超级卡特兰数(bzoj 4706: B君的多边形)
- pytorch之各类图像库的图片读写方式
- OPNET网络仿真分析-目 录
- Unity3D笔记 愤怒的小鸟四 实现Selelction界面
- 【zabbix解决value too small or too large】
- 洛谷 P1164:小A点菜(DP/DFS)
- Java基础笔记(2) 程序入口 关键字 标识符 常量 变量
- Python之输入输出