Compartilhar via


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).
Restrições adicionais para superfícies de profundidade e estêncil
  • 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.
Usando StretchRect para reduzir a amostra de um Rendertarget multisample

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.
Observe que o uso da superfície extra envolvida no uso do StretchRect para reduzir a amostra de um Rendertarget Multisample resultará em um impacto no desempenho.

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

Confira também

IDirect3DDevice9

IDirect3DDevice9::BeginScene

IDirect3DDevice9::EndScene