Выключил VSync, но все еще получаю 60FPS в моем приложении DirectX 9

У меня есть приложение DirectX9, которое отображает только треугольник на экране, но я получаю частоту кадров 60 кадров в секунду, независимо от того, включен я VSync или нет. Почему это?

Вот код, который я сделал для расчета 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;
}

Зная, что это всего лишь треугольник на экране (никаких сложных вещей не рисуется), он должен рендерить более 1000 кадров в секунду, если у меня отключен VSync, не так ли?

1

Решение

в CreateDevice позвоните, установите PresentationInterval из D3DPRESENT_PARAMETERS параметр для D3DPRESENT_INTERVAL_IMMEDIATE,

1

Другие решения

Если вы работаете под Windows, частота кадров все еще ограничена, если вы смените тему на Windows 7 Basic? (отключите компоновку рабочего стола) Я думаю, что DWM применяет VSync во многих сценариях, некоторые старые программы, которые вызывают переворот в буфере, часто перерабатывают содержимое окна.

0

Вы сами установили предел для монитора, что означает, что графический процессор может работать со скоростью 1000 кадров в секунду, но монитор показывает его со скоростью 60 кадров в секунду.

0
По вопросам рекламы [email protected]