Saya memahami perbedaan utama antara texelFetch
dan texture
, tetapi memiliki beberapa pertanyaan tentang detailnya:
- Apakah
texelFetch
melibatkan penalti kinerja? Seperti tidak menggunakan cache atau semacamnya? - Apakah
texelFetch
dantexture
dapat dipertukarkan saat menggunakanGL_NEAREST
?
opengl
textures
performance
Martin Perry
sumber
sumber
Jawaban:
texelFetch
sangat berbeda daritexture
.texture
adalah fungsi akses tekstur biasa yang menangani penyaringan dan[0,1]
koordinat tekstur yang dinormalisasi .texelFetch
langsung mengakses texel pada tekstur (tanpa filter) dengan menggunakan koordinat yang tidak dinormalisasi (mis.(64,64)
pada texel middle-ish dalam tekstur 128x128 vs(.5,.5)
dalam koordinat yang dinormalkan).sumber
texture
atau Anda memerlukan perangkat keras untuk tidak melakukan penyaringan dan karenanya harus menggunakantexelFetch
).texelFetch
lebih cepat, dan penyaringan tetangga terdekat sudah mencukupi, Anda tidak dapat mengubah konteks menjadi penyaringan NN karena alasan apa pun, masuk akal untuk lebih memilihnyatexture
.texelFetch
dantexture
bekerja secara berbeda dengan cara mendasar. Lihat juga input: koordinat tekstur vs koordinat normal. Mereka melayani tujuan yang berbeda. Yang satu bukan hanya optimasi yang lain.Karena tidak ada jawaban yang diterima saya menambahkan beberapa info, saya hanya ingin menambahkan hal-hal yang belum dikatakan oleh Sean dalam jawabannya.
TexelFetch memperlakukan tekstur sebagai Gambar, sehingga Anda dapat mengakses konten piksel dengan tepat. Anda biasanya melakukan itu ketika Anda membutuhkan konten itu, yang dalam beberapa kesempatan tetapi bermanfaat:
Tex2D memperlakukan tekstur sebagai tekstur. Anda tidak menginginkan konten yang tepat dari suatu piksel, tetapi Anda menginginkan hasil yang paling realistis. Pembacaan tekstur standar adalah operasi yang sangat kompleks dan melibatkan pembacaan data yang diinterpolasi dari satu atau lebih level mipmap dan kemudian diinterpolasi lagi. Semua operasi mahal itu untuk menghindari artefak visual.
GL_NEAREST tidak akan berfungsi sama karena pada poligon terjauh Anda membaca data di tingkat mipmap yang lebih kecil, yang bukan data persis yang sama dengan yang Anda baca dari pengambilan texel.
Ada satu kasus di mana Tex2D (hampir) bekerja sama dengan TexelFetch:
sumber