2012-06-05 36 views
1

如果您创建了一个新的空纹理,例如direct3d是否初始化新​​创建的纹理

的IDirect3DDevice9 :: CreateTexture 或 D3DXCreateTexture

它是保证被填充零 - 因为在我看来,通过测试? 有没有人有关于这个微软的声明的链接?我找不到任何东西。

+3

我没有看到有关新纹理初始化的明确意见。 MSDN通常描述API/D3D调用的任何其他行为,因此,如果您没有看到有关填充纹理的任何内容,那么它很可能不会发生。此外,我会说填充任何新的纹理是一个重大的性能问题,因为纹理通常是预渲染的,清理内存没有意义。如果我是你,我会建议新的纹理内容没有初始化。 – real4x

回答

2

不,没有明确的保证(我见过)。事实上,我已经看到了一些相反的行为:来自先前(释放)纹理的数据和看似随机的数据出现。

但是,纹理之间的行为差​​异很大,这取决于纹理在格式中的分配位置。如果CPU需要,分配到系统内存或某些共享池可能会导致数据清零。通常,在视频内存中分配时,不会发生这种情况。 IDirect3DDevice9::CreateTextureD3DXCreateTexture之间也可能有差异; D3DX通常会做更多的初始化或为此提供选项。

如果您看到纹理显示为零填充,这可能是由于调试构建或新系统。运行一些其他图形应用程序,然后尝试运行发布版本(确保您的系统未设置为D3D调试模式)。

1

如果您看看DXGI API和DX10 + DDI,驱动程序有很多机会通过DXGI/D3D填满请求的内存。这就是说,由于没有关于内存被填满的API保证,我不会依赖它。