将两个状态比较到着色器中

Compare two states into the shader

如何通过全局变量将来自不同帧的两个状态比较到着色器中?我需要比较两帧之间的鼠标位置状态,如果它没有改变,则执行 {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不保存当前状态。

你不能。或者至少不是那样。请记住:着色器每帧 运行 次。

我会解释您实际上是如何做到这一点的,但是很明显您并不是真正的意思。鼠标状态在帧与帧之间发生变化。但这就是 CPU 上发生的所有事情,并且它发生 一次 ,而不是每个着色器一次。因此,每个着色器都会计算相同的值。

因此让着色器执行此操作毫无意义。只需在 CPU 上执行条件,然后提供一个 uniform 告诉着色器是否执行 {bla bla bla}。