游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3900|回复: 7

请问如何解决窗口大小变化后刷新的问题

[复制链接]

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-11-27 14:51:00 | 显示全部楼层 |阅读模式
我的D3D程序在窗口最小化或者失去焦点以后就无法刷新了,全屏的话切换到桌面也不能再还原,3D图像无法继续显示,窗口内一片黑色。
我记得Opengl里有个函数glutReshapeFunc(函数名)来设定窗口大小变化后的刷新,请问如何在D3D中设置才能解决这个问题。是在创建D3D设备的时候设置什么属性的值还是要用其他方法。
达人救我~~ [em7]

2

主题

683

帖子

687

积分

高级会员

Rank: 4

积分
687
发表于 2008-11-27 21:35:00 | 显示全部楼层

Re:请问如何解决窗口大小变化后刷新的问题

在dx10以前的版本,存在设备丢失的概念。

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2008-11-27 23:28:00 | 显示全部楼层

Re:请问如何解决窗口大小变化后刷新的问题

查了下,好像真有这回事。。
下面是找到的说明:

“微软的D3D设备可以处在操作状态或放弃状态;操作状态是设备的正常的状态,设备按照预期来运行和表现所有的粉刷。当一个事件发生时,设备会转换到放弃状态,例如在满屏模式下丢失键盘焦点,导致粉刷变成不可能。丢失状态是所有粉刷操作平静失败的表现,这意味着粉刷操作不能返回成功代码,即使是在粉刷操作失败的情况下(The lost state is characterized by the silent failure of all rendering operations, which means that the rendering methods can return success codes even though the rendering operations fail);在这种情况下,IDirect3DDevice9:resenter将返回错误代码D3DERR_DEVICELOST。

根据设计,能导致设备变成丢失状态的全套场景是不确定的,某些典型的例子包括焦点丢失,例如当用户按下ALT+TAB或一个系统对话框被初始化时,设备也可以由于电源管理事件而丢失,或者当另外一个程序采用满屏操作时;另外任何来自IDirect3DDevice9::Reset的失败都将导致设备进入丢失状态。

所有继承自IUnknow的方法都可保证在设备丢失之后正常工作。在设备都是之后,每个函数通常有三个选择:

1. 失败并返回D3DERR_DEVICELOST;这意味着程序需要认识丢失的设备,以便于程序能标识那些不能按照预期发生的事情。

2. 安静地失败,返回S_OK或者其他的返回值-如果一个函数安静地失败,程序通常不能区分是成功的结果还是安静地失败”

关键是怎么解决啊~~

3

主题

19

帖子

30

积分

注册会员

Rank: 2

积分
30
发表于 2008-11-28 00:06:00 | 显示全部楼层

Re:请问如何解决窗口大小变化后刷新的问题

恢复的时候重新创建设备和相关的资源

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2008-11-28 01:28:00 | 显示全部楼层

Re:请问如何解决窗口大小变化后刷新的问题

哇哈哈哈,终于成功了~~
下面解释一下经过测试的结果:
在窗口模式下,由于不是独占显卡,因此在切换到别的窗口的过程中没有发生显示设备丢失,而发生了输入设备丢失(就是键盘和鼠标被别的程序占用了),这样再切回来,键鼠就不好使了(如果用的API似乎仍然好使,用的IDirectInputDevice8创建的就不好使了),这时界面其实正常刷新,只是控制不了才误认为是画面静止不刷新;在全屏模式下切到桌面会同时发生显示设备丢失和输入设备丢失,解决显示设备丢失的问题很麻烦(我已经不打算解决了,窗口模式算了),而解决输入设备丢失的问题比较简单只要执行g_directinput_device->Acquire();
感谢2、4楼大虾指点。

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2008-11-29 20:49:00 | 显示全部楼层

Re:请问如何解决窗口大小变化后刷新的问题

设备丢失和设备能力是dx9相当让人抓狂的限制....
不过看了lz的资料真长见识了..粉刷这个词太牛b了..我刷..我刷..我刷刷刷...

0

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2009-3-30 21:07:00 | 显示全部楼层

Re:请问如何解决窗口大小变化后刷新的问题

呵呵 学习了~
三楼那文字是软件翻译的吧..很强大

1

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2009-4-8 20:20:00 | 显示全部楼层

Re:请问如何解决窗口大小变化后刷新的问题

即使在窗口模式下,也是有设备丢失的情况的
比如你开着程序  然后待机  之后再打开计算机
这时就会发生设备丢失
其实设备丢失解决也听容易的,而且这是模式化解决方法,只要处理过一次以后基本都一样处理就行的
网上很多这方面的资料
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 14:17

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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