1.openGLES定義了嵌入式3D圖形的標(biāo)準(zhǔn)昏鹃。
2.為了能在ANSI C編程語言中使用歌逢,openGLES定義了一個(gè)應(yīng)用程序編程接口旅择。通常用來開發(fā)蘋果產(chǎn)品的C++和Objective-C編程語言可以與ANSI C無縫交互产园。特定的轉(zhuǎn)換層或者粘合層的存在使openGLES可以用在javascript和python中沐兰。
3.最新的3D圖形硬件加速是所有高級移動產(chǎn)品的可視化效果基礎(chǔ)哆档。
4.圖形處理單元(GPU)就是能夠結(jié)合幾何、顏色住闯、燈光和其他數(shù)據(jù)產(chǎn)生一個(gè)屏幕圖像的硬件組件。
5.用3D數(shù)據(jù)產(chǎn)生一個(gè)2D圖像的過程叫做渲染澳淑。
6.在計(jì)算機(jī)上顯示的圖片是由矩形的顏色點(diǎn)組成的比原,這些矩形的顏色點(diǎn)叫像素。
7.每個(gè)像素都是由一個(gè)紅點(diǎn)一個(gè)綠點(diǎn)一個(gè)藍(lán)點(diǎn)組成的杠巡。
8.圖像是以每個(gè)像素至少包含3個(gè)值的一個(gè)數(shù)組存儲在電腦的存儲器中的量窘。
9.渲染3D數(shù)據(jù)為一個(gè)2D圖像通常發(fā)生在幾個(gè)不同的步驟中,包括設(shè)置圖像中的每個(gè)像素的紅綠藍(lán)顏色強(qiáng)度的計(jì)算氢拥。
10.圖形處理過程中CPU和GPU都會專門為其分配RAM蚌铜。
11.openGLES橫跨在CPU和GPU之間,協(xié)調(diào)兩個(gè)內(nèi)存區(qū)域之間的數(shù)據(jù)交換嫩海。
12.現(xiàn)代硬件渲染3D圖形的速度幾乎完全取決于不同的內(nèi)存區(qū)域被訪問的方式冬殃。
13.OpenGLES為兩個(gè)內(nèi)存區(qū)域間的數(shù)據(jù)交換定義了緩存(buffer)的概念。緩存是指圖形處理器能夠控制和管理的連續(xù)RAM叁怪。程序從CPU的內(nèi)存復(fù)制到openGLES的緩存审葬。在GPU取得一個(gè)緩存的所有權(quán)之后,運(yùn)行在CPU的程序理想情況下將不再接觸這個(gè)緩存。通過控制獨(dú)占的緩存涣觉,GPU就能夠盡可能以最有效的方式讀寫內(nèi)存痴荐。圖形處理器把它處理大量數(shù)據(jù)的能力異步同時(shí)應(yīng)用到緩存上,這意味著在GPU使用緩存中的數(shù)據(jù)的同時(shí)官册,運(yùn)行在CPU中的程序可以繼續(xù)執(zhí)行生兆。
14.幾乎所有的程序提供給GPU的數(shù)據(jù)都應(yīng)該放在緩存中。緩存存儲的到底是幾何數(shù)據(jù)膝宁、顏色鸦难、燈光效果,還是其他信息不重要昆汹。
15.為緩存提供數(shù)據(jù)有7個(gè)步驟:
(1).生成(Generate):為GPU控制的緩存生成一個(gè)唯一標(biāo)識符
(2).綁定(Bind):告訴OpenGLES為接下來的運(yùn)算使用一個(gè)緩存
(3).緩存數(shù)據(jù)(Buffer Data):讓OpenGLES為當(dāng)前綁定的緩存分配并初始化足夠的連續(xù)內(nèi)存(通常是從CPU控制的內(nèi)存復(fù)制數(shù)據(jù)到分配的內(nèi)存)
(4).啟用(Enable)或者禁止(Disable):告訴OpenGLES在接下來的渲染中是否使用緩存中的數(shù)據(jù)明刷。
(5).設(shè)置指針(Set Pointers):告訴OpenGLES在緩存中的數(shù)據(jù)類型和所有需要訪問的數(shù)據(jù)的內(nèi)存偏移值。
(6).繪圖(Draw):告訴OpenGLES使用當(dāng)前綁定并啟用的緩存中的數(shù)據(jù)渲染整個(gè)場景或某個(gè)場景的一部分满粗。
(7).刪除(Delete):告訴OpenGLES刪除以前生成的緩存并釋放相關(guān)的資源辈末。
16.七個(gè)步驟的函數(shù)對應(yīng):
(1)glGenBuffers().
(2)glBindBuffer().
(3)glBufferData().
(4)glEnableVertexAttribArray().
(5)glVertexAttribPointer().
(1)glDrawArrays().
(1)glDeleteBuffers().
17.接收渲染結(jié)果的緩沖區(qū)叫做幀緩存。
18.幀緩存不需要初始化映皆,渲染指令會在適當(dāng)?shù)臅r(shí)候替換緩存的內(nèi)容挤聘。
19.程序和操作系統(tǒng)會把渲染結(jié)果保存到包括后幀緩存的其他緩存中,當(dāng)渲染后的后幀緩存包含一個(gè)完整圖像的時(shí)候捅彻,前幀緩存和后幀緩存會瞬間切換组去。后幀緩存會變成新的前幀緩存,同時(shí)舊的前幀緩存會變成后幀緩存步淹。
20.用于配置OpenGLES的保存在特定平臺的的軟件數(shù)據(jù)結(jié)構(gòu)中的信息會被封裝到OpenGLES的上下文中从隆。
21.context會跟蹤用于渲染的幀緩存。
22.OpenGLES坐標(biāo)是以浮點(diǎn)數(shù)存儲的缭裆。
23.矢量是理解現(xiàn)代GPU的關(guān)鍵键闺,圖形處理器就是大規(guī)模并行矢量處理器。
24.計(jì)算機(jī)圖形依賴于線性代數(shù)澈驼,GPU擅長簡單的數(shù)學(xué)運(yùn)算辛燥。
25.OpenGLES使用頂點(diǎn)數(shù)據(jù)來定義點(diǎn)、線段和三角形缝其。OpenGLES只能渲染點(diǎn)挎塌、線段、三角形内边。
26.OpenGLES是訪問類似iPhone和iPad的現(xiàn)代嵌入式系統(tǒng)的3D圖形加速硬件的標(biāo)準(zhǔn)榴都。
小結(jié):
OpenGLES是訪問類似iPhone和iPad的現(xiàn)代嵌入式系統(tǒng)的3D圖形加速硬件的標(biāo)準(zhǔn)。把程序提供的幾何數(shù)據(jù)轉(zhuǎn)換為屏幕上的圖像的過程叫做渲染假残。GPU控制的緩存是高效渲染的關(guān)鍵缭贡。容納幾何數(shù)據(jù)的緩存定義了要渲染的點(diǎn)炉擅、線段和三角形。OpenGLES 3D的默認(rèn)坐標(biāo)系阳惹、頂點(diǎn)和矢量為幾何數(shù)據(jù)的描述提供了數(shù)學(xué)基礎(chǔ)谍失。渲染的結(jié)果通常保存在幀緩存中。有兩個(gè)特別的幀緩存莹汤,前幀緩存和后幀緩存快鱼,它們控制者屏幕像素的最終顏色。OpenGLES的上下文保存了OpenGLES的狀態(tài)信息纲岭,包括用于提供渲染數(shù)據(jù)的緩存地址和用于接收渲染結(jié)果的緩存地址抹竹。
以上內(nèi)容為閱讀OpenGLES 應(yīng)用開發(fā)實(shí)踐指南iOS卷第一章的總結(jié)。