Инициализация и обновление ресурсов в Direct3D10 и Direct3D11 - SIISII/DirectX GitHub Wiki
Инициализация ресурсов
Ресурс может быть заполнен информацией при его создании самим методом, вызванным для его создания (например, ID3D10Device::CreateBuffer или ID3D11Device::CreateBuffer), для чего ему передаётся адрес структуры типа D3D10_SUBRESOURCE_DATA или D3D11_SUBRESOURCE_DATA. Обе эти структуры идентичны и имеют следующие поля.
-
pSysMem
— адрес исходных данных в памяти. -
SysMemPitch
— расстояние в байтах от начала одной строки двух- или трёхмерной текстуры до следующей строки. Не используется для буферов и одномерных текстур. -
SysMemSlicePitch
— расстояние в байтах от одного среза трёхмерной текстуры до другого; с другими типами ресурсов не используется.
Обновление ресурсов
Метод ID3D10Device::UpdateSubresource или ID3D11DeviceContext::UpdateSubresource позволяет переслать данные в любой ресурс, кроме созданного с видом использования D3D10_USAGE_IMMUTABLE
/D3D11_USAGE_IMMUTABLE
, однако он наиболее эффективен лишь для ресурсов с видом использования D3D10_USAGE_DEFAULT
/D3D11_USAGE_DEFAULT
.
Для изменения содержимого ресурсов с видом использования D3D11_USAGE_DYNAMIC
рекомендуется использовать пару методов ID3D10Buffer::Map и ID3D10Buffer::Unmap, ID3D10Texture1D::Map и ID3D10Texture1D::Unmap, ID3D10Texture2D::Map и ID3D10Texture2D::Unmap, ID3D10Texture3D::Map и ID3D10Texture3D::Unmap или ID3D11DeviceContext::Map и ID3D11DeviceContext::Unmap.