Mik*_*ail 4 opengl qt opengl-es qt5
我似乎无法glGenBuffer
在Qt5中找到该功能,我的包含列表看起来像
#include <QtOpenGL/qgl.h>
#include <QtOpenGL/qglbuffer.h>
#include <QtOpenGL/qglcolormap.h>
#include <QtOpenGL/qglframebufferobject.h>
#include <QtOpenGL/qglfunctions.h>
#include <QtOpenGL/qglpixelbuffer.h>
#include <QtOpenGL/qglshaderprogram.h>
#include <GL/GLU.h>
Run Code Online (Sandbox Code Playgroud)
我想尝试做类似下面的例子:
http://qt-project.org/doc/qt-5.0/qtopengl/cube.html
它在哪里?
我知道我迟到了,但这是一个更优雅的解决方案(你不需要GLEW =))
除了确保你QT += opengl
的*.pro文件,以及你的Qt版本有OpenGL,并且你有#include <QGLFunctions>
(你不需要所有这些包括你在上面列出的那些;只有这一行)头文件,你还需要一件事.
所以假设你有一个调用所有这些函数的类:
class MeGlWindow : public QGLWidget
{
// bla bla bla...
}
Run Code Online (Sandbox Code Playgroud)
您需要继承受保护的类QGLFunctions:
class MeGlWindow : public QGLWidget, protected QGLFunctions // add QGLFunctions
{
// bla bla bla...
}
Run Code Online (Sandbox Code Playgroud)
同样,就像glewInit()
在调用OpenGL函数之前需要调用GLEW一样,QGLFunctions
需要你调用initializeGLFunctions()
.因此,例如,在QGLWidget
,initializeGL()
在它开始画任何东西之前调用一次:
void MeGlWindow::initializeGL()
{
initializeGLFunctions();
// ...now you can call your OpenGL functions!
GLuint myBufferID;
glGenBuffers(1, &myBufferID);
// ...
}
Run Code Online (Sandbox Code Playgroud)
现在,你应该能够调用glGenBuffers
,glBindBuffer
,glVertexAttribPointer
或任何openGL的功能,无需GLEW.
更新:某些OpenGL函数喜欢glVertexAttribDivisor
和glDrawElementsInstanced
不兼容QGLFunctions
.这是因为QGLFunctions
仅提供特定于OpenGL/ES 2.0 API的功能,这些功能可能没有这些功能.
要解决这个问题,您可以使用QtpenGLFunctions_4_3_Core(或类似版本),该版本仅在Qt 5.1之后可用.更换QGLFunctions
用QOpenGLFunctions_4_3_Core
,并initializeGLFunctions()
用initializeOpenGLFunctions()
.
归档时间: |
|
查看次数: |
4369 次 |
最近记录: |