计算机科学

首页 > 计算机科学

SDL

2018-08-31 10:11:19     所属分类:计算机程序库
Simple DirectMedia Layer
Sdl-logo.png
SDL的标志
开发者 Sam Lantinga
稳定版本
稳定版本
2.0.8
(2018年3月1日,​5个月前​(2018-03-01
操作系统 跨平台
类型 API
许可协议 Zlib授权
2.0.0前:GNU宽通用公共许可证
网站 libsdl.org
源代码库 hg.libsdl.org/SDL
Simple DirectMedia Layer

SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。

SDL(第一版)使用GNU宽通用公共许可证为许可方式,意指动态链接(dynamic link)其库并不需要开放本身的源代码。因此诸如《雷神之锤4》等商业游戏也使用SDL来开发。而第二版的SDL则改用Zlib授权来许可。

目录

  • 1 历史
  • 2 结构与特色
  • 3 语法与子系统
  • 4 与DirectX比较
  • 5 使用SDL开发的作品
  • 6 开发实例
  • 7 其他
    • 7.1 游戏
    • 7.2 老游戏的开源实现
    • 7.3 其他
  • 8 SDL的延伸
  • 9 参考文献
  • 10 参见

历史

Sam Lantinga于1998年为Loki Software工作时开发了SDL,并首先利用SDL将《毁灭战士》移植到BeOS操作系统。他于2008年创立 Galaxy Gameworks 帮助SDL商业支持,因为时间限制该公司计划被搁置。[1]在Galaxy Gameworks搁置后不久,Lantinga 宣布 SDL1.3(之后成为 SDL2.0)将以 Zlib许可。[2]Lantinga 于2012年7月14日宣布 SDL 2.0,同时宣布他即将加入Valve 公司,在他加入公司同一天发表第一个SDL版本。[3]Lantinga在2013年8月13日发布SDL 2.0.0的稳定版。[4]

SDL 2.0是一个重大更新,与 SDL 1.2 有很多不同,API不能向后兼容。[5]

新增一些功能:多视窗的支持,2D图形硬件加速,更好的Unicode支持。[6]

从 SDL 2.0.2 开始支持 Mir 和 Wayland。(但默认仍然是关闭的)[7]

即将到来的 2.0.4 将会提供 Android 更好的支持。[8]

结构与特色

SDL在作业平台上的结构图

虽然SDL时常被比较为‘跨平台的DirectX’,然而事实上SDL是定位成以精简的方式来完成基础的功能,它大幅度简化了控制图像、声音、输出入等工作所需撰写的代码。但更高阶的绘图功能或是音效功能则需搭配OpenGL和OpenAL等API来达成。另外它本身也没有方便创建图形用户界面的函数。

SDL在结构上是将不同操作系统的库再包装成相同的函数,例如SDL在Windows平台上其实是DirectX的再包装,旧版本包装的是DirectX 5,SDL 1.2则是DirectX 7。而在使用X11的平台上(包括Linux),SDL则是与Xlib库沟通来输出图像。

虽然SDL本身是使用C语言写成,但是它几乎可以被所有的编程语言所使用,例如:C++、Perl、Python(借由pygame库)、Pascal等等,甚至是Euphoria、Pliant这类较不流行的编程语言也都可行。

SDL库分为 Video、Audio、CD-ROM、Joystick 和 Timer 等若干子系统,除此之外,还有一些单独的官方扩充函数库。这些库由官方网站提供,并包含在官方文档中,共同组成了SDL的“标准库”:

  • SDL_image—支持时下流行的图像格式:BMP、PPM、XPM、 PCX、GIF、JPEG、PNG、TGA。
  • SDL_mixer—更多的声音输出函数以及更多的声音格式支持。
  • SDL_net—网络支持。
  • SDL_ttf—TrueType字体渲染支持。
  • SDL_rtf—简单的RTF渲染支持。

语法与子系统

SDL将功能分成下列数个子系统(subsystem):

  • Video(图像)—图像控制以及线程(thread)和事件管理(event)。
  • Audio(声音)—声音控制
  • Joystick(摇杆)—游戏摇杆控制
  • CD-ROM(光盘驱动器)—光盘媒体控制
  • Window Management(视窗管理)-与视窗程序设计集成
  • Event(事件驱动)-处理事件驱动

以下是一支用C语言写成、非常简单的SDL示例:

// Headers
#include "SDL.h"

// Main function
int main(int argc, char* argv)
{
    // Initialize SDL
    if(SDL_Init(SDL_INIT_EVERYTHING) == -1)
        return(1);

    // Delay 2 seconds
    SDL_Delay(2000);

    // Quit SDL
    SDL_Quit();

    // Return
    return 0;
}

上述程序会加载所有SDL子系统(出错则退出程序),然后暂停两秒,最后关闭SDL并结束程序。

与DirectX比较

与DirectX比较对应关系如下:

SDL DirectX 说明
SDL_Video、SDL_Image、OpenGL DirectDraw、Direct3D
SDL_Audio、SDL_Mixer DirectSound
SDL_Joystick、SDL_Base DirectInput
SDL_Net DirectPlay
SMPEG、SDL_Video、SDL_Audio、SDL_Sound、SDL_Filter DirectShow


使用SDL开发的作品

开发实例

其他

  • 开源游戏列表
  1. ^ Exploring the Galaxy. 6 April 2011 [30 January 2012]. 
  2. ^ SDL 1.3 to be zLib Licensed, SDL Mailing List, 7 April 2011
  3. ^ SDL 2.0 Is Coming Very Soon With New Features. [17 August 2012]. 
  4. ^ Announcing SDL 2.0.0, SDL Mailing List, 13 August 2013
  5. ^ MigrationGuide - SDL Wiki'. Wiki.libsdl.org (21 November 2013). Retrieved on 2013-12-08.
  6. ^ SDL 1.3 Roadmap. 14 June 2011 [25 July 2011]. 
  7. ^ Sneddon, Joey-Elijah. Some of Linux’s Most Popular Games Will Run Natively On Mir. 5 February 2014 [19 March 2014]. 
  8. ^ https://wiki.libsdl.org/SDL_SysWMinfo

游戏

  • 《Spore》
  • 《Tux Paint》
  • 《Simutrans》
  • 《Frozen Bubble》
  • 《无冬之夜》(Neverwinter Nights)
  • 《魔法门之英雄无敌III》(Heroes of Might and Magic III)(Linux版)
  • 《模拟城市3000》(Sim City 3000)(Linux版)
  • 《虚幻竞技场》(Unreal Tournament)(Linux版)
  • 《虚幻竞技场2003》(Unreal Tournament 2003)(Linux版)
  • 《虚幻竞技场2004》(Unreal Tournament 2004)(Linux版)
  • 《第二人生》(Second Life)(Linux版)
  • 《佣兵战场》(Soldier of Fortune)(Linux版)
  • 《韦诺之战》(Battle for Wesnoth)
  • Bos Wars

老游戏的开源实现

  • SDLPAL - 仙剑奇侠传的引擎的开源实现
  • CorsixTH - 主题医院的引擎的开源实现
  • kys-pascal - 金庸群侠传的引擎的开源实现(PASCAL语言)
  • kys-cpp - 金庸群侠传的引擎的开源实现(C++语言)

其他

  • QEMU - 模拟器

SDL的延伸

  • pygame—针对游戏开发的Python模块
  • SMPEG—SDL MPEG库
  • Guichan—游戏用户界面开发库
  • ParaGUI—用户界面开发库
  • CRM32Pro—游戏开发包(SDK)
  • SDL.NET—使用C#的.NET包装
  • SFML英语SFML

参考文献

参见

  • DirectX
  • OpenGL
  • OpenAL
  • Allegro—跨平台的游戏开发库

上一篇:静态库
下一篇:SLATEC

猜你喜欢

相关推荐