GLSL几何着色器和通用顶点属性

kam*_*iro 6 glsl geometry-shader

所以我现在已经尝试了一段时间,将顶点属性数组传递给几何着色器.它是一个float数组(其中每个顶点的属性只是一个浮点值)

现在,当我把它放在几何着色器中时:

attribute float nodesizes;
Run Code Online (Sandbox Code Playgroud)

着色器编译器抱怨:

OpenGL requires geometry inputs to be arrays
Run Code Online (Sandbox Code Playgroud)

我如何完全传递它?

另外,这是我的顶点属性的代码:

glBindAttribLocation(programid, 1, "nodesizes");
glVertexAttribPointer(1, 1, GL_FLOAT, GL_FALSE, 0, array);
glEnableVertexAttribArray(1);
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?

Chr*_*ica 8

几何着色器不会获取属性.顶点着色器得到attributes并输出varyings(用旧语法说).然后可以在几何着色器中读取它们,但作为数组,一个几何着色器调用遵循多个顶点着色器调用.像这样的东西:

顶点着色器:

attribute float nodesize;
varying float vNodesize;

void main() {
    ...
    vNodesize = nodesize;
    ...
}
Run Code Online (Sandbox Code Playgroud)

几何着色器:

varying float vNodesize[];

void main() {
    ...vNodesize[i]...
}
Run Code Online (Sandbox Code Playgroud)

名称是任意的,但当然两个着色器中的变化名称必须匹配.我希望你不要搞乱顶点着色器和几何着色器这两个术语.