當(dāng)前屏幕渲染:指的是GPU的渲染操作是在當(dāng)前用于顯示的屏幕緩沖區(qū)進(jìn)行.
離屏渲染:指的是GPU在當(dāng)前屏幕緩沖區(qū)以外開辟一個緩沖區(qū)進(jìn)行渲染操作.
當(dāng)前屏幕不需要額外創(chuàng)建新的緩存,也不需要開啟新的上下文,相對于離屏渲染性能更好.但是受當(dāng)前屏幕渲染的局限因素限制(只有自身上下文,屏幕緩存有限等),當(dāng)前屏幕渲染有些情況下的渲染解決不了的,就會用你那個到離屏渲染.
相比于當(dāng)前屏幕渲染娇未,離屏渲染的代價是很高的尔崔,主要體現(xiàn)在兩個方面:
1.創(chuàng)建新的緩沖區(qū):要想進(jìn)行離屏渲染,首先要創(chuàng)建一個新的緩沖區(qū).
2.上下文切換:離屏渲染的整個過程,需要多次切換上下文環(huán)境.首先是從當(dāng)前屏幕切換到離屏,等到離屏渲染結(jié)束后,將離屏緩沖區(qū)的渲染結(jié)果顯示到屏幕上,又需要將上下文環(huán)境從離屏切換到當(dāng)前屏幕,而上下文環(huán)境的切換是需要付出很大代價的.
最后由于垂直同步機制,如果在一個Hsync時間內(nèi),CPU或者GPU沒有完成內(nèi)容提交,則那一幀就會被丟棄,等待下一次機會再顯示,而這時顯示屏?xí)A糁暗膬?nèi)容不變.這就是界面卡頓的原因.
為什么要有這套機制呢?
有些被認(rèn)為不能直接呈現(xiàn)于屏幕,而需要在別的做額外的處理預(yù)合成.圖層屬性的混合體沒有預(yù)合成之前不能直接在屏幕中繪制,所以就需要屏幕外渲染.屏幕外渲染并不意味著軟件繪制,但是它意味著涂層必須在被顯示之前在一個屏幕外上下文中被渲染(無論CPU還是GPU).
直接切圓角方式就會造成離屏渲染.