SDL是一套開放原始碼的跨平臺多媒體開發函式庫，使用 C 語言寫成。SDL 提供了數種控制影像、聲音、輸出入的函式，讓開發者只要用相同或是相似的程式碼就可以開發出跨多個平臺（Linux、Windows、Mac OS X 等）的應用軟體。目前 SDL 多用於開發遊戲、模擬器、媒體播放器等多媒體應用領域。 SDL（第一版）使用 GNU 寬通用公共許可證為授權方式，意指動態連結（dynamic link）其函式庫並不需要開放本身的原始碼。因此諸如《雷神之鎚 4》等商業遊戲也使用 SDL 來開發。而第二版的 SDL 則改用 Zlib 授權來授權。 歷史 Sam Lantinga 於 1998 年為 Loki Software 工作時開發了 SDL，並首先利用 SDL 將《毀滅戰士》移植到 BeOS 作業系統。他於 2008 年創立 Galaxy Gameworks 幫助 SDL 商業支援，因為時間限制該公司計劃被擱置。在 Galaxy Gameworks 擱置後不久，Lantinga 宣佈 SDL13 之後成為 SDL20 將以 Zlib 授權。SDL 13 to be zLib Licensed SDL Mailing List 7 April 2011Lantinga 於 2012 年 7 月 14 日宣佈 SDL 20，同時宣佈他即將加入 Valve 公司，在他加入公司同一天發表第一個 SDL 版本。Lantinga 在 2013 年 8 月 13 日發布 SDL 200 的穩定版。Announcing SDL 200 SDL Mailing List 13 August 2013 SDL 20 是一個重大更新，與 SDL 12 有很多不同，API 不能向後相容。MigrationGuide SDL Wiki Wikilibsdlorg 21 November 2013 Retrieved on 20131208 新增一些功能：多視窗的支援，2D 圖形硬體加速，更好的 Unicode 支援。 從 SDL 202 開始支援 Mir 和 Wayland。（但預設仍然是關閉的） 即將到來的 204 將會提供 Android 更好的支援。 結構與特色 雖然 SDL 時常被比較為『跨平臺的 DirectX』，然而事實上 SDL 是定位成以精簡的方式來完成基礎的功能，它大幅度簡化了控制影像、聲音、輸出入等工作所需撰寫的程式碼。但更高階的繪圖功能或是音效功能則需搭配 OpenGL 和 OpenAL 等 API 來達成。另外它本身也沒有方便建立圖形使用者介面的函式。 SDL 在結構上是將不同作業系統的函式庫再包裝成相同的函式，例如 SDL 在 Windows 平臺上其實是 DirectX 的再包裝，舊版本包裝的是 DirectX 5，SDL 12 則是 DirectX 7。而在使用 X11 的平臺上（包括 Linux），SDL 則是與 Xlib 函式庫溝通來輸出影像。 雖然 SDL 本身是使用 C 語言寫成，但是它幾乎可以被所有的程式語言所使用，例如：C、Perl、Python（藉由 pygame 函式庫）、Pascal 等等，甚至是 Euphoria、Pliant 這類較不流行的程式語言也都可行。 SDL 庫分為 Video、Audio、CDROM、Joystick 和 Timer 等若干子系統，除此之外，還有一些單獨的官方擴充函式庫。這些庫由官方網站提供，幷包含在官方文件中，共同組成了 SDL 的 標準庫： SDL_image 支援時下流行的影像格式：BMP、PPM、XPM、 PCX、GIF、JPEG、PNG、TGA。 SDL_mixer 更多的聲音輸出函式以及更多的聲音格式支援。 SDL_net 網路支援。 SDL_ttfTrueType 字型渲染支援。 SDL_rtf 簡單的 RTF 渲染支援。 語法與子系統 SDL 將功能分成下列數個子系統（subsystem）： Video（影像） 影像控制以及執行緒（thread）和事件管理（event）。 Audio（聲音） 聲音控制 Joystick（搖桿） 遊戲搖桿控制 CDROM（光碟機） 光碟媒體控制 Window Management（視窗管理）－與視窗程式設計整合 Event（事件驅動）－處理事件驅動 以下是一支用 C 語言寫成、非常簡單的 SDL 範例： Headers include SDLh 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 開發的作品 開發例項 Freeciv FileUnknown horizons 3176PNG Unknown Horizons File0_AD_alpha_25__playing_as_Spartansjpg 0 AD FileHwscreenpng Hedgewars FileFretsonfirex1jpg Frets on Fire FileOpenTTD071depngOpenTTD FileWesnoth165jpgThe Battle for Wesnoth FileOOlite_Mac_OS_X_screenshotjpg Oolite FileSMC15PromoShotpng Secret Maryo Chronicles FileTrine Knight Blockjpg Trine 其他 開源遊戲列表 遊戲 《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 杏林也瘋狂的引擎的開源實現 kyspascal 金庸群俠傳的引擎的開源實現（PASCAL 語言） kyscpp 金庸群俠傳的引擎的開源實現（C 語言） 其他 QEMU 模擬器 SDL 的延伸 pygame 針對遊戲開發的 Python 模組 SMPEGSDL MPEG 函式庫 Guichan 遊戲使用者介面開發函式庫 ParaGUI 使用者介面開發函式庫 CRM32Pro 遊戲開發包（SDK） SDLNET 使用Ｃ＃的NET 包裝 參見 DirectX OpenGL OpenAL Allegro 跨平臺的遊戲開發函式庫 參考文獻 外部連結 Category 計算機程式庫 Category 電子遊戲研發