在vxworks下进行OpenGL编程的环境搭建

前端之家收集整理的这篇文章主要介绍了在vxworks下进行OpenGL编程的环境搭建前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原帖地址:http://www.cevx.com/bbs/viewthread.php?tid=11343&highlight=opengl

在vxworks下进行OpenGL编程的环境搭建
一、前言
OpenGL 著名的API,其主要作用是依据照相机的设置,将指定图元绘制到帧缓冲中去。
Mesa 是OpenGL的一个具体实现,目前版本是7.0.2
DRI 是直接渲染架构(Direct Render Infrustructure)。包含了诸如ATI r300显卡的子项目
Mesa原先是为UNIX/X11设计的,Mesa对于OpenGL的实现是纯软件的,不含硬件加速,所以跑3D图形时帧率低。
DRI提供了一个安全的接口,让Mesa(以及其他OpenGL实现)可以安全的使用显卡提供的硬件加速功能
风河对于Mesa的支持貌似在5.0就停止更新了,现在Mesa7.0.2中关于windml中跑3D的代码还是N年以前的
但对于入门OPENGL,学习空间、投影变换,光照,纹理,显示列表等概念这已经足够了
所以写这个帖子只是让大家知道如何在vxworks下开始步入OPENGL世界,学习OPENGL基本概念
而要真正开发应用程序,就一定要用DRI了,这就不在本文范围内了
二、准备工作
我的开发环境是
Tornado 2.2
VxWorks 5.5
WindML 3.0
Mesa 4.0(后面提供下载)

三、编译Mesa for WindML 3D图形库
下载MESA 4.0后,解压到c:/Tornado 2.2/target/src下
目录结构如图所示


在Tornado下,建立一个可下载工程,基于SIMNTgnu的
然后添加以下所有的源文件到你的工程,不要漏哦
#### GL #####
(最主要的图形库)
GL_SOURCES = /
api_arrayelt.c /(在C:/Tornado2.2/target/src/Mesa/src下)
api_loopback.c /
api_noop.c /
api_validate.c /
accum.c /
attrib.c /
blend.c /
buffers.c /
clip.c /
colortab.c /
config.c /
context.c /
convolve.c /
debug.c /
depth.c /
dispatch.c /
dlist.c /
drawpix.c /
enable.c /
enums.c /
eval.c /
extensions.c /
Feedback.c /
fog.c /
get.c /
glapi.c /
glthread.c /
hash.c /
hint.c /
histogram.c /
image.c /
imports.c /
light.c /
lines.c /
matrix.c /
mem.c /
mmath.c /
pixel.c /
points.c /
polygon.c /
rastpos.c /
state.c /
stencil.c /
texformat.c /
teximage.c /
texobj.c /
texstate.c /
texstore.c /
texutil.c /
varray.c /
vtxfmt.c /
X86/x86.c /(C:/Tornado2.2/target/src/Mesa/src/X86下)
X86/common_x86.c /
X86/3dnow.c /
X86/sse.c /
math/m_debug_clip.c /(C:/Tornado2.2/target/src/Mesa/src/math下)
math/m_debug_norm.c /
math/m_debug_vertex.c /
math/m_debug_xform.c /
math/m_eval.c /
math/m_matrix.c /
math/m_translate.c /
math/m_vector.c /
math/m_vertices.c /
math/m_xform.c /
array_cache/ac_context.c /(C:/Tornado2.2/target/src/Mesa/src/array_cache下)
array_cache/ac_import.c /
swrast/s_aaline.c /(C:/Tornado2.2/target/src/Mesa/src/swrast下)
swrast/s_aatriangle.c /
swrast/s_accum.c /
swrast/s_alpha.c /
swrast/s_alphabuf.c /
swrast/s_bitmap.c /
swrast/s_blend.c /
swrast/s_buffers.c /
swrast/s_copypix.c /
swrast/s_context.c /
swrast/s_depth.c /
swrast/s_drawpix.c /
swrast/s_Feedback.c /
swrast/s_fog.c /
swrast/s_histogram.c /
swrast/s_imaging.c /
swrast/s_lines.c /
swrast/s_logic.c /
swrast/s_masking.c /
swrast/s_pb.c /
swrast/s_pixeltex.c /
swrast/s_points.c /
swrast/s_readpix.c /
swrast/s_scissor.c /
swrast/s_span.c /
swrast/s_stencil.c /
swrast/s_texture.c /
swrast/s_texstore.c /
swrast/s_triangle.c /
swrast/s_zoom.c /
swrast_setup/ss_context.c /
swrast_setup/ss_triangle.c /
swrast_setup/ss_vb.c /
tnl/t_array_api.c /(C:/Tornado2.2/target/src/Mesa/src/tnl下)
tnl/t_array_import.c /
tnl/t_context.c /
tnl/t_eval_api.c /
tnl/t_imm_alloc.c /
tnl/t_imm_api.c /
tnl/t_imm_debug.c /
tnl/t_imm_dlist.c /
tnl/t_imm_elt.c /
tnl/t_imm_eval.c /
tnl/t_imm_exec.c /
tnl/t_imm_fixup.c /
tnl/t_pipeline.c /
tnl/t_vb_fog.c /
tnl/t_vb_light.c /
tnl/t_vb_normals.c /
tnl/t_vb_points.c /
tnl/t_vb_render.c /
tnl/t_vb_texgen.c /
tnl/t_vb_texmat.c /
tnl/t_vb_vertex.c

