Инициализация и обновление ресурсов в 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.