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


Метод ID3D10Device::CopySubresourceRegion (d3d10.h)

Скопируйте регион из исходного ресурса в целевой ресурс.

Синтаксис

void CopySubresourceRegion(
  [in] ID3D10Resource  *pDstResource,
  [in] UINT            DstSubresource,
  [in] UINT            DstX,
  [in] UINT            DstY,
  [in] UINT            DstZ,
  [in] ID3D10Resource  *pSrcResource,
  [in] UINT            SrcSubresource,
  [in] const D3D10_BOX *pSrcBox
);

Параметры

[in] pDstResource

Тип: ID3D10Resource*

Указатель на целевой ресурс (см. ID3D10Resource).

[in] DstSubresource

Тип: UINT

Индекс подресурсов назначения.

[in] DstX

Тип: UINT

Координата x левого верхнего угла области назначения.

[in] DstY

Тип: UINT

Координата Y левого верхнего угла области назначения.

[in] DstZ

Тип: UINT

Координата z левого верхнего угла области назначения. Для подресурса 1D или 2D это значение должно быть равно нулю.

[in] pSrcResource

Тип: ID3D10Resource*

Указатель на исходный ресурс (см. ID3D10Resource).

[in] SrcSubresource

Тип: UINT

Индекс подресурсов источника.

[in] pSrcBox

Тип: const D3D10_BOX*

Трехмерное поле (см . D3D10_BOX), определяющее исходный подресурс, который можно скопировать. Если значение РАВНО NULL, копируется весь исходный подресурс. Поле должно помещаться в исходном ресурсе.

Пустое поле приводит к тому, что операция не будет. Поле пусто, если верхнее или равно нижнему значению, или левое значение больше или равно правому значению, или значение переднего края больше или равно обратному значению. Если поле пусто, CopySubresourceRegion не выполняет операцию копирования.

Возвращаемое значение

None

Remarks

Поле источника должно быть в пределах размера исходного ресурса. Целевое расположение является абсолютным значением (не относительным значением). Расположение назначения может быть смещено от исходного расположения; однако размер региона для копирования (включая расположение назначения) должен соответствовать целевому ресурсу.

Если ресурсы являются буферами, все координаты находятся в байтах; Если ресурсы являются текстурами, все координаты находятся в текселях.

D3D10CalcSubresource — это вспомогающая функция для вычисления индексов подресурсов.

CopySubresourceRegion выполняет копирование на GPU (аналогично memcpy ЦП). Как следствие, исходные и целевые ресурсы должны соответствовать следующим критериям:

  • Должны быть разными подресурсами (хотя они могут относиться к одному ресурсу).
  • Должен иметь один и тот же тип.
  • Должны иметь совместимые форматы (форматы должны быть идентичными или принадлежать к одной группе типов). Например, DXGI_FORMAT_R32G32B32_FLOAT текстуру можно скопировать в DXGI_FORMAT_R32G32B32_UINT текстуру, так как оба этих формата находятся в группе DXGI_FORMAT_R32G32B32_TYPELESS. Начиная с Direct3D 10.1 , CopySubresourceRegion может копировать данные между несколькими типами форматов. Дополнительные сведения см. в разделе Преобразование формата с помощью Direct3D 10.1.
  • Может не быть сопоставлен в данный момент.
CopySubresourceRegion поддерживает только копирование; он не поддерживает преобразование растяжения, цветового ключа, смешения или форматирования. Начиная с Direct3D 10.1 , CopySubresourceRegion может переосмыслить данные ресурсов между несколькими типами форматов. Дополнительные сведения см. в разделе Преобразование формата с помощью Direct3D 10.1.

Если приложению необходимо скопировать весь ресурс, рекомендуется использовать id3D10Device::CopyResource .

CopySubresourceRegion — это асинхронный вызов, который среда выполнения может добавить в очередь буфера команд. Это асинхронное поведение позволяет удалить остановки конвейера, которые могут возникать при копировании данных. Дополнительные сведения см. в разделе Рекомендации по производительности .

Различия между Direct3D 10 и Direct3D 10.1:

Direct3D 10 имеет следующие ограничения.

  • Ресурс трафарета глубины нельзя использовать в качестве назначения.
  • Неизменяемый ресурс нельзя использовать в качестве назначения.
  • Многопроцессную текстуру нельзя использовать в качестве источника или назначения.
В Direct3D 10.1 добавлена поддержка следующих функций:
  • В качестве источника или назначения можно использовать буфер трафарета глубины.
  • Вы можете использовать многопроцессные ресурсы в качестве источника и назначения только в том случае, если оба источника и назначения имеют одинаковое количество и качество нескольких выборок. Если источник и назначение отличаются по количеству и качеству нескольких выборок или если источник является несколькими выборками, а назначение не является несколькими выборками (или наоборот), вызов ID3D10Device::CopySubresourceRegion завершается ошибкой .
  • Вы можете копировать между несжатые и сжатые ресурсы. Во время копирования преобразования формата, указанные в разделе Преобразование формата с помощью Direct3D 10.1 , поддерживаются автоматически. Несжатый ресурс должен быть по крайней мере предварительно структурирован и типизирован. Кроме того, необходимо учитывать разницу между виртуальным и физическим размером MIP-карт.
 
Примечание Если вы используете CopySubresourceRegion с буфером трафарета глубины или ресурсом с несколькими выборками, необходимо скопировать весь подресурс. Кроме того, необходимо передать значение 0 в параметры DstX, DstY и DstZ , а значение NULL — в параметр pSrcBox . Кроме того, исходный и целевой ресурсы, представленные параметрами pSrcResource и pDstResource соответственно, должны иметь одинаковые значения количества выборок.
 

Примере

Следующий фрагмент кода копирует поле (120 100),(200 220)) из исходной текстуры в область (130 120),(210 240) в целевой текстуре.

D3D10_BOX sourceRegion;
sourceRegion.left = 120;
sourceRegion.right = 200;
sourceRegion.top = 100;
sourceRegion.bottom = 220;
sourceRegion.front = 0;
sourceRegion.back = 1;

pd3dDevice->CopySubresourceRegion( pDestTexture, 0, 130, 120, 0, pSourceTexture, 0, &sourceRegion );

Обратите внимание, что для двухd текстуры передняя и задняя всегда имеют значение 0 и 1 соответственно.

Требования

Требование Значение
Целевая платформа Windows
Header d3d10.h
Библиотека D3D10.lib

См. также раздел

ID3D10Device

Интерфейс ID3D10Resource