我遇到了一个有关OpenGL函数glGenBuffers()的奇怪问题。 我正在编写一个相当简单的应用程序,在其中使用以下方式声明的VBO:
#include <QGLFunctions>
#include <QGLWidget>
class MyClass : public QGLWidget, protected QGLFunctions {
GLuint vertexBufferObject;
// ...
GLuint makeBufferList(void);
}
GLuint MyClass::makeBufferList(void) {
vertexBufferObject = 0;
glGenBuffers(1, &vertexBufferObject); // <-- Here it crashes
// ... load data and render
return vertexBufferList;
}
MyClass::MyClass(QWidget* parent)
: QGLWidget(parent),
vertexBufferObject(0)
{
QGLContext* context = new QGLContext(this->format());
initializeGLFunctions(context);
glInit();
}
MyClass::~MyClass() {
glDeleteBuffers(1, &vertexBufferObject);
}
在Debug Build中,所有内容都可以很好地进行渲染,并且程序在结束时正确完成。但是,在Release Build中,glGenBuffers()会导致程序崩溃。它不仅仅是返回0或什么也不做,而是直接在函数调用时崩溃。但由于问题仅在Release模式下出现,我无法使用调试器查找问题。
我正在Windows 7系统上工作,并在Qt 4.8.1中开发。编译器是MSVC 2010(Qt SDK)编译器。
有人有任何建议吗?
//编辑:
可能有用的是:我尝试使用GCC(Qt SDK)编译器在Mac上编译完全相同的代码,Debug和Release Build都可以正常工作。但在Windows 7上,问题仍然存在。