前言

Graphical Demo框架提供了对平台相关依赖的抽象。Graphical应用的通用封装,如模型加载、纹理加载、着色器编译等,以及其它一些通用的应用逻辑处理的封装,使得使用框架的开发人员(以下简称开发人员)可专注于具体应用需要的渲染相关代码的开发,提高Graphical应用的开发效率。

Demo Framework是NXP官方开发的一个跨平台的Graphical Demo开发框架。此框架有以下特点:

● 仅需编写一次应用代码;

● 可运行于Android、Yocto Linux、Ubuntu、MS Windows(Yocto Linux泛指基于Yocto构建的Linux系统);

● 易于移植至其它平台;

● 支持OpenGL ES2、OpenGL ES3、OpenVG和试验性的G2D API。

备注:i.MX 8M Mini不支持OpenGL ES3 API,详情参考下图

图 1

*测试硬件平台:TLIMX8-EVM评估板(NXP i.MX 8M Mini)

图 2 TLIMX8-EVM评估板

1、框架结构

图 3 Demo Framework简要框架

Demo App对应具体的某个Graphical应用,开发人员可基于Demo Frame Core和Demo Framework Services开发自己的应用。同时Helper Classes亦提供了许多通用功能的代码实现,比如其中的GLProgram和GLShader等封装了许多复杂的OpenGL ES的使用逻辑,开发人员可直接调用Helper Classes封装好的API来进行开发。

备注:框架的更多设计细节请参考产品资料“6-开发参考资料\NXP官方参考文档\”目录下的《i.MX_Graphics_User's_Guide.pdf》手册中的17.3~17.7章节。

2、框架使用

2.1 Demo Framework开发环境搭建

确保虚拟机上已完成NXP i.MX 8M Mini SDK环境安装和配置,若未完成,请参考产品资料用户手册目录下的Linux开发环境搭建手册。

请在Ubuntu执行如下命令安装依赖工具包。

Host# sudo apt-get install build-essential libxrandr-dev

Host# sudo apt-get install libgles2-mesa-dev

Host# sudo apt-get install libdevil-dev

图 4

图 5

图 6

执行如下命令通过Git工具下载Demo Framework源码。

Host# mkdir imx-gpu-sdk-5.6.2-build

Host# cd imx-gpu-sdk-5.6.2-build

Host# git clone git://github.com/nxpmicro/gtec-demo-framework.git

Host# cd gtec-demo-framework

Host# git checkout df9afd8c21b603662a9d8fcf049d01da0c5cc358

图 7

2.2 源码编译

在Demo Framework源码所在路径执行如下命令加载SDK环境变量,加载成功即可查看到交叉编译工具链aarch64-poky-linux-gcc。

Host# source /home/tronlong/SDK/environment-setup-aarch64-poky-linux

图 8

执行如下命令进行编译。

Host# . ./prepare.sh//注意:两个点之间有空格

Host# FslBuild.py -vvvvv -t sdk --UseFeatures [EarlyAccess,EGL,GoogleUnitTest,OpenVG,G2D,OpenGLES2,OpenCV] --UseExtensions [*] --Variants [WindowSystem=Wayland] --BuildThreads 24 -c install --CMakeInstallPrefix `pwd`

备注:"--BuildThreads 24"为编译时的线程数,一般为处理器核心数的两倍,请根据实际情况修改,FslBuild部分参数说明如下图。

图 9

图 10

图 11

编译耗时约30min,编译完成后将在当前目录下生成bin文件夹。

图 12

执行如下命令可查看bin目录结构,如未安装tree,请执行“sudo apt-get install tree”进行安装。

Host# tree -L 2 bin

图 13

其中部分案例的实现和效果说明,可参考如下连接:
https://developer.ridgerun.com/wiki/index.php?title=IMX8/Multimedia/GPU/OpenGL。

2.3 案例测试

评估板连接HDMI显示器,将编译生成的bin拷贝至评估板“/home/root/”目录下。本次测试将bin目录重命名为tec-demo-framework-bin,以Blur Demo案例测试为例。

Target# cd tec-demo-framework-bin/GLES2/Blur/

Target# ./GLES2.Blur_Wayland

图 14

HDMI显示器输出如下渲染对比视频效果。

图 15

3、Demo新增

3.1 利用脚本生成Demo

Demo新增需在源码编译后的基础上进行,并通过FslBuildNew.py脚本来完成,注意不同类型的应用需不同的template参数。在Demo Framework源码目录下,执行如下命令查看相关参数。

Host# . ./prepare.sh

Host# FslBuildNew.py –help

图 16

3.2 新增GLES2类型Demo示例

以GLES2类型Demo为例,新增GLES2类型的CoolNewDemo至DemoApps/GLES2目录。请在gtec-demo-framework目录下,执行如下命令。

Host# source /home/tronlong/SDK/environment-setup-aarch64-poky-linux

Host# . ./prepare.sh

Host# cd DemoApps/GLES2

Host# FslBuildNew.py GLES2 CoolNewDemo

Host# cd CoolNewDemo

Host# FslBuild.py --Variants [WindowSystem=Wayland]

图 17

编译完成后,生成的文件目录为“
gtec-demo-framework/build/Yocto/Ninja/release/DemoApps/GLES2/CoolNewDemo/GLES2.CoolNewDemo_Wayland”。

备注:若遇到如下错误,请执行命令“sudo apt-get ninja-build”安装ninja build工具。

图 18

通过FslBuildNew.py脚本生成的Demo仅是一个骨架,在实际应用中,需根据实际应用功能添加代码。然后使用FslBuild.py脚本进行编译,最后将对应的的可执行文件及其依赖的资源文件拷贝至评估板运行。

