【SDL】
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商业支持，因为时间限制该公司计划被搁置。在Galaxy Gameworks搁置后不久，Lantinga 宣布 SDL1.3(之后成为 SDL2.0)将以 Zlib授权。Lantinga 于2012年7月14日宣布 SDL 2.0，同时宣布他即将加入Valve 公司，在他加入公司同一天发表第一个SDL版本。Lantinga在2013年8月13日发布SDL 2.0.0的稳定版。
SDL 2.0是一个重大更新，与 SDL 1.2 有很多不同，API不能向后相容。
新增一些功能：多视窗的支持，2D图形硬体加速，更好的Unicode支援。
从 SDL 2.0.2 开始支援 Mir 和 Wayland。（但预设仍然是关闭的）
即将到来的 2.0.4 将会提供 Android 更好的支援。
== 结构与特色 ==
SDL在作业平台上的结构图
虽然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_imagedate=20101223104135 —支援时下流行的图像格式：BMP、PPM、XPM、 PCX、GIF、JPEG、PNG、TGA。
* SDL_mixerdate=20101224003208 —更多的声音输出函式以及更多的声音格式支援。
* SDL_netdate=20090321174144 —网路支援。
* SDL_ttfdate=20101223190259 —TrueType字体渲染支持。
* SDL_rtfdate=20100913213300 —简单的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开发的作品 ==
===开发实例===
Freeciv
File:Unknown horizons 3176.PNG| Unknown Horizons
File:0_A.D._alpha_25_-_playing_as_Spartans.jpg| 0 A.D.
File:Hwscreen.png| Hedgewars
File:Fretsonfirex1.jpg| Frets on Fire
File:OpenTTD-0.7.1-de.png|OpenTTD
File:Wesnoth-1.6-5.jpg|The Battle for Wesnoth
File:OOlite_Mac_OS_X_screenshot.jpg| Oolite
File:SMC15PromoShot.png| Secret Maryo Chronicles
File:Trine - Knight Block.jpg| Trine
== 其他 ==
*开源游戏列表
=== 游戏 ===
*《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
=== 老游戏的开源实现 ===
* SDLPALdate=20180906014338  - 仙剑奇侠传的引擎的开源实现
* CorsixTHdate=20100211025433  - 杏林也疯狂的引擎的开源实现
* kys-pascaldate=20170406000749  - 金庸群侠传的引擎的开源实现（PASCAL语言）
* kys-cppdate=20180612211436  - 金庸群侠传的引擎的开源实现（C++语言）
=== 其他 ===
*QEMU - 模拟器
== SDL的延伸 ==
*  pygame—针对游戏开发的Python模组
*  SMPEGdate=20070208154110 —SDL MPEG函式库
*  Guichandate=20200410102806 —游戏使用者介面开发函式库
*  ParaGUIdate=20200912054210 —使用者介面开发函式库
*  CRM32Prodate=20070312012722 —游戏开发包（SDK）
*  SDL.NETdate=20200510070143 —使用Ｃ＃的.NET包装
* SFML