GLSL: Làm thế nào để tôi tạo một float cho một int?


40

Trong một shader mảnh GLSL, tôi đang cố gắng tạo floatthành một int. Trình biên dịch gây ra lỗi:

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

Tôi đã cố gắng nâng cao độ chính xác của int:

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

nhưng không có kết quả.

Làm thế nào để tôi đúc intđúng?


1
Để tham khảo trong tương lai, bạn sẽ nhận được câu trả lời tốt hơn nếu bạn hỏi các câu hỏi lập trình chung như câu hỏi này tại Stack Overflow. stackoverflow.com - tùy thuộc vào phản hồi của cộng đồng, câu hỏi này có thể được di chuyển ở đó.
Ricket

Đối với các diễn viên reinterpret, bây giờ có các chức năng như floatBitsToInt.
jozxyqk

Câu trả lời:


41

Thử đi:

highp int index = int(indexf);

Tôi tìm thấy nó ở đây .


Cũng lưu ý rằng việc chuyển một float lên một int tự động sàn nó (ít nhất là trong bất kỳ triển khai nào tôi từng thấy) để cuộc gọi lên sàn của bạn là không cần thiết.
Ricket

6
Trong hầu hết các ngôn ngữ, chế độ làm tròn là cắt ngắn / làm tròn thành số không, tương đương với mức sàn cho số dương nhưng không phải số âm. Tôi không nhớ nếu điều này áp dụng cho GLSL, nhưng tôi sẽ ngạc nhiên nếu nó không.

@Joe Đó là một sự thật thú vị mà tôi chưa bao giờ nghĩ tới và tôi chỉ xác nhận nó với một trường hợp thử nghiệm Java.
Ricket

4
Là highp quan trọng ở đây? (Trên một số nguyên)
Léon Pelletier

Cảm ơn, nó cũng hoạt động trong trường hợp của tôi. Bạn có thể cập nhật tham chiếu mà bạn đã đặt, vì trang không tồn tại?
Bora
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.