msdn 文档解释说,在 directx 11 中,有多种方法可以以编程方式填充 directx 11 纹理:
(1) 使用默认使用纹理创建纹理并使用内存中的数据对其进行初始化
(2)使用动态使用创建纹理,使用DeviceContext Map获取指向纹理内存的指针,写入它,然后使用Unmap指示您已完成(此时我猜它已复制到gpu)
(3) 使用 staging 使用创建纹理,并按照与动态纹理相同的步骤,但遵循调用 ID3D11DeviceContext.CopyResource 以使用此 staging 纹理依次填充(非不可变)默认或动态纹理。
但是文档根本没有解释每种方法的优缺点,而且我对directx还是很陌生,所以对我来说根本不清楚。
在directx 11中以编程方式创建纹理的每种方法的优缺点是什么?
旁注:我已经读过在暂存纹理的上下文中,从 gpu读回的内容没有缓冲,因此您必须自己进行双缓冲。但我不知道这是否准确,以及它是否适用于使用 staging 纹理(甚至它的真正含义)的写作。
第二个注意事项: Map 方法文档说它获取指向子资源中数据的指针,并拒绝 GPU 访问该子资源。当 GPU 想要访问其底层数据已被 Map 调用的纹理时,它会做什么?地摊?(我问是因为这听起来像是我询问的利弊的一部分)