SDL2框架

     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 库沟通来输出图像。


     1、SDL 视频渲染主要涉及到四个对象 (引用雷神部分文章)

          SDL_Window
               SDL_Window结构体定义了一个SDL2窗口。若直接使用编译好的SDK,那么是看不到其内部结构。

          SDL_Surface(软渲染[CPU])
               在SDL中,所有绘制在视频输出都是通过SDL_Sur对face对象来输出。一个图像,一段文字,一个视频都需要转换成SDL_Surface对象来操作,它们可以平铺,堆叠。他们所有数据最终要在一个叠加在表示screen 的SDL_Surface的对象中输出显示。
               SDL_Surface本质是一个矩形的像素内存,它需要通过专门的绘点函数来输出到不同设备上。其中SDL_Surface 的坐标系是左上角是原点,向下向左递增.
               一个带图形显示的的SDL程序(基本上所有都带),首先要初始化一个屏幕Surface.其余所有输出到屏幕的Surface数据都要填充到屏幕Surface上。

          SDL_Renderer
               SDL_Renderer是处理所有渲染的结构,在该范围内渲染SDL_Window。它还会跟踪与渲染相关的设置。

          SDL_Texture(硬渲染[GPU])
               SDL_Texture 与SDL_Surface 相似,也是一种缓冲区。只不过它存放的不是真正的像素数据,而是存放的图像的描述信息。这些描述信息通过OpenGL、D3D 或 Metal等技术操作GPU,从而绘制出与SDL_Surface一样的图形,且效率更高。

          SDL_Event
               SDL_Event是SDL中所有事件处理的核心。只要知道了事件类型对应SDL_Event结构的那个成员,使用它是一个简单的事情。


     2、SDL 视频渲染主要API

          初始化
               SDL_Init()
                    初始化 SDL。

               SDL_CreateWindow()
                    创建窗口(Window)

               SDL_CreateRenderer():
                    基于窗口创建渲染器(Render)

               SDL_CreateTexture()
                    创建纹理(Texture)


          循环渲染数据
               SDL_UpdateTexture()
                    设置纹理的数据。

               SDL_RenderCopy()
                    纹理复制给渲染器。

               SDL_RenderPresent()
                    显示。

     
          退出
               SDL_DestroyWindow()

               SDL_DestroyRenderer()

               SDL_DestroyTexture()

               SDL_Quit()

     
     

     3、SDL 主要扩展库

          SDL_image
               支持时下流行的图像格式: BMP、 PPM、 XPM、 PCX、 GIF、 JPEG、 PNG、 TGA。

          SDL_mixer
               更多的声音输出函数以及更多的声音格式支持。

          SDL_ttf
               TrueType 字体渲染支持。

          SDL_net
               网络支持。

          SDL_rtf
               简单的 RTF 渲染支持。

     
     

     4、子系统

          Video(图像)
               图像控制以及线程(thread) 和事件管理(event)

          Audio(声音)
               声音控制

          Joystick(摇杆)
               游戏摇杆控制

          CD-ROM(光盘驱动器)
               光盘媒体控制

          Window Management(视窗管理)
               与视窗程序设计集成

          Event(事件驱动)
               处理事件驱动

     
     

     5、SDL 用途

          视频
               * 3D 图形:
                    SDL 可以与 OpenGL API 或 Direct3D API 结合使用, 用于 3D 图形

               * 加速 2D 渲染 API:
                    支持简单旋转, 缩放和 Alpha 混合, 所有这些都使用最新的 3D API 加速。使用 OpenGL 和 Direct3D 支持加速。

               * 创建和管理多个窗口


          音频
               * 设置 8 位和 16 位音频, 单声道立体声或 5.1 环绕声的音频播放, 如果硬件不支持格式,可选择转换。

               * 音频在单独的线程中独立运行, 通过用户回调机制处理。

               * 专为自定义软件音频混音器而设计, 其中 SDL_mixer 提供完整的音频/音乐输出库。


          输入事件
               * 提供的事件和 API 方法如下:
                    应用程序和窗口状态更改
                    鼠标输入
                    键盘输入
                    操纵杆和游戏控制器输入
                    多点触控手势

               * 可以使用 SDL_EventState() 启用或禁用每个事件

               * 在发布到内部事件队列之前, 事件将通过用户指定的过滤器函数传递

               * 线程安全事件队列


          文件 I / O 抽象

               * 通用抽象开放, 读写数据

               * 内置支持文件和内存支持


          共享对象支持

               加载共享对象(Windows 上的 DLL, Mac OS X 上的.dylib, Linux 上的.so)

               共享对象中的查找方法,调用。


          线程
               简单线程创建 API

               简单线程本地存储 API

               互斥量, 信号量和条件变量

               用于无锁编程的原子操作

          计时器

               获取流逝的毫秒数

               等待指定的毫秒数

               在单独的线程中创建与代码并行运行的计时器

               使用高分辨率计数器进行分析

          CPU 特征检测

               查询 CPU 数量

               检测 CPU 功能和支持的指令集

          支持大小端检测

               检测当前系统的字节顺序

               用于快速交换数据值的例程

               读取和写入指定字节数据的数据

          电源管理

               查询电源管理状态

     

