如何:以编程方式初始化纹理
可以在创建对象期间初始化纹理,也可以在创建对象后以编程方式填充该对象。 本主题提供了几个示例,演示如何初始化使用不同类型的用法创建的纹理。 此示例假定你已了解如何 创建纹理。
默认用法
最常见的使用类型是默认用法。 若要填充默认纹理 (使用 D3D11_USAGE_DEFAULT) 创建的纹理,可以:
调用 ID3D11Device::CreateTexture2D 并初始化 pInitialData 以指向从应用程序提供的数据。
或
调用 ID3D11Device::CreateTexture2D 后,使用 ID3D11DeviceContext::UpdateSubresource 使用应用程序提供的指针中的数据填充默认纹理。
动态使用情况
若要填充动态纹理 (使用 D3D11_USAGE_DYNAMIC) 创建的纹理:
- 调用 ID3D11DeviceContext::Map 时,通过传入D3D11_MAP_WRITE_DISCARD来获取指向纹理内存的指针。
- 将数据写入内存。
- 完成写入数据后,调用 ID3D11DeviceContext::Unmap 。
暂存使用情况
使用D3D11_USAGE_STAGING) 创建的过渡纹理 (填充过渡纹理:
- 调用 ID3D11DeviceContext::Map 时,通过传入 D3D11_MAP_WRITE 来获取指向纹理内存的指针。
- 将数据写入内存。
- 完成写入数据后,调用 ID3D11DeviceContext::Unmap 。
然后,过渡纹理可用作 ID3D11DeviceContext::CopyResource 或 ID3D11DeviceContext::CopySubresourceRegion 的 源参数,以填充默认或动态资源。
相关主题