1. 程式人生 > >SDL系列講解(一) 簡介

SDL系列講解(一) 簡介


什麼是 SDL

Simple DirectMedia Layer(SDL)是一個跨平臺開發庫,主要提供對音訊,鍵盤,滑鼠,操縱桿的操作,通過OpenGL和Direct3D來實現直接訪問影象硬體。 主要應用在視訊播放軟體,模擬器和遊戲開發。SDL官方支援Windows,Mac OS X,Linux,iOS和Android。在原始碼中可以找到對其他平臺的支援。
SDL是用C編寫的,我們可以使用C ++開發,同時SDL也綁了一些其他幾種語言,包括C#和Python。
這個庫是分佈在zlib許可證下,可以找到在檔案“COPYING.txt”。如果想要快速的掌握SDL,去閱讀下標頭檔案以及test下的測試程式碼,那裡面有更多示例教程,以及很好的註釋,幫助你去學習,理解,掌握.

SDL庫分為 Video、Audio、CD-ROM、Game、Joystick 和 Timer 等若干子系統,除此之外,還有一些單獨的官方擴充函式庫。這些庫由官方網站提供,幷包含在官方文件中,共同組成了SDL的“標準庫”,具體如下:
SDL_image—支援時下流行的影象格式:BMP、PPM、XPM、 PCX、GIF、JPEG、PNG、TGA。
SDL_mixer—更多的聲音輸出函式以及更多的聲音格式支援。支援常見的WAV,MP3,OGG等基礎格式。
SDL_net—網路支援。
SDL_ttf—TrueType字型渲染支援。
SDL_rtf—簡單的RTF渲染支援

SDL 子系統

SDL將功能分成下列數個子系統(subsystem):
Video(影象)—影象控制以及執行緒(thread)和事件管理(event)。
Audio(聲音)—聲音控制
Joystick(搖桿)—遊戲搖桿控制
CD-ROM(光碟驅動器)—光碟媒體控制
Window Management(視窗管理)-與視窗程式設計整合,不過android預設就是對應的surfaceView的視窗,只允許存在一個。
Event(事件驅動)-處理事件驅動
haptic 觸控事件響應
Time 時間管理

SDL 整體框架

SDL的整個框架結構:這裡我們可以看到,SDL是個跨平臺多支援的渲染框架,完成在硬體驅動層之上的抽離,實現Window linux Android等一系列平臺的適配。如此,我們可以使用SDL完成我們的邏輯開發,便可以快速編譯到各個平臺,實現跨平臺。


SDL 可以幹什麼

視訊
3D圖形:
SDL可以與OpenGL API或Direct3D API結合使用,用於3D圖形
加速2D渲染API:
支援簡單旋轉,縮放和Alpha混合,所有這些都使用最新的3D API加速
使用OpenGL和Direct3D支援加速
建立和管理多個視窗
輸入事件
提供的事件和API方法如下:
應用程式和視窗狀態更改
滑鼠輸入
鍵盤輸入
操縱桿和遊戲控制器輸入
多點觸控手勢
可以使用SDL_EventState()啟用或禁用每個事件
在釋出到內部事件佇列之前,事件將通過使用者指定的過濾器函式傳遞
執行緒安全事件佇列
音訊
設定8位和16位音訊,單聲道立體聲或5.1環繞聲的音訊播放,如果硬體不支援格式,可選擇轉換
音訊在單獨的執行緒中獨立執行,通過使用者回撥機制處理
專為自定義軟體音訊混音器而設計,其中SDL_mixer提供完整的音訊/音樂輸出庫
檔案I / O抽象
通用抽象開放,讀寫資料
內建支援檔案和記憶體支援
共享物件支援
載入共享物件(Windows上的DLL,Mac OS X上的.dylib,Linux上的.so)
共享物件中的查詢方法,呼叫
執行緒
簡單執行緒建立API
簡單執行緒本地儲存API
互斥量,訊號量和條件變數
用於無鎖程式設計的原子操作
計時器
獲取流逝的毫秒數
等待指定的毫秒數
在單獨的執行緒中建立與程式碼並行執行的計時器
使用高解析度計數器進行分析
CPU特徵檢測
查詢CPU數量
檢測CPU功能和支援的指令集
支援大小端檢測
檢測當前系統的位元組順序
用於快速交換資料值的例程
讀取和寫入指定位元組資料的資料
電源管理
查詢電源管理狀態

SDL的總體概況

SDL主要圍繞著實現一套快速渲染的框架,同時能夠相容更多平臺。除了渲染之外,做了一些外圍擴充套件,比如播放更多音訊格式,支援渲染TTF字型,支援載入更多圖片格式,同時實現了網路請求。除此之外,SDL直接能做的事情確實比較少,需要我們自己去擴充套件,去將三方的其他庫封裝過來,以便提供更強大的開發支撐。
    從現在開始,我會帶領大家,一起領略SDL的風采,在快速學習掌握使用的基礎上,進行原理學習,技能擴充套件,提升。本書會從Android平臺進行切入,講解。
在完成原理,使用講解之後,我會移植一些開源庫,來支援SDL框架,使得SDL可以開發簡單,輕量級別的遊戲。
    那麼你準備好了嗎?