Android中为线程EGL环境创建及代码示例

#.EGL介绍:
    OpenGl是一套跨平台的接口,它与各个平台本地窗口系统之间的交互,是借助于一个中间控制层,这个中间控制层就是EGL。 EGL也有自己的一套标准API,由各个平台的系统来完成其具体实现。
        EGL是OpenGL和本地窗口体系进行联系的桥梁,负责管理OpenGL的运行状态、渲染图像到本地窗口或缓冲区等功能。
        在Android中,OpenGL的每一步处理,都需要依赖于EGL提供的这些相关功能支持,所以必须先创建EGL环境,才能正常进行OpenGL处理。
        不过Android中GLSurfaceView会自己在GLThread中完成EGL环境的初始化,使用GLSurfaceView时,开发者并不需要自己来初始化EGL环境。
##.EGL环境配置整体流程:
1.获取默认的EGLDisplay,对EGLDisplay进行初始化。
2.输入预设置的参数获取EGL支持的EGLConfig。
3.通过EGLDisplay和EGLConfig创建一个EGLContext上下文环境。
4.创建一个EGLSurface来将EGL和设备的输出区(一般是个Surface)关联起来。
5.在渲染线程中绑定EGL环境,即绑定上面配置的EGLContext、EGLSurface等。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在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的函数绘制了一个黄色的矩形。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值