SFML学习纪要
工作需要,近段粗浅看了一下SFML,记录一下!
一、浅见概述
SFML,simple and Fast mulitmedia Library官方网站:http://www.sfml-dev.org/index.php
编译也相对简单,按照自己需要下载源码,32bit 或64bit,Cmake可以轻松编译成功。
SFML是夸平台库。看了看代码,就simple来说名副其实啊。其他没有进行具体测试,也不胡说。
SFML指南对编译和运行都做了详细说明。
二、要点
SFML简要说明
一、Sfml-system
时间获取
时间获取是通过获取当前原子时钟频率,来计算的.但是所获取的频率并非为CPU 频率,而是high-resolution performance counter。
BOOL WINAPI QueryPerformanceFrequency( LARGE_INTEGER *lpFrequency);
若所安装的硬件不支持高精度计数(a high-resolution performance counter),此参数返回值为零,返回的函数结果为zero,否则为nonzero.
QueryPerformanceCounter
函数 头文件为Winbase.h(include Windows.h)
不可复制类
Class SFML_SYSTMEM_API NonCopyable{}
此类为基础类,默认构造函数为保护类型,带参构造和赋值函数为私有类型。
在设计选择时候,一个类是否具有可复制属性是非常重要的。在构造一个类时候是否继承此类是非常有必要考虑的。强烈建议,在写一个类之前,必要时候使用sf::NonCopyable,以防在未来使用中出现潜在错误。
Sf::String
为什么需要重新自定义一个String?
此类能自动实现不同类型和编码直接的句柄转换。它是一个Unicode string(实际上用的是UTF-32,std::basic_string<Uint32> m_string),能兼容世界上任何字体。此类包含了std::string标准类的大部分函数。
二、Sfml-window
提供操作杆操作
键盘操作
Sf::keyboard 提供了键盘状态接口。此类允许用户在任何时间直接访问键盘状态,而不用处理窗口和窗口事件。相比于键盘按下和键盘释放事件来会所,sf:::keyboard能在任何时间检索键盘状态。(你不需要为了知道某键盘是否按下而保存和更新一个bool值),不管键盘按下与否,窗口获取没有获取焦点,事件没有触发,你都可以获得键盘的真实状态。
鼠标操作
同键盘操作类似,此类允许用户直接查询鼠标状态,而不用关心是窗口和事件。于MouseMoved(鼠标移动)和MouseButtonPressed(鼠标按下)以及MouseButtonReleased(鼠标放开)事件操作比较,sf::mouse可以随时检索光标状态和按键状态,并总能得到真实的鼠标状态。
鼠标按键定义了ButtonCount,开放的,可以定义鼠标按键个数。
接口函数可以获取和设置鼠标位置,包括整个桌面鼠标位置和某个窗口上位置。
三、Sfml-graphics
Sf::Transformable
此类是基于二维坐标计算的,无三维Vector3f,需要自己处理添加。
Text
需要指定字体文件,大小等,一个可直接画的类。
stbi-1.33 库
可解析图片类型:
JPEG baseline (no JPEG progressive)
PNG 8-bit only
TGA (not sure what subset, if a subset)
BMP non-1bpp, non-RLE
PSD (composited view only, no extra channels)
GIF (*comp always reports as 4-channel)
HDR (radiance rgbE format)
PIC (Softimage PIC)
还可以转换Iphone格式的PNG到RGB格式。
包含不同格式的颜色转换和一些编码格式,例如huffman编码算法。
Stbi库限制:
// Limitations:
// - no jpeg progressive support
// - non-HDR formats support 8-bit samples only (jpeg, png)
// - no delayed line count (jpeg) -- IJG doesn't support either
// - no 1-bit BMP
// - GIF always returns *comp=4
说明:IJG,全称:Independent JPEG Group 非官方的组织的JPEG图像压缩库。
渲染
渲染状态缓冲策略包括:视点(View),转换(transform),混合模式(Blending mode),纹理(Texture),Shader。在渲染的Draw的过程中,就是根据这些状态判断来,是否更新参数。
四、Sfml-audio
支持格式:
ogg,vaw,flac,aiff,au,raw,paf,svx,nist,ircam,w64,mat4,mat5 pvf,htk,sds,car,wve,mpc2k,rf64。
对基本播放,暂停,停止,循环均有控制。
还可以设置或获取音高或基频,设置立体声。
soundBuffer,数据存在内存中。
soundeSteam,派生类为music,流方式可以避免占用大内存,并几乎无加载延迟。
五、Sfml-network
应用层协议:ftp和http
Sf::Ftp
Sf::Ftp 是一个简单的可以访问FTP服务的客户端,可远程操作文件系统。
使用客户端有四步骤:连接ftp服务,登录,发送命令和断开连接。
SF::Http
传输层协议:tcp和Udp
SF::Tcp
SF::Udp
说明:有bug.
SFML学习纪要的更多相关文章
- Fiddler学习纪要
一.Fiddler支持功能 1.查看几乎所有的浏览器.客户端应用或服务器之间的WEB数据流 2.手动或自动修改任意的请求或响应 3.解密HTTPS数据流以便查看或修改 4.归档捕获到的数据流,支持再不 ...
- vim学习纪要
普通模式 根据屏幕行上下移动. gj gk g0 g^ g$ 移动到行首第一个非空字符 ^ 反向移动到上一单词的词尾 ge 插入模式 粘贴寄存器中内容 <C-r> 可视模式 移动光标的起始 ...
- pytest学习纪要123-针对经常用到的内容详实记录
pytest123 本文主要参考:https://www.cnblogs.com/yoyoketang/tag/pytest 如有侵权,请站内联系我 目录 pytest123 1.setup和tear ...
- 北京设计模式学习组bjdp.org第7次活动(2013.08.04)回顾会纪要
时间:2013.08.04,9am-7pm 地点:北京龙泉寺(北京凤凰岭风景区内) 参加人数:北京龙泉寺信息中心(20人).北京设计模式学习组(9人) 活动要点: 1)寺院巡礼:义工师兄带领参观寺院. ...
- 值得学习的C语言开源项目
值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工 ...
- DICOM:DICOM标准学习路线图(初稿)
题记: DICOM医学图像处理专栏撰写已有两个年头,积累了近百篇文章.起初只是用于记录自己科研.工作中遇到的疑难问题,专注于图像处理(主要是医学图像,这也正是专栏名称最初的由来):后来逐渐延伸到了DI ...
- 值得学习的C/C++开源框架(转)
值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的 ...
- 《阿里巴巴Android编码规范》阅读纪要(二)
版权声明:本文出自汪磊的博客,转载请务必注明出处. 本篇继续上一篇<阿里巴巴Android编码规范>阅读纪要(一) ,还是建议各位同学有时间完整阅读一下<阿里巴巴Android编码规 ...
- python学习-python入门
开始学习python,开始记录. 第一个小程序:登陆系统 功能:1.通过文件名和密码导入用户名和密码~ 2.用户输入用户名和密码 3.将用户输入的用户名进行比对,先判断用户名是否在黑名单里面,如果在黑 ...
随机推荐
- ASIHTTPRequest 框架的导入
刚接触ios 对一切都不熟悉 记录一下ASIHTTPRequest 框架的导入 步骤 以便日后再用 1.首先下载ASIHTTPRequest:点击下载 2.在project中导入下面文件: 导入方式 ...
- JNI之——'cl' 不是内部或外部命令,也不是可执行的程序或批处理文件
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46604315 问题的出现: 今天卸载了VS2010,重装vs2008后.发 ...
- node05---模块
Node.js开发服务器,数据.路由.本地关心的效果,交互: Node.js实际上是极客开发出的一个小玩具,不是银弹.有着别人不具备的怪异特点: 首先,Node不为每个用户开辟一个线程,所以非常单线程 ...
- java9新特性-18-统一的JVM日志系统
1.官方Feature 158: Unified JVM Logging 271: Unified GC Logging 2.使用说明 日志是解决问题的唯一有效途径:曾经很难知道导致JVM性能问题和导 ...
- SVN在vs2013中使用
http://download.csdn.net/download/show_594/9112963 内包含VisualSVN 5.0.1的官方原版安装包及破解文件VisualSVN.Core.L.d ...
- 关于概率算法的问题,不知道逻辑错在哪里,求debug
做个骰子成功几率的分析,投n颗骰子,第一次投成功的几率是a,然后投成功的骰子,需要再投1次,这次成功的几率是b.第二次成功的骰子才算最终成功. 要分析出n颗骰子,最终成功0到n颗的概率. 我写了个算法 ...
- Ambari Confirm Hosts Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).解决 Permanently added 'hdp21,192. ...
- HDU-2303 The Embarrassed Cryptographer 高精度算法(大数取模)
题目链接:https://cn.vjudge.net/problem/HDU-2303 题意 给一个大数K,和一个整数L,其中K是两个素数的乘积 问K的是否存在小于L的素数因子 思路 枚举素数,大数取 ...
- 数据库Flashback学习
最近更新时间:2018/12/18 适用场景 数据库升级.快速构建测试环境.DG中重建主库 前置条件 1. ARCHIVELOG 模式 数据库为 mount 状态下开启,最好指定archive log ...
- 使用 swoole_process 实现 PHP 进程池
swoole_process 主要是用来代替 PHP 的 pcntl 扩展.我们知道 pcntl 是用来进行多进程编程的,而 pcntl 只提供了 fork 这样原始的接口,容易使用错误,并且没有提供 ...