SDL(Simple DirectMedia Layer)是一套開放源代碼的跨平臺多媒體開發庫,使用c語言寫成。SDL提供了數種控制圖像、聲音、輸出入的函數,讓開發者只要用相同或是相似的代碼就可以開發出跨多個平臺(Linux、Windows、Mac OS X等)的應用軟件。目前SDL多用于開發游戲、模擬器、媒體播放器等多媒體應用領域。
簡介
Simple DirectMedia Layer ( SDL ) 是一個跨平臺軟件開發庫,旨在為計算機多媒體硬件組件提供硬件抽象層。軟件開發人員可以使用它來編寫可以在Android、iOS、Linux、Mac OS和Windows等多種操作系統上運行的高性能電腦游戲和其他多媒體應用程序。SDL的作者是Sam Lantinga, Loki Entertainment Software的主力程序員(Lead Programmer)。SDL 2.0 于 2013 年發布,與之前的版本有很大不同,提供更多用于 3D 硬件加速的機會,但打破了向后兼容性。
功能介紹
SDL提供了豐富的功能,包括視頻、事件、音頻、CD音頻、線程和定時器等。
SDL 2.0 版本起,增加了對 Mir 和 Wayland 的支持,并在 SDL 2.0.4 中默認啟用。2.0.4 版本還為 Android 提供了更好的支持。
SDL 的語法是基于函數的,所有操作都是通過向子程序(函數)傳遞參數來完成的。
SDL 分為幾個子系統,包括基礎、視頻、輸入事件、力反饋、音頻、線程、計時器、文件抽象、共享對象支持、平臺和 CPU 信息、電源管理等。
SDL支持的功能
視頻
設置8bpp或更高的任意色彩深度的視頻模式。如果某個模式硬件不支持,可以選擇轉化為另一模式。
直接寫入線性的圖像幀緩沖(framebuffer)。
用顏色鍵值(colorkey)或者alpha混合屬性創建surface。
Surface的blit能自動的轉化為目標格式。blit是優化過的,并能使用硬件加速。x86平臺上有針對MMX優化過的blit。
硬件加速的blit和fill(填充)操作,如果硬件支持的話。
事件
提供以下事件:
應用程序的visibility發生改變
鍵盤輸入
鼠標輸入
用戶要求的退出
每種事件都能通過SDL_EventState() 關閉或者打開。
事件經由用戶指定的過濾函數再被加入到內部的事件隊列。
線程安全的事件隊列。
音頻
設置8位和16位的音頻,單聲道或者立體聲,如果格式硬件不支持,可以選擇轉換。
由獨立的線程執行音頻部分,并提供用戶回調(callback)機制。
設計上考慮到了客戶定制的軟混音器,但實際上在例程中就包含了一個完整的音頻/音樂輸出庫。
CD音頻
完整的CD音頻控制API
線程
簡單的線程創建API
用于同步的簡單的二進制信號量(semaphores)
定時器
讀取已流逝的毫秒數。
等待指定的毫秒數。
設置一個10毫秒精度的周期性定時器。
字節序無關
偵測當前系統的字節序
快速轉換數據的函數
讀寫指定字節序的數據
結構與特色
雖然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在大型和小型項目中都得到廣泛使用。例如,MobyGames 在 2013 年列出了 120 款使用 SDL 的游戲,而 SDL 網站本身在 2012 年列出了約 700 款游戲。SDL 用于教授多媒體和計算機科學的大學課程,例如,2010 年卡迪茲大學使用 libSDL 的游戲編程研討會,或 2015 年 UTFPR(蓬塔格羅薩校區)的游戲設計課程。此外,一些非視頻游戲程序也使用 SDL;例如,模擬器,如 DOSBox、FUSE ZX Spectrum 模擬器和 VisualBoyAdvance。有幾本書是為使用 SDL 開發而寫的。
參考資料 >