一直以来都很喜欢用SDL来写写小游戏之类的,简洁、容易使用可能是一个方面,另外SDL不像DX,它是个跨平台的库,可能是潜意识中觉得万一哪天微软的Windows系统从地球上消失了,我可以把我写的东西弄到Linux或其他操作系统上去继续运行的关系吧。

       当然,一直到现在为止,我都是在Windows下使用SDL。今天我从他们的SVN上拉下了SDL1.2的源代码http://svn.libsdl.org/branches/SDL-1.2,发现他们更新的还蛮勤快的,最近的一次更新是在今天下午3点24分11秒的时候:

SDL的底层_第1张图片

       打开工程后我就开始找SDL_Surface的定义,然后就在SDL_video.h里找到了,然后SDL_Surface结构里有一个hwdata成员,是一个指向private_hwdata结构的指针,然后再找到这个private_hwdata结构,终于发现该结构里两个成员的类型都是---------- LPDIRECTDRAWSURFACE3 。也就是说SDL的图形部分底层是基于DirectDraw的,这个结构的定义位于文件SDL_dx5video.c中,也就是说SDL的图形底层是基于DirectDraw5的。另外我注意到SDL里一个专门用于绘制的内部类SDL_VideoDevice,这个类里有一系列用于图形操作的函数指针,是指针,然后在某个地方,一个全局的SDL_VideoDevice对象内的一些函数指针被赋值,这些函数指针指向了DirectDraw的一些函数。原来他们就是用这种方式把他们想隐藏掉的东西隐藏掉的。

       然后又找了下,SDL的输入部分是原来是用的DirectInput作为底层的。

       这下基本算是搞清楚了吧,虽然SDL被看成是和DirectDraw平行的一套2D图形库,被看成是其他平台上的DirectDraw。但至少在windows平台上,DirectDraw是被作为SDL的底层的。

阅读全文
类别: 默认分类  查看评论