Linux视窗系统:QT使用GPU渲染

  1. FBO与fb0的区别
    FBO(Frame Buffer Object帧缓存对象)是OpenGL对渲染目的地的扩展,提供创建额外非可显示的FBO
    的接口。它可以实现OpenGL渲染输出重定向。OpenGL默认把framebuffer当作渲染的目的地,它由窗口系
    统创建并管理。
    texture(纹理)和renderbuffer(渲染缓存)是两种可附着的framebuffer,它们附加到FBO,OpenGL可
    以执行“渲染到纹理”或“离屏渲染”。
    参考网:https://www.jianshu.com/p/c16c7e7cdf91
    fb0只是一个显存设备较为常用命名,可以有fb1、fb2等等,这些都可以在framebuffer驱动中修改。

  2. gpu与fb的关系
    gpu就是soc中的一个外设,cpu可以发命令给gpu,比如给两个端点,gpu就会去做具体的画线操作。
    这样就减轻了cpu的负担,有点类似于DMA的作用。
    参考网:https://blog.csdn.net/qq_28992301/article/details/52727342
    对于嵌入式系统显示机制:
    ① 应用层(App —>OpenGL库 [硬件加速自动画线、计算颜色等])—>内核(GPU驱动)—>硬件(GPU
    寄存器 —>fb帧缓存 —>LCD控制器)
    ② 应用层(App [也可以纯手动操作fb…])—>硬件(fb帧缓存 —>LCD控制器)

  3. qt显示系统的选择
    qt可以通过 QT_QPA_PLATFORM 设置或./app -platform xxx选择视窗系统(视窗插件有EGLFS、LinuxFB、
    KMS、DirectFB、Wayland)。
    视窗插件介绍:
    linuxFB:直接往FrameBuffer写数据,只支持软件渲染。通过-platform linuxfb使qt程序运行在该plugin上。
    EGLFS: EGL是OpenGL和底层本地视窗系统之间的接口, 而为了qt应用能在EGL和OpenGL ES2.0上运行,qt开发了 EGLFS 平台插件。它不支持多窗口,带GPU的嵌入式系统最好用这个。
    Wayland:wayland是轻量级的视窗系统。QtWayland模块是一个wayland插件,使得Qt应用程序与wayland显示进行连通。注意:使用 Weston,Qt焦点或输入可能有一些问题。
    XCB:这是在普通桌面linux平台上使用的x11插件。嵌入式系统不推荐。

    参考网:
    Qt 的 linuxFB KMS XCB Wayland:
    https://blog.csdn.net/deggfg/article/details/81478056
    Qt5.7 Qt for Embedded Linux:
    https://blog.csdn.net/chongzi865458/article/details/54406865
    海思HI3798 Qt OpenGL的使用:
    https://blog.csdn.net/wo_Niu123/article/details/84960206
    http://software-dl.ti.com/processor-sdk-linux/esd/docs/latest/linux/Foundational_Components_Graphics.html

    关于linuxFB与EGLFS使用时,系统环境配置请查阅相关资料,此处不再讲述。

  4. 关于QtWayland
    4.1 什么是QtWayland?
    QtWayland是封装了Wayland功能的Qt 5模块。QtWayland被分为一个客户端(client)和一个服务端(server)。客户端是wayland平台插件,提供了运行Wayland客户端Qt程序的方法。服务端是QtCompositor
    应用程序接口(API),允许用户编写自己的compositors(合成器)。

    4.2 怎样使用QtWayland?作为Wayland客户端运行Qt程序。
    当您编译完QtWayland模块,您将得到一个新的wayland平台插件。要使用它,您首先需要有一个已经运行的Wayland compositor。这可以是一个Wayland项目提供的Weston reference compositor,或是QtWayland提供的Qt example compositor。
    ===创建您自己的compositor:创建Wayland compositor和控制相关事件的应用程序接口在QtWayland
    类的WaylandCompositor中。它的构造函数需要QWindow对象指针作为主参数。这使实现compositor更加灵活。
    总结:Weston和QtWayland中compositor都是Wayland协议的一个compositor的实现。
    参考网址:https://wiki.qt.io/QtWayland/zh

    pkill app*
    /etc/init.d/weston stop
    ./app -platform linuxfd

  5. 其他重点基础参考网:
    Linux graphic subsystem(2)_DRI介绍:
    http://www.wowotech.net/linux_kenrel/dri_overview.html 该博客主还有很多精彩内容。
    根据文章思考问题:
    ① framebuffer显示框架与DRI显示框架的区别究竟在哪里?
    ② DRI框架主要两个组成部分:DRI和KMS,DRI负责Rendering,KMS负责display。/dev/dri/card0是
    操作gpu的接口,发送命令等操作都是通过对这个设备节点进行的。/dev/dri/controlD64是kms相关的
    设备节点。
    ③ opengl使用dri框架是怎样一个运行流程?

发布了41 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/wade_510/article/details/102991631