ฉันเข้าใจความแตกต่างที่สำคัญระหว่างtexelFetch
และtexture
แต่มีคำถามบางอย่างเกี่ยวกับรายละเอียด:
- ไม่
texelFetch
เกี่ยวข้องกับการลงโทษประสิทธิภาพหรือไม่? เช่นไม่ได้ใช้แคชหรือเช่น? - มี
texelFetch
และtexture
ใช้แทนกันได้เมื่อใช้GL_NEAREST
?
ฉันเข้าใจความแตกต่างที่สำคัญระหว่างtexelFetch
และtexture
แต่มีคำถามบางอย่างเกี่ยวกับรายละเอียด:
texelFetch
เกี่ยวข้องกับการลงโทษประสิทธิภาพหรือไม่? เช่นไม่ได้ใช้แคชหรือเช่น?texelFetch
และtexture
ใช้แทนกันได้เมื่อใช้GL_NEAREST
?คำตอบ:
texelFetch
texture
ค่อนข้างแตกต่างจาก
texture
เป็นฟังก์ชั่นการเข้าถึงพื้นผิวตามปกติของคุณซึ่งจัดการการกรองและ[0,1]
พิกัดพื้นผิว( ) มาตรฐาน texelFetch
เข้าถึงเท็กเซลในพื้นผิวโดยตรง (ไม่มีตัวกรอง) โดยใช้พิกัดที่ไม่ปกติ (เช่น(64,64)
ในเทเลเท็กซ์กลาง -ish ในพื้นผิว 128x128 เทียบกับ(.5,.5)
พิกัดปกติ)
texture
หรือคุณต้องการฮาร์ดแวร์ที่จะไม่ทำการกรองและต้องใช้texelFetch
)
texelFetch
เป็นได้เร็วขึ้นและเพื่อนบ้านที่ใกล้ที่สุดกรองพอเพียง, คุณไม่สามารถเปลี่ยนบริบท NN texture
กรองด้วยเหตุผลใดก็จะมีความเหมาะสมที่จะชอบมันมากกว่า
texelFetch
และtexture
ทำงานแตกต่างกันในวิธีพื้นฐาน ดูเพิ่มเติมได้ที่: พิกัดพื้นผิวและพิกัดปกติ พวกเขาตอบสนองวัตถุประสงค์ที่แตกต่าง หนึ่งไม่ได้เป็นเพียงการเพิ่มประสิทธิภาพของอีก
เนื่องจากไม่มีคำตอบที่ยอมรับได้ฉันเพิ่มข้อมูลบางอย่างฉันต้องการเพียงเพิ่มสิ่งที่ไม่ได้กล่าวโดย Sean ในคำตอบของเขา
TexelFetchถือว่าพื้นผิวเป็นรูปภาพเพื่อให้คุณสามารถเข้าถึงเนื้อหาของพิกเซลได้อย่างแน่นอน คุณมักจะทำเช่นนั้นเมื่อคุณต้องการเนื้อหานั้น ๆ อย่างแน่นอนซึ่งมีอยู่เพียงไม่กี่ครั้ง แต่ก็มีประโยชน์:
Tex2Dถือว่าพื้นผิวเป็นพื้นผิว คุณไม่ต้องการเนื้อหาที่แน่นอนของพิกเซล แต่คุณต้องการผลลัพธ์ที่สมจริงที่สุด การอ่านค่าพื้นผิวแบบมาตรฐานนั้นเป็นการดำเนินการที่ซับซ้อนมากและเกี่ยวข้องกับการอ่านข้อมูลที่ถูกแก้ไขจากระดับหนึ่งหรือหลายระดับจากนั้นจึงทำการแทรกอีกครั้ง การดำเนินการที่มีราคาแพงเหล่านั้นคือการหลีกเลี่ยงสิ่งประดิษฐ์ที่มองเห็นได้
GL_NEAREST จะไม่ทำงานเหมือนกันเพราะในรูปหลายเหลี่ยมที่ไกลที่สุดที่คุณกำลังอ่านข้อมูลในระดับ mipmap ที่เล็กกว่าซึ่งไม่ใช่ข้อมูลที่แน่นอนแบบเดียวกับที่คุณจะอ่านจากการเรียกใช้ texel
มีกรณีหนึ่งที่ Tex2D (เกือบ) ทำงานเหมือนกับ TexelFetch: