如果您创建一个新的空纹理,例如
IDirect3DDevice9::CreateTexture 或 D3DXCreateTexture
是否保证用零填充-通过测试在我看来?有人有微软关于此声明的链接吗?我什么也找不到。
不,没有明确的保证(我见过)。事实上,我已经看到了很多相反的行为:来自先前(解除分配)纹理的数据和看似随机的数据出现。
但是,纹理之间的行为会根据纹理在格式中的分配位置而有很大不同。如果 CPU 需要,在系统内存中分配或使用某些共享池可能会导致数据归零。通常,在视频内存中分配时,不会发生这种情况。IDirect3DDevice9::CreateTexture
和之间也可能存在差异D3DXCreateTexture
;D3DX 通常会进行更多的初始化或为此提供选项。
如果您看到纹理显示为零填充,那可能是由于调试版本或新系统造成的。运行其他一些图形应用程序,然后尝试运行发布版本(确保您的系统未设置为 D3D 调试模式)。
如果您查看 DXGI API 和 DX10+ DDI,驱动程序有很多机会将 DXGI/D3D 请求的内存填充为零。话虽这么说,因为没有 API 保证内存为零填充,我不会依赖它。