您的位置 首页 新品

在ARM Linux上运用OpenGL

这两天在ARM上跑了一个OpenGL,应该说是OpenGL

这两天在ARM上跑了一个OpenGL,应该说是OpenGL|ES的软件包,尽管我觉得或许最终我不会运用这个软件包,可是仍是记录下来以备忘掉。

先大局介绍下,首要,什么是OpenGL和OpenGL|ES。OpenGL是一套绘图函数的规范,OpenGL|ES是OpenGL中针对嵌入式体系的一套函数子集。OpenGL|ES的官方是http://www.khronos.org/opengles/, 上面有更多的信息。需求留意的是,OpenGL仅仅是规范,而假如你要运用OpenGL,则需求找到能够完成这些OpenGL规范函数的程序库或源代码。 现在,在ARM这种一般没有图形加速器的渠道上,OpenGL|ES的完成都是靠软件的。首要的OpenGL|ES程序库有:Klimt,Vincent (ogles),TinyGL等。Google一下,能够看到它们的主页。这些完成基本上都是根据X11、Qt/E这样的窗口渠道的。我用的软件包叫做 PicoGL,它是TinyGL的一个分支,不同之处就在于PicoGL支撑直接在Framebuffer上输出图画。PicoGL是一位台湾同胞写的, 他的主页http://jserv.sayya.org/。可是这个软件包的源码极端难找,我用的是一位很牛的搭档搜到的,地址是http://people.openmoko.org/jserv/graphics/picogl-20051108.tar.bz2。
要运用这个软件包还必须有支撑软件浮点的穿插编译器,咱们一般用的arm-linux-gcc 2.95.3/3.3.2/3.4.1等都不支撑软件浮点,这需求咱们从头编译一个。编译一个穿插编译器,引证Crosstool作者Dan Kegel的话,used to be a scary prospect,requiring iron will,days if not weeks of effort……幸好有Crosstool这个东西,假如你的机器好网速快,输入个指令,差不多1个多小时就能够编译出来。crosstool的主页http://kegel.com/crosstool/,下载地址http://kegel.com/crosstool/crosstool-0.43.tar.gz。
首要制造穿插编译器,先以root用户登陆,树立穿插编译器装置目录,并且把目录所有者改为你的普通用户
# mkdir /opt/crosstool
# chown /opt/crosstool lxz
# chgrp /opt/crosstool users
然后以普通用户登陆,解压缩和装置
# tar xvzf crosstool-0.43.tar.gz
# cd crosstool-0.43
# ./demo-arm-softfloat.sh
crosstool会从网上下载需求的源码包,然后编译,最终装置。crosstool相关的材料能够看http://kegel.com/crosstool/current/doc/crosstool-howto.html。然后在/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu里边就会有支撑软件浮点的穿插编译器了。
然后解压缩picogl,修正picogl的代码。
首要是picogl的一处bug,在backends/vesafb/tk.c的榜首行添加宏
#define _FB_TK_
然后把backends/vesafb/glx_impl.h里边的
struct fb_fix_screeninfo FixedInfo;
struct fb_var_screeninfo VarInfo, OrigVarInfo;
修正为
#ifdef _FB_TK_
struct fb_fix_screeninfo FixedInfo;
struct fb_var_screeninfo VarInfo, OrigVarInfo;
#else
extern struct fb_fix_screeninfo FixedInfo;
extern struct fb_var_screeninfo VarInfo, OrigVarInfo;
#endif
这是由于有好几个文件调用了backends/vesafb/glx_impl.h,假如不这么改,会呈现多重界说过错。
然后,为了让你的程序运用picogl更便利些,最好再改个当地include/GL/glx.h
#include GLX_IMPL_HEADER
改为你喜爱的方法,指向backends/vesafb/glx_impl.h
修正backends/vesafb/tk.c中,initialize_fbdev函数有关VarInfo的设置,改为合适你的LCD的。
然后装备
# cd PicoGL
# CC=/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu-gcc ./configure –with-backend=vesafb –host=arm-softfloat-linux-gnu –prefix=/home/lxz/builtPicoGL
阐明下,CC=设置穿插编译器的方位,–with-backend=vesafb指定运用FB作为显现设备,host=arm- softfloat-linux-gnu设定穿插编译,–prefix=/home/lxz/builtPicoGL设定编译后库和示例程序装置方位。
然后
# make
# make install
在/home/lxz/builtPicoGL/lib里就有PicoGL的库了,把动态库文件拷贝到arm-linux根文件体系的/lib 里边,把/home/lxz/builtPicoGL/bin里的程序拷贝到arm-linux文件体系的任何当地,然后制造和烧写文件体系映像(或许使 用NFS),履行,就能够看到成果了。
当你编译一个运用PicoGL库的程序(假定叫做hello.c)时,需求输入
# arm-softfloat-linux-gnu-gcc -c -I /home/lxz/PicoGL/include -I /usr/include hello.c
# arm-softfloat-linux-gnu-gcc -o hello -L /home/lxz/builtPicoGL/lib/libPicoGL.so -L /home/lxz/builtPicoGL/lib/libPicoGLU.so -lm hello.o /home/lxz/builtPicoGL/lib/libPicoGL.a /home/lxz/builtPicoGL/lib/libPicoGLU.a
今日写得比较粗糙,。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/277193.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部