2014-07-25 4 views
0

OpenTK를 통해 bool 값을 쉐이더에 전달하려면 어떻게해야합니까? Uniform1 과부하를 보지 못했습니다. 어떻게 내 목적을 변수를 사용하여 float 변수를 사용합니까?OpenTK의 부울 유니폼

if (floatValue > 0.5) {} 

그러나 좋은 방법은 아닌 것처럼 보입니다. bool 균일 한 아이디어가 있습니까?

답변

1

glUniform1i() 또는 glUniform1f()을 사용하여 bool을 동일하게 설정할 수 있습니다. 이 두 가지 경우 균일 값은 0을 전달하면 FALSE, 그렇지 않으면 TRUE으로 설정됩니다.

glUniform1i(1); 
gUniform1f(1.0f); 

다른 아닌 값 대신 1 :

glUniform1i(0); 
gUniform1f(0.0f); 

TRUE로 설정하려면, 하나이 중 하나를 사용 : 그래서 FALSE에 유니폼을 설정하려면 다음 두 가지 중 하나를 사용 또는 1.0f도 합법적입니다. int 유형이 bool과 더 밀접하게 관련되어 있으므로 값이 01 인 정수 버전을 개인적으로 선호합니다. 이 동작을 정의

사양의 언어 (OpenGL을 3.3 사양의 섹션 2.11.4 복사)된다

부울 부울 벡터 불리언 배열로 선언 된 일정 값을로드 또는 부울 벡터 배열을 사용하면 부울 값을로드하는 데 Uniform * i {v}, Uniform * ui {v} 및 Uniform * f {v} 명령 집합을 사용할 수 있습니다. 유형 변환은 GL에 의해 수행됩니다. 유니폼은 입력 값이 0 또는 0.0f이면 FALSE로 설정되고 그렇지 않으면 TRUE로 설정됩니다.