3

我是direct3d和图形编程的新手,根据这个Direct3d编程技巧,我正在编写的程序在每帧应用非平凡计算后每帧更改一次顶点

我应该为这样的任务使用动态缓冲区,但它说它的性能是可以预期的,在网上搜索我发现更新顶点缓冲区的最快方法

根据他的说法,向下滚动到 Xoofx 答案(Sharpdx 的设计者)更新子资源比使用动态缓冲区更好,据我所知,更新子资源仅用于默认缓冲区。

我应该使用哪种用法,什么是(分期)?

如果我决定使用 C++ AMP 进行计算(我知道它使用 gpu 作为处理器)有没有办法将缓冲区使用设置为默认值并仍然使用 C++ AMP 通过 cpu 访问它?

4

1 回答 1

2

您的程序可以使用该函数创建与现有 Direct3D 缓冲区关联的 C++ AMP 数组make_array()

template<typename T, int N>
array<T,N> make_array(const extent& ext, IUnknown* buffer);

Direct3D 缓冲区必须实现该ID3D11Buffer接口。它必须支持原始视图 ( D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS) 并允许SHADER_RESOURCEUNORDERED_ACCESS绑定。缓冲区本身必须具有正确的大小,即范围大小乘以缓冲区类型的大小。

get_buffer()函数支持反向操作,从数组中获取 Direct3D 缓冲区接口。与获取设备时一样,IUnknown必须查询返回的所需接口。

HRESULT hr = S_OK;
array<int, 1> arr(1024);
CComPtr<ID3D11Buffer> buffer;
IUnknown* unkBuf = get_buffer(arr);
hr = unkBuf->QueryInterface(__uuidof(ID3D11Buffer), reinterpret_cast<LPVOID*>(&buffer));
于 2013-05-15T17:42:09.180 回答