Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Determinando o suporte para texturas compactadas
Para testar o adaptador, especifique qualquer formato de pixel que use DXT1, DXT2, DXT3, DXT4 ou DXT5. Se IDirect3D9::CheckDeviceFormat retornar D3D_OK, o dispositivo poderá criar textura diretamente de uma superfície de textura compactada que usa esse formato. Em caso afirmativo, você pode usar superfícies de textura compactadas diretamente com o Direct3D chamando o IDirect3DDevice9::SetTexture método. O exemplo de código a seguir mostra como determinar se o adaptador suporta um formato de textura compactada.
BOOL IsCompressedTextureFormatOk( D3DFORMAT TextureFormat,
D3DFORMAT AdapterFormat )
{
HRESULT hr = pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
AdapterFormat,
0,
D3DRTYPE_TEXTURE,
TextureFormat);
return SUCCEEDED( hr );
}
Se o dispositivo não suportar texturização de superfícies de textura comprimidas, ainda pode armazenar dados de textura numa superfície de formato comprimido, mas tem de converter quaisquer texturas comprimidas para um formato suportado antes de poderem ser utilizadas para texturização.
Criação de texturas comprimidas
Depois de criar um dispositivo que suporte um formato de textura compactada no adaptador, você pode criar um recurso de textura compactada. Chame IDirect3DDevice9::CreateTexture e especifique um formato de textura compactada para o parâmetro Format.
Antes de carregar uma imagem num objeto de textura, recupere um ponteiro para a superfície de textura chamando o método IDirect3DTexture9::GetSurfaceLevel.
Agora você pode usar qualquer função D3DXLoadSurfacexxx para carregar uma imagem na superfície que foi recuperada usando IDirect3DTexture9::GetSurfaceLevel. Essas funções lidam com a conversão de e para formatos de textura compactada.
Você pode criar e converter arquivos de textura compactada (DDS) usando o Editor de textura do DirectX (Dxtex.exe) fornecido com o SDK do DirectX. Você pode obter Dxtex.exe e aprender sobre isso no SDK do DirectX. Para obter informações sobre o SDK do DirectX, consulte Onde está o SDK do DirectX?.
A vantagem desse comportamento é que um aplicativo pode copiar o conteúdo de uma superfície compactada para um arquivo sem calcular quanto armazenamento é necessário para uma superfície de uma determinada largura e altura no formato específico.
A tabela a seguir mostra os cinco tipos de texturas compactadas. Para obter mais informações sobre como os dados são armazenados, consulte formatos de textura compactados (Direct3D 9). Você só precisa dessas informações se estiver escrevendo suas próprias rotinas de compressão.
| FOURCC | Descrição | Alfa pré-multiplicado? |
|---|---|---|
| DXT1 | Opaco/alfa de 1 bit | N/A |
| DXT2 | Alfa explícito | Sim |
| DXT3 | Alfa explícito | Não |
| DXT4 | Alfa interpolado | Sim |
| DXT5 | Alfa interpolado | Não |
Quando você transfere dados de um formato não pré-multiplicado para um formato pré-multiplicado, o Direct3D dimensiona as cores com base nos valores alfa. Não há suporte para a transferência de dados de um formato pré-multiplicado para um formato não pré-multiplicado. Se tentares transferir dados de uma fonte alfa pré-multiplicada para um destino alfa não multiplicado, o método retornará D3DERR_INVALIDCALL. Se você transferir dados de uma fonte alfa pré-multiplicada para um destino que não tenha alfa, os componentes de cor de origem, que foram dimensionados por alfa, serão copiados como estão.
Descomprimir superfícies de textura comprimidas
Tal como acontece com a compressão de uma superfície de textura, a descompressão de uma textura comprimida é realizada através de serviços de cópia Direct3D.
Para copiar uma superfície de textura comprimida para uma superfície de textura não comprimida, utilize a função D3DXLoadSurfaceFromSurface. Esta função lida com a compressão de superfícies comprimidas para não comprimidas e vice-versa.
Tópicos relacionados