gpt4 book ai didi

c++ - 每台机器上的 SDL 2.0 恒定 FPS

转载 作者:太空宇宙 更新时间:2023-11-04 13:20:29 25 4
gpt4 key购买 nike

你好,我正在用 SDL2 开发一款很棒的游戏,我添加了一个 FPS 调节器以使其在每台机器上都能流畅运行,但后来我创建了一个示例程序来输出 fps(不是调节,只是输出以查看电流的功率机器运行 ) 我在两台不同的计算机上测试过它,一台是 12 岁的,第二台是新的,旧的有 512 mb ram 而新的有 16gb 并且他们都向我展示了这个示例代码在 62.5 FPS 下运行,我很确定我没有正确计算我的 fps,请问有什么问题吗?

#include<SDL.h>
#include<iostream>
#include<sstream>
#include<string>

int main(int argc, char *argv[])
{
SDL_Init(SDL_INIT_VIDEO);
SDL_Window *window = nullptr;
Uint32 startclock = 0;
Uint32 deltaclock = 0;
Uint32 currentFPS = 0;
window = SDL_CreateWindow("Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN);
SDL_Renderer *renderTarget = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
SDL_Texture *texture = NULL;

bool isRunning = true;
SDL_Event ev;

while (isRunning)
{
startclock = SDL_GetTicks();
while (SDL_PollEvent(&ev) != 0)
{
if (ev.type == SDL_QUIT)
isRunning = false;
}
SDL_RenderClear(renderTarget);
SDL_RenderCopy(renderTarget, texture, NULL, NULL);
SDL_RenderPresent(renderTarget);

deltaclock = SDL_GetTicks() - startclock;
startclock = SDL_GetTicks();

currentFPS = 1000.0f / deltaclock;
std::string x;
std::stringstream ss;
ss << currentFPS;
ss >> x;
x = "FPS: " + x;
SDL_SetWindowTitle(window, x.c_str());
}
return 0;
}

最佳答案

很明显,评论中提到的 LogicStuff 的 VSYNcflags。但还有更多:

计时器的准确性和您的计算不会削减它。假设您得到 1 毫秒的增量(您可以获得的最小增量),您将得到 1000/1 作为结果。如果绘制速度快于 1 毫秒,则计算结果为 1000/0。幸运的是你没有在这里崩溃但得到了 0 个结果。

您最好计算在 1 秒的时间内渲染了多少帧。

另请注意,仅仅因为 SDL_Ticks() 返回一个以毫秒为单位的值,并不意味着准确报告的增量是 1 毫秒的精度。我希望它能在大约 10 分钟内报告增量。 10 毫秒步长(或者更糟)。 SDL_Ticks 不是高性能计数器。

关于c++ - 每台机器上的 SDL 2.0 恒定 FPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35527336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com