Могу ли я добавить вершины в буфер по умолчанию с помощью UpdateSubresources? ⇐ C++
-
Anonymous
Могу ли я добавить вершины в буфер по умолчанию с помощью UpdateSubresources?
Документация по 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 перезаписывает только весь буфер?
Документация по 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 перезаписывает только весь буфер?
Мобильная версия