我在基于Qt 3(办公室政治)的游戏中添加了OpenGL支持。基础知识(QGLWidget等)可以正常工作。

为了使用OpenGL扩展,我任意选择了GLee(它是开箱即用的,而GLew则不是)。

GLee.h和qgl.h不能很好地玩在一起。 AFAICT,每个都必须包含在另一个之前。

我从GLee.h中撤消了预处理检查(确保首先包含它),在包含OpenGL header 之前插入了它使用的预处理指令,然后首先包含qgl.h。在linux上,它可以归结为:

    #define __glext_h_  /* prevent glext.h from being included  */
    #define __glxext_h_ /* prevent glxext.h from being included */
    #define GLX_GLXEXT_PROTOTYPES
#include <qgl.h>
#include "GLee.h" // my hacked version

这样就建立了(不知道我的代码是否会真正运行……这个问题是先发制人的(即我正在拖延)),但这似乎是一个可怕的错误。 Googling引起了很多人的问这个基本问题(尽管他们大多数人并没有费心找出伪造的编译器错误,以便他们可以看到根本问题),但是我还没有看到任何实际答案。

有没有更好的方法(更优雅,更便携,更坚固等)?

最佳答案

这仍然不如我所希望的那么干净,但是它至少可以在不破解GLee.h的情况下构建和运行。

在所有其他操作之后,依次包含#object qobject.h,GLee.h和qgl.h。

因此,头文件可能看起来像

...blah...
...other #includes

#include <qobject.h>
#include "GLee.h"
#include <qgl.h>

class MyGlWidget : public QGLWidget
{
...
}

那么源文件将最后#include该文件。

10-01 06:39