Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Menentukan Dukungan untuk Tekstur Terkompresi
Untuk menguji adaptor, tentukan format piksel apa pun yang menggunakan DXT1, DXT2, DXT3, DXT4, atau DXT5. Jika IDirect3D9::CheckDeviceFormat mengembalikan D3D_OK, perangkat dapat membuat tekstur langsung dari permukaan tekstur terkompresi yang menggunakan format tersebut. Jika demikian, Anda dapat menggunakan permukaan tekstur terkompresi langsung dengan Direct3D dengan memanggil metode IDirect3DDevice9::SetTexture. Contoh kode berikut menunjukkan cara menentukan apakah adaptor mendukung format tekstur terkompresi.
BOOL IsCompressedTextureFormatOk( D3DFORMAT TextureFormat,
D3DFORMAT AdapterFormat )
{
HRESULT hr = pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
AdapterFormat,
0,
D3DRTYPE_TEXTURE,
TextureFormat);
return SUCCEEDED( hr );
}
Jika perangkat tidak mendukung tekstur dari permukaan tekstur terkompresi, Anda masih dapat menyimpan data tekstur dalam permukaan format terkompresi, tetapi Anda harus mengonversi tekstur terkompresi apa pun ke format yang didukung sebelum dapat digunakan untuk tekstur.
Membuat Tekstur Terkompresi
Setelah membuat perangkat yang mendukung format tekstur terkompresi pada adaptor, Anda dapat membuat sumber daya tekstur terkompresi. Panggil IDirect3DDevice9::CreateTexture dan tentukan format tekstur terkompresi untuk parameter Format.
Sebelum memuat gambar ke dalam objek tekstur, ambil penunjuk ke permukaan tekstur dengan memanggil metode IDirect3DTexture9::GetSurfaceLevel.
Sekarang Anda dapat menggunakan fungsi D3DXLoadSurfacexxx untuk memuat gambar ke permukaan yang diambil dengan menggunakan IDirect3DTexture9::GetSurfaceLevel. Fungsi-fungsi ini menangani konversi ke dan dari format tekstur terkompresi.
Anda dapat membuat dan mengonversi file tekstur terkompresi (DDS) menggunakan Editor Tekstur DirectX (Dxtex.exe) yang disediakan dengan DirectX SDK. Anda bisa mendapatkan Dxtex.exe dan mempelajarinya dari DirectX SDK. Untuk informasi tentang DirectX SDK, lihat Di mana DirectX SDK?.
Keuntungan dari perilaku ini adalah bahwa aplikasi dapat menyalin konten permukaan terkompresi ke file tanpa menghitung berapa banyak penyimpanan yang diperlukan untuk permukaan lebar dan tinggi tertentu dalam format tertentu.
Tabel berikut ini memperlihatkan lima jenis tekstur terkompresi. Untuk informasi selengkapnya tentang cara data disimpan, lihat Format Tekstur Terkompresi (Direct3D 9). Anda hanya memerlukan informasi ini jika Anda menulis rutinitas kompresi Anda sendiri.
| FOURCC | Deskripsi | Alfa sudah diatur sebelumnya? |
|---|---|---|
| DXT1 | Alfa opak/1-bit | N/A |
| DXT2 | Alfa eksplisit | Ya |
| DXT3 | Alfa eksplisit | Tidak |
| DXT4 | Alfa yang diinterpolasi | Ya |
| DXT5 | Alfa terinterpolasi | Tidak |
Saat Anda mentransfer data dari format non-premultiplikasi ke format premultiplikasi, Direct3D menskalakan warna berdasarkan nilai alfa. Mentransfer data dari format premultiplied ke format nonpremultiplied tidak didukung. Jika Anda mencoba mentransfer data dari sumber alfa yang telah dipremultiplikasi ke tujuan alfa yang tidak dipremultiplikasi, metode akan mengembalikan D3DERR_INVALIDCALL. Jika Anda mentransfer data dari sumber dengan alfa yang telah dikalikan sebelumnya ke tujuan yang tidak memiliki alfa, komponen warna sumber yang telah dikalikan dengan alfa disalin apa adanya.
Mendekompresi Permukaan Tekstur Terkompresi
Seperti halnya mengompresi permukaan tekstur, mendekompresi tekstur terkompresi dilakukan melalui layanan penyalinan Direct3D.
Untuk menyalin permukaan tekstur terkompresi ke permukaan tekstur yang tidak dikompresi, gunakan fungsi D3DXLoadSurfaceFromSurface. Fungsi ini menangani kompresi ke dan dari permukaan terkompresi dan tidak terkompresi.
Topik terkait