當前位置:首頁 » 硬碟大全 » 幀緩存保存opengl
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

幀緩存保存opengl

發布時間: 2023-03-03 23:34:16

❶ 幀緩存的定義

一個支持OpenGL渲染的窗口 (即幀緩存) 可能包含以下的組合:
· 至多4個顏色緩存
· 一個深度緩存
· 一個模板緩存
· 一個積累緩存
· 一個多重采樣緩存

❷ OpenGL ES基礎理論 (一) —— 緩存、幀緩存、上下文與坐標系等

程序會將3D場景數據保存到硬體RAM中,嵌入式系統的中央處理單元有專門為其分配的RAM,在圖形處理的過程中,GPU也有專門為其分配的RAM,使用現代硬體渲染3D圖形的速度幾乎彎完全取決於不用的內存區塊被訪問的方式。

先看一下下圖。

OpenGL ES 是 一 種 軟 件 技 術。OpenGL ES 部分運行在 CPU 上,部分運行在 GPU 上。 OpenGL ES 橫跨在兩個處理器之間,協調兩個內存區域之間的數據交換。上圖中箭頭代表了與3D渲染相關硬體組件之間的數據交換,每個箭頭也代表著一個渲染性能的瓶頸。

從一個內存區域復制數據到另一個內存區域速度是相對較慢的。更糟糕的是,除非非常小心,在內存復制發生的時候 GPU 和 CPU 都不能把內存另作它用。因此內存區域之間的數據交換需要盡量避免。

最新的 OpenGL ES 為了支持新改進的方法拋棄了對於舊式的低效的內存復制操作的支持。

OpenGL ES 為兩個內存區域間的數據交換定義了 緩存(buffers) 的概念。緩存是指圖形處理器能夠控制和管理的連續 RAM。程序從 CPU 的內存復制數據到 OpenGL ES 的緩存。在 GPU 取得一個緩存的所有權以後,運行在 CPU 中的程序理想情況下將不 再接觸這個緩存。通過控制獨占的緩存,GPU 就能夠盡可能以最有效的方式讀寫內存。 圖形處理器把它處理大量數據的能力非同步同時地應用到緩存上,這意味著在 GPU 使用 緩存中的數據工作的同時,運行在 CPU 中的程序可以繼續執行。

幾乎所有的程序提供給GPU的數據都應該放入緩存中,為緩存提供數據,需要如下7個步驟:

理想情況下,每個生成的緩存都可以使用一個相當長的時間。下面看一下上面幾個步驟的OpenGL ES的C語言函數的實現。

GPU 需要知道應該在內存中的哪個位置存儲渲染出來的 2D 圖像像素數據。就像 為 GPU 提供數據的緩存一樣,接收渲染結果的緩沖區叫做幀緩存 (frame buffer) 。程 序會像任何其他種類的緩存一樣生成、綁定、刪除幀緩存。但是幀緩存不需要初始 化,因為渲染指令會在適當的時候替換緩存的內容。幀緩存會在被綁定的時候隱式開 啟,同時 OpenGL ES 會自動地根據特定平台的硬體配置和功能來設置數據的類型和偏移。

可以同時存在很多幀緩存,並且可以通過 OpenGL ES 讓 GPU 把渲染結果存儲到 任意數量的幀緩存中。但是,屏幕顯示像素要受到保存在前幀緩存 (front frame buffer) 的特定幀緩存中的像素顏色元素的控制。程序和操作系統很少會直接渲染到前幀緩存中,因為那樣會讓用戶看到正在渲染中的還沒渲染完成的圖像。相反,程序和操作系統 會把渲染結果保存到包括後幀緩存 (back frame buffer) 在內的其他幀緩存中。當渲染後的後幀緩存包含一個完成的圖像時,前幀緩存與後幀緩存幾乎會瞬間切換。後幀緩存會變成新的前幀緩存,同時舊的前幀緩存會變成後幀緩存。

用於配置 OpenGL ES 的保存在特定平台的軟體數據結構中的信息會被封裝到一個 OpenGL ES 上下文(context)中。上下文中的 信息可能會被保存在 CPU 所控制的內存中,也可能會被保存在 GPU 所控制的內存中。 OpenGL ES 會按需在兩個內存區域之間復制信息,知道何時發生復制有助於程序的優化。

OpenGL ES 總是開始於一個矩 形的笛卡兒坐標系,如下圖所示。

OpenGL ES 坐標是以浮點數來存儲的。現代 GPU 對浮點運算做了專門的優化,即 使是使用其他數據類型的頂點也會被轉換成浮點值。