将CoolNewDemo文件夹拷贝至评估板文件系统,执行如下命令进行测试。

Target# ./GLES2.CoolNewDemo_Wayland

图 19

HDMI显示器输出如下效果。

图20

想要获取这个案例的详细说明内容,以及本篇案例的源码,请在下方评论区留言~~感谢大家的喜爱

「含源码」关于NXP IMX8 Mini的图形开发指南(GPU)案例分享!的更多相关文章

  1. C++ JsonCpp 使用(含源码下载)

    C++ JsonCpp 使用(含源码下载) 前言 JSON是一个轻量级的数据定义格式,比起XML易学易用,而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择JSON的全称为:JavaScri ...

  2. 微信公众平台开发-OAuth2.0网页授权(含源码)

    微信公众平台开发-OAuth2.0网页授权接口.网页授权接口详解(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 在微信开发的高级应用中,几乎都会使用到该接口,因为通过该接口,可以获 ...

  3. 微信公众平台开发-access_token获取及应用(含源码)

    微信公众平台开发-access_token获取及应用(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 很多系统中都有access_token参数,对于微信公众平台的access_to ...

  4. 微信公众平台开发-微信服务器IP接口实例(含源码)

    微信公众平台开发-access_token获取及应用(含源码)作者: 孟祥磊-<微信公众平台开发实例教程> 学习了access_token的获取及应用后,正式的使用access_token ...

  5. jQuery使用():Deferred有状态的回调列表(含源码)

    deferred的功能及其使用 deferred的实现原理及模拟源码 一.deferred的功能及其使用 deferred的底层是基于callbacks实现的,建议再熟悉callbacks的内部机制前 ...

  6. 百度智能手环方案开源(含源码,原理图,APP,通信协议等)

    分享一个百度智能手环开源项目的设计方案资料. 项目简介 百度云智能手环的开源方案是基于Apache2.0开源协议,开源内容包括硬件设计文档,原理图.ROM.通讯协议在内的全套方案,同时开放APP和云服 ...

  7. Delphi:程序自己删除自己,适用于任何windows版本(含源码)

    Delphi:程序自己删除自己,适用于任何windows版本(含源码) function Suicide: Boolean; var   sei: TSHELLEXECUTEINFO;   szMod ...

  8. 原创:用python把链接指向的网页直接生成图片的http服务及网站(含源码及思想)

    原创:用python把链接指向的网页直接生成图片的http服务及网站(含源码及思想) 总体思想:     希望让调用方通过 http调用传入一个需要生成图片的网页链接生成一个网页的图片并返回图片链接 ...

  9. Python 基于python实现的http接口自动化测试框架(含源码)

    基于python实现的http+json协议接口自动化测试框架(含源码) by:授客 QQ:1033553122      欢迎加入软件性能测试交流 QQ群:7156436  由于篇幅问题,采用百度网 ...

随机推荐

  1. WPF设计自定义控件

    在实际工作中,WPF提供的控件并不能完全满足不同的设计需求.这时,需要我们设计自定义控件. 这里LZ总结一些自己的思路,特性如下: Coupling UITemplate Behaviour Func ...

  2. 微信小程序学习笔记三 路由的基本使用

    小程序中路由的使用 1.1 页面路由 在小程序中, 所有页面的路由全部由框架进行管理 1.2 页面栈 框架以栈的形式维护了当前的所有页面, 当发生路由切换的时候, 页面栈的表现如下: 1.3 获取当前 ...

  3. Python 3.10 is coming!

    看看Python 官网的文档 whatsnew,Python 3.10 已然距离我们越来越近了,然我们看看 Python 3.10 相较于 Python 3.9 有哪些改变吧 新特性 通过括号来组织多 ...

  4. springboot开启矩阵传参MatrixVariable

    /** *   根据 URI 规范 RFC 3986 中 URL 的定义,路径片段中可以可以包含键值对. * 规范中没对对应的术语.一般 "URL 路径参数" 可以被应用,尽管更加 ...

  5. 你知道 ES6~ES12等叫法是怎么来的吗?

    你知道 ES6~ES12等叫法是怎么来的吗? 前言 作为一名前端开发,学习 JavaScript 自是天经地义的事,但是,JavaScript 的发展历史是怎样的,恐怕有相当一部分人都不太了解. 我们 ...

  6. minicom-linux下USB转串口配置

    现在的笔记本越做越薄,好些电脑已经没有串口了,做硬件开发会非常头疼,不过有了USB转串口设备,PC机只需要有USB接口就可以了.在linux下我们使用minicom与目标设备通信,在此记录一下linu ...

  7. C#多线程开发-线程基础 01

    最近由于工作的需要,一直在使用C#的多线程进行开发,其中也遇到了很多问题,但也都解决了.后来发觉自己对于线程的知识和运用不是很熟悉,所以将利用几篇文章来系统性的学习汇总下C#中的多线程开发. 线程基础 ...

  8. group by分组查询

    有如下数据: 一个简单的分组查询的案例 按照部门编号deptno分组,统计每个部门的平均工资. select deptno,avg(sal) avgs from emp group by deptno ...

  9. (一)羽夏看C语言——简述

    "羽夏看C语言"介绍什么   本系列从汇编的角度,比较翔实的介绍C语言.C++和C其实是一样的东西,C++的编译器只是更强大,更能帮助我们写代码,例如模板.没有特殊说明,本系列不会 ...

  10. int索引转Excel列名(JavaScript版)

    indexToExcelColumn = (index)=>{       // 自然数     if (typeof index !== 'number') return false;    ...