OpenGL基礎知識 五

2021-06-02 23:20:18 字數 1501 閱讀 4530

opengl狀態機

在opengl中使用狀態機的機制去儲存opengl當前的狀態。所謂的opengl狀態機也就是一組opengl的狀態集合。有一些狀態可以開啟或關閉,可以通過glenable(glenum capability)函式進行開啟,gldisable(glenum capability)對狀態進行關閉。如果要獲取某個狀態是否被開啟,可以使用glboolean glisenabled(glenum capability)來獲取某個狀態是否被開啟。還有一些opengl狀態是通過設定值來實現的。opengl提供了一組查詢函式可以查詢布林型,整型,單浮點型和雙浮點型變數的值:

void glgetbooleanv(glenum pname,glboolean *params);

void glgetdoublev(glenum pname,gldouble *params);

void glgetfloatv(glenum pname,glfloat *params);

void glgetintegerv(glenum pname,glint *params);

狀態值的儲存和恢復

在opengl中狀態值是使用堆疊進行儲存的。函式void glpushattrib(glbitfield mask);負責對屬性值進行壓棧;函式void glpopattrib(glbitfield mask)讓屬性值出棧。在這兩個函式中可以使用或(|)操作符對多個屬性進行壓棧和出棧的操作。

opengl中的錯誤

在opengl狀態中有一組狀態值是專門用來標識opengl中發生的錯誤的。當錯誤發生時,某些狀態值就會被設定。我們可以通過呼叫函式glgeterror來獲取這些狀態值。

glenum glgeterror(void)

以下是一張opengl的錯誤**表:

我們還可以通過使用gluerrorstring()來獲取錯誤標識的描述字串。

const glubyte* gluerrorstring(glenum errorcode);

此處的errorcode是通過glgeterror來獲得的。例如:

gluerrorstring(gl_invalid_enum); //此處將返回字串:invalid enumerant

opengl版本資訊

我們可以通過函式glgetstring(glenum name)來獲取gl函式庫的資訊。

使用glhint

在opengl中會有兩種模式,一種是執行流暢的,但是畫面效果會大一些折扣。還有一種模式是畫面清晰的,但是執行的流暢程度會大一些折扣。glhint函式允許指定是注重畫面質量還是流暢程度。函式原型如下:void glhint(glenum target, glenum mode);

opengl擴充套件

有一些硬體廠商會為opengl進行一些擴充套件。為了保證不同廠商的擴充套件相互衝突,廠商必須向opengl working group註冊他們的擴充套件。標準標頭檔案glext.h包含了最常見的一些擴充套件。我們可以通過glgetstring(gl_extensions)來獲取驅動支援的所有擴充套件。該函式返回乙個字串陣列,表示擴充套件的名稱。

OpenGL基礎知識 三

今天講一下如何在opengl中繪製一些簡單的圖形。現在把opengl基礎知識 二 中編寫的程式做一下簡單的修改,源 如下 include void renderscene void 當視窗大小變化時呼叫 void changesize glsizei w,glsizei h int main int...

OpenGL基礎知識(一)

一 opengl是什麼?1 opengl是一種應用程式程式設計介面,它是一種可以對圖形硬體裝置特性進行訪問的軟體庫。2 opengl被設計為乙個現代化的 硬體無關的介面,因此我們可以在不考慮計算機作業系統或視窗系統的前提下,在多種不同的圖形硬體系統上,或者完全通過軟體的方式實現opengl介面。3 ...

OpenGL(一)基礎知識

opengl,opengl es metal等,今天先說opengl。opengl是跨平台的,在xcode中可以用c 來寫 對於乙個入行就開始做ios的我來說,學習一門新的語言也是一道坎!opengl其實更多的是操作gpu cpu20 的運算,80 的邏輯業務。gpu是100 的運算。cpu是在多調...