2013-05-31 4 views
1

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

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

0

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

+0

Спасибо за ответ. Я не знаю, как вы отключаете настольную композицию, но я сменил ее на Windows 7 Basic, и проблема все еще происходит - все еще происходит около 60FPS. – Danny

+0

Некоторые драйверы предлагают возможность принудительного VSync. Есть ли что-нибудь в вашей панели управления nVidia/AMD/ATi/Intel? – jameswilddev

+0

Я использую графическую карту nVidia, и я использовал панель управления, чтобы отключить VSync – Danny

0

Вы получили лимит монитора это сам, а это значит, что ГПУ может быть, может выполняется в 1000 FPS, но монитор показать на 60FPS