微信号:code_gg_home

介绍:分享技术干货,分享最新新闻动态,分享开心段子,让大家轻松愉快的成长.

SDL系列讲解(一) 简介

2017-09-26 09:00 陆晓明

什么是 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、GameJoystick 和 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可以开发简单,轻量级别的游戏。

    那么你准备好了吗?



 
代码GG之家 更多文章 android native内存检测方案(二) 80后的我,记忆里和吃有关的那些事 ANR 原理与实战技巧 大荔冬枣,你值得拥有 Android 启动过程框架
猜您喜欢 展程事件刷屏后三派互呛,谁抓住了要害? 我们离 Google SRE 还有多远? 天津天地伟业到尚学堂招聘,习近平曾访问 聊一聊RAC 据说这份考卷,只有程序员能得满分!