簡體   English   中英

不推薦的OpenGL功能

[英]Deprecated OpenGL features

我最近閱讀了這個列表,我注意到我從OpenGL Red Book中學到的幾乎所有內容都被認為已被棄用。 我在談論像素傳輸操作,像素圖,累積緩沖區,開始/結束功能(!?),自動mipmap生成和當前光柵位置。

為什么他們將這些功能標記為已棄用? 還可以使用它們嗎? 解決方法有哪些?

在我看來它更好。 但是這個所謂的Immediate Mode在OpenGL 3.0中確實被棄用,主要是因為它的性能不是最佳的。

在立即模式下,您使用glBeginglEnd等調用。 因此,基元的渲染取決於程序的命令,OpenGL無法前進,直到它從CPU獲得適當的命令。 相反,您可以使用緩沖區對象來存儲所有頂點和數據。 然后告訴OpenGL使用此緩沖區使用glDrawArraysglDrawElements等命令渲染其基元,或者甚至更專業的命令,如glDrawElementsInstanced 當GPU忙於執行這些命令並將緩沖區繪制到目標FrameBuffer (基本上是渲染目標)時。 程序可以關閉並發出一些其他命令。 這樣,CPU和GPU都在同時忙碌,沒有浪費時間。

不是最好的解釋,但我的建議是:嘗試學習這個新的渲染管道。 到目前為止,它優於即時模式。 我推薦的教程如下:

http://www.arcsynthesis.org/gltut/index.html

http://www.opengl-tutorial.org/

http://ogldev.atspace.co.uk/

字面上試着忘記你到目前為止所知道的,立即模式很久就被棄用了,不應再使用了,而是專注於新技術;)

編輯 對不起,如果我使用'中間'而不是'立即',我認為它實際上稱為“立即”,我傾向於將它們混合起來。

為什么他們將這些功能標記為已棄用?

首先,一些術語:它們沒有被刪除 在OpenGL 3.0中,它們已被棄用(意思是“可能會在以后的版本中刪除”); 在3.1及以上,其中大部分被刪除 兼容性配置文件可以恢復已刪除的功能。 雖然它在Windows和Linux上得到廣泛實現,但Apple的3.2實現僅實現了核心配置文件。

至於刪除背后的原因,這取決於你正在談論的功能。 我們真的只能猜測為什么ARB有任何特定的功能:

像素傳輸操作

像素傳輸操作 尚未刪除 如果你在談論glDrawPixels ,那就是像素傳輸操作,但它是一個像素傳輸。 不是所有的人。

說到:

像素圖

因為這是一個可怕的想法。 glDrawPixels是一個表演陷阱; 聽起來很整潔,但它表現得非常糟糕,因為它很簡單,人們會嘗試使用它。

有一些容易做但性能很差的東西鼓勵人們編寫糟糕的OpenGL應用程序。

積累緩沖區

着色器可以做到這一點。 事實上更好; 他們有比積累緩沖區更多的選擇。

開始/結束功能(!?),

這是另一個表演陷阱。 立即模式渲染非常慢。

自動mipmap生成

因為這是一個可怕的想法。 讓OpenGL決定何時進行重量級操作,如生成紋理的mipmap並不是一個好主意。 ARB更好的想法是讓你說, “好吧,OpenGL,現在為這個紋理生成一些mipmap。”

當前的光柵位置。

另一個表現陷阱/壞主意。

還可以使用它們嗎?

隨你(由你決定。 NVIDIA已經有效地承諾永久支持兼容性配置文件。 這意味着AMD和英特爾可能也必須這樣做。 所以這涵蓋了Windows和Linux。

在MacOSX上,Apple更嚴格地控​​制GL實現,並且他們似乎承諾支持兼容性配置文件。 然而,他們似乎沒有興趣推進OpenGL,因為他們停止了3.2。 甚至Mountain Lion也沒有更新OpenGL版本。

解決方法有哪些?

停止使用性能陷阱。 像其他人一樣,為頂點數據使用緩沖區對象。 使用着色器。 使用glGenerateMipmap

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM