著色器渲染過程
在渲染過程中冲泥,必須存儲(chǔ)2種著??驹碍,分別是頂點(diǎn)著??、片元著??凡恍。頂點(diǎn)著??是第?個(gè)著色?志秃、?元著??是最后?個(gè)。頂點(diǎn)著??中處理頂點(diǎn)嚼酝、片元著??處理像素點(diǎn)顏色浮还。
-
渲染流程圖
- 1.創(chuàng)建頂點(diǎn)
- 2.然后通過頂點(diǎn)著色器渲染
- 3.連接信息條,通過各個(gè)頂點(diǎn)連接成幾何圖形
- 4.光柵化:其實(shí)是確定像素點(diǎn)在屏幕上繪制的位置闽巩,然后這些片段由片元著色器處理(輸入給片元著色器)
- 5.光柵化階段生成每個(gè)片元執(zhí)行這個(gè)著色器
- 6.最終呈現(xiàn)出圖形
渲染方式
- 屏幕渲染方式分為兩種:
- On-Screen Rendering(當(dāng)前屏幕渲染)
- 指的是GPU的渲染操作是在當(dāng)前用于顯示的屏幕緩存區(qū)中進(jìn)行的碑定。
- Off-Screen Rendering(離幕渲染)
- 指的是GPU在當(dāng)前屏幕緩存區(qū)以外新開辟一個(gè)內(nèi)存混存區(qū)進(jìn)行渲染操作流码。
- 般情況下,OpenGL ES會(huì)將應(yīng)用提供到渲染服務(wù)的動(dòng)畫直接渲染顯示(使?基本的渲染的流程) 但對(duì)于?些復(fù)雜的圖像動(dòng)畫的渲染延刘,并不能夠直接渲染疊加顯示出來漫试。?是需要根據(jù)Command Buffer分通道進(jìn)行渲染再組合。這個(gè)組合過程中碘赖,就有些渲染通道是不會(huì)直接顯示出來的驾荣。標(biāo)記此次渲染需要更多的渲染通道和合并步驟,?這些沒有直接渲染顯示在屏幕上的通道就是離屏渲染通道普泡。
- On-Screen Rendering(當(dāng)前屏幕渲染)
- 離屏渲染為什么會(huì)卡頓播掷?
- 離屏渲染需要更多的渲染通道,?不同的渲染通道間切換需要消耗一定的時(shí)間撼班,這個(gè)時(shí)間內(nèi)GPU會(huì)閑置歧匈。當(dāng)通道數(shù)量足夠是,對(duì)性能也會(huì)較?大的影響砰嘁。
離屏渲染的體現(xiàn)
-
1件炉、相?于當(dāng)前屏幕渲染,離屏渲染的代價(jià)相對(duì)?言較高矮湘。主要有以下2個(gè)原因:
- 創(chuàng)建新的的緩存區(qū)
- 上下文切換
-
哪些情況會(huì)使?離屏渲染(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?它們是什么關(guān)系?
- Color Attachment:存儲(chǔ)的是紋理圖片顏色值十办,實(shí)質(zhì)上紋理圖片顏色值屬于顏色附著點(diǎn)的一種
- Depth Attachment:指向的是深度緩沖區(qū)和顏色緩沖區(qū)
- Stencil Attachment:指向的是模版緩沖區(qū)
- RenderBuffer Objects :渲染緩沖區(qū)對(duì)象秀撇,無論是紋理、圖片向族、顏色呵燕、深度緩沖區(qū)、模版緩沖區(qū)都存在這個(gè)對(duì)象
- FrameBuffer 上的附著點(diǎn)其實(shí)相當(dāng)于內(nèi)存地址炸枣,它并沒有存儲(chǔ)實(shí)質(zhì)的內(nèi)容,只是三個(gè)附著點(diǎn)或三個(gè)內(nèi)存地址在FrameBuffer Objects例如color Attachment 弄唧,它僅僅是附著在FrameBuffer身上