QGLFramebufferObject浮点纹理

时间:2012-10-13 12:45:14

标签: qt opengl floating-point fbo

我需要使用GL_FLOAT作为浮点计算的内部格式渲染到framebufferobject。我知道如何使用本机OpenGL调用来实现这一点,例如:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height,
             0, GL_RGBA, GL_FLOAT, NULL);

为了使用QPainter呈现给FBO,需要QGLFramebufferObject。 但是,QGLFramebufferObject不允许设置类型,只允许设置纹理的内部格式和格式(在我的情况下用于颜色附件)。

有没有办法在Qt 4.8中使用QGLFramebufferObject的浮点精度?

我知道我可以以某种方式修补和重新编译Qt,但这很麻烦而且不是很优雅。 我还考虑编写自己的FramebufferObject类,但是必须从QPaintDevice派生,并提供自定义的QPaintEngine。不是一个好的解决方案,因为Qt显然有一个痛苦的发动机,但它无法使用。

1 个答案:

答案 0 :(得分:0)

内部格式是 only 使纹理浮点的东西。例如:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height,
         0, GL_RGBA, GL_FLOAT, NULL);

这是不是浮点纹理。它是一个8位的每个组件无符号规范化纹理。因为这就是GL_RGBA8的含义。

因此,只需将QGLFramebufferObject的内部格式设置为可用的浮点格式之一。