Qt中的OpengGL glDrawBuffers()?

时间:2012-05-13 18:57:59

标签: qt opengl

是Qt中可用的OpenGL函数glDrawBuffers(GLsizei n,const GLenum * bufs)吗? 我正在尝试将多个渲染目标传递给我的片段着色器,QtCreator表示该函数未在此范围内声明。我们的想法是拥有一个带有两个颜色缓冲区的帧缓冲区对象,并使用片段着色器绘制到这两个缓冲区。

FIXED: 只需将#define GL_GLEXT_PROTOTYPES 1添加到有问题的文件中:(

2 个答案:

答案 0 :(得分:1)

Qt仅提供对OpenGL功能的基本访问。加载着色器和纹理是其中之一。渲染目标不是。只需使用适当的扩展加载程序库,如GLEW。 GLEW很好地与Qt的功能共存。

从QGLWidget派生并覆盖glInit,在致电glewInit后调用initializeGL

答案 1 :(得分:0)

我们花了一些时间来解决这个问题。我们在 OSX 10.8 Ubuntu 14.04 (抱歉没有 WINDOWS 体验)上运行Qt 5.2.1并创建 OpenGL3.2 < / strong>使用QGLFormat的上下文。

OSX 中没有问题,因为所有OpenGL3.2函数(设置制服,绘制缓冲区等等)都定义在:

#include "OpenGL/gl3.h" ///< already included by Qt.. so nothing to do

另一方面,在 Linux 上,我们必须包含 BOTH

#include "GL/gl.h"
#include "GL/glext.h" ///< not included by Qt!!! manually include it

我们还尝试让我们的QGLWidget类继承自 QGLFunctions_3_2_Core (这个类定义了自己的glDrawBuffer副本等等),但这不是很有用,只是导致 segfault

Program received signal SIGSEGV, Segmentation fault. 0x0000000000407068 
in glGetUniformLocation (this=0xbc5820, name=0x407cd0 "view_projection", program=1) 
at /usr/include/qt5/QtGui/qopenglfunctions_3_2_core.h:1075 1075     
return d_2_0_Core->GetUniformLocation(program, name);

我们还调查了#34; #define GL_GLEXT_PROTOTYPES 1&#34;上面,但这仅在我们使用 glcorearb.h 时有用(您可以在线下载此标题)。