Delen via


Gecomprimeerde patronen gebruiken (Direct3D 9)

Ondersteuning voor gecomprimeerde patronen bepalen

Als u de adapter wilt testen, geeft u een pixelindeling op die gebruikmaakt van DXT1, DXT2, DXT3, DXT4 of DXT5. Als IDirect3D9::CheckDeviceFormat D3D_OK retourneert, kan het apparaat patronen rechtstreeks maken vanaf een gecomprimeerd patroonoppervlak dat gebruikmaakt van die indeling. Zo ja, kunt u gecomprimeerde textuuroppervlakken rechtstreeks met Direct3D gebruiken door de methode IDirect3DDevice9::SetTexture aan te roepen. In het volgende codevoorbeeld ziet u hoe u kunt bepalen of de adapter een gecomprimeerde structuurindeling ondersteunt.

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

    return SUCCEEDED( hr );
}

Als het apparaat geen ondersteuning biedt voor het gebruik van gecomprimeerde textuuroppervlakken, kunt u nog steeds textuurgegevens opslaan op een oppervlak in gecomprimeerd formaat, maar u moet eventuele gecomprimeerde texturen converteren naar een ondersteund formaat voordat ze kunnen worden gebruikt voor texturering.

Gecomprimeerde patronen maken

Nadat u een apparaat hebt gemaakt dat ondersteuning biedt voor een gecomprimeerde textuurindeling op de adapter, kunt u een gecomprimeerde structuurresource maken. Roep IDirect3DDevice9::CreateTexture aan en geef een gecomprimeerde structuurindeling op voor de parameter Format.

Voordat u een afbeelding in een patroonobject laadt, haalt u een aanwijzer op het patroonoppervlak op door de methode IDirect3DTexture9::GetSurfaceLevel methode aan te roepen.

U kunt nu elke D3DXLoadSurfacexxx-functie gebruiken om een afbeelding te laden naar het oppervlak dat is opgehaald met behulp van IDirect3DTexture9::GetSurfaceLevel. Deze functies verwerken conversie naar en van gecomprimeerde structuurindelingen.

U kunt gecomprimeerde structuurbestanden (DDS) maken en converteren met behulp van de DirectX Texture Editor (Dxtex.exe) die is geleverd met de DirectX SDK. U kunt Dxtex.exe krijgen en hierover leren via de DirectX SDK. Zie Waar is de DirectX SDK?.

Het voordeel van dit gedrag is dat een toepassing de inhoud van een gecomprimeerd oppervlak naar een bestand kan kopiëren zonder te berekenen hoeveel opslagruimte nodig is voor een oppervlak van een bepaalde breedte en hoogte in de specifieke indeling.

In de volgende tabel ziet u de vijf typen gecomprimeerde patronen. Zie Gecomprimeerde patroonindelingen (Direct3D 9)voor meer informatie over hoe de gegevens worden opgeslagen. U hebt deze informatie alleen nodig als u uw eigen compressieroutines schrijft.

FOURCC Beschrijving Alfa-premultiplied?
DXT1 Ondoorzichtig/1-bits alfa N.V.T
DXT2 Expliciete alfa Ja
DXT3 Expliciete alfa Nee
DXT4 Geïnterpoleerde alfa Ja
DXT5 Geïnterpoleerde alfa Nee

 

Wanneer u gegevens overdraagt van een niet-voorgemengd formaat naar een voorgemengd formaat, worden de kleuren geschaald op basis van de alfawaarden. Het overdragen van gegevens van een vooraf gedefinieerde indeling naar een niet-vooraf gedefinieerde indeling wordt niet ondersteund. Als u probeert gegevens over te dragen van een voorgemultipliede alfabron naar een niet-voorgemultipliede alfa-bestemming, retourneert de methode D3DERR_INVALIDCALL. Als u gegevens overdraagt van een vooraf gedefinieerde alfabron naar een bestemming die geen alfa heeft, worden de bronkleuronderdelen, die zijn geschaald op alfa, naar behoren gekopieerd.

Gecomprimeerde textuuroppervlakken decomprimeren

Net als bij het comprimeren van een patroonoppervlak, wordt het decomprimeren van een gecomprimeerd patroon uitgevoerd via Direct3D-kopieerservices.

Gebruik de functie D3DXLoadSurfaceFromSurfaceom een gecomprimeerd textuuroppervlak naar een niet-gecomprimeerd textuuroppervlak te kopiëren. Deze functies verwerken compressie van en naar gecomprimeerde en niet-gecomprimeerde oppervlakken.

gecomprimeerde textuurbronnen