我已经尝试包含,但它不起作用,我也尝试在QQuickPaintedItem中使用GLEW。看起来Qt会在QQuickPaintedItem中定义那些函数。
我的Qt版本是5.1 msvc-opengl,系统在win7桌面上运行。
编译器消息:
fcglpanel.cpp(254): error C3861: 'glBindBuffer': identifier not found
一些代码
class MyQuickGLPanel :public QQuickPaintedItem
{
Q_OBJECT
//-------------------------------------------------------------------------
public:
FCGLPanel(QQuickItem * parent=0);
~FCGLPanel();
virtual void paint(QPainter * painter);
...
}
主
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
qmlRegisterType<MyQucikGLPanel>("MyQucikGLPanel", 1, 0, "MyPanel");
QQmlApplicationEngine engine(QUrl::fromLocalFile("../qml/main.qml"));
QObject *topLevel = engine.rootObjects().value(0);
QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel);
return qmlMode(argc, argv);
}
main.qml
import QtQuick 2.1
import QtQuick.Controls 1.0
import QtQuick.Layouts 1.0
import QtQuick.Dialogs 1.0
import QtQuick.Window 2.1
import "./MyUI" 1.0 as MyUI
import MyQucikGLPanel 1.0
ApplicationWindow {
id: appwindow
property int zGLPanel : 4;
SplitView {
x: 32
y: 8
anchors.rightMargin: 5
anchors.bottomMargin: 5
anchors.leftMargin: 0
anchors.topMargin: 0
anchors.fill: parent
// [EMBEDDING C++ object]
MyPanel{
id: mylogicPanel
anchors.fill: parent
width: 640
height: 480
z : appwindow.zGLPanel
}
}
}
更新
列出一些在Window平台中避免此问题的方法。
通过
检索OpenGL的入口点QOpenGLFunctions * oglEntry = window() - &gt; openglContext() - &gt; functions();
在QWindow中使用自定义上下文创建。
Window::Window( QScreen* screen )
: QWindow( screen ){
// Tell Qt we will use OpenGL for this window
setSurfaceType( OpenGLSurface );
// Specify the format and create platform-specific surface
QSurfaceFormat format;
format.setMajorVersion( 4 );
format.setMinorVersion( 3 );
format.setProfile( QSurfaceFormat::CoreProfile );
setFormat( format );
create();
// Create an OpenGL context
m_context = new QOpenGLContext;
m_context->setFormat( format );
m_context->create();
....
}
REF
答案 0 :(得分:2)
Qt尝试将大量OpenGL功能包装到一个类中,该类包含GL和GL ES 2.0之间的所有(扩展)共享函数,称为QGLFunctions
。
您应该考虑QGLFunctions::glBindBuffer (...)
,而不是使用GLEW。如果您致电QGLFunctions::initializeGLFunctions (...)
,则会执行与GLEW相同的 批次 。
事实上,您可能会继续继承此类,以便通过继承glBindBuffer (...)
自动处理对QGLFunctions
的任何调用。
QGLFunctions
的Qt SDK文档:QGLFunctions 提供了一个保证 API,可在所有OpenGL系统上使用,并负责在需要它的系统上进行功能解析。使用QGLFunctions的推荐方法是直接继承:
class MyGLWidget : public QGLWidget, protected QGLFunctions
{
Q_OBJECT
public:
MyGLWidget(QWidget *parent = 0) : QGLWidget(parent) {}
protected:
void initializeGL();
void paintGL();
};
void MyGLWidget::initializeGL()
{
initializeGLFunctions();
}