Compartir a través de


Usar texturas comprimidas (Direct3D 9)

Determinar la compatibilidad con texturas comprimidas

Para probar el adaptador, especifique cualquier formato de píxel que use DXT1, DXT2, DXT3, DXT4 o DXT5. Si IDirect3D9::CheckDeviceFormat devuelve D3D_OK, el dispositivo puede crear textura directamente a partir de una superficie de textura comprimida que use ese formato. Si es así, puedes usar superficies de textura comprimidas directamente con Direct3D llamando al método IDirect3DDevice9::SetTexture . En el ejemplo de código siguiente se muestra cómo determinar si el adaptador admite un formato de textura comprimido.

BOOL IsCompressedTextureFormatOk( D3DFORMAT TextureFormat, 
                                  D3DFORMAT AdapterFormat ) 
{
    HRESULT hr = pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT,
                                          D3DDEVTYPE_HAL,
                                          AdapterFormat,
                                          0,
                                          D3DRTYPE_TEXTURE,
                                          TextureFormat);

    return SUCCEEDED( hr );
}

Si el dispositivo no admite la texturización de superficies de textura comprimidas, todavía puede almacenar datos de textura en una superficie de formato comprimido, pero debe convertir las texturas comprimidas a un formato compatible antes de que se puedan usar para el texturing.

Creación de texturas comprimidas

Después de crear un dispositivo que admita un formato de textura comprimido en el adaptador, puede crear un recurso de textura comprimido. Llame a IDirect3DDevice9::CreateTexture y especifique un formato de textura comprimido para el parámetro Format.

Antes de cargar una imagen en un objeto de textura, recupere un puntero a la superficie de textura llamando al método IDirect3DTexture9::GetSurfaceLevel .

Ahora puede usar cualquier función D3DXLoadSurfacexxx para cargar una imagen en la superficie recuperada mediante IDirect3DTexture9::GetSurfaceLevel. Estas funciones controlan la conversión a y desde formatos de textura comprimidos.

Puede crear y convertir archivos de textura comprimida (DDS) mediante el Editor de texturas directX (Dxtex.exe) proporcionado con el SDK de DirectX. Puede obtener Dxtex.exe y obtener información sobre ella desde el SDK de DirectX. Para obtener información sobre el SDK de DirectX, consulta ¿Dónde está el SDK de DirectX?.

La ventaja de este comportamiento es que una aplicación puede copiar el contenido de una superficie comprimida en un archivo sin calcular la cantidad de almacenamiento necesaria para una superficie de un ancho y alto determinados en el formato específico.

En la tabla siguiente se muestran los cinco tipos de texturas comprimidas. Para obtener más información sobre cómo se almacenan los datos, vea Formatos de textura comprimidos (Direct3D 9). Solo necesita esta información si está escribiendo sus propias rutinas de compresión.

FOURCC Descripción ¿Alfa premultiplicado?
DXT1 Alfa opaco/1 bits N/D
DXT2 Alfa explícito
DXT3 Alfa explícito No
DXT4 Alfa interpolado
DXT5 Alfa interpolado No

 

Al transferir datos de un formato no premultiplicado a un formato premultiplicado, Direct3D escala los colores en función de los valores alfa. No se admite la transferencia de datos de un formato premultiplicado a un formato no premultiplicado. Si intenta transferir datos de un origen alfa premultiplicado a un destino alfa no premultiplicado, el método devuelve D3DERR_INVALIDCALL. Si transfiere datos de un origen alfa premultiplicado a un destino que no tiene ningún alfa, los componentes de color de origen, que se han escalado por alfa, se copian tal cual.

Descompresión de superficies de textura comprimidas

Al igual que con la compresión de una superficie de textura, la descompresión de una textura comprimida se realiza a través de los servicios de copia de Direct3D.

Para copiar una superficie de textura comprimida en una superficie de textura sin comprimir, use la función D3DXLoadSurfaceFromSurface. Esta función controla la compresión hacia y desde superficies comprimidas y sin comprimir.

Recursos de textura comprimidos