Метод ID3D11DeviceContext::CopySubresourceRegion (d3d11.h)
Скопируйте регион из исходного ресурса в целевой ресурс.
Синтаксис
void CopySubresourceRegion(
[in] ID3D11Resource *pDstResource,
[in] UINT DstSubresource,
[in] UINT DstX,
[in] UINT DstY,
[in] UINT DstZ,
[in] ID3D11Resource *pSrcResource,
[in] UINT SrcSubresource,
[in, optional] const D3D11_BOX *pSrcBox
);
Параметры
[in] pDstResource
Тип: ID3D11Resource*
Указатель на целевой ресурс (см. ID3D11Resource).
[in] DstSubresource
Тип: UINT
Целевой индекс подресурса.
[in] DstX
Тип: UINT
Координата x левого верхнего угла области назначения.
[in] DstY
Тип: UINT
Координата Y левого верхнего угла области назначения. Для подресурса 1D это значение должно быть равно нулю.
[in] DstZ
Тип: UINT
Координата Z левого верхнего угла области назначения. Для подресурса 1D или 2D это должно быть ноль.
[in] pSrcResource
Тип: ID3D11Resource*
Указатель на исходный ресурс (см. ID3D11Resource).
[in] SrcSubresource
Тип: UINT
Индекс исходного подресурса.
[in, optional] pSrcBox
Тип: const D3D11_BOX*
Указатель на трехмерное поле (см . D3D11_BOX), определяющее исходный подресурс, который можно скопировать. Если значение РАВНО NULL, копируется весь исходный подресурс. Поле должно помещаться в исходном ресурсе.
Пустое поле приводит к тому, что операция будет недоступна. Поле пусто, если верхнее значение больше или равно нижнему значению, левое значение больше или равно значению справа либо переднее значение больше или равно обратному значению. Если поле пусто, CopySubresourceRegion не выполняет операцию копирования.
Возвращаемое значение
None
Remarks
Поле источника должно быть в пределах размера исходного ресурса. Конечные смещения (x, y и z) позволяют смещению исходного поля при записи в целевой ресурс; Однако размеры исходного поля и смещения должны быть в пределах размера ресурса. Если попытаться скопировать за пределы целевого ресурса или указать поле источника, которое больше исходного ресурса, поведение CopySubresourceRegion будет неопределенным. Если вы создали устройство, поддерживающее уровень отладки, выходные данные отладки сообщают об ошибке при этом недопустимом вызове CopySubresourceRegion . Недопустимые параметры для CopySubresourceRegion приводят к неопределенному поведению и могут привести к неправильной отрисовке, обрезке, без копирования или даже удалению устройства отрисовки.
Если ресурсы являются буферами, все координаты находятся в байтах; Если ресурсы являются текстурами, все координаты находятся в текселях. D3D11CalcSubresource — это вспомогающая функция для вычисления индексов подресурсов.
CopySubresourceRegion выполняет копирование на GPU (аналогично memcpy ЦП). Как следствие, исходные и целевые ресурсы:
- Должны быть разными подресурсами (хотя они могут относиться к одному и тому же ресурсу).
- Должен быть одного типа.
- Должны иметь совместимые форматы DXGI (идентичные или из одной группы типов). Например, DXGI_FORMAT_R32G32B32_FLOAT текстуру можно скопировать в DXGI_FORMAT_R32G32B32_UINT текстуру, так как оба этих формата находятся в группе DXGI_FORMAT_R32G32B32_TYPELESS. CopySubresourceRegion может копировать данные между несколькими типами форматов. Дополнительные сведения см. в разделе Преобразование формата с помощью Direct3D 10.1.
- Может не быть сопоставлен в настоящее время.
Если приложению необходимо скопировать весь ресурс, рекомендуется использовать ID3D11DeviceContext::CopyResource .
CopySubresourceRegion — это асинхронный вызов, который может быть добавлен в очередь буфера команд. Это позволяет устранить застои конвейера, которые могут возникнуть при копировании данных. Дополнительные сведения о приостановках конвейера см. в разделе Рекомендации по производительности.
Примере
В следующем фрагменте кода из исходной текстуры в область (10,20,200),(90,140) в конечной текстуре копируется поле (120,100),(200),(90,140) из исходной текстуры.D3D11_BOX sourceRegion;
sourceRegion.left = 120;
sourceRegion.right = 200;
sourceRegion.top = 100;
sourceRegion.bottom = 220;
sourceRegion.front = 0;
sourceRegion.back = 1;
pd3dDeviceContext->CopySubresourceRegion( pDestTexture, 0, 10, 20, 0, pSourceTexture, 0, &sourceRegion );
Обратите внимание, что для двухd-текстуры спереди и назад заданы значения 0 и 1 соответственно.
Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Header | d3d11.h |
Библиотека | D3D11.lib |