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

时间:2017-01-04 03:01:41

标签: opengl glsl shader fragment-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无法保存当前状态。

1 个答案:

答案 0 :(得分:1)

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

我会解释你怎么可能真的这样做,但很明显你并不真正意味着你所说的意思。鼠标状态在帧与帧之间变化。但这是在CPU上发生的所有事情,它发生一次,而不是每个着色器一次。因此,每个着色器都会计算相同的值。

所以没有必要让着色器做到这一点。只需在CPU上执行该条件,然后提供一个制服,告诉着色器是否执行{bla bla bla}。