我正在用C编写我自己的OpenGL和Win32库,并且我正在实现一个限制FPS的函数。要做到这一点,我首先要写一些代码来检查它是否有效,然后我会在稍后将其抽象为函数。我不知道缺了什么,但它不起作用。这是我的当前代码和输出
#include "2DM.h"
#include <time.h>
int main(void) {
WINDOW window = createWindow("WINDOW", 500, 500, WINDOW_NORMAL);
const int FPS_LIMIT = 60;
int initialTime = time(NULL), finalTime, frameCount = 0;
while(window.open) {
if(pollEvents(&window) {
/*
* Events handling
* .........
*/
}
/*
* OpenGL code
* .........
*/
display(&window);
frameCount ++;
finalTime = time(NULL);
int ellapsedTime = finalTime - initialTime;
if(ellapsedTime) {
int fps = frameCount / ellapsedTime;
int sleepMs = (1000 / FPS_LIMIT) - ellapsedTime;
printf("FPS: %inMS to Sleep: %in", fps, sleepMs);
frameCount = 0;
initialTime = finalTime;
Sleep(sleepMs);
}
}
}
我得到的输出是:FPS:
FPS: 5749
MS to Sleep: 15
time()
以整数秒为单位返回时间,这对您尝试执行的操作无效。
例如,目前你每秒钟左右只进入if
一次。sleepMs
也是错误的,因为你减去了不同的单位。