将数据从“顶点着色器”分组到“几何着色器”

时间:2017-05-18 18:35:54

标签: opengl glsl vertex-shader geometry-shader

假设我有一些积分p1p2p3p4。我需要在几何着色器阶段根据其后继对每个变换应用一些变换,因此我的GS需要访问对(p1, p2)(p2, p3)(p3, p4)。我怎样才能做到这一点?如果我使用POINTS原语,我一次只能获得对单个点的访问权。

请注意,这是一个简化,因为在实践中我需要一次有四个点,就像立方体的顶点一样。我曾想过使用类似线条的东西,但它没有提供足够的分数......

编辑: 为了澄清,我实际想要实现的是让CPU发送一个"立方晶格" (?)表示为一组点的GPU。我的GS必须一次取四个这样的点,每个点代表一个立方体的顶点,并根据这些点的属性输出三角形。

1 个答案:

答案 0 :(得分:0)

假设您将3D晶格放在缓冲区中。您知道订单(例如按行)。所以你事先知道如何提取每次迭代所需的四个点。对于常规网格,您知道点之间的 stride 。因此,您可以将glVertexAttribPointer()与正确的步幅参数一起使用。

您还可以使用索引缓冲区和glDrawElements

另一种可能较慢的方法是使用绑定在同一VAO中的四个缓冲区并使用不同的属性进行读取。

该命令可以是glDrawArray(GL_POINTS,...)。或者甚至可以尝试实例化绘图并使用实例ID作为晶格位置的指示。

问题是glDrawXXX将从绑定的缓冲区读取您指定的次数。每次你都可以阅读你的四点。

无论你使用什么,你都可以在VS中获得4分,你可以传递给GS。