OpenGL ES學習之路(3.1) 著色器渲染過程、渲染方式、FrameBuffer與RenderBuffer

著色器渲染過程

在渲染過程中,必須存儲2種著??,分別是頂點著??、片元著??。頂點著??是第?個著色?、?元著??是最后?個。頂點著??中處理頂點、片元著??處理像素點顏色。

  • 渲染流程圖


    image.png
    • 1.創建頂點
    • 2.然后通過頂點著色器渲染
    • 3.連接信息條,通過各個頂點連接成幾何圖形
    • 4.光柵化:其實是確定像素點在屏幕上繪制的位置,然后這些片段由片元著色器處理(輸入給片元著色器)
    • 5.光柵化階段生成每個片元執行這個著色器
    • 6.最終呈現出圖形

渲染方式

  • 屏幕渲染方式分為兩種:
    • On-Screen Rendering(當前屏幕渲染)
      • 指的是GPU的渲染操作是在當前用于顯示的屏幕緩存區中進行的。
    • Off-Screen Rendering(離幕渲染)
    • 指的是GPU在當前屏幕緩存區以外新開辟一個內存混存區進行渲染操作。
    • 般情況下,OpenGL ES會將應用提供到渲染服務的動畫直接渲染顯示(使?基本的渲染的流程) 但對于?些復雜的圖像動畫的渲染,并不能夠直接渲染疊加顯示出來。?是需要根據Command Buffer分通道進行渲染再組合。這個組合過程中,就有些渲染通道是不會直接顯示出來的。標記此次渲染需要更多的渲染通道和合并步驟,?這些沒有直接渲染顯示在屏幕上的通道就是離屏渲染通道。
  • 離屏渲染為什么會卡頓?
    • 離屏渲染需要更多的渲染通道,?不同的渲染通道間切換需要消耗一定的時間,這個時間內GPU會閑置。當通道數量足夠是,對性能也會較?大的影響。

離屏渲染的體現

  • 1、相?于當前屏幕渲染,離屏渲染的代價相對?言較高。主要有以下2個原因:

    • 創建新的的緩存區
    • 上下文切換
  • 哪些情況會使?離屏渲染(off-Screen Render)?

    • 1.drawRect
    • 2.layer.shouldRasterize = YES;
    • 3.有mask或者陰影(layer.makesToBunds)、shouldRasterize(光柵化)、masks(遮罩)、shadow(陰影)、edge antialiasing(抗鋸齒)、group opacity(不透明)
    • 4.Text(UILabel,CATextLayer,CoreText)

FrameBuffer與RenderBuffer

  • 為什么要用FrameBuffer 和 RenderBuffer?它們是什么關系?
    • Color Attachment:存儲的是紋理圖片顏色值,實質上紋理圖片顏色值屬于顏色附著點的一種
    • Depth Attachment:指向的是深度緩沖區和顏色緩沖區
    • Stencil Attachment:指向的是模版緩沖區
    • RenderBuffer Objects :渲染緩沖區對象,無論是紋理、圖片、顏色、深度緩沖區、模版緩沖區都存在這個對象
    • FrameBuffer 上的附著點其實相當于內存地址,它并沒有存儲實質的內容,只是三個附著點或三個內存地址在FrameBuffer Objects例如color Attachment ,它僅僅是附著在FrameBuffer身上
image.png
image.png
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容