[ QueryPerformanceCounter() 이용하여 GetTickCount() 보다 더 정확한 프레임 측정 2 ]
(1초.)
근데 이렇게 까지는 할 필요 없고.
보통은 다음 방법과 같이 쓴다.
float PerformanceCountPerFrame = QueryPerformanceFrequency / frameCount;
이게 최초에 시스템이 켜질때 초기화 되고.
이값은 변하면 안된다.
frameCount 이건 사용자가 원하는 프레임.
앞에 const 붙이는 것도 한 방편이 될거다.
그다음으로
매번 프레임을 측정하는데
float FrameGap = QueryPerformanceCounter(현재) - QueryPerformanceCounter(이전);
으로 값을 구한후
if( FrameGap > PerformanceCountPerFrame ) 이라면
Render를 호출후에
QueryPerformanceCounter(이전) = QueryPerformanceCounter(현재)값을 대입한다.
그게 아니라면 스킵해서 다음 측정할떄까지 대기.
//////////////////////////////////////////////////////////////////////////////
LARGE_INTEGER TimeBefore; // 초기 초당 카운터 값
LARGE_INTEGER TimeAfter; // 초당 카운터 변화 값
LARGE_INTEGER FrameInfor; // 프레임 정보
double Time = 0; // 초당 카운터 누적 값
int Count = 0; // 카운터
const int frame = 60; // 초당 60 프레임
LARGE_INTEGER TimeAfter; // 초당 카운터 변화 값
LARGE_INTEGER FrameInfor; // 프레임 정보
double Time = 0; // 초당 카운터 누적 값
int Count = 0; // 카운터
const int frame = 60; // 초당 60 프레임
QueryPerformanceFrequency( &FrameInfor ); // 초당 정보.
QueryPerformanceCounter( &TimeBefore ); // 초당 카운터 초기값
QueryPerformanceCounter( &TimeBefore ); // 초당 카운터 초기값
const double PerFrame = (double)FrameInfor.QuadPart /frame; // 초당 프레임 간격 설정.
printf( "Test : %f \n", PerFrame );
while( true )
{
QueryPerformanceCounter( &TimeAfter ); // 초당 현재 카운터 변화값
Time = (double)TimeAfter.QuadPart -(double)TimeBefore.QuadPart; // 현재값 - 이전값
while( true )
{
QueryPerformanceCounter( &TimeAfter ); // 초당 현재 카운터 변화값
Time = (double)TimeAfter.QuadPart -(double)TimeBefore.QuadPart; // 현재값 - 이전값
// 설정 프레임 간격시 호출 ( 60프레임으로 설정 했다면. 1 ~ 60 프레임 )
if( PerFrame < Time )
{
TimeBefore = TimeAfter; // 이전값 현재값으로 갱신
printf( "Count Frame : %d, Time : %f \n", Count++, Time );
if( frame == Count ) break; // 1초라면 종료
}
}
{
TimeBefore = TimeAfter; // 이전값 현재값으로 갱신
printf( "Count Frame : %d, Time : %f \n", Count++, Time );
if( frame == Count ) break; // 1초라면 종료
}
}
printf( "Time 1Second \n " );
추가 링크 :
'[ Programing ] > API' 카테고리의 다른 글
문자 변환 ( 멀티 바이트(ANSI) -> 유니 코드 ) (0) | 2010.02.01 |
---|---|
외부 프로그램 실행 함수 (0) | 2010.02.01 |
하트 그리기 (0) | 2009.12.29 |
[프레임] QueryPerformanceCounter() 이용하여 GetTickCount() 보다 더 정확한 프레임 측정1 (0) | 2009.12.24 |
[ 기초 ] 메시지 박스 MessageBox(); (0) | 2009.12.24 |