游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5580|回复: 9

dxut效率很低吗

[复制链接]

3

主题

31

帖子

31

积分

注册会员

Rank: 2

积分
31
发表于 2007-12-12 21:28:00 | 显示全部楼层 |阅读模式
一个Timer类 原封不动的从一个框架下拷到DXUT里 fps在原来的框架有1000左右 到DXUT里只有59左右
原来以为是线程安全的问题,把DXUT中g_bThreadSafe = false
依然如此= =

类定义如下
class CGameTime
{
private:
        INT64       m_frequency;
        INT64       m_curTime;
        INT64       m_lastTime;
        INT64       m_lastUpdate;
    INT64       m_FPSUpdateInterval;
        UINT        m_numFrames;
    float         m_runTime;
    float         m_timeElapsed;
    float         m_fps;
    BOOL      m_bStop;
public:
        CGameTime(void);
        ~CGameTime(void);
        void  StartTime();
    void  StopTime();
    void  UpdateTime();

    BOOL  IsStopped()        {  return   m_bStop;    }
    float GetFPS()               {  return   m_fps;         }
    float GetRunTime()        {  return   m_runTime;  }
    float GetElapsedTime()  {  return   m_bStop ? 0.0f : m_timeElapsed; }

};


///cpp
#include ".\gametime.h"
CGameTime::CGameTime(void)
{               
        QueryPerformanceFrequency( (LARGE_INTEGER *)&m_frequency );
    m_curTime           =  0;
        m_lastTime          =  0;
        m_lastUpdate       =  0;
    m_numFrames     = 0;
    m_runTime           = 0;   
        m_timeElapsed    = 0;  
        m_fps                  =  0.0f;
    m_FPSUpdateInterval   =  m_frequency >> 1;
   
        m_bStop  =   TRUE;
}

CGameTime::~CGameTime(void)
{

}

void CGameTime::StartTime()
{
         if ( !m_bStop )
    {
        return;
    }
    QueryPerformanceCounter( (LARGE_INTEGER *)&m_lastTime );
    m_bStop = FALSE;
}
void CGameTime::StopTime()
{
        if ( m_bStop )
    {
        return;
    }
    INT64   stopTime = 0;
    QueryPerformanceCounter( (LARGE_INTEGER *)&stopTime );
    m_runTime           +=  (float)(stopTime - m_lastTime) / (float)m_frequency;
    m_bStop                =   TRUE;

}
void CGameTime::UpdateTime()
{
        if ( m_bStop )
    {
        return;
    }
    // Get the current time
    QueryPerformanceCounter( (LARGE_INTEGER *)&m_curTime );
   
    m_timeElapsed    =  (float)(m_curTime - m_lastTime) / (float)m_frequency;
    m_runTime         +=   m_timeElapsed;

    // Update FPS
    m_numFrames++;
    if ( m_curTime - m_lastUpdate  >=  m_FPSUpdateInterval )
    {
        float currentTime   =  (float)m_curTime      /  (float)m_frequency;
        float lastTime        =  (float)m_lastUpdate  /  (float)m_frequency;
        m_fps  =  (float)m_numFrames / (currentTime - lastTime);

        m_lastUpdate    =  m_curTime;
        m_numFrames  =  0;
    }
    m_lastTime = m_curTime;
}

3

主题

31

帖子

31

积分

注册会员

Rank: 2

积分
31
 楼主| 发表于 2007-12-12 21:29:00 | 显示全部楼层

Re:dxut效率很低吗

怎么就会有这么大差异呢
太奇怪了

3

主题

31

帖子

31

积分

注册会员

Rank: 2

积分
31
 楼主| 发表于 2007-12-12 21:31:00 | 显示全部楼层

Re:dxut效率很低吗

对了
我的显卡是ATI MOBILITY RADEOM X700

1

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2007-12-13 17:58:00 | 显示全部楼层

Re:dxut效率很低吗

他默认是跟着你的屏幕刷新率走,哪然只有几十帖啦

3

主题

31

帖子

31

积分

注册会员

Rank: 2

积分
31
 楼主| 发表于 2007-12-13 20:48:00 | 显示全部楼层

Re: Re:dxut效率很低吗

twooooo: Re:dxut效率很低吗

他默认是跟着你的屏幕刷新率走,哪然只有几十帖啦


在哪设的这个参数呢
我的Timer类是自己写的 计算时间方式应该是两次Update间如果大于一个值就更新fps
难道是说整个消息循环是跟着屏幕刷新频率保持一致吗

还是不太明白

8

主题

390

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-12-13 21:00:00 | 显示全部楼层

Re:dxut效率很低吗

垂直同步。

3

主题

31

帖子

31

积分

注册会员

Rank: 2

积分
31
 楼主| 发表于 2007-12-13 22:04:00 | 显示全部楼层

Re: Re:dxut效率很低吗

ReallyBigBug: Re:dxut效率很低吗

垂直同步。

原来如此
谢谢啦~

3

主题

31

帖子

31

积分

注册会员

Rank: 2

积分
31
 楼主| 发表于 2007-12-13 22:46:00 | 显示全部楼层

Re:dxut效率很低吗

如何在dxut中关闭垂直同步呢
我追踪了下代码
FullScreen_RefreshRateInHz 应该是设的 D3DPRESENT_RATE_DEFAULT
然后我在显卡中关闭了垂直同步fps也没有得到提高 依然过不了60

那应该如何设置呢

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2007-12-15 00:32:00 | 显示全部楼层

Re:dxut效率很低吗

creen_RefreshRateInHz和垂直同步(synchronize vertical retrace)不是一个东西-_-#
好久没用DXUT了,应该加上这个就可以:
public void ModifyDeviceSettings(DeviceSettings settings, Caps caps)
{
   ..........
   settings.presentParams.PresentationInterval = PresentInterval.Immediate;
   ..........
}
PresentationInterval默认值是one

ps:这个是C#版本的dxut,c++应该差不多

3

主题

31

帖子

31

积分

注册会员

Rank: 2

积分
31
 楼主| 发表于 2007-12-15 12:59:00 | 显示全部楼层

Re:dxut效率很低吗

谢谢~~
改好了

还想问一句
是通过什么方式或者说是在哪一步来控制来控制垂直同步的呢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-17 18:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表