SDL
開發者 | Sam Lantinga |
---|---|
首次釋出 | 1998年 |
目前版本 | 2.26.0(2022年11月22日 | )
原始碼庫 | |
作業系統 | 跨平台 |
類型 | API |
特許條款 | Zlib授權 2.0.0前:GNU較寬鬆公共許可證(LGPL) |
網站 | libsdl.org |
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商業支援,因為時間限制該公司計劃被擱置。[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時常被比較為『跨平台的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開發的作品
開發實例
其他
遊戲
- 《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
參見
參考文獻
- ^ 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).