SDL —— SDL2及API简介

article/2025/10/11 6:29:29
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

在这里插入图片描述


http://chatgpt.dhexx.cn/article/k09PbQbb.shtml

相关文章

SDL2学习笔记(一):SDL2初步

一、Windows系统下的安装 MinGW ①安装MinGW并配置好环境变量; ②官网下载SDL for MinGW; ③将解压文件中的 .\i686-w64-mingw32\include\SDL2 复制到 .\MinGW\include ; //有的设备需要用x86_64-w64-mingw32中的文件,下同 ④将解…

ISCC2021—ISCC客服一号冲冲冲(二)

ISCC客服一号冲冲冲(二) 呦,又见面了,狗子 打开链接,发现登录接口似乎是个图片截了一块啊,把图片下载下来,lsp隐写发现源代码,同时php弱比较登录页面 (都看到这里啦&a…

ISCC2021——web部分

练武 ISCC客服冲冲冲(一) 该题目需要左边的客服票数高于右边的 我会的就两种方法,毕竟是废物嘛,允许 1、 把左右按钮换一下 然后就 2、在控制台输入 回车,走你 你涨啊,涨啊,接着涨啊…没吃…

ISCC,Misc:隐秘的信息

解码得到解压密码 解压出一张图,低位时头部显示有一串字符被 f f f f f 包裹,将可疑的字符单独拿出来 由于单个字符可能是由二进制错位导致的 fffffa4a9a1a1bd9 9b7a1a9ba34b127a 0b8abbc20b7a2b7a 2b524b43e9f8007f fffc7e3fe00fff00 71fffffffffffff…

ISCC理论题小解

B 域、工作组和家庭组表示在网络中组织计算机的不同方法。它们之间的主要区别是对网络中的计算机和其他资源的管理方式。 网络中运行 Windows 的计算机必须属于某个工作组或某个域。家庭网络中运行 Windows 的计算机也可以属于某个家庭组,但这不是必需的。 家庭网络…

ISCC web4

ISCC web4 打开网页看到: 代码审计。。。。。。。。。 一开始以为是sha256解密,结果半天搞不出来 后来才知道parse_url函数存在变量覆盖漏洞 因为要存在action参数,传入actionauth key也要传入key0 由于key是要被sha256加密的 传入一个has…

ISCC2022 擂台misc

文章目录 666扫!弱雪真扫黑暗森林PNGstego这是压缩包吗?小 数 学习了 P.S:抬杠就是你对 666 考查知识点:伪加密、猜谜的steghide弱口令爆破、流量分析、gif帧、键盘密码、AES 下载下来是一个压缩包,但是图片显示需要密码&#xf…

ISCC-2022 部分wp

目录 Web冬奥会解题步骤详细描述解题收获 Easy_sql解题步骤详细描述解题收获 Pop2022解题步骤详细描述解题收获 findme解题步骤详细描述 爱国敬业好青年-2解题步骤详细描述解题收获 这是一道代码审计题 Misc单板小将苏翊鸣解题步骤详细描述解题收获 2022冬奥会解题步骤详细描述…

ISCC——部分题wp

练武场 WEB: ISCC客服冲冲冲(一) 知识点: js解密 解题思路: 1.打开后出现投票的页面 2.查看源码 发现可疑的function.js 3.function.js,js加密 var _0xodqjsjiami.com.v6,_0x3e40[_0xodq,\x77\x35\x4c\x…

ISCC ISCC客服一号冲冲冲(二)

这个题其实是转自Bugku的Login4 (CBC字节翻转攻击) 题目有提示密码就是web1 的flag 然后登入 这里有回显,然后我们换一下 下面cookie里的iv和cipher看着就像CBC加密的方式 利用的就是CBC解密的特点:前16个密文字符用来解密接下来的一组16个密文&#…

ISCC 2021 SSTI

文章目录 FUZZ测试:了解一下SSTI常用的语句格式:说一下构造思路:构造题外话:(反转结果字符串) 再ISCC中遇到了一道SSTI的题目,拿来练练手,题目难度的化,相对于普遍的过滤…

[ISCC 2021]部分wp

文章目录 海市蜃楼-1Retrieve the passcode我的折扣是多少小明的表情包Hack the Victim美人计李华的红包小明的宠物兔ISCC客服冲冲冲(一)这是啥Web01登录tornadowhich is the true isccISCC客服一号冲冲冲(二)Explore Rubylovely …

ISCC-WP

练武wp: MISC 2022冬奥会 图片在kali中,没有显示缩略图,其宽高很可能被修改过 修改图片的长之后,下面出些一些&#x编码,这是html实体编码。进行unicode解码得到 冰敦敦的小伙伴经常被人冷落,你知道他的原型是什…

ISCC认证的申请条件是什么?

ISCC国际可持续发展和碳认证介绍 ISCC - International Sustainability & Carbon Certification 国际可持续发展和碳认证,是满足欧盟《可再生能源指令》(2009/28/ECRED)的第一个标准,于2010年开始实施,现已发展成为…

ISCC 2022 部分

目录 web冬奥会popfindme爱国敬业好青年-2Easy-SQL让我康康&#xff01;这是一道代码审计题 MISC隐秘的信息真相只有一个单板小将苏翊鸣藏在星空中的诗-1藏在星空中的诗-22022冬奥会降维打击 REVERSEGetTheTableBobs Code web 冬奥会 <?phpshow_source(__FILE__);$Step1F…

ISCC 2022 wp

目录 解题步骤及过程&#xff1a; 练武题WP&#xff1a; Web: 冬奥会&#xff1a; 爱国敬业好青年-2&#xff1a; Pop2022&#xff1a; 这是一道代码审计题&#xff1a; Easy-SQL&#xff1a; Findme&#xff1a; 让我康康!&#xff1a; misc&#xff1a; 2022冬奥…

ISCC-2021

文章目录 一、ISCC客服冲冲冲&#xff08;一&#xff09;二、这是啥三、Web01四、ISCC客服一号冲冲冲&#xff08;二&#xff09;五、登录六、which is the true iscc 一、ISCC客服冲冲冲&#xff08;一&#xff09; 可以下载一个点击器&#xff0c;或者直接F12在html中改&…

ISCC 2021 WP

文章目录 MISC李华的红包Retrieve the passcode海市蜃楼-1美人计我的折扣是多少区块链Hack the Victim检查一下小明的宠物兔变异的SM2 WEBISCC客服冲冲冲&#xff08;一&#xff09;这是啥Web01ISCC客服一号冲冲冲&#xff08;二&#xff09;登录which is the true iscclovely …

2021-ISCC

webweb01-ISCC客服冲冲冲&#xff08;一&#xff09;web02-这是啥web3-web01 MISCMISC01-Retrieve the passcodeMISC02-我的折扣是多少MISC03-海市蜃楼-1MISC04-美人计MISC05-检查一下 web web01-ISCC客服冲冲冲&#xff08;一&#xff09; 1.写个脚本&#xff08;不会&#x…

ISCC 2022

PWN 跳一跳&#xff08;未写完 程序流程较为简单&#xff0c;发现为64位全保护开启的ELF文件&#xff1b; sim_treasure 简单的32位循环格式化字符串漏洞&#xff0c;位于栈上&#xff0c;无过滤\x00&#xff1b;且对于got表无防护&#xff0c;故利用格式化字符串漏洞对地址…