我需要使用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显然有一个痛苦的发动机,但它无法使用。
答案 0 :(得分:0)
内部格式是 only 使纹理浮点的东西。例如:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height,
0, GL_RGBA, GL_FLOAT, NULL);
这是不是浮点纹理。它是一个8位的每个组件无符号规范化纹理。因为这就是GL_RGBA8
的含义。
因此,只需将QGLFramebufferObject
的内部格式设置为可用的浮点格式之一。