qtquick中 使用egl创建opengl环境,完整的代码
时间: 2024-03-21 10:42:50 浏览: 78
android ui egl 文档
以下是在Qt Quick中使用EGL创建OpenGL环境的完整代码示例:
main.cpp:
```cpp
#include <QtGui/QGuiApplication>
#include <QtQuick/QQuickView>
#include <QtGui/QOpenGLContext>
#include <EGL/egl.h>
int main(int argc, char **argv)
{
QGuiApplication app(argc, argv);
// 创建QWindow对象
QQuickView view;
view.setTitle(QStringLiteral("EGL OpenGL Demo"));
view.setResizeMode(QQuickView::SizeRootObjectToView);
// 获取EGL显示连接
EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
// 初始化EGL显示连接
eglInitialize(display, nullptr, nullptr);
// 选择EGL配置
EGLConfig configs[1];
EGLint numConfigs;
EGLint configAttribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RED_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_BLUE_SIZE, 8,
EGL_ALPHA_SIZE, 8,
EGL_DEPTH_SIZE, 24,
EGL_STENCIL_SIZE, 8,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_NONE
};
eglChooseConfig(display, configAttribs, configs, 1, &numConfigs);
// 创建EGL上下文
EGLContext context = eglCreateContext(display, configs[0], EGL_NO_CONTEXT, nullptr);
// 设置QWindow对象的EGL上下文
view.setEGLContext((EGLContext)context);
// 显示QWindow对象
view.show();
return app.exec();
}
```
main.qml:
```qml
import QtQuick 2.15
import QtQuick.Controls 2.15
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("EGL OpenGL Demo")
Item {
anchors.fill: parent
// 创建OpenGL上下文
Component.onCompleted: {
var context = Qt.createQmlObject("import QtQuick 2.15; import QtQuick.Window 2.15; Window { visible: false; }", parent);
var glContext = Qt.createQmlObject("import QtQuick 2.15; import QtQuick.Window 2.15; Window { visible: false; property var context: undefined; Component.onCompleted: { var format = new QSurfaceFormat; format.setVersion(2, 0); format.setProfile(QSurfaceFormat.CoreProfile); context = QOpenGLContext.create(); context.setFormat(format); context.create(); } }", parent);
glContext.context.makeCurrent(context);
}
// 绘制OpenGL场景
Rectangle {
anchors.fill: parent
color: "white"
Component.onCompleted: {
glClearColor(1.0, 0.5, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
}
}
}
}
```
在这个示例中,我们使用EGL创建了一个OpenGL ES 2.0的环境,并将其与Qt Quick的QWindow对象关联起来。在QML中创建一个Item元素,通过Qt.createQmlObject函数创建了一个隐藏的QWindow对象和一个OpenGL上下文,并将其与QML Item元素关联起来。在Item元素的Component.onCompleted信号中,我们使用OpenGL的函数绘制了一个黄色的矩形。
阅读全文