Directx 11如何在常量缓冲区中设置Texture2D

我有一个texture2D包装在我的常量缓冲区中。 我如何使用ID3D11DeviceContext :: UpdateSubresource或其他方法设置纹理?

常量缓冲区不能以这种方式使用,常量缓冲区是全局常量的持有者,不能用于缓冲区\纹理数据types。

在一个常量缓冲区中打包一个纹理是非常有必要的。

常量缓冲区有一个非常小的尺寸限制,不是很小,但我真的不认为,即使你可以放入一个纹理,它会有很大的用处。

常量缓冲区也进行了优化,以便在GPU上随时可以有一些在飞行中,所以如果在其中包含纹理,将会对性能造成很大的影响,因为最终会在GPU周围飞来飞去纹理的副本内存。

您希望保持缓冲区大小不变,以免在驱动程序仍在GPU上运行时使用更新的所有常量缓冲区重命名内存。

组织常量缓冲区

常量缓冲区减less了更新着色器常量所需的带宽,允许将着色器常量分组在一起并同时进行提交,而不是单独调用每个常量单独提交。

有效使用常量缓冲区的最好方法是根据更新频率将着色器variables组织到常量缓冲区中 。 这允许应用程序最小化更新着色器常量所需的带宽。 例如,着色器可能会声明两个常量缓冲区,并根据它们的更新频率来组织每个数据:需要在每个对象基础上更新的数据(如世界matrix)被分组为一个常量缓冲区,为每个对象更新。 这与表征场景的数据是分开的,因此可能会更less地更新(当场景改变时)。

一些阅读你在恒定的缓冲区