簡體   English   中英

在OpenGL中創建環境堆棧

[英]Creating an Environment Stack in OpenGL

我想在OpenGL中創建類似於矩陣堆棧的環境設置(混合,模板化,深度等)的抽象。 推入堆棧,進行所需的任何更改,繪制對象,然后彈出堆棧並返回到先前的設置。

例如,當前您可能具有如下繪制代碼:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
//Draw operations
glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND); 

但是在環境堆棧中,它看起來像這樣:

glPushEnv();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
//Draw operations
glPopEnv(); 

如我所見,只有兩種方法可以做到這一點:

  1. 為每個環境設置函數創建我自己的“風味”,然后調用它。 它將依次更新當前的EnvStack數據結構並調用OpenGL環境函數。
  2. 更改OpenGL環境函數以指向我的環境函數,這將再次更新當前的EnvStack數據結構並調用原始OpenGL環境函數。

因此,選項1顯然要簡單得多。 但是,如果我使用其他人的代碼,則會遇到一個問題,因為我不一定知道它會對環境造成什么變化,因此我的數據結構將不同步。 而且,由於要點是要有一種簡單的方法來確保環境設置正確,所以這並不酷。

所以我的問題是,在這種情況下,如何更改OpenGL環境函數指向的函數?

OpenGL已經包含此功能。 您需要glPushAttrib(GL_ALL_ATTRIB_BITS); glPopAttrib(); 有關更多信息,請參見http://opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/pushattrib.html

暫無
暫無

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

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