在 DirectX 中带有未初始化纹理的样本的结果是什么?
What is the result of sample with an uninitialized texture in DirectX?
OpenGL 对此有 its description,但是 DirectX 呢?
我猜,样本结果是float(0, 0, 0, 0)
,或者是driver导致崩溃。不管怎样,这只是我的猜测,或者如果我自己测试的话,这只是部分案例。我想说清楚。
未初始化的纹理意味着,没有通过D3DDevice::CreateTexture2D(), and also, did not map nor update resource传递任何数据。
如果可以的话我想把关于DirectX 11版本的描述拿来
是的,所有值都为 0,如果您从空纹理中采样,则相同。
我不记得我是在哪里读到它的,但我在 MSDN 文档中知道它,我也时不时地这样做,因为我在开始时分配了大部分 textures\buffers\views 并填充在我走的时候,如果我从 null 或未初始化的样本中采样,那么它只会读取 0.
来自 Create2DTexture 函数(您链接的):
If you don't pass anything to pInitialData, the initial content of the memory for the resource is undefined. In this case, you need to write the resource content some other way before the resource is read.
未定义可以是任何意思,驱动程序将确定确切的行为。它不太可能崩溃,但对于未定义的行为,一切皆有可能。来自此纹理的样本当然不能 保证 是 float4(0,0,0,0)
,因为它是未绑定的纹理。
这类似于访问未初始化的系统内存。内容可能是从先前分配相同内存的操作写入的已填充内存(取决于分配器的行为)。我建议如果你想要一致的行为,要么使用未绑定的纹理,要么初始化内容。
OpenGL 对此有 its description,但是 DirectX 呢?
我猜,样本结果是float(0, 0, 0, 0)
,或者是driver导致崩溃。不管怎样,这只是我的猜测,或者如果我自己测试的话,这只是部分案例。我想说清楚。
未初始化的纹理意味着,没有通过D3DDevice::CreateTexture2D(), and also, did not map nor update resource传递任何数据。
如果可以的话我想把关于DirectX 11版本的描述拿来
是的,所有值都为 0,如果您从空纹理中采样,则相同。
我不记得我是在哪里读到它的,但我在 MSDN 文档中知道它,我也时不时地这样做,因为我在开始时分配了大部分 textures\buffers\views 并填充在我走的时候,如果我从 null 或未初始化的样本中采样,那么它只会读取 0.
来自 Create2DTexture 函数(您链接的):
If you don't pass anything to pInitialData, the initial content of the memory for the resource is undefined. In this case, you need to write the resource content some other way before the resource is read.
未定义可以是任何意思,驱动程序将确定确切的行为。它不太可能崩溃,但对于未定义的行为,一切皆有可能。来自此纹理的样本当然不能 保证 是 float4(0,0,0,0)
,因为它是未绑定的纹理。
这类似于访问未初始化的系统内存。内容可能是从先前分配相同内存的操作写入的已填充内存(取决于分配器的行为)。我建议如果你想要一致的行为,要么使用未绑定的纹理,要么初始化内容。