當我使用SDL庫設置內存中的像素值並更新屏幕時,每當更新過快時都會發生屏幕撕裂。我不知道很多有關SDL內部,但我從我看到的理解是:爲每幀分配一個新緩衝區以防止屏幕撕裂
- 更新函數信號圖形硬件來讀取(比方說)
buffer1
像素數據後立即返回。 - 下一幀畫在
buffer2
上,並再次調用更新,但這太快了,從buffer1
的讀數仍未完成; - 我的程序並不知道任何有關硬件的信息,並假設它可以在
buffer1
中再次繪製,而此緩衝區正在發送到顯示器。 - 屏幕被撕裂。
當待塗物體的速度不是太快時,這並不是一個大問題。屏幕仍然流淚,但人眼幾乎不可見,但如果這種撕裂完全沒有發生,我仍然會很高興。我不喜歡垂直同步,因爲它會在每一幀產生一致的延遲。
我的想法是,可能會分配一個新的屏幕緩衝區,每幀將被繪製。當監視器想要顯示某些內容時,它應該從最新的緩衝區讀取數據。
這是一種已經在實踐中使用的方法嗎?如果我想測試我的想法,我可以使用什麼樣的低級和跨平臺庫或API? SDL? OpenGL的?
不具有任何與緩衝區一個很好的鏈接,一切跟你更新屏幕的確切時間。谷歌「sdl垂直同步」,你不能錯過SDL_RENDERER_PRESENTVSYNC。 –
可能嗎?是。可能? **沒有**。通常你會看到使用雙(2)或三(3)緩衝。緩衝區被預先分配。 –
@HansPassant我知道我總是可以做垂直同步,我在原文中提到過它,我想避免它的一致性延遲。 – xiver77