gpt4 book ai didi

c++ - 关闭 VSync 但在我的 DirectX 9 应用程序中仍然获得 60FPS

转载 作者:太空宇宙 更新时间:2023-11-04 11:54:16 26 4
gpt4 key购买 nike

我有一个 DirectX9 应用程序,它只在屏幕上呈现一个三角形,但无论我是否启用 VSync,我都能获得 60 FPS 的帧速率。这是为什么?

这是我计算 FPS 的代码,但我不知道这是否是它的问题。

GameTimer.h

#pragma once

#include "Windows.h"

class GameTimer {
public:
GameTimer();
~GameTimer(){}

void Update();

float GetFrameTime();

inline float GetFramePerSec(){return framesPerSec;}
inline float GetMillSecPerFrame(){return millSecPerFrame;}

private:
float secsPerCount;
_int64 prevTimeStamp;

float framesPerSec;
float millSecPerFrame;
};

GameTimer.cpp

#include "GameTimer.h"

GameTimer::GameTimer() {

_int64 countsPerSec = 0;
QueryPerformanceFrequency((LARGE_INTEGER*)&countsPerSec);
secsPerCount = 1.0f / (float)countsPerSec;

prevTimeStamp = 0;
QueryPerformanceCounter((LARGE_INTEGER*)&prevTimeStamp);

framesPerSec = 0.0f;
millSecPerFrame = 0.0f;
}

void GameTimer::Update()
{
static float numFrames = 0.0f;
static float timeElapsed = 0.0f;

numFrames += 1.0f;
timeElapsed += GetFrameTime();

if(timeElapsed >= 1.0f)
{
framesPerSec = numFrames;
millSecPerFrame = 1000.0f / numFrames;

numFrames = 0;
timeElapsed = 0;
}
}

float GameTimer::GetFrameTime() {
_int64 currentTimeStamp = 0;
QueryPerformanceCounter((LARGE_INTEGER*)&currentTimeStamp);
float timeDiff = (currentTimeStamp - prevTimeStamp) * secsPerCount;
prevTimeStamp = currentTimeStamp;

return timeDiff;
}

知道它在屏幕上只是一个三角形(没有绘制复杂的东西),如果我关闭 VSync,它应该每秒渲染超过 1000 帧,不是吗?

最佳答案

CreateDevice 调用中,将 D3DPRESENT_PARAMETERS 参数的 PresentationInterval 设置为 D3DPRESENT_INTERVAL_IMMEDIATE

关于c++ - 关闭 VSync 但在我的 DirectX 9 应用程序中仍然获得 60FPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16856115/

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