2009-12-31 215 views
1

我正在编写一些代码,旨在: 1.使用FBO渲染到OpenGL纹理。 2.从FBO纹理绘制到连接到X Pixmap的GLXPixmap。 3.将X Pixmap绘制到屏幕上的窗口中。将OpenGL FBO纹理渲染到GLXPixmap

第3步很好,如果我用普通的OpenGL绘图替换FBO纹理,第2步工作正常。

但是,如果我做了以上的事情,至少用我有的代码,它不起作用。如果我给GLXPixmap一个彩色背景,并做1-3,屏幕上的窗口变成白色,但是我没有画出任何其他东西。

所以我希望有人可以提供提示,或指向我一些简单的示例代码。我得到的代码相当复杂,但如果需要的话,我可以尝试编写一个简单的示例版本来发布此处以供审阅。

回答

1

如果你的最后两步工作,但没有使用你在第一步创建的FBO,你可能会错误地初始化FBO。有些事情要检查:

  • 是FBO“framebuffer complete”?将所有纹理和/或渲染缓冲区附加到它后,使用glCheckFramebufferStatus(GL_FRAMEBUFFER_COMPLETE)进行检查。
  • 在渲染FBO之后,您是否有任何方法检查FBO(例如使用glGetTexImage)以确定问题出在写入FBO还是从FBO读取?
  • 您可能已经检查过,但值得一问:glGetError()是否会返回任何错误?

如果一切正确签出,然后发布一些骨架的设置和渲染代码......虽然少令人费解的当然更好,=)

+0

唉,我查了FBO地位,它是完整的。我使用一个宏来检查glGetError,该宏报告是否有问题,并且没有投诉。但我会检查glGetTexImage(),并尝试组合一个简单的示例 - 这本身可能会导致我找到一个解决方案。 :-) – 2010-01-02 00:18:18

+0

另一个简单的事情(不要试图侮辱你 - 我犯了这个错误几次!)是确保你一直在使用GL_TEXTURE_2D和GL_TEXTURE_RECTANGLE – 2010-01-03 05:42:31