Método IDirect3DDevice9::StretchRect (d3d9helper.h)
Copie o conteúdo do retângulo de origem para o retângulo de destino. O retângulo de origem pode ser estendido e filtrado pela cópia. Essa função geralmente é usada para alterar a taxa de proporção de um fluxo de vídeo.
Sintaxe
HRESULT StretchRect(
[in] IDirect3DSurface9 *pSourceSurface,
[in] const RECT *pSourceRect,
[in] IDirect3DSurface9 *pDestSurface,
[in] const RECT *pDestRect,
[in] D3DTEXTUREFILTERTYPE Filter
);
Parâmetros
[in] pSourceSurface
Tipo: IDirect3DSurface9*
Ponteiro para a superfície de origem. Consulte IDirect3DSurface9.
[in] pSourceRect
Tipo: const RECT*
Ponteiro para o retângulo de origem. Um NULL para esse parâmetro faz com que toda a superfície de origem seja usada.
[in] pDestSurface
Tipo: IDirect3DSurface9*
Ponteiro para a superfície de destino. Consulte IDirect3DSurface9.
[in] pDestRect
Tipo: const RECT*
Ponteiro para o retângulo de destino. Um NULL para esse parâmetro faz com que toda a superfície de destino seja usada.
[in] Filter
Tipo: D3DTEXTUREFILTERTYPE
Tipo de filtro. Os valores permitidos são D3DTEXF_NONE, D3DTEXF_POINT ou D3DTEXF_LINEAR. Para obter mais informações, consulte D3DTEXTUREFILTERTYPE.
Valor retornado
Tipo: HRESULT
Se o método for bem-sucedido, o valor retornado será D3D_OK. Se o método falhar, o valor retornado poderá ser: D3DERR_INVALIDCALL.
Comentários
Restrições de StretchRect
- O suporte ao driver varia. Consulte a seção sobre o suporte ao driver (abaixo) para ver quais drivers dão suporte a quais formatos de origem e destino.
- As superfícies de origem e destino devem ser criadas no pool de memória padrão.
- Se a filtragem for especificada, você deverá definir as tampas de filtro apropriadas (consulte StretchRectFilterCaps em D3DCAPS9).
- Não há suporte para alongamento entre retângulos de origem e destino na mesma superfície.
- Não há suporte para alongamento se a superfície de destino for uma superfície simples fora da tela, mas a origem não for.
- Muitos não se alongam entre retângulos de origem e destino se uma das superfícies estiver em um formato compactado (consulte Usando texturas compactadas (Direct3D 9)).
- O alongamento dá suporte à conversão de espaço em cores de YUV apenas para RGBA de alta precisão. Como o suporte à conversão de cores não é compatível com a emulação de software, use IDirect3D9::CheckDeviceFormatConversion para testar o hardware para obter suporte à conversão de cores.
- Se a superfície de origem ou destino for uma superfície de textura (ou uma superfície de textura de cubo), você deverá usar um driver Direct3D 9 que dê suporte a D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES (consulte D3DDEVCAPS2).
- As superfícies de origem e destino devem ser superfícies de estêncil de profundidade simples (não texturas) (consulte IDirect3DDevice9::CreateDepthStencilSurface).
- Nenhuma das superfícies pode ser descartada.
- Toda a superfície deve ser copiada (ou seja: cópias de sub-retângulo não são permitidas).
- Não há suporte para conversão de formato, alongamento e redução.
- StretchRect não pode ser chamado dentro de um par BeginScene/EndScene.
Você pode usar StretchRect para copiar de um rendertarget para outro. Se o rendertarget de origem for multisampled, isso resultará na diminuição do rendertarget de origem. Por exemplo, você pode:
- Crie um rendertarget multisampled.
- Crie um segundo rendertarget do mesmo tamanho, que não seja multisampled.
- Copie (usando StretchRect o rendertarget multisample para o segundo rendertarget.
Suporte de driver
Há muitas restrições sobre quais combinações de superfície são válidas para StretchRect. Os fatores incluem se o driver é um driver Direct3D 9 ou mais antigo e se a operação resultará em alongamento/redução. Como os aplicativos não devem reconhecer se o driver é um driver Direct3D 9 ou não, o runtime definirá automaticamente um novo limite, D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES limite (consulte D3DDEVCAPS2), para drivers de 9 níveis direct3D e superior.
Driver DirectX 8 (sem alongamento) | |||||
---|---|---|---|---|---|
Formatos de dest | |||||
Textura | Textura RT | RT | Sem formatação fora da tela | ||
Formatos Src | Textura | Não | Não | Não | Não |
Textura RT | Não | Sim | Sim | Não | |
RT | Não | Sim | Sim | Não | |
Sem formatação fora da tela | Sim | Sim | Sim | Sim |
Driver DirectX 8 (alongamento) | |||||
---|---|---|---|---|---|
Formatos de dest | |||||
Textura | Textura RT | RT | Sem formatação fora da tela | ||
Formatos Src | Textura | Não | Não | Não | Não |
Textura RT | Não | Não | Não | Não | |
RT | Não | Sim | Sim | Não | |
Sem formatação fora da tela | Não | Sim | Sim | Não |
Driver direct3D 9 (sem alongamento) | |||||
---|---|---|---|---|---|
Formatos de dest | |||||
Textura | Textura RT | RT | Sem formatação fora da tela | ||
Formatos Src | Textura | Não | Sim | Sim | Não |
Textura RT | Não | Sim | Sim | Não | |
RT | Não | Sim | Sim | Não | |
Sem formatação fora da tela | Não | Sim | Sim | Sim |
Driver do Direct3D 9 (alongamento) | |||||
---|---|---|---|---|---|
Formatos de dest | |||||
Textura | Textura RT | RT | Sem formatação fora da tela | ||
Formatos Src | Textura | Não | Sim | Sim | Não |
Textura RT | Não | Sim | Sim | Não | |
RT | Não | Sim | Sim | Não | |
Sem formatação fora da tela | Não | Sim | Sim | Não |
Requisitos
Plataforma de Destino | Windows |
Cabeçalho | d3d9helper.h (inclua D3D9.h) |
Biblioteca | D3D9.lib |