关注

笔者 - jxd

微信公众号搜索 “码农总动员” 或 微信扫描下方二维码,了解更多你不知道的XX,O(∩_∩)O

SDL —— SDL2及API简介相关推荐

  1. 线程编程常见API简介(中)

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 在<线程编程常见API简介(上) >中讲述了有关线程创建过程中常用的 API 的使用方法,本节继续讲述有 ...

  2. WebSocket API简介

    WebSocket是html5新增加的一种通信协议,目前流行的浏览器都支持这个协议,例如Chrome,Safari,Firefox,Opera,IE等等,对该协议支持最早的应该是chrome,从chr ...

  3. web API简介(二):客户端储存之document.cookie API

    概述 前篇:web API简介(一):API,Ajax和Fetch 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据.document.cook ...

  4. 【Netty】NIO 网络通信 SelectionKey 常用 API 简介

    文章目录 I . SelectionKey 简介 II . SelectionKey 事件简介 III . SelectionKey 常用 API 简介 I . SelectionKey 简介 1 . ...

  5. 【Java 网络编程】TCP API 简介 ( Socket | ServerSocket )

    文章目录 I Socket API 简介 II ServerSocket API 简介 III Socket 数据交互 IV Socket 客户端操作流程 V Socket 服务器端操作流程 VI S ...

  6. java编译器使用教程_Java编译器API简介

    今天给大家分享的是Java编译器API简介,文章部分内容摘自[优锐课]学习笔记. Java编译器API Java编译器API是Java模块(称为java.compiler)的一部分.该模块包括语言模型 ...

  7. html5画电池状态,HTML5的一个显示电池状态的API简介

    这篇文章主要介绍了HTML5的一个显示电池状态的API简介,由Mozilla设计,具体的设备和浏览器支持情况还要通过检测才能确定,需要的朋友可以参考下 移动设备的份额在网络流量中在大量增长,其所贡献的 ...

  8. ZABBIX API简介及使用

    API简介 Zabbix API开始扮演着越来越重要的角色,尤其是在集成第三方软件和自动化日常任务时.很难想象管理数千台服务器而没有自动化是多么的困难.Zabbix API为批量操作.第三方软件集成以 ...

  9. Promise API 简介

    Promise API 简介 译者注: 到处是回调函数,代码非常臃肿难看, Promise 主要用来解决这种编程方式, 将某些代码封装于内部. Promise 直译为"承诺",但一 ...

最新文章

  1. 【数据结构】邻接表的储存结构 建立图的邻接表算法
  2. ASP.Net 获取当前时间
  3. MySQL数据类型--日期时间
  4. Windows Mobile和Wince下使用TinyXML进行Native C++的开发
  5. python多线程不能利用多核cpu,但有时候多线程确实比单线程快。
  6. linux下自己安装软件做成命令
  7. 解决虚拟机克隆后eth0不见的问题
  8. supermap许可 (*.lic9d)
  9. 使用java创建kafka的生产者和消费者
  10. 如何从视频中删除声音?
  11. DPM 2007 BUG
  12. Unity3D中脚本的执行顺序和编译顺序
  13. Mac 下利用 FileMerge 进行代码比较、合并
  14. psp能装安卓软件吗_PSP模拟器下载_安卓PSP模拟器下载「ppsspp模拟器」-太平洋下载中心...
  15. VMware ESXi 安装教程
  16. 正则表达式数字匹配规则整理
  17. android win7 共享网络打印机,详解win7共享打印机如何设置
  18. 小布老师oracle,小布老师-oracle-1
  19. 转贴: 傅立叶级数(Fourier Series) 推导
  20. 命令行设置RTC alarm

热门文章

  1. 世界上最玄的10个巧合!
  2. 【摘记】股票选择方法
  3. Vue3项目使用cdn加速
  4. http 响应头里content-length 的几种情况
  5. 网络超火的音效素材、BGM,全在这里了。
  6. 城市小交叉(道)口的交通设施设置
  7. php如何实现余额充值,PHP集成支付宝快速实现充值功能
  8. 网页禁用F12或右键查看源代码
  9. 球坐标系和直角坐标系转换
  10. Linux VRF(Virtual Routing Forwarding)的原理和实现