Поделиться через


Метод 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 является асинхронным вызовом, который может быть добавлен в очередь буфера команд, это пытается удалить киоски конвейеров, которые могут возникать при копировании данных. Дополнительные сведения о киосках конвейеров см. в рекомендации по повышению производительности.

ПримечаниеПрименяется только к аппаратному 9_x уровня компонентов если вы используете ID3D11DeviceContext::UpdateSubresource или CopySubresourceRegion для копирования из промежуточного ресурса в ресурс по умолчанию, можно повреждено содержимое назначения. Это происходит при передаче исходного поля null и если исходный ресурс имеет разные измерения от значений целевого ресурса или используется смещение назначения (x, y и z). В этой ситуации всегда передайте исходное поле, которое является полным размером исходного ресурса.
 
ПримечаниеПрименяется только к аппаратному 9_x уровня компонентов нельзя использовать CopySubresourceRegion для копирования текстур тома mipmapped.
 
ПримечаниеПрименяется только к уровням компонентов 9_x вложенных ресурсов, созданных с флагом D3D11_BIND_DEPTH_STENCIL, можно использовать только в качестве источника для CopySubresourceRegion.
 
Примечание Если вы используете CopySubresourceRegion с буфером элементов глубины или многофакторным ресурсом, необходимо скопировать весь вложенный ресурс. В этой ситуации необходимо передать значение 0 DstX, DstYи параметры DstZ и NULL параметру pSrcBox. Кроме того, исходные и целевые ресурсы, представленные pSrcResource и параметров pDstResource, должны иметь одинаковые значения счетчика выборок.
 

Пример

Следующий фрагмент кода копирует поле (расположено в (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

См. также

ID3D11DeviceContext

ID3D11Resource