##### UGL #####
UGL_SOURCES = /
windml/ugl_api.c /(C:/Tornado2.2/target/src/Mesa/src/windml下)
windml/ugl_dd.c /
windml/ugl_span.c /
windml/ugl_line.c /
windml/ugl_tri.c /
windml/tornado/torMesaUGLInit.c(C:/Tornado2.2/target/src/Mesa/src/windml/tornado下)

##### OS #####
OS_SOURCES = /
OSmesa/osmesa.c /(C:/Tornado2.2/target/src/Mesa/src/OSmesa下)
windml/tornado/torMesaOSInit.c(C:/Tornado2.2/target/src/Mesa/src/windml/tornado下)

##### GLUTSHAPES #####
GLUTSHAPES_SOURCES = /
windml/ugl_glutshapes.c /(C:/Tornado2.2/target/src/Mesa/src/windml下)
windml/tornado/torGLUTShapesInit.c(C:/Tornado2.2/target/src/Mesa/src/windml/tornado下)

##### GLU #####
GLU_SOURCES = /
glu.c /(在C:/Tornado2.2/target/src/Mesa/src-glu下)
mipmap.c /
nurbs.c /
nurbscrv.c /
nurbssrf.c /
nurbsutl.c /
polytest.c /
project.c /
quadric.c /
tess.c /
tesselat.c /
../src/windml/tornado/torMesaGLUInit.c(在C:/Tornado2.2/target/src/Mesa/src/windml/tornado下)


然后在C:/Tornado2.2/target/h下建立GL文件夹(存放OPENGL头文件的)
把C:/Tornado2.2/target/src/Mesa/include/下的
gl.h、glext.h、glu.h、osmesa.h、uglglutshapes.h、uglmesa.h拷贝到刚建立的GL文件夹下

做完以上工作后
更改Tornado工程Builds选项卡中的c/c++ compiler选项,添加include path...
添加以下路径
C:/Tornado2.2/target/src/Mesa/include
C:/Tornado2.2/target/src/Mesa/src

再更改Rules选项卡,改为archive,即生成.a文件
然后可以编译了,编译成功后会在你工程目录下生成.a
四、建立一个vxworks的工程
新建一个基于simpc BSP的vxworks工程
把windml的complete 2D图形库和simulator host devices,Simulator graphics组件包含到vxworks
编译你的vxworks
如果不清楚这一步的,论坛里可以搜关于WINDML的安装及编译,这里就不多说了

五、运行DEMO程序
建立一个可下载的工程,基于SIMNTgnu工具链的
以uglteapot为例
将C:/Tornado2.2/target/src/Mesa/windmldemos下的uglteapot.c添加到工程
把taskSpawn中的UGL_FALSE修改为UGL_TRUE,如下
void uglteapot (void)
{
taskSpawn ("tTeapot",210,VX_FP_TASK,100000,(FUNCPTR)windMLTeapot,
UGL_TRUE,1,2,3,4,5,6,7,8,9);
}

更改Tornado工程Builds选项卡中Marcos选项
在PRJ_LIBS中把生成的.a路径添加进去
我的是C:/Tornado2.2/target/proj/MesaLib/SIMNTgnu/MesaLib.a
然后编译工程,生成.out
运行刚才生成的vxworks
开启一个shell
下载.out
在shell下输入命令uglteapot
以下是运行结果


可以按左右键旋转茶壶,按K键打开关闭光照1等
按ESC是退出
再帖几张运行的DEMO截图

六、总结也可以在vmware下的vxworks下测试你的DEMO不过由于不支持双缓,图形显示时有点问题在simpc下显示倒是很正常,不过速度很慢就是环境搭建好了大家可以参考DEMO里的流程来写自己的demo学习OPENGL了转自Tony嵌入式论坛,地址:http://www.cevx.com/bbs/thread-11343-1-1.html

猜你在找的VB相关文章