GLSL: ฉันจะเหวี่ยงทุ่นไปยัง int ได้อย่างไร


40

ใน Shader GLSL ส่วนฉันพยายามที่จะโยนลงไปfloat intคอมไพเลอร์ทำให้เกิดข้อผิดพลาด:

ERROR: 0:60: '=' :  cannot convert from 'mediump float' to 'highp int'

ฉันพยายามเพิ่มความแม่นยำของint:

mediump float indexf = floor(2.0 * mixer);
highp int index = indexf;

แต่ไม่มีประโยชน์

ฉันจะคัดเลือกนักแสดงที่intเหมาะสมได้อย่างไร


1
สำหรับการอ้างอิงในอนาคตคุณจะได้รับคำตอบที่ดีขึ้นถ้าคุณถามคำถามทั่วไปเกี่ยวกับการเขียนโปรแกรมเช่นนี้ที่ Stack Overflow stackoverflow.com - ขึ้นอยู่กับความคิดเห็นของชุมชนคำถามนี้อาจถูกย้ายไปที่นั่นหรือไม่
Ricket

floatBitsToIntสำหรับบรรยากาศแปลขณะนี้มีฟังก์ชั่นเช่น
jozxyqk

คำตอบ:


41

ลองสิ่งนี้:

highp int index = int(indexf);

ผมพบว่ามันนี่


นอกจากนี้โปรดทราบว่าการส่งทริปไปที่ int จะทำการปูพื้นโดยอัตโนมัติ
Ricket

6
ในภาษาส่วนใหญ่โหมดการปัดเศษจะถูกปัดเศษ / ปัดเป็นศูนย์ซึ่งเทียบเท่ากับพื้นสำหรับตัวเลขบวก แต่ไม่ใช่จำนวนลบ ฉันจำไม่ได้ว่าสิ่งนี้ใช้ได้กับ GLSL หรือไม่ แต่ฉันก็ต้องแปลกใจถ้ามันไม่ได้

@ Joe นั่นเป็นข้อเท็จจริงที่น่าสนใจที่ฉันไม่เคยคิดมาก่อนและฉันเพิ่งยืนยันด้วยกรณีทดสอบ Java
Ricket

4
highp สำคัญหรือไม่ (บนจำนวนเต็ม)
Léon Pelletier

ขอบคุณมันใช้งานได้ในกรณีของฉัน คุณสามารถอัปเดตข้อมูลอ้างอิงที่คุณใส่ไว้เนื่องจากไม่มีหน้านี้หรือไม่
Bora
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.