Loading AI tools
自由軟體多媒體函式庫 来自维基百科,自由的百科全书
SDL(英语:Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发函数库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。
![]() | |
开发者 | Sam Lantinga |
---|---|
首次发布 | 1998年 |
当前版本 |
|
源代码库 | |
操作系统 | 跨平台 |
类型 | API |
许可协议 | Zlib授权 2.0.0前:GNU宽通用公共许可证 |
网站 | libsdl.org |
SDL(第一版)使用GNU宽通用公共许可证为许可方式,意指动态链接(dynamic link)其函数库并不需要开放本身的源代码。因此诸如《雷神之锤4》等商业游戏也使用SDL来开发。而第二版的SDL则改用Zlib授权来许可。
Sam Lantinga于1998年为Loki Software工作时开发了SDL,并首先利用SDL将《毁灭战士》移植到BeOS操作系统。他于2008年创立 Galaxy Gameworks 帮助SDL商业支持,因为时间限制该公司计划被搁置。[2]在Galaxy Gameworks搁置后不久,Lantinga 宣布 SDL1.3(之后成为 SDL2.0)将以 Zlib许可。[3]Lantinga 于2012年7月14日宣布 SDL 2.0,同时宣布他即将加入Valve 公司,在他加入公司同一天发表第一个SDL版本。[4]Lantinga在2013年8月13日发布SDL 2.0.0的稳定版。[5]
SDL 2.0是一个重大更新,与 SDL 1.2 有很多不同,API不能向后兼容。[6]
新增一些功能:多视窗的支持,2D图形硬件加速,更好的Unicode支持。[7]
从 SDL 2.0.2 开始支持 Mir 和 Wayland。(但默认仍然是关闭的)[8]
即将到来的 2.0.4 将会提供 Android 更好的支持。[9]
虽然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将功能分成下列数个子系统(subsystem):
以下是一支用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比较对应关系如下:
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 |