Uso di trame compresse (Direct3D 9)
Determinazione del supporto per trame compresse
Per testare l'adattatore, specificare qualsiasi formato pixel che usa DXT1, DXT2, DXT3, DXT4 o DXT5. Se IDirect3D9::CheckDeviceFormat restituisce D3D_OK, il dispositivo può creare trama direttamente da una superficie di trama compressa che usa tale formato. In tal caso, è possibile usare superfici di trama compresse direttamente con Direct3D chiamando il metodo IDirect3DDevice9::SetTexture . Nell'esempio di codice seguente viene illustrato come determinare se l'adattatore supporta un formato trama compresso.
BOOL IsCompressedTextureFormatOk( D3DFORMAT TextureFormat,
D3DFORMAT AdapterFormat )
{
HRESULT hr = pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
AdapterFormat,
0,
D3DRTYPE_TEXTURE,
TextureFormat);
return SUCCEEDED( hr );
}
Se il dispositivo non supporta la texturing dalle superfici della trama compressa, è comunque possibile archiviare i dati della trama in un'area di formato compresso, ma è necessario convertire eventuali trame compresse in un formato supportato prima che possano essere usate per il texturing.
Creazione di trame compresse
Dopo aver creato un dispositivo che supporta un formato di trama compresso nell'adattatore, è possibile creare una risorsa trama compressa. Chiamare IDirect3DDevice9::CreateTexture e specificare un formato di trama compresso per il parametro Format.
Prima di caricare un'immagine in un oggetto trama, recuperare un puntatore alla superficie di trama chiamando il metodo IDirect3DTexture9::GetSurfaceLevel .
Ora è possibile usare qualsiasi funzione D3DXLoadSurfacexxx per caricare un'immagine nella superficie recuperata usando IDirect3DTexture9::GetSurfaceLevel. Queste funzioni gestiscono la conversione in e da formati di trama compressi.
È possibile creare e convertire file di trama compressi (DDS) usando l'editor di trame DirectX (Dxtex.exe) fornito con DirectX SDK. È possibile ottenere Dxtex.exe e scoprirlo da DirectX SDK. Per informazioni su DirectX SDK, vedere Dove è DirectX SDK?.
Il vantaggio di questo comportamento è che un'applicazione può copiare il contenuto di una superficie compressa in un file senza calcolare la quantità di archiviazione necessaria per una superficie di una determinata larghezza e altezza nel formato specifico.
La tabella seguente mostra i cinque tipi di trame compresse. Per altre informazioni su come vengono archiviati i dati, vedere Formati trama compressi (Direct3D 9). Queste informazioni sono necessarie solo se si scrivono routine di compressione personalizzate.
FOURCC | Descrizione | Alfa premultiplied? |
---|---|---|
DXT1 | Alfa opaco/1 bit | N/D |
DXT2 | Alfa esplicito | Sì |
DXT3 | Alfa esplicito | No |
DXT4 | Alfa interpolata | Sì |
DXT5 | Alfa interpolata | No |
Quando si trasferiscono dati da un formato non premultiplied a un formato premultiplied, Direct3D ridimensiona i colori in base ai valori alfa. Il trasferimento dei dati da un formato premultiplied a un formato non premultiplied non è supportato. Se si tenta di trasferire dati da un'origine alfa premultiplied a una destinazione alfa non premultiplied, il metodo restituisce D3DERR_INVALIDCALL. Se si trasferiscono dati da un'origine alfa premultiplied a una destinazione senza alfa, i componenti del colore di origine, che sono stati ridimensionati da alfa, vengono copiati come è.
Decompressione delle superfici della trama compressa
Come per comprimere una superficie di trama, la decompressione di una trama compressa viene eseguita tramite servizi di copia Direct3D.
Per copiare una superficie di trama compressa in una superficie di trama non compressa, usare la funzione D3DXLoadSurfaceFromSurface. Queste funzioni gestiscono la compressione da e verso superfici compresse e non compresse.
Argomenti correlati