SDL

SDL（英語：Simple DirectMedia Layer）是一套開放原始碼的跨平台多媒體開發函式庫，使用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 宣布 SDL1.3(之後成為 SDL2.0)將以 Zlib授權。Lantinga 於2012年7月14日宣布 SDL 2.0，同時宣布他即將加入Valve 公司，在他加入公司同一天發表第一個SDL版本。Lantinga在2013年8月13日發布SDL 2.0.0的穩定版。 SDL 2.0是一個重大更新，與 SDL 1.2 有很多不同，API不能向後相容。 新增一些功能：多視窗的支持，2D圖形硬體加速，更好的Unicode支援。 從 SDL 2.0.2 開始支援 Mir 和 Wayland。（但預設仍然是關閉的） 即將到來的 2.0.4 將會提供 Android 更好的支援。 雖然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比较对应关系如下： Unknown Horizons 0 A.D. Hedgewars Frets on Fire OpenTTD The Battle for Wesnoth Oolite Secret Maryo Chronicles 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（页面存档备份，存于互联网档案馆） - 杏林也瘋狂的引擎的开源实现 kys-pascal（页面存档备份，存于互联网档案馆） - 金庸群侠传的引擎的开源实现（PASCAL语言） kys-cpp（页面存档备份，存于互联网档案馆） - 金庸群侠传的引擎的开源实现（C++语言） QEMU - 模拟器 pygame—針對遊戲開發的Python模組 SMPEG（页面存档备份，存于互联网档案馆）—SDL MPEG函式庫 Guichan（页面存档备份，存于互联网档案馆）—遊戲使用者介面開發函式庫 ParaGUI（页面存档备份，存于互联网档案馆）—使用者介面開發函式庫 CRM32Pro（页面存档备份，存于互联网档案馆）—遊戲開發包（SDK） SDL.NET（页面存档备份，存于互联网档案馆）—使用Ｃ＃的.NET包裝 SFML（英语：SFML） 电子游戏主题 自由软件主题 DirectX OpenGL OpenAL Allegro—跨平台的遊戲開發函式庫 Exploring the Galaxy. 6 April 2011 [30 January 2012]. （原始内容存档于2015-06-22）.  SDL 1.3 to be zLib Licensed （页面存档备份，存于互联网档案馆）, SDL Mailing List, 7 April 2011 SDL 2.0 Is Coming Very Soon With New Features. [17 August 2012]. （原始内容存档于2015-06-22）.  Announcing SDL 2.0.0 （页面存档备份，存于互联网档案馆）, SDL Mailing List, 13 August 2013 MigrationGuide - SDL Wiki' （页面存档备份，存于互联网档案馆）. Wiki.libsdl.org (21 November 2013). Retrieved on 2013-12-08. SDL 1.3 Roadmap. 14 June 2011 [25 July 2011]. （原始内容存档于2012-07-12）.  Sneddon, Joey-Elijah. Some of Linux’s Most Popular Games Will Run Natively On Mir. 5 February 2014 [19 March 2014]. （原始内容存档于2015-05-19）.  存档副本. [2015-06-22]. （原始内容存档于2015-06-22）.  官方网站