SDL

维基百科,自由的百科全书
跳转到导航 跳转到搜索
Simple DirectMedia Layer
File:Simple DirectMedia Layer, Logo.svg
开发者Sam Lantinga
首次发布1998年,​28年前​(1998
当前版本3.2.14(2025年5月14日,​13个月前​(2025-05-14
源代码库
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
引擎
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    操作系统跨平台
    类型API
    许可协议Zlib授权
    2.0.0前:GNU宽通用公共许可证(LGPL)
    网站libsdl.org

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

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

    历史[编辑]

    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]

    结构与特色[编辑]

    File:SDL Layers.svg
    SDL在作业平台上的结构图

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

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

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

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

    语法与子系统[编辑]

    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开发的作品[编辑]

    开发实例[编辑]

    其他[编辑]

    游戏[编辑]

    老游戏的开源实现[编辑]

    其他[编辑]

    SDL的延伸[编辑]

    参见[编辑]

    参考文献[编辑]

    1. ^ Exploring the Galaxy. 6 April 2011 [30 January 2012]. (原始内容存档于2015-06-22). 
    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]. (原始内容存档于2015-06-22). 
    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]. (原始内容存档于2012-07-12). 
    7. ^ Sneddon, Joey-Elijah. Some of Linux’s Most Popular Games Will Run Natively On Mir. 5 February 2014 [19 March 2014]. (原始内容存档于2015-05-19). 
    8. ^ 存档副本. [2015-06-22]. (原始内容存档于2015-06-22). 

    外部链接[编辑]

    • Module:Official_website第90行Lua错误:attempt to index field 'wikibase' (a nil value)