首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

DX 换纹理图片的开销是不是很大,该怎么解决

2012-04-03 
DX 换纹理图片的开销是不是很大CEGUI用DX做的渲染在给StaitcImage频繁换图片的时候很卡(别问我为什么,策划

DX 换纹理图片的开销是不是很大
CEGUI用DX做的渲染
在给StaitcImage频繁换图片的时候很卡
(别问我为什么,策划就是这么设计的)

一共有50张 2513*1396大小的图片
每次随机显示10张

一开始
我就在每次随机了图片序号之后
读好了图片 
然后用完了就把图片销毁了
这样每次 在随机的时候都很卡很卡
因为每次都要重新读图 然后销毁

后来我一次性把50张图读进来了
结果我很莫名。。
因为我不知道读进来的图片是在显存还是内存
我的理解大概就是放图片的地方满了
因为我一步一步的跟断点读取图片都是一样的代码肯定不会错
我把这些图片名字和位置换了(大小不变)
每次读到第20张的时候就报错
于是猜想可能是哪满了。

但是如果一次性把图片读进来 随机选择的时候就不卡


网上有人说DX在换纹理图片的时候消耗很大
我也不知道现在改如何解决。
是不是可以考虑
把这50张图 整合一下
变成10张图。读的时候截个rect就行。


[解决办法]
嗯,的确是说显存不足了,可能你的显卡显存比较少。CEGUI的论坛里面有过类似的帖子,那个人用的是集成显卡,加载图片多了就报错了。

我猜想CEGUI内部是用D3DPOOL_DEFAULT来加载资源的,所以资源多了就会出现显存不足的错误,改成D3DPOOL_MANAGED或许可以解决问题,因为系统会根据显存的使用情况适当的决定把D3DPOOL_MANAGED资源存放在显存中还是暂存在内存中,并且会根据具体的情况随时调整,所以不会出现显存不足的情况。

CEGUI是开源的,所以你可以试着修改一下CEGUI的纹理加载函数看看。
[解决办法]
楼主读了20张就满了可能是由于mipmap的缘故?由于建立贴图的时候没有禁止mipmap,所以自动生成了几级mipmap占了内存?可以把mipmap禁用看看。

其他vertex buffer, index buffer, render target 也都可能占用显存。

探讨
他说的是动态复制纹理数据那个,以前DDraw用的比较多,3D里面不怎么推荐。

热点排行