文档章节

SDL介绍

abcijkxyz
 abcijkxyz
发布于 2016/08/06 12:05
字数 875
阅读 2
收藏 0

SDL库的作用说白了就是封装了复杂的视音频底层操作,简化了视音频处理的难度。

以下转自WiKi:


SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。
SDL使用GNU宽通用公共许可证为授权方式,意指动态链接(dynamic link)其库并不需要开放本身的源代码。因此诸如《雷神之锤4》等商业游戏也使用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_image—支持时下流行的图像格式:BMP、PPM、XPM、 PCX、GIF、JPEG、PNG、TGA。
SDL_mixer—更多的声音输出函数以及更多的声音格式支持。
SDL_net—网络支持。
SDL_ttf—TrueType字体渲染支持。
SDL_rtf—简单的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与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  

使用SDL开发的游戏:

《Spore》
《Tux Paint》
《Simutrans》
《Stepmania》
《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

本文转载自:http://blog.csdn.net/leixiaohua1020/article/details/11954039

abcijkxyz
粉丝 63
博文 6196
码字总数 1876
作品 0
深圳
项目经理
私信 提问

暂无文章

Java 静态代理、Java动态代理、CGLIB动态代理

Java 的代理就是客户类不再直接和委托类打交道, 而是通过一个中间层来访问, 这个中间层就是代理。为啥要这样呢, 是因为使用代理有 2 个优势: 可以隐藏委托类的实现 可以实现客户与委托类之间...

gaomq
30分钟前
1
0
win10部署sonar代码扫描工具

一 安装MySQL解压版 此部分参看Win10安装MySQL5.7.22 解压缩版(手动配置)方法 1、下载 mysql-5.7.26-winx64.zip 解压之后生成 mysql-5.7.26-winx64 文件夹。 2、在D盘创建Mysql目录 D:\MyS...

BG2KNT
32分钟前
4
0
小程序的rpx以及rem和px的换算

(1).rpx:不论哪个型号的手机,屏幕宽度都是750rpx rpx与px的转换,根据设计稿换算 例如:设计稿750px宽度,ps上量出或者标出的宽度是多少,那么就定义多少rpx,也就是,1px = 1rpx 例如:设计...

流年那么伤
32分钟前
1
0
当我说要做大数据工程师时他们都笑我,直到三个月后……

申明: 本文旨在为普通程序员(Java程序员最佳)提供一个入门级别的大数据技术学习路径,不适用于大数据工程师的进阶学习,也不适用于零编程基础的同学。 前言: 一、背景介绍 二、大数据介绍...

求神
37分钟前
1
0
python3 案例分享--天气预报

通过输入城市就能查出最近几日的天气情况, 代码如下: from tkinter import *import urllib.requestimport gzipimport jsonfrom tkinter import messageboxroot = Tk()...

lyle_luo
45分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部