游戏开发论坛

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

Up-front

[复制链接]

10

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2010-11-29 10:02:00 | 显示全部楼层 |阅读模式
之前在查看SDK DOC的时候看到过这样一段话,原文如下
  1. Note that unlike previous versions of Direct3D, the version 9 runtime will automatically evict some
  2. managed resources before giving up on a failed unmanaged resource allocation for a lack of video memory,
  3. but this can potentially create additional fragmentation and even force a resource into a sub-optimal
  4. location( a static texture in non-local video memory for example ). Again, it is best to allocate all
  5. required unmanaged resources up-front and before using any managed ones.
复制代码


现在我不理解的就是最后一句:Again, it is best to allocate all required unmanaged resources up-front and before using any managed ones.
我知道这句话是教我们怎样来解决显存不足的问题,但是我不知道在程序中应该怎样具体操作?
希望大家能帮帮我,如果能提供相关伪代码将不甚感激 [em6]

10

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 发表于 2010-12-13 08:12:00 | 显示全部楼层

Re:Up-front

自己再顶一下,难道没人遇到过类似的问题吗?

45

主题

1163

帖子

1165

积分

金牌会员

Rank: 6Rank: 6

积分
1165
发表于 2010-12-13 08:50:00 | 显示全部楼层

Re:Up-front

Again, it is best to allocate all required unmanaged resources up-front and before using any managed ones.

我理解是: 一个最好的选择是在使用任何托管资源之前预先创建所有非托管的资源.

10

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 发表于 2010-12-13 11:04:00 | 显示全部楼层

Re: Re:Up-front

小小C: Re:Up-front

Again, it is best to allocate all required unmanaged resources up-front and before using any managed...


如果这样的话,那不就跟在发生设备丢失时对于用POOL_DEFAULT加载的资源所做的处理一样吗?!还是我又理解错了?
在我的一个DEMO中我也做了这样的处理,但是在D3DXIntersect()的地方也依旧随机的出现导致崩溃的问题。我做过一些测试,基本上可以断定这个问题跟显存的资源管理有关。但是一直没有找到合适的解决办法,这个问题已经困扰我有两个多月了。。。。

这里有关于那个DEMO的一些描述信息。
http://bbs.gameres.com/showthread.asp?postid=967397
/*****************************************************
是调试用的信息。好像是因为我加载的贴图太多了,所以出现了这样的警告。
我想弄清楚的是removed texture with timestamp和allocated surface after 2 tries这两条信息到底说明了什么。比如说是video memory or AGP memory 不够了,还是别的什么。。。

PS1:在我的一个DEMO中,做碰撞检测(大模型,通常面数在10W以上,贴图占用内存较大)的时候有时候会随机的在D3DXIntersect()出现地址访问冲突,这个冲突能直接导致程序崩溃,我在想这个冲突的产生会不会跟这两条信息有关?因为我用同一个demo加载小模型和少量贴图(小模型,面数不超过3W,贴图占用内存较小)的情况下,D3DXIntersect()从未出过问题。

PS2:不只是用一个较大的模型文件做过测试,所以问题应该不是出现在模型文件身上。

PS3:我有一朋友是建模人员,他在MAX里有时候选取这样的大模型时,也会出现MAX崩溃的问题,但MAX下出现这样情况的几率小很多。
/*****************************************************

注:这个DEMO(32bit,理论内存使用上限好像是3.54G吧,具体多少记不清了,也忘了在哪看过了,反正是不到4G)在不加载任何MANAGED资源的情况下占用的内存大约是24M,加载MANAGED资源(MESH和贴图,在硬盘占用的空间约为1.3G)后占用的内存大约是2.56G。这个DEMO并非游戏,对MIPMAP并没有要求,所以加载贴图时我用在Mipmap level上设置的是1,但即使是这样内存也占用了2.56G。

45

主题

1163

帖子

1165

积分

金牌会员

Rank: 6Rank: 6

积分
1165
发表于 2010-12-13 12:40:00 | 显示全部楼层

Re:Up-front

D3DXIntersect 会锁定传入的MESH,依次对MESH的三角面与射线进行相交测试,会不会在这一操作的同时,你对该MESH做了别的操作?

10

主题

55

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 发表于 2010-12-13 15:15:00 | 显示全部楼层

Re:Up-front

不会,因为我在做检测的时候是另外克隆了一个MESH,然后用克隆的MESH做的检测,所以不会出现对同一个MESH的访问冲突
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-30 11:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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