早期的OpenGL使用立即渲染模式(Immediate mode,也就是固定渲染管線),這個模式下繪制圖形很方便。OpenGL的大多數功能都被庫隱藏起來,開發者很少能控制OpenGL如何進行計算的自由。而開發者迫切希望能有更多的靈活性。隨着時間推移,規范越來越靈活,開發者對繪圖細節有了更多的掌控。立即渲染模式確實容易使用和理解,但是效率太低。因此從OpenGL3.2開始,規范文檔開始廢棄立即渲染模式,並鼓勵開發者在OpenGL的核心模式(Core-profile)下進行開發,這個分支的規范完全移除了舊的特性。
當使用OpenGL的核心模式時,OpenGL迫使我們使用現代的函數。當我們試圖使用一個已廢棄的函數時,OpenGL會拋出一個錯誤並終止繪圖。現代函數的優勢是更高的靈活性和效率,然而也更難於學習。立即渲染模式從OpenGL實際運作中抽象掉了很多細節,因此它在易於學習的同時,也很難讓人去把握OpenGL具體是如何運作的。現代函數要求使用者真正理解OpenGL和圖形編程,它有一些難度,然而提供了更多的靈活性,更高的效率,更重要的是可以更深入的理解圖形編程。
這也是為什么我們的教程面向OpenGL3.3的核心模式。雖然上手更困難,但這份努力是值得的。
現今,更高版本的OpenGL已經發布(寫作時最新版本為4.5),你可能會問:既然OpenGL 4.5 都出來了,為什么我們還要學習OpenGL 3.3?答案很簡單,所有OpenGL的更高的版本都是在3.3的基礎上,引入了額外的功能,並沒有改動核心架構。新版本只是引入了一些更有效率或更有用的方式去完成同樣的功能。因此,所有的概念和技術在現代OpenGL版本里都保持一致。當你的經驗足夠,你可以輕松使用來自更高版本OpenGL的新特性。