OpenGL ES--常见函数作用

glFinish函数与glFlush()函数

1. glFinish()将缓冲区的指令立即送往硬件执行,但是要一直等到硬件执行完这些指令之后才返回

2. glFlush()清空缓冲区,将指令送往缓硬件立即执行,但是它是将命令传送完毕之后立即返回,不会等待指令执行完毕。这些指令会在有限时间内执行完毕。

3. 如果你使用的是双缓冲,那么可能这两个函数都不需要用到。缓冲区交换操作会隐式将命令送去执行。

4. 区别:一般,使用glFlush的目的是确保在调用之后,CPU没有OpenGL相关的事情需要做-命令会送到硬件执行;调用glFinish的目的是确保当返回之后,没有相关工作留下需要继续做

5. 另外,glFinish会造成性能下降;如果调用glFinish,通常会带来性能上的损失,因为它会是的GPU和CPU之间的并行性丧失。一般,我们提交给驱动的任务被分组,然后被送到硬件上(在缓冲区交换的时候)。如果调用glFinish,就强制驱动将命令送到GPU,然后CPU等待直到被传送的命令全部执行完毕,这样在GPU工作的整个期间内,CPU没有工作(至少在这个线程上)而在CPU工作时(通常是在对命令分组),GPU没有工作,因此造成性能上的下降。因此,应该尽量减少使用此函数。此函数的一个应用是:调试bug,如果我传输到硬件的某条命令造成了GPU的崩溃,找出使得GPU崩溃的那条指令的简单方法是在每个绘制操作之后调用这个函数,这样就可以准确找出造成崩溃的命令。另外,Direct3D不支持Finish概念。

发布了92 篇原创文章 · 获赞 23 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/Tokyo_2024/article/details/103982238