在DirectX中具有未初始化纹理的样本的结果是什么?

时间:2016-11-09 05:03:11

标签: directx directx-11

OpenGL对此有its description,但DirectX怎么样?

在我的猜测中,示例结果为float(0, 0, 0, 0),或者由驱动程序引起崩溃。无论如何,它只是我的猜测,或部分案例,如果我自己只测试它。我想说清楚。

未初始化的纹理表示没有传递D3DDevice::CreateTexture2D()的任何数据,也没有传递mapupdate resource

如果可能,我想了解有关DirectX 11版本的说明。

2 个答案:

答案 0 :(得分:0)

是的,如果从空纹理中采样,则所有值的值都为0。

我无法记住我在哪里阅读它,但我知道它在MSDN文档中,我也偶尔会这样做,因为我在开始时分配了大部分的textures \ buffers \ views并填充为I如果我从null或未初始化的样本然后它只读0。

答案 1 :(得分:0)

从Create2DTexture函数(您链接):

  

如果未向pInitialData传递任何内容,则资源的内存的初始内容未定义。在这种情况下,您需要在读取资源之前以其他方式编写资源内容。

未定义可能意味着什么,驱动程序将确定确切的行为。它不太可能会崩溃,但与未定义的行为一样,一切皆有可能。来自此纹理的样本肯定不是保证float4(0,0,0,0),因为它具有未绑定的纹理。

这类似于访问未初始化的系统内存。内容可能是从先前已分配相同内存的操作中写入的内存(取决于分配器的行为)。我建议如果你想要一致的行为,要么使用未绑定的纹理,要么初始化内容。