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