更多:iOS面試題大全git
離屏渲染就是在當前屏幕緩衝區之外,新開闢一個緩衝區進行操做。github
離屏渲染出發的場景有如下:面試
你們高中物理應該學過顯示器是如何顯示圖像的:須要顯示的圖像通過CRT電子槍以極快的速度一行一行的掃描,掃描出來就呈現了一幀畫面,隨後電子槍又會回到初始位置循環掃描,造成了咱們看到的圖片或視頻。性能
爲了讓顯示器的顯示跟視頻控制器同步,當電子槍新掃描一行的時候,準備掃描的時發送一個水平同步信號(HSync信號),顯示器的刷新頻率就是HSync信號產生的頻率。而後CPU計算好frame等屬性,將計算好的內容交給GPU去渲染,GPU渲染好以後就會放入幀緩衝區。而後視頻控制器會按照HSync信號逐行讀取幀緩衝區的數據,通過可能的數模轉換傳遞給顯示器,就顯示出來了。具體的你們自行查找資料或詢問相關專業人士,這裏只參考網上資料作一個簡單的描述。code
離屏渲染的代價很高,想要進行離屏渲染,首選要建立一個新的緩衝區,屏幕渲染會有一個上下文環境的一個概念,離屏渲染的整個過程須要切換上下文環境,先從當前屏幕切換到離屏,等結束後,又要將上下文環境切換回來。這也是爲何會消耗性能的緣由了。視頻
因爲垂直同步的機制,若是在一個 HSync 時間內,CPU 或者 GPU 沒有完成內容提交,則那一幀就會被丟棄,等待下一次機會再顯示,而這時顯示屏會保留以前的內容不變。這就是界面卡頓的緣由。圖片
CPU
GPU
在繪製渲染視圖時作了大量的工做。離屏渲染髮生在 GPU
層面上,會建立新的渲染緩衝區,會觸發 OpenGL
的多通道渲染管線,圖形上下文的切換會形成額外的開銷,增長 GPU
工做量。若是 CPU
GPU
累計耗時 16.67
毫秒尚未完成,就會形成卡頓掉幀。get
圓角屬性
、蒙層遮罩
都會觸發離屏渲染。指定了以上屬性,標記了它在新的圖形上下文中,在未癒合以前,不能夠用於顯示的時候就出發了離屏渲染。同步
在OpenGL中,GPU有2種渲染方式it
離屏渲染消耗性能的緣由
哪些操做會觸發離屏渲染?