在DirectX中,如果要创建VertexBuffer,IndexBuffer或ConstantBuffer,则依赖于ID3D11Buffer interface和ID3D11Device::CreateBuffer。
我想知道的是这个缓冲区在哪里创建了?
是在系统内存还是视频内存中。
使用ID3D11DeviceContext::IASetVertexBuffers设置顶点缓冲区以及IndexBuffer和ConstantBuffer的相应方法时会发生什么。
答案 0 :(得分:3)
在Direct3D 10/11中,应用程序不再指定要在其中创建资源的内存类型(池)。而是指定资源的预期用途,并让运行时(与驱动程序一致)内存管理器)选择能达到最佳性能的内存类型。
无法保证缓冲区等资源的存储位置。
您可以“控制”创建资源的唯一方法是为它们选择正确的D3D11_USAGE
。
D3D11_USAGE_DEFAULT
和D3D11_USAGE_IMMUTABLE
资源可能最终会出现在VRAM中,D3D11_USAGE_DYNAMIC
和D3D11_USAGE_STAGING
位于CPU和GPU都可访问的内存区域。
确保根据他们的需要为您的资源选择最快的使用率
D3D11_USAGE_IMMUTABLE
> D3D11_USAGE_DEFAULT
> D3D11_USAGE_DYNAMIC
> D3D11_USAGE_STAGING