我正在尋找一種可移植的方式來創建一個無阻塞的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. 阻塞或不阻塞(Express.js)
- 6. 阻止阻塞的線程阻塞
- 7. Java無阻塞讀取
- 8. 無阻塞subprocess.call - 重訪
- 9. Perl無阻塞套接字
- 10. 如何無阻塞GC
- 11. Rails無阻塞帖子
- 12. ShowDialog無阻塞來電
- 13. Django無阻塞保存?
- 14. 使recv_from函數無阻塞
- 15. Android - 無阻塞旋轉ProgressDialog
- 16. 無阻塞從標準
- 17. MariaDB與EPOLL非阻塞
- 18. C#線程與阻塞
- 19. 非阻塞連接()與WinSocks
- 20. 異步與非阻塞
- 21. 嵌套Socket阻塞非阻塞SocketHi
- 22. 使用select與阻塞和非阻塞套接字的影響
- 23. Linux阻塞與非阻塞串行讀取
- 24. 阻塞套接字性能與非阻塞套接字
- 25. 設備驅動程序DLL阻塞與非阻塞?
- 26. Python中的阻塞與非阻塞網絡IO
- 27. UIImagePickerController阻塞塞格
- 28. 帶延遲的阻塞/非阻塞
- 29. 信號量阻塞和解除阻塞
- 30. 阻塞隊列不阻塞線程?
如果可能的話,這將是平臺特定的。所以請至少指定您的平臺。 – 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