天天看點

【SDL】SDL簡介

​1. SDL簡介​

SDL(Simple DirectMedia Layer)是一套開放源代碼的跨平台多媒體開發庫,使用C語言寫成。SDL提供了數種控制圖像、聲音、輸出入的函數,讓開發者隻要用相同或是相似的代碼就可以開發出跨多個平台(Linux、Windows、Mac OS X等)的應用軟體。目前SDL多用于開發遊戲、模拟器、媒體播放器等多媒體應用領域。

SDL(Simple DirectMedia Layer)被廣泛的用于許多著名的遊戲。最著名的遊戲是赢得Linux組遊戲開發大獎的 文明:權利的召喚(Civilization: Call To Power)。

SDL的作者是Sam Lantinga, Loki Entertainment Software的主力程式員(Lead Programmer)。

​2. 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毫秒精度的周期性定時器。

​位元組序無關​

偵測目前系統的位元組序

快速轉換資料的函數

讀寫指定位元組序的資料

​3. 跨平台性​

​·Linux​

視訊顯示使用X11,利用XFree86 DGA擴充的優勢,全屏顯示使用新的w MTRR加速。

聲音使用OSS API。

使用clone()系統調用和SysV IPC,或者glibc-2.1的pthreads實作線程。

​·Win32​

有兩個版本,一個是适合所有基于Win32的系統的安全版本,另一個是基于DirectX的高性能版本。

安全版本的視訊顯示采用GDI。高性能版本采用DirectDraw,并支援​​硬體加速​​​。

安全版本的​​​音頻​​回放采用waveOut API。高性能版本采用DirectSound

​·BeOS​

視訊顯示采用BWindow。

音頻回放采用BSoundPlayer API。

​·非正式的移植版本​,進展中Solaris, IRIX, FreeBSD MacOS

​4. SDL擴充​

SDL内置了調用OpenGL的函數。

通過使用SDL_image、SDL_ttf、SDL_mixer、SDL_net等外部擴充庫,可以輕松實作JPG、PNG、TIFF圖像的加載使用,​​TrueType字型​​的使用,MP3檔案的使用、網絡相關的使用等。

SDL也有其他語言的包裝,可以在這裡檢視 SDL用C語言寫成,但是可以很容易在C++下面工作,并且SDL綁定了許多其它的語言,這其中就包括Ada, C#, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby, and Smalltalk。

包裝得比較好的是python語言的pygame。不過仍然建議你熟悉c/c++環境下的SDL後再使用,會得心應手許多。

最後,我們來了解一下SDL的版權問題,SDL在GNU LGPL 2(一個國際上的開源組織)下釋出,這個版本允許你将SDL以動态連結庫(dynamic link library)的形式免費地用于商業遊戲軟體的開發。

繼續閱讀