Метод IDirect3DDevice9::StretchRect (d3d9helper.h)

Скопируйте содержимое исходного прямоугольника в целевой прямоугольник. Исходный прямоугольник можно растянуть и отфильтровать по копии. Эта функция часто используется для изменения пропорций видеопотока.

Синтаксис

HRESULT StretchRect(
  [in] IDirect3DSurface9    *pSourceSurface,
  [in] const RECT           *pSourceRect,
  [in] IDirect3DSurface9    *pDestSurface,
  [in] const RECT           *pDestRect,
  [in] D3DTEXTUREFILTERTYPE Filter
);

Параметры

[in] pSourceSurface

Тип: IDirect3DSurface9*

Указатель на исходную поверхность. См. раздел IDirect3DSurface9.

[in] pSourceRect

Тип: const RECT*

Указатель на исходный прямоугольник. Значение NULL для этого параметра приводит к использованию всей исходной поверхности.

[in] pDestSurface

Тип: IDirect3DSurface9*

Указатель на целевую поверхность. См. раздел IDirect3DSurface9.

[in] pDestRect

Тип: const RECT*

Указатель на прямоугольник назначения. Значение NULL для этого параметра приводит к использованию всей области назначения.

[in] Filter

Тип: D3DTEXTUREFILTERTYPE

Тип фильтра. Допустимые значения: D3DTEXF_NONE, D3DTEXF_POINT или D3DTEXF_LINEAR. Дополнительные сведения см. в разделе D3DTEXTUREFILTERTYPE.

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

Тип: HRESULT

Если метод выполнен успешно, возвращаемое значение будет D3D_OK. Если метод завершается сбоем, возвращаемое значение может быть следующим: D3DERR_INVALIDCALL.

Комментарии

Ограничения StretchRect

  • Поддержка драйверов зависит от. См. раздел о поддержке драйверов (ниже), чтобы узнать, какие драйверы поддерживают форматы источника и назначения.
  • Исходная и целевая поверхности должны быть созданы в пуле памяти по умолчанию.
  • Если указана фильтрация, необходимо задать соответствующие ограничения фильтра (см. раздел StretchRectFilterCaps в D3DCAPS9).
  • Растяжение не поддерживается между исходным и целевым прямоугольниками на одной поверхности.
  • Растяжение не поддерживается, если целевая поверхность является открытой поверхностью вне экрана, но источником не является.
  • Вы не растягиваетесь между исходным и целевым прямоугольниками, если любая из поверхностей имеет сжатый формат (см. раздел Использование сжатых текстур (Direct3D 9)).
  • Растяжение поддерживает преобразование цветового пространства из YUV в высокоточный RGBA. Так как поддержка преобразования цвета не поддерживается программными эмуляциями, используйте IDirect3D9::CheckDeviceFormatConversion , чтобы протестировать оборудование для поддержки преобразования цветов.
  • Если исходная или целевая поверхность является поверхностью текстуры (или поверхностью текстуры куба), необходимо использовать драйвер Direct3D 9, поддерживающий D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES (см. раздел D3DDEVCAPS2).
Дополнительные ограничения для поверхностей глубины и набора элементов
  • Исходная и целевая поверхности должны быть простыми поверхностями трафаретов глубины (не текстурами) (см. раздел IDirect3Ddevice9::CreateDepthStencilSurface).
  • Ни те, ни из поверхностей не могут быть удалены.
  • Вся поверхность должна быть скопирована (т. е. вложенная копия не допускается).
  • Преобразование, растягивание и сжатие формата не поддерживаются.
  • StretchRect нельзя вызвать внутри пары BeginScene/EndScene.
Использование StretchRect для понижения целевой платформы отрисовки с несколькими выборками

StretchRect можно использовать для копирования из одной платформы rendertarget в другую. Если исходная платформа rendertarget имеет несколько выборок, это приводит к понижению целевой платформы отрисовки источника. Например, вы можете:

  • Создайте многопримерную платформу отрисовки.
  • Создайте вторую платформу отрисовки того же размера, которая не является несколькими выборками.
  • Скопируйте (с помощью StretchRect многопримерной платформы rendertarget во вторую платформу rendertarget.
Обратите внимание, что использование дополнительной поверхности, связанной с использованием StretchRect для понижения выборки multisample Rendertarget, приведет к повышению производительности.

Поддержка драйверов

Существует множество ограничений в отношении того, какие сочетания поверхностей допустимы для StretchRect. Факторы включают в себя то, является ли драйвер Direct3D 9 или более ранней версией, а также приведет ли операция к растягивание или сжатие. Так как приложения не должны распознавать, является ли драйвер Direct3D 9 драйвером или нет, среда выполнения автоматически установит новое ограничение, D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES ограничение (см. D3DDEVCAPS2) для драйверов Direct3D 9 и более поздних версий.

Драйвер DirectX 8 (без растяжения)
Форматы dest
Текстура Текстура RT RT Внеэкранный режим
Форматы Src Текстура Нет Нет Нет Нет
Текстура RT Нет Да Да Нет
RT Нет Да Да Нет
Внеэкранный режим Да Да Да Да
 
Драйвер DirectX 8 (растяжение)
Форматы dest
Текстура Текстура RT RT Внеэкранный режим
Форматы Src Текстура Нет Нет Нет Нет
Текстура RT Нет Нет Нет Нет
RT Нет Да Да Нет
Внеэкранный режим Нет Да Да Нет
 
Драйвер Direct3D 9 (без растяжения)
Форматы dest
Текстура Текстура RT RT Внеэкранный режим
Форматы Src Текстура Нет Да Да Нет
Текстура RT Нет Да Да Нет
RT Нет Да Да Нет
Внеэкранный режим Нет Да Да Да
 
Драйвер Direct3D 9 (растяжение)
Форматы dest
Текстура Текстура RT RT Внеэкранный режим
Форматы Src Текстура Нет Да Да Нет
Текстура RT Нет Да Да Нет
RT Нет Да Да Нет
Внеэкранный режим Нет Да Да Нет

Требования

   
Целевая платформа Windows
Header d3d9helper.h (включая D3D9.h)
Библиотека D3D9.lib

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

IDirect3DDevice9

IDirect3DDevice9::BeginScene

IDirect3DDevice9::EndScene