Saya sedang mengembangkan mesin gim, dan itu hanya akan bekerja pada perangkat keras modern (model Shader 4+). Saya pikir, pada saat saya selesai dengan itu, itu tidak akan menjadi persyaratan yang tidak masuk akal.
Pertanyaan saya adalah: berapa banyak tekstur yang dapat saya ikat sekaligus pada kartu grafis modern? 16 sudah cukup. Bisakah saya berharap sebagian besar kartu grafis modern mendukung jumlah tekstur itu?
GTX 460 saya tampaknya mendukung 32, tetapi saya tidak tahu apakah itu mewakili sebagian besar kartu video modern.
Jawaban:
Jumlah tekstur yang dapat diikat ke OpenGL bukanlah 32 atau 16 . Bukan apa yang Anda dapatkan
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
. Fungsi itu mengambil jumlah tekstur yang dapat diakses oleh shader fragmen .Lihat, masing-masing shader memiliki batas sendiri dari jumlah tekstur yang bisa digunakan . Namun, ada juga jumlah total tekstur yang dapat digunakan, titik. Ini didefinisikan (dalam OpenGL) oleh
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
.Jadi ada dua batasan: tekstur-per-tahap, dan tekstur-total-terikat.
OpenGL 3.x mendefinisikan angka minimum untuk batas per-tahap menjadi 16, sehingga perangkat keras tidak boleh memiliki kurang dari 16 tekstur-per-tahap. Ini dapat memiliki batas yang lebih tinggi, tetapi Anda tahu Anda mendapatkan setidaknya 16. 3.x mendefinisikan angka minimum untuk tekstur-total-terikat sebagai 48. AKA: 16 * 3 tahap. Demikian pula, GL 4.x mendefinisikan angka menjadi 16 tekstur-per-tahap, dan 96 tekstur-total-terikat (yaitu: 16 * 6 tahap, termasuk compute shaders).
Sekali lagi, ini adalah angka minimum . Perangkat keras dapat (dan memang) bervariasi.
Sedangkan untuk perangkat keras tertentu, Anda dapat mengharapkan perangkat keras kelas DX10 mana pun yang cocok dengan angka-angka ini. Perangkat keras kelas DX11 memiliki beberapa varian; NVIDIA (GeForce 4xx +) dan chip AMD kelas atas (alias: GCN-core) mungkin memiliki lebih dari 16-per-tahap.
sumber
Saya percaya 32 adalah jumlah maksimum tekstur yang dapat diikat saat ini. Sejauh yang saya tahu bahkan seri 8800 memiliki 32 unit tekstur.
Sejauh yang saya tahu, untuk dukungan OpenGL 4.x Anda akan memerlukan Fermi atau kartu nvidia yang lebih baru (atau kartu amd yang sesuai), semua model kelas atas tampaknya memiliki 32 unit, sedangkan kartu kelas bawah (GT 430, misalnya ) memiliki 16. Namun, melihat lembar spesifikasi AMD mereka mencantumkan angka seperti 80 atau 128 unit tekstur, tetapi daftar 32 unit ROP warna yang tampaknya tetap konstan dari generasi ke generasi.
GTX 480 di sisi lain terdaftar dengan 60 unit tekstur dan 48 unit ROP, sementara kartu akhir yang lebih rendah seperti 430 dilaporkan hanya memiliki 16 unit tekstur dan 4 init ROP. Jadi secara keseluruhan saya tidak benar-benar yakin salah satu dari mereka adalah nomor yang sebenarnya Anda cari.
Anda dapat memeriksa jumlah unit tekstur yang tersedia untuk rendering pipeline fungsi tidak tetap
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
, jadi, jika Anda memiliki akses ke beberapa perangkat keras yang beragam, Anda bisa memeriksanya sendiri.EDIT: situs ini memungkinkan Anda membandingkan kemampuan openGL yang dilaporkan dari semua jenis kartu video, yang akan memberi Anda angka yang Anda butuhkan: http://feedback.wildfiregames.com/report/opengl/device/GeForce%20GTX%20580
PS: AMD dan nvidia baru-baru ini memperkenalkan "tekstur bindless", (dan memiliki nama yang berbeda untuk itu) yang memungkinkan Anda untuk menggunakan sejumlah besar tekstur tanpa mengikatnya ke unit textutre, saat ini ini hanya tersedia di openGL.
sumber