2013-05-16 78 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'并查看结果是否有帮助,如果不是,发布代码你试图在这里用作一个新问题(包括错误结果),看看我们中的一个人是否可以帮忙。 –