我正在尋找一種可移植的方式來創建一個無阻塞的SwapBuffers(),即使VSync被激活。
換句話說,是否可以通過事件來通知,或知道延遲到下一個VSync?無阻塞SwapBuffers()與VSync = on
6
A
回答
2
IIRC這個擴展幫助:http://www.opengl.org/registry/specs/SGI/video_sync.txt,但它很差的當前驅動程序支持。
+0
不幸的是,你是對的,這個功能支持非常差。 – 2010-02-09 16:27:58
0
首先,你爲什麼不在框架的開頭調用SwapBuffers()?或以某種方式將管道改爲
Render();
Update(); //Update before swapping buffers
SwapBuffers();
雖然OpenGL的是在你只是把它的命令在外打工,你可以做所有的更新邏輯的。
否則有幾種方法可以解決這個問題。
我知道XNA有一個ScanLine屬性,它告訴你屏幕當前正在使用哪條掃描線。我不知道OpenGL是否也暴露了這一點,但我確定它必須。 (對吧?)
使用多線程渲染。許多現代引擎專用於整個線程僅用於渲染。如果阻塞,沒關係,它不會干擾主線程。另一種更簡單的方法是在新線程上處理輸入等,這可以避免圖形上下文的複雜性。
使用triple buffering。使用三重緩衝意味着你有兩個後臺緩衝區。當您調用SwapBuffers後,屏幕可以繼續掃描前端緩衝區,並且您新完成的緩衝區正在等待,以及第三個緩衝區可供您渲染下一幀。當然,如果你已經預渲染了兩幀,SwapBuffers()將會被阻塞。
相關問題
- 1. mpi:阻塞與非阻塞
- 2. mysqldump阻塞Ruby on Rails
- 3. 無阻塞Javascript
- 4. 無阻塞無限循環
- 5. Django無阻塞保存?
- 6. Java無阻塞讀取
- 7. 如何無阻塞GC
- 8. 無阻塞subprocess.call - 重訪
- 9. ShowDialog無阻塞來電
- 10. Rails無阻塞帖子
- 11. 使recv_from函數無阻塞
- 12. Perl無阻塞套接字
- 13. 非阻塞連接()與WinSocks
- 14. 異步與非阻塞
- 15. 嵌套Socket阻塞非阻塞SocketHi
- 16. Python中的阻塞與非阻塞網絡IO
- 17. 設備驅動程序DLL阻塞與非阻塞?
- 18. 使用select與阻塞和非阻塞套接字的影響
- 19. Linux阻塞與非阻塞串行讀取
- 20. 帶延遲的阻塞/非阻塞
- 21. 非阻塞PASV襪子和阻塞
- 22. 阻塞隊列不阻塞線程?
- 23. 是renderer.render()阻塞還是非阻塞?
- 24. 非阻塞寫入和阻塞recv
- 25. 選擇()與非阻塞I/O和選擇()與阻塞I/O在套接字
- 26. Java線程阻塞
- 27. recv與非阻塞套接字
- 28. CoreData阻塞UI
- 29. 非阻塞stdio
- 30. 是sed阻塞?
如果可能的話,這將是平臺特定的。所以請至少指定您的平臺。 – unwind 2010-02-08 15:49:47
我想找一種實現此功能的便攜式方式(Win32/Linux/MacOSX) – 2010-02-08 15:55:48
延遲到下一個vsync如何幫助您?這並不像swapbuffer調用在調用時進行交換。 – Bahbar 2010-02-08 17:54:47