2013-05-16 133 views
1

我正在爲我非常簡單的OpenGL遊戲製作簡單的GUI。由於有很多控制計數的大菜單,我將這些控件分組並放到不同的窗口中,這些窗口可以通過主菜單中的按鈕訪問。所以現在我想用每個窗口的可點擊縮略圖替換按鈕,這就是爲什麼我需要將GUI渲染爲紋理。在Delphi中使用OpenGL渲染紋理

目前我有Windows 7的計算機與Geforce 210視頻卡,支持OpenGL高達3.3.0版本(但我不在乎我將使用什麼版本)。我有Delphi的dglOpenGL.pas庫。我想將這些窗口的控件渲染爲紋理,但是因爲我在這種情況下n00b,所以我無法做到這一點(我嘗試了C#的教程,但目前爲止沒有任何工作結果)。任何幫助,將不勝感激。

+0

如果你正在製作2D GUI並且不關心速度,爲什麼不使用普通的GDI? –

+0

@Andreaas Rejband:很好的說法,但我的GUI是OpenGL遊戲:) –

+0

我明白。 ----- –

回答

3

OpenGL中的渲染到紋理包括創建幀緩衝區對象(FBO)並將其附加到紋理。請參閱the documentation for framebuffer objects以獲得基本概述。

的一般工作流程是這樣的:

  • glGenFramebuffers
  • 激活與glBindFramebuffer
  • 幀緩衝連接的幀緩衝要渲染紋理創建幀緩衝區對象與glFramebufferTexture
  • 請致電glCheckFramebufferStatus確保其正常工作。
  • 將視口設置爲與要渲染的紋理的尺寸相匹配。 (這通常涉及調用glViewport和glOrtho,我相信你已經很熟悉,所以我不會在這裏鏈接它們。)
  • 做你的渲染。
  • 完成後,取消激活FBO(再次調用glBindFramebuffer並將0作爲FBO ID值)並重置視口。
  • 無論你現在呈現的紋理應該在那裏。
+0

'glCheckFramebufferStatus'返回0 :( –

+0

@羅伯茨:根據文檔,這意味着出現了某種錯誤,請嘗試調用'glGetError'並查看結果是否有幫助,如果不是,發佈代碼你試圖在這裏用作一個新問題(包括錯誤結果),看看我們中的一個人是否可以幫忙。 –