(转)gLFlush()和gLFinish()
?筆者初使用OpenGL之時,所遇到的命令不能生效的問題:比如開始想用gLClearColor來設(shè)置背景色為紅色,結(jié)果執(zhí)行后背景還是默認的黑色。后來查閱資料,才知道這與OpenGL的指令執(zhí)行流程有關(guān),要讓設(shè)置的繪制效果實現(xiàn),需要用到glFlush()或glFinish()函數(shù)。
??????? OpenGL是用一條渲染管線線性處理命令的,它的繪圖機制是:先用 OpenGL 的繪圖上下文 Rendering Context (簡稱為 RC )把圖畫好,再把所繪結(jié)果通過 SwapBuffer() 函數(shù)傳給 Window 的 繪圖上下文 Device Context (簡記為 DC)。要注意的是,程序運行過程中,可以有多個 DC,但只能有一個 RC。因此當一個 DC 畫完圖后,要立即釋放 RC,以便其它的 DC 也使用。(轉(zhuǎn)自http://blog.sina.com.cn/s/blog_4e6f376d0100c0o2.html)
??????? 回到開頭那個問題,一般來說,我們提交給OpenGL的繪圖指令(比如設(shè)置背景色)并不是馬上送給圖形硬件執(zhí)行,而是放到一個緩沖區(qū)里面,等待緩沖區(qū)滿了再將這些指令送給圖形硬件執(zhí)行,所以只寫了短短的幾條設(shè)置背景色之類的指令是無法填滿緩沖區(qū)的,自然這些指令不能馬上執(zhí)行以達到所需要的效果了。因此每次在寫完繪圖代碼需要讓其完成效果時我們需要在代碼后面添加glFlush()或gLFinish()函數(shù):(1)gLFlush()作用是將緩沖區(qū)中的指令(無論是否為滿)立刻送給圖形硬件執(zhí)行,發(fā)送完立即返回;(2)glFinish()作用也是將緩沖區(qū)中的指令(無論是否為滿)立刻送給圖形硬件執(zhí)行,但是要等待圖形硬件執(zhí)行完這些指令才返回。
轉(zhuǎn)載于:https://www.cnblogs.com/tiandsp/p/7440827.html
總結(jié)
以上是生活随笔為你收集整理的(转)gLFlush()和gLFinish()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 步步为营 .NET 设计模式学习笔记 十
- 下一篇: 决策树基本原理与sklearn应用