是否可以在几何着色器的迭代之间共享变量?

Is it possible to share a variable between iterations of a geometry shader?

概览

我正在生成一个我知道其功能的图段。我想要做的是向这个已知面积和高度的高条图添加另一个函数。问题是这些条会从一段流到另一段。

实施

我有一个在线条上运行的几何着色器(我们称其顶点为 x1、x2、...)并生成更高分辨率的线条(y11、y12、y13...、y21、y22、y23...),其中yij对应跨度xi x{i+1}.

在每个 xi 处,我提供要添加的块的高度,然后几何着色器知道相应的 y11、y12、……需要更高。

不幸的是,有时,yi 处的块会渗入 y{i+1}。现在,我想做的是在处理跨度 i 时,将出血量写入某个变量,然后在处理第 i+1 个跨度时,检查该变量。

OpenGL的几何着色器有这样的机制吗?在我看来,它可能会按顺序处理跨度,但我不确定。如果是,那么应该有一种方法可以将值从一个跨度传递到下一个跨度。

或者,有没有一种方法可以进行某种合并(以合并排序合并排序列表的方式),从而通过某种函数合并两个排序的顶点列表。我从来没有听说过这样的事情,但它似乎是 OpenGL 理论上可以做到的事情。

不,你不能。

除了某些非常specific circumstances, all shader invocations for a particular stage execute in an unspecified order (or have no ordering with other invocations at all). They cannot talk to one another; they cannot declare variables that the others can see, and so forth (again, outside of certain very specific circumstances。 None 其中 GS 可用)。