我需要把Klimt移植到一定的嵌入式GUI平台,在此次开发中,要把它移植到Qt/Embedded平台,然后再一起移植到嵌入式Linux上。
1.准备Qt/Embedded 的嵌入式GUI引擎
Qt/Embedded 的嵌入式GUI引擎其实就是Qt/Embedded交叉编译出来后的动态或静态函数库,这个函数库提供嵌入式系统的GUI处理。在本文的前面,已经介绍了Qt/Embedded的移植过程,其实就是得到这个函数库的过程,获得这个函数库后,就把它存放在某个目录,以备移植Klimt时使用。
2. 修改Klimt代码,使它使用Qt/Embedded GUI引擎
Klimt具有很强的可移植性,只要稍微修改一下核心代码,就可以把它移植到指定的平台。要移植到Linux QT/Embedded平台,需要做以下的一些修改:
(1) 修改klMain.h使它包含对新平台的预处理设置;移植到QtE时添加以下宏定义:
#ifdef _LINUX
#ifdef QWS
// definitions for Qt/embedded linux
#define _IS_LINUX_
#define _IS_QTEMBEDDED_
#endif
#endif
(2) 修改klEGLSurfaceNative.h文件,使它包含一些新平台下的一些实现,要移植到Qt/Embedded的话就就要为就自己添加一个诸如klEGLSurfaceQTE.h的定义,和对应的实现cpp文件,主要是处理在Qt/Embedded上的绘图处理。
(3) 自己写例程。如果klEGLSurface类中没有实现wgl,或者egl或者glx的函数,那么就需要使用使用kl×××的函数初始化Klimt,比如:
klCreateDefaultContext();
klSetBufferSize(ScreenWidth,ScreenHeight);
klSetColorBuffer(VideomemoryPointer);
(4) 更高级的移植在klEGLSurface中实现wgl或者egl函数。
(5) 假如数学处理的类在移植中出现问题,尝试使用浮点数实现变量的运算,因为默认的实现是使用定点实现的。
3. 生成make文件和交叉编译
由于我们是把Klimt移植到Qt/Embedded上的,所以我们可以使用Qt/Embedded提供的qmake工具(在Qt/Embedded交叉编译后目录bin下)然后在$(KLIMT_HOME)/klimt 目录下编辑klimt.pro工程文件,把需要编译文件,编译选项,链接选项(链接到Qt/Embedded)按照一定的各式写在文件中,然后在终端执行:
qmake -spec $QTDIR/mkspecs/qws/linux-armv4l-g++ -o Makefile klimt.pro
这就生成了make文件,接着就可以执行交叉编译。编译之后就生成了函数库,这正是我们需要的,接下来的3D开发中都要使用到这个库。
似乎还要修改其他的一些东西,不过Klimt本身已经提供了对QtE的支持,我只是看了其中的一些代码,基本弄懂这个过程,不过具体的操作还是要好好研究一些。主要问题是移植编译过程中的一些细小的错误。
移植过程看起来很简单,其实中间经历了许多的曲折和无助(因为实在太少人有移植这个库的经验了)。
Copyright (C) duwchy, Please give source when reprint.