GLSL : int에 float를 어떻게 캐스팅합니까?


40

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

감사합니다. 제 경우에도 효과가있었습니다. 페이지가 존재하지 않으므로 넣은 참조를 업데이트 할 수 있습니까?
보라
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.