游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6065|回复: 11

[问题]关于D3D中Texture的内存消耗问题

[复制链接]

17

主题

165

帖子

167

积分

注册会员

Rank: 2

积分
167
发表于 2006-6-27 19:52:00 | 显示全部楼层 |阅读模式
当我使用CreateTextureFromFileEx创建Texture后,内存开销十分巨大,
因为我使用了D3DPOOL_MANAGED来管理,而不是D3DPOOL_DEFAULT,知道原因后,我改成了D3DPOOL_DEFAULT,从而降低了程序的内存消耗。
但在有些老机子上却又出现了创建失败的问题。不知道怎么解决,还望指点。
谢谢先。

17

主题

165

帖子

167

积分

注册会员

Rank: 2

积分
167
 楼主| 发表于 2006-6-27 20:32:00 | 显示全部楼层

Re: [问题]关于D3D中Texture的内存消耗问题

先自己回一个,
在网上找了下,知道了内存开销差距的原因:
  D3DPOOL_DEFAULT   将在显存中创建帖图,它是不能被LockRect的; 只能通过CopyRects()和UpdateTexture()来更新。设备Reset()的时候必须被释放。渲染的效率最高,但使用起来最麻烦。   
  D3DPOOL_MANAGED   在显存中创建帖图,在内存中也创建了一个备份,可以被LockRect,修改的是内存中的位图。系统会自动更新显存中的位图。设备Reset()的时候不必须被释放。   
  D3DPOOL_SYSTEMMEM   只在内存中创建贴图,不在显存中创建。可以被LockRect设备Reset()的时候不必须被释放。渲染的效率最低。

问题继续,当我设成D3DPOOL_MANAGED时内存开销很大,但当程序最小化后(我是窗口程序)内存就降下来了,我怎么才能不用最小化而直接降低内存呢?
虽说用IDirect3DDevice9::EvictManagedResources可以用,但好象它只针对显存,而不是我期望的内存。
有没有什么办法降低内存开销啊?

13

主题

978

帖子

978

积分

高级会员

Rank: 4

积分
978
发表于 2006-6-27 20:42:00 | 显示全部楼层

Re:[问题]关于D3D中Texture的内存消耗问题

老机器上创建失败是因为显存不够
可以考虑使用折衷方案——创建失败的时候就用Managed
反正内存开销是必然的,不是在显存就是在内存(或都有)

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-6-28 23:28:00 | 显示全部楼层

Re:[问题]关于D3D中Texture的内存消耗问题

你可以自己写一个简单的资源管理器嘛。。。多长时间不用的资源就自动释放,用到的时候再加载

22

主题

274

帖子

274

积分

中级会员

Rank: 3Rank: 3

积分
274
发表于 2006-6-29 13:53:00 | 显示全部楼层

Re:[问题]关于D3D中Texture的内存消耗问题

做DXT压缩可以省出很多.

12

主题

76

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2006-6-29 23:02:00 | 显示全部楼层

Re:[问题]关于D3D中Texture的内存消耗问题

我也碰到D3DPOOL_MANAGED时内存开销很大,但当程序最小化后(我是窗口程序)内存就降下来了的现象,而且是降到原来的1/4左右的大小。

另外,请问楼上的DXT压缩 用那个接口实现,怎么实现?会不会大大增加cpu负荷?

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-6-29 23:12:00 | 显示全部楼层

Re:[问题]关于D3D中Texture的内存消耗问题

DXT是显卡硬件支持的格式,创建的时候指定DXT格式就行了,只是DXT质量一般,而且对alpha支持很差

12

主题

76

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2006-6-29 23:35:00 | 显示全部楼层

Re:[问题]关于D3D中Texture的内存消耗问题

嗯,我找到了,是修改一下D3DXCreateTextureFromFileEx的D3DFORMAT Format参数实现DXT压缩的吧?

12

主题

76

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2006-6-29 23:37:00 | 显示全部楼层

Re:[问题]关于D3D中Texture的内存消耗问题

呵呵,jk20012001已经回答了。thx

17

主题

165

帖子

167

积分

注册会员

Rank: 2

积分
167
 楼主| 发表于 2006-6-30 16:07:00 | 显示全部楼层

Re:[问题]关于D3D中Texture的内存消耗问题

谢谢各位了,在设置D3DFORMAT时使用D3DFMT_DXTn,可以很好的进行资源压缩,但不知道使用这种FORMAT,对显卡的兼容性好不?会不会有比较老的机子不支持的情况呢?

再说些题外话,我用的是一个子线程来加载资源,这样主线程就不会像卡死一般的载入资源.
不知道这种方法好不?
我使用这种方法载入时,有一定几率出现D3D渲染不出东西来的情况,子线程正常退出,主线程也在跑,就是渲染不出东西来,有点迷茫啊.
当需要载入的资源很多时,不知道各位是怎么解决的?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 20:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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