私は遅れていることを知っていますが、ここにもっとエレガントな解決策があります(GLEWは必要ありません=))
QT += opengl
*.pro ファイルに含まれていること、Qt のバージョンに OpenGL が#include <QGLFunctions>
含まれていること、および (上にリストしたすべてのインクルードは必要ありません。この 1 行だけ) があることを確認することに加えて、ヘッダー ファイルには、もう 1 つ必要なものがあります。
したがって、これらすべての関数を呼び出すクラスがあるとします。
class MeGlWindow : public QGLWidget
{
// bla bla bla...
}
保護されたクラスQGLFunctionsを継承する必要があります:
class MeGlWindow : public QGLWidget, protected QGLFunctions // add QGLFunctions
{
// bla bla bla...
}
glewInit()
また、OpenGL 関数を呼び出す前にGLEW を 1 回呼び出す必要があるのと同様に、QGLFunctions
を呼び出す必要がありますinitializeGLFunctions()
。たとえば、 in はQGLWidget
、initializeGL()
描画を開始する前に 1 回呼び出されます。
void MeGlWindow::initializeGL()
{
initializeGLFunctions();
// ...now you can call your OpenGL functions!
GLuint myBufferID;
glGenBuffers(1, &myBufferID);
// ...
}
これで、 GLEW なしglGenBuffers
で 、glBindBuffer
、またはその他の openGL 関数を呼び出すことができるはずです。glVertexAttribPointer
更新: のような特定の OpenGL 関数は、 では機能glVertexAttribDivisor
しglDrawElementsInstanced
ませんQGLFunctions
。これは、QGLFunctions
これらの機能がない可能性がある OpenGL/ES 2.0 API に固有の機能のみを提供するためです。
これを回避するには、Qt 5.1 以降でのみ利用可能なQOpenGLFunctions_4_3_Core (または類似のもの) を使用できます。、およびQGLFunctions
に置き換えます。QOpenGLFunctions_4_3_Core
initializeGLFunctions()
initializeOpenGLFunctions()