VxWorks入门教程14:搭建OpenGL环境

系列索引:VxWorks入门教程索引

上一篇:VxWorks入门教程13:移植GLU

前言

OpenGL是与驱动交互的著名的绘图API。

Mesa是一个OpenGL的开源实现。

风河的低版本层支持过Mesa,比如Mesa4.0可以运行在WindML3.0(VxWorks5.5 Tornado2.2)之上。后续风河对Mesa的支持就停止了。

后来风河也移植过Mesa,从VxWorks6.9.3.3开始,Wind Media Library又支持Mesa驱动程序。例如Vx6.9的WindML5.3里集成了Mesa7.6.1。但官方只验证了ARM平台,如果想在Intel等其它硬件平台里运行,需要做一些工作。如果您已升级到VxWorks 6.9.3 Update Pack 3或更高版本,则应在安装中安装mesa目录:/components/windml-5.3/src/mesa-7.6.1

WindML,Wind River Media Library。听上去是个多媒体库,但大家一直把它当作图形库,据说当初第一个版本的名字就叫UGL。目前最低版本是支持VxWorks 5.4的WindML 2.0,最高版本应该是VxWorks 6.9里配合Tilcon的WindML5.4吧。

准备

VxWorks 6.8.3 + Workbench 3.2.3 + Mesa 22.0

Mesa仓库地址为:

Mesa移植

我们移植测试的是VxWorks6.9.4.10自带的Mesa7.6.1。然后对比官方提供的和原始的,移植任意版本Mesa。

这里我们使用VxWorks提供的Mesa,根据官方手册,我们进行操作。

Mesa7.6.1

mesa7.6.1

除了Mesa,风河还提供了glut、xorg等适配。

首先创建一个可下载DKM的工程

在工程名右键,添加Other,弹出对话框,选择中间件

wizard

点击下一步,选择工程

project

下一步,选择中间件版本

version

下一步,选择组件目标

template

然后自动进入windml配置界面,点击System条目,设置一下

system

在System条目下,添加一个显示Display

subling

设置显示名称

display

在Dispaly下添加一个Child

child

在Display下添加一个Graphics,设置Graphic Mode 为640x480-32 Bit - ARGB8888

在Display下添加一个键盘Keyboard,保持默认配置

在Display下添加一个鼠标Pointer,保持默认配置

在Display下添加一个窗口管理器,保持默认配置,根据需要修改。

在Display下添加一个BMF Fonts(字体就行)

fonts

如果不添加字体,程序运行不了

然后再工程右键编译。

需要三分钟,就可以在源码位置找到编译的a文件

result

至此mesa移植结束,接下来看看效果。

测试

测试使用的是官方实例代码,位置为C:\WindRiver\components\windml-5.3\samples\winDemo\openGLES2中的windmlEs2Tri.c

暂时没有在VM虚拟机中测试成功,我们使用VXworks提供的模拟平台

创建一个新系统镜像

setup

然后配置内核设置

config

1、在工程属性的Build Properties的Defines字段添加-DUSE_GLES2_API

2、添加Include Path -IC:/WindRiver/components/windml-5.3/h

3、在Libraries字段下添加静态库路径-L */*/libs-l windml-5.3-l windml-5.3glut-l windml-5.3glu-l windml-5.3gl-l windml-5.3egl

编译

工程右键

create

创建一个新仿真链接,其他保持默认

connection

然后执行函数

1
gles2TriangleDemo

会自动弹出新界面

err

根据错误可以看出渲染语言有问题

这是代码中的渲染语言

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static const char *fragShaderText =
"varying mediump vec4 v_color;\n"
"void main() {\n"
" gl_FragColor = v_color;\n"
"}\n";

/* Vertex Shader Program */

static const char *vertShaderText =
"uniform mat4 modelviewProjection;\n"
"attribute vec4 pos;\n"
"attribute vec4 color;\n"
"varying vec4 v_color;\n"
"void main() {\n"
" gl_Position = modelviewProjection * pos;\n"
" v_color = color;\n"
"}\n";

错误提示精度不允许,所有将frag中的mediump删除。

效果为:

gears

下一篇:


VxWorks入门教程14:搭建OpenGL环境
https://blog.jackeylea.com/vxworks/transport-mesa-to-vxworks/
作者
JackeyLea
发布于
2021年10月26日
许可协议