ฉันเข้าใจความแตกต่างที่สำคัญระหว่างtexelFetchและtextureแต่มีคำถามบางอย่างเกี่ยวกับรายละเอียด:
- ไม่
texelFetchเกี่ยวข้องกับการลงโทษประสิทธิภาพหรือไม่? เช่นไม่ได้ใช้แคชหรือเช่น? - มี
texelFetchและtextureใช้แทนกันได้เมื่อใช้GL_NEAREST?
ฉันเข้าใจความแตกต่างที่สำคัญระหว่างtexelFetchและtextureแต่มีคำถามบางอย่างเกี่ยวกับรายละเอียด:
texelFetchเกี่ยวข้องกับการลงโทษประสิทธิภาพหรือไม่? เช่นไม่ได้ใช้แคชหรือเช่น?texelFetchและtextureใช้แทนกันได้เมื่อใช้GL_NEAREST?คำตอบ:
texelFetchtextureค่อนข้างแตกต่างจาก
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: