Могу ли я добавить вершины в буфер по умолчанию с помощью UpdateSubresources?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Могу ли я добавить вершины в буфер по умолчанию с помощью UpdateSubresources?

Сообщение Anonymous »


Документация по UpdateSubresources находится здесь. Описания параметров настолько минималистичны, что не очень полезны для тех, кто впервые использует эту функцию (например, для меня).

UINT64 встроенный UpdateSubresources( _In_ ID3D12GraphicsCommandList *pCmdList, _In_ ID3D12Resource *pDestinationResource, _In_ ID3D12Resource *pIntermediate, UINT64 ПромежуточноеСмещение, _In_ UINT FirstSubresource, _In_ UINT NumSubresources, _In_ D3D12_SUBRESOURCE_DATA *pSrcData ); Я пытаюсь следовать примерам кода из книги Введение в программирование 3D-игр с помощью DirectX 12.

Я создал буфер вершин и хочу «рисовать» на сенсорном экране и добавлять треугольники в этот буфер. Создание буфера находится в этих функциях ниже, в основном скопированных из кода книги. Аргумент size достаточно велик, чтобы вместить, скажем, 10000 вершин. Давайте предположим, что мне не хватает места в буфере. Я просто пытаюсь обновить его новыми поступающими данными Vertex.

com_ptr create_default_buffer(ID3D12Device* устройство, размер uint64_t) { буфер com_ptr; CD3DX12_HEAP_PROPERTIES heap_props (D3D12_HEAP_TYPE_DEFAULT); auto res_desc = CD3DX12_RESOURCE_DESC::Buffer(размер); auto hr = устройство->CreateCommitedResource(&heap_props, D3D12_HEAP_FLAG_NONE, &res_desc, D3D12_RESOURCE_STATE_COMMON, nullptr, __uuidof(буфер), buffer.put_void()); check_hresult (час); возвратный буфер; } com_ptr create_upload_buffer(устройство ID3D12Device*, размер uint64_t) { буфер com_ptr; CD3DX12_HEAP_PROPERTIES heap_props (D3D12_HEAP_TYPE_UPLOAD); auto res_desc = CD3DX12_RESOURCE_DESC::Buffer(размер); auto hr = устройство->CreateCommitedResource(&heap_props, D3D12_HEAP_FLAG_NONE, &res_desc, D3D12_RESOURCE_STATE_GENERIC_READ, // ?? nullptr, __uuidof(буфер), buffer.put_void()); check_hresult (час); возвратный буфер; } Теперь допустим, у меня есть новые данные Vertex в std::vector, которые я хочу добавить в буферы? Как мне использовать UpdateSubresources для этого? Возможно ли это, или UpdateSubresources перезаписывает только весь буфер?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»