关于这个网上搜集过不少资料,但是还是自己用起来的时候感触比较深,这里要说的只有几点
1、性能。用D3DPOOL_DEFFULT后发现性能大幅提升,加载最快超过100%,同样数量纹理,托管内存速度会慢很多。不仅加载,渲染效率也大幅提升,至少50%。
2、代价。这个是重点,所谓有得必有失,为什么HGE和CEGUI的实现里面,都使用了托管内存?这就是D3DPOOL_DEFFULT需要付出的代价。具体来看看:
①一旦创建不能被更改,也就是说LockRect什么的就别想了,但也不是完全不能更改,D3D里面有UpdateTexture(具体什么名字懒得翻了)可以通过一张D3DPOOL_SYSTEMMEM的纹理来进行更新。由于某些地方确实想LockRect,试过UpdateTexture到另一种纹理上然后再锁,结果直接蓝屏了……原因懒得去找了。
②设备丢失时需要手动恢复,这个其实实现起来倒不是很难,比起不能LockRect来说好处理很多,自己也尝试实现过了。
谁要知道怎么锁定D3DPOOL_DEFFULT的纹理的话(只为读取)分享一下,不胜感激。