着色器中的持久数据 - GLSL

Persistent data in a shader - GLSL

是否可以在同一个着色器中拥有持久数据?有点像制服,只是shader本身可以设置。

我想做的是在我的顶点流中嵌入一个顶点,它将充当“状态更改”并影响对下游所有顶点的操作。 IE。顶点着色器说“啊,我击中了这个顶点”并打开或关闭一个布尔值……稍​​后顶点可以检查该布尔值。它不需要在着色器之间工作,它只需要在单个顶点泵期间工作。

这可能吗?使用 GLSL。

embed a vertex in my vertex stream that will act as a "state change" and affect an operation on all vertices downstream.

这不可能。特定着色器阶段的调用相对于该阶段内的其他调用(和绘图命令)以很大程度上未定义的顺序执行。无论读取或写入内存的能力如何,您都不能确保“下游”调用不会在“上游”调用写入该内存之前执行。

如果你想做类似的事情,你需要将它们放入单独的绘图命令中,并在这些绘图之间发出适当的内存屏障 (to make such writes visible to later commands )。