在DirectX中使用未初始化纹理进行采样的结果是什么?

在DirectX中使用未初始化纹理进行采样的结果是什么?,directx,directx-11,Directx,Directx 11,OpenGL对此有自己的看法,但DirectX呢 在我看来,示例结果是float(0,0,0,0),或者由驱动程序引起碰撞。不管怎样,这只是我的猜测,或者只是我自己测试的部分情况。我想说清楚 未初始化的纹理意味着,没有传递任何数据,也没有或 如果可能的话,我想对DirectX 11版本进行描述。是的,如果从空纹理采样,所有值都将为0 我不记得我在哪里读过,但我知道它在MSDN文档中,我也经常这样做,因为我在开始时分配了大多数纹理\buffers\views,然后边走边填充,如果我从空或未初始化的

OpenGL对此有自己的看法,但DirectX呢

在我看来,示例结果是
float(0,0,0,0)
,或者由驱动程序引起碰撞。不管怎样,这只是我的猜测,或者只是我自己测试的部分情况。我想说清楚

未初始化的纹理意味着,没有传递任何数据,也没有或


如果可能的话,我想对DirectX 11版本进行描述。

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


我不记得我在哪里读过,但我知道它在MSDN文档中,我也经常这样做,因为我在开始时分配了大多数纹理\buffers\views,然后边走边填充,如果我从空或未初始化的纹理采样,则它的读数为0。

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


我记不起我在哪里读过它,但我知道它在MSDN文档中,我也经常这样做,因为我在开始时分配了大多数纹理\缓冲区\视图,并在进行填充时进行填充,如果我从null或未初始化采样,那么它只读取0。

来自Create2DTexture函数(您链接的):

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

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


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

从Create2DTexture函数(您链接的):

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

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


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

他问的不是未绑定的纹理,而是内容尚未初始化的纹理。它仍然返回0,不是吗?我甚至说“如果我从null或未初始化的示例中采样,那么它只会读取0。”我刚刚测试了它,得到float4(0,0,0,0),您的驱动程序会返回float4(0,0,0,0)和您的示例。这并不意味着每个人的意志,甚至你的意志在不同的情况下都会。看到我的答案了。这很有趣,只是因为我已经做了两次重写,3次不同的GPU,2次来自AMD,1次来自Nvida,同样的事情也发生了。比如在SRV被填满之前阅读,或者这是一种特殊情况?不管怎样谢谢,就像我说的有趣!没有未初始化的SRV。。。CreateShaderResourceView始终对其进行完全初始化。如果您的意思是从指向未初始化资源的SRV读取,是的,它适用于所有资源类型,那么无法保证从未初始化资源读取中得到什么。通常它是0,但我以前见过它不在的地方。这样做是不好的做法-如果需要零,只需解除资源绑定。他问的不是未绑定的纹理,而是内容尚未初始化的纹理。它仍然返回0,不是吗?我甚至说“如果我从null或未初始化的示例中采样,那么它只会读取0。”我刚刚测试了它,得到float4(0,0,0,0),您的驱动程序会返回float4(0,0,0,0)和您的示例。这并不意味着每个人的意志,甚至你的意志在不同的情况下都会。看到我的答案了。这很有趣,只是因为我已经做了两次重写,3次不同的GPU,2次来自AMD,1次来自Nvida,同样的事情也发生了。比如在SRV被填满之前阅读,或者这是一种特殊情况?不管怎样谢谢,就像我说的有趣!没有未初始化的SRV。。。CreateShaderResourceView始终对其进行完全初始化。如果您的意思是从指向未初始化资源的SRV读取,是的,它适用于所有资源类型,那么无法保证从未初始化资源读取中得到什么。通常它是0,但我以前见过它不在的地方。这样做是不好的做法——如果需要零,只需解除资源绑定。