SDL汇总
Posted 王嘟嘟_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDL汇总相关的知识,希望对你有一定的参考价值。
0x00 前言
最近看了很多的资料,针对SDL的内容差不多是理解了的,在这篇进行一下汇总。
0x01 链接
0x02 SDL思考
整个SDL实际上是为了适配瀑布式的开发流程,虽然说是从开发的时候提前考虑安全问题以及合规,隐私等问题,但是体量非常大,需要考虑的内容也非常多,并且十分依赖人的参与,没有实现自动化,对于一些小型企业或者一些迭代快速的软件来说就有点难以落地,有两种方案一种是针对SDL进行精简,还有一种方式就是采用其他的安全开发模式,比如说DevSecOps。
0x03 现象
SDL的完整流程主要是针对一个软件从头开始的流程,但是面临的很多问题就是,产品已经发版了,所以在落实SDL的时候,可以将目标从整个软件精简到小的功能块,可以参考PASTA的业务拆分,对单一的业务进行SDL流程
- 威胁建模分析
- 合法合规确认
- 安全编码规范
- 单个功能黑白盒测试
- 最终结果
0x04 提前准备
实际上我们可以不等需要SDL建设的时候才去考虑相对应的流程,可以在进行SDL之前就完成相对应的内容比如:
- 培训文档&PPT
- 编码规范文档
- 常规漏洞威胁表
- 常见功能威胁建模
- 常见威胁内容
- 自定义工具
- 自定义规则
- 合规&合法文档
- 初版应急响应文档
当然以上内容可以等DevSecOps结束后一起整理。
SDL_Delay 影响 SDL_GetTicks
【中文标题】SDL_Delay 影响 SDL_GetTicks【英文标题】:SDL_Delay affects SDL_GetTicks 【发布时间】:2014-08-20 15:49:18 【问题描述】:我正在尝试将 SDL 程序限制为 60 FPS 并使用以下代码计算 FPS:
static const Uint32 min_frame_time = 16;
Uint32 start_time = SDL_GetTicks();
// Rendering stuff...
time_delta = SDL_GetTicks() - start_time;
fps_sum += 1000.0 / (float)time_delta;
fps_count++;
if(fps_count >= fps_max_count)
printf("FPS: %f\n", fps_sum / (float)fps_count);
fps_count = 0;
fps_sum = 0.0;
if(time_delta < min_frame_time)
SDL_Delay(min_frame_time - time_delta);
但似乎 SDL_Delay 以某种方式影响了 SDL_GetTicks 的返回值,因此 time_delta 得到的值是 0 到 3,而当我只删除最后 2 行时,它通常约为 15。
对我来说,这毫无意义。有谁知道怎么回事?
编辑:
上面的代码基本上是我程序的主循环。我首先实现了一个 fps 计数器,方法是在 start_time 中渲染场景之前节省时间,然后计算多个循环的平均 fps,效果很好。
然后,我添加了最后两行以将 fps 限制为 60。因此,如果渲染速度比 min_frame_time 快,则程序应该等待其余时间。但是加上这个之后,除了第一个循环之外,所有循环的SDL_GetTicks()
的结果都变得奇怪了,所以delta变成了我上面提到的这些小值。
【问题讨论】:
我不明白你的问题。您能否对其进行编辑并详细说明您在有没有延迟的情况下看到的内容。另外,是在循环之间吗? 【参考方案1】:根据您所展示的内容,在这里稍微猜测一下。
在启用垂直同步的情况下运行窗口或全屏时,SDL_RenderPresent
将等待垂直同步。此等待将发生在您的定时代码中,因此您会看到 time_delta = 15
附近的值。使用SDL_Delay
,您将手动等待,直到接近或刚好在下一次垂直同步之后,但这种等待超出了您的时间。因此,下一次渲染时,它不必等待,或者不必等待很长时间,下一次 vsync 就会发生,并且您可以更快地运行渲染循环。
【讨论】:
谢谢你的回答,但这里不是这样。我只使用 OpenGL 绘制所有内容,它不会自动等待 VSync。通过禁用一些阴影贴图,我可以获得超过 60 的 FPS。 @FlorianM 好的,不是这样。我会把答案留在这里给其他人看(谁知道呢,这可能对某人有帮助)。【参考方案2】:某些程序,例如 Google Chrome。将 SystemclockResolution 设置为 15ms。 有办法解决这个问题。
Sleep(1) and SDL_Delay(1) takes 15 ms
但如果我理解正确的话,它会减慢 CPU 每 1 毫秒滴答一次。 我希望这可以帮助你,我一直在寻找这方面的信息!
我认为我不应该搞砸这个,也许只是解决它。
【讨论】:
以上是关于SDL汇总的主要内容,如果未能解决你的问题,请参考以下文章
ffmpeg实战教程用SDL播放YUV,并结合ffmpeg实现简易播放器