游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3658|回复: 5

d3d初始化时如何将刷新率强制设置为60Hz?

[复制链接]

12

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2010-9-20 22:04:00 | 显示全部楼层 |阅读模式
           D3DPRESENT_PARAMETERS dp;

        dp.BackBufferFormat = D3DFMT_A8R8G8B8;
        dp.BackBufferHeight = 480;
        dp.BackBufferWidth = 640;
        dp.hDeviceWindow = hWnd;
        dp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
        dp.FullScreen_RefreshRateInHz = 60 ;
        dp.SwapEffect = D3DSWAPEFFECT_COPY ;


这样设置下来实际刷新率竟然为120Hz

0

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2010-9-21 16:48:00 | 显示全部楼层

Re:d3d初始化时如何将刷新率强制设置为60Hz?

自己写一个限制帧率的模块 时间短过一定量就睡眠

1

主题

24

帖子

31

积分

注册会员

Rank: 2

积分
31
发表于 2010-9-21 17:49:00 | 显示全部楼层

Re:d3d初始化时如何将刷新率强制设置为60Hz?

这个是设置的显示器的刷新率,不是你的渲染帧速

3

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
QQ
发表于 2010-9-26 23:09:00 | 显示全部楼层

Re:d3d初始化时如何将刷新率强制设置为60Hz?

简单,以D3D框架为例,首先程序开头
DWORD curTime = timeGetTime();
DWORD elapsetime = 0;
其次WinMain的while循环中
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    {
       TranslateMessage(&msg);
       DispatchMessage(&msg);
     }
     else{
        //设置帧率为30帧/秒并调用渲染函数
        elapsetime = timeGetTime() - curTime;
        if(elapsetime < 25)
        {Sleep(5);}
        else
        {
        curTime = timeGetTime();
        elapsetime = 0;
        Render();//渲染场景
        }
}

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2010-9-28 10:28:00 | 显示全部楼层

Re:d3d初始化时如何将刷新率强制设置为60Hz?

你到底是想设置显示器的刷新率还是游戏的帧率?
如果是显示器的刷新率需要开启全屏模式,刷新率需要与显示器匹配,如液晶显示器一般都是60Hz或者65Hz,强制设置成100Hz就会失败,使用时最好先枚举下显示器支持的显示模式再进行设置.
窗口模式下也可以改变显示器的刷新率,但是这样设置可能会影响桌面上其他的程序运行,如果你的程序不幸崩溃,可能会无法正常还原原来的显示模式和刷新率.
如果想设置游戏的帧率,习惯上称作"限帧",一般都是自己写一个控制模块,可以参考楼上的代码.另外timeGetTime和GetTickCount函数并不是十分精确,如果想把帧率限制到很高的数值(前提是你程序能跑到那么高的话),需要使用QueryPerformanceCounter 一族的函数.

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2010-9-28 10:29:00 | 显示全部楼层

Re:d3d初始化时如何将刷新率强制设置为60Hz?

你代码里这种实现的是垂直同步
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-6 11:31

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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