2017-01-04 4 views
0

Wie kann ich in den Shader zwei Zustände aus verschiedenen Frames mittels globaler Variable vergleichen? Ich muss Zustände der Mausposition zwischen zwei Bildern vergleichen, und wenn es sich nicht änderte, um {bla bla bla} zu tun.Vergleichen Sie zwei Zustände in den Shader

Zum Beispiel:

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; 
} 

Aber focusNew nicht aktuellen Zustand nicht speichern.

Antwort

1

Sie können nicht. Oder zumindest nicht so. Denken Sie daran: Shader laufen Tausende von Zeiten pro Frame.

Ich würde erklären, wie Sie das tatsächlich tun könnten, aber es ist überdeutlich, dass Sie nicht wirklich meinen, was Sie sagen, dass Sie meinen. Der Mausstatus ändert sich von Frame zu Frame. Aber das ist alles, was auf der CPU passiert, und es passiert einmal, nicht einmal pro Shader. Jeder Shader würde daher den gleichen Wert berechnen.

Es macht also keinen Sinn, den Shader dazu zu bringen. Machen Sie einfach die Bedingung auf der CPU, und geben Sie dann eine Uniform an, die den/die Shader informiert, ob sie die {bla bla bla} tun sollen oder nicht.