2017-01-04 4 views
0

전역 변수를 사용하여 다른 프레임의 쉐이더 두 상태를 어떻게 비교할 수 있습니까? 두 프레임 사이의 마우스 위치 상태를 비교해야하며, 변경되지 않은 경우 {bla bla bla}를 수행해야합니다.두 상태를 쉐이더로 비교

예를 들어

:

vec2 focusNew = vec2(0.0); 
float x; 
float y; 

void main 
{ 
    vec2 focus = vec2 (x, y-1); 
    if ((focusNew - focus) <= 0.00001) // (focusNew == focus) 
     {bla bla bla} 
    focusNew = focus; 
} 

을하지만, 현재 상태를 focusNew 저장하지 않습니다.

답변

1

수 없습니다. 적어도 그런식이 아닙니다. 셰이더는 프레임 당 횟수가 수천입니다.

실제로 어떻게 할 수 있는지 설명 하겠지만, 당신이 의미하는 바를 실제로 의미하지는 않는다는 것이 분명합니다. 마우스 상태가 프레임마다 바뀝니다. 그러나 그것은 CPU에서 일어나는 모든 일이며, 한번 이 발생하고 쉐이더 당 한 번 발생하지는 않습니다. 따라서 모든 쉐이더는 동일한 값을 계산합니다.

쉐이더를 만드는 데는 아무런 포인트가 없습니다. CPU에서 조건을 수행 한 다음 셰이더에게 {bla bla bla} 수행 여부를 알려주는 유니폼을 제공하십시오.