通过GLSL着色器传递数据

时间:2014-11-06 22:19:46

标签: c++ opengl glsl geometry-shader

我在通过着色器传递数据时遇到了一些麻烦,尤其是几何着色器。我之前从未使用过几何着色器,所以我很难理解它传递数据的方式。

基本上,在几何着色器之前,我只是使用输入/输出限定符将数据从顶点着色器传递到片段。就像我有:

顶点着色器!

out vec3 worldNormal;
out vec3 worldView;

Fragment Shader:

in vec3 ex_worldNorm;
in vec3 ex_worldView;

那么,对于Geometry Shader,我是否必须做这样的事情才能传递数据?

in vec3 ex_worldNorm[];
in vec3 ex_worldView[];

out vec3 ex_worldNorm[];
out vec3 ex_worldNorm[];

我的问题是,如何在每个Shader之间正确传递数据?喜欢,这是这样做的吗? (因为它不适合我!)

1 个答案:

答案 0 :(得分:1)

输入的无界数组对于Geomtery Shader是正确的(大小将由布局限定符中的输入类型确定),但输出 不能 是阵列。

通过将值写入所有输出变量然后调用EmitVertex (...),您可以一次输出一个顶点。


这是一个非常简单的几何着色器示例,可以满足你的需要:

EmitVertex (...)