点击看大图
这两天尝试将引擎往Linux上面移植了一下,还是颇有成效
我使用的Linux系统为Ubuntu 9.04
引擎项目我是采用makefile生成,测试项目图省事儿就用code::blocks了,具体如何写makefile这里不详细介绍了
移植过程和一些心得和大家分享一下:
首先将makefile写好,使用apt-get安装依赖库文件(如果有的话。这里我的项目用了freeimage、freetype、OIS等等)
make一次,看看大致有些什么问题
像是引用了Windows头文件,调用了Win32函数的地方,都用平台宏定义给“隔离”起来,暂时不知道如何在linux下面实现的就空着
渲染窗体和渲染器在引擎中应该是两个相对独立的概念,把它们区分开实现。
Linux下面渲染窗体的创建我调用了X11的函数,这里我碰到了X11和freetype的定义发生冲突的情况,最后是这样处理的:
view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
#if defined __PLATFORM_LINUX
namespace X11 // 防止X11的类型名与FreeType冲突
{
#include <X11/Xlib.h>
#include <X11/extensions/xf86vmode.h>
#include <X11/keysym.h>
#include <X11/Xutil.h>
}
#endif // #if defined __PLATFORM_LINUX
#if defined __PLATFORM_LINUX
namespace X11 // 防止X11的类型名与FreeType冲突
{
#include <X11/Xlib.h>
#include <X11/extensions/xf86vmode.h>
#include <X11/keysym.h>
#include <X11/Xutil.h>
}
#endif // #if defined __PLATFORM_LINUX
用一个命名空间把整个X11的定义给包括起来,以后调用就加上“X11::”前缀
OpenGL渲染器在Win32下面我是做成dll的形式动态加载,在linux下面就是产生so文件了
生成so文件时候要注意,不要使用ld命令,用g++代替,否则在调用so文件时候会产生一个“未定义的符号__dso_handle”的错误(这个问题着实困扰了我一阵子,主要还是由于对linux下面编译的不熟悉造成的:P)
OpenGL渲染器当中,使用glx函数代替win32的wgl函数,主要功能集中在渲染器的初始化、销毁以及SwapBuffers上面
其他还需要注意的就是g++和vs语法上面的一些不一样的地方了,我遇到一例就是在模板实例化的声明上
基本上这样,我的代码就能够跑起来了