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 也都可能占用显存。