Метод 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, копируется весь исходный подресурс. Поле должно соответствовать исходному ресурсу.
Пустое поле приводит к no-op. Поле пусто, если верхнее или равно нижнему значению, или левое значение больше или равно правому значению, или переднее значение больше или равно обратному значению. Если поле пусто, CopySubresourceRegion не выполняет операцию копирования.
Возвращаемое значение
Никакой
Замечания
Исходное поле должно находиться в пределах размера исходного ресурса. Смещения назначения (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.
- Может не быть сопоставлено в настоящее время.
CopySubresourceRegion поддерживает только копирование; он не поддерживает ни один растянутый, цветной ключ или смесь. CopySubresourceRegion может переосмыслеть данные ресурса между несколькими типами форматов. Дополнительные сведения см. в разделе Преобразование формата с помощью Direct3D 10.1.
Если приложение должно скопировать весь ресурс, рекомендуется использовать вместо этого ID3D11DeviceContext::CopyResource.
CopySubresourceRegion является асинхронным вызовом, который может быть добавлен в очередь буфера команд, это пытается удалить киоски конвейеров, которые могут возникать при копировании данных. Дополнительные сведения о киосках конвейеров см. в рекомендации по повышению производительности.
Пример
Следующий фрагмент кода копирует поле (расположено в (120 100),(200 220)) из исходной текстуры в регион (10 20),(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 );
Обратите внимание, что для 2D-текстуры передний и задний имеют значение 0 и 1 соответственно.
Требования
Требование | Ценность |
---|---|
целевая платформа | Виндоус |
заголовка | d3d11.h |
библиотеки |
D3D11.lib |