将自定义属性传递给自定义片段着色器

时间:2012-07-19 18:03:30

标签: android opengl-es opengl-es-2.0 shader

是否可以将自定义属性传递给片段着色器,我知道我可以通过GLES20.glVertexAttribPointer将属性传递给顶点着色器,但是如何将float []传递给片段着色器?

2 个答案:

答案 0 :(得分:13)

没有。

如果要将制服传递给片段着色器,可以轻松地执行此操作(请参阅任何教程)。但是如果你想要类似于每顶点属性的东西,那么这样做是没有意义的。您还可以做的是将属性传递给顶点着色器,然后在顶点着色器中将它们作为变化传递给片段着色器。它们将在基元上进行插值,并作为片段着色器的输入提供。

答案 1 :(得分:1)

蒂姆的答案当然是正确的。

可能的解决方法是将您的float值存储在2D纹理中,并将纹理坐标(和值的数量)传递给着色器。但是,如果每个顶点有大量浮点值(因为每个片段的所有纹理查找),这可能会变得非常慢。另一个问题是,如果你有很多顶点,这会导致非常大的纹理。 无论如何,在某些情况下,这种方法可能很有用。