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


Метод 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.
  • Может не быть сопоставлен в настоящее время.
**CopySubresourceRegion** поддерживает только копирование; он не поддерживает растяжение, цвет или смешения. **CopySubresourceRegion** может повторно интерпретировать данные ресурсов между несколькими типами форматов. Дополнительные сведения см. в разделе [Форматирование преобразования с помощью Direct3D 10.1](/windows/win32/direct3d10/d3d10-graphics-programming-guide-resources-block-compression#format-conversion-using-direct3d-101).

Если приложению необходимо скопировать весь ресурс, рекомендуется использовать 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 , должны иметь одинаковые значения количества выборок.
 

Примере

В следующем фрагменте кода из исходной текстуры в область (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

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

ID3D11DeviceContext

ID3D11Resource