Метод IDirect3DDevice9::StretchRect (d3d9.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 можно использовать для копирования из одной платформы rendertarget в другую. Если исходная платформа rendertarget имеет несколько выборок, это приводит к понижению целевой платформы отрисовки источника. Например, вы можете:
- Создайте многопримерную платформу отрисовки.
- Создайте вторую платформу отрисовки того же размера, которая не является несколькими выборками.
- Скопируйте (с помощью StretchRect многопримерной платформы rendertarget во вторую платформу 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 | d3d9.h (включая D3D9.h) |
Библиотека | D3D9.lib |