6

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

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

attribute float nodesizes;

着色器编译器抱怨:

OpenGL requires geometry inputs to be arrays

我该如何准确地传递它?

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

glBindAttribLocation(programid, 1, "nodesizes");
glVertexAttribPointer(1, 1, GL_FLOAT, GL_FALSE, 0, array);
glEnableVertexAttribArray(1);

难道我做错了什么?

4

2 回答 2

8

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

顶点着色器:

attribute float nodesize;
varying float vNodesize;

void main() {
    ...
    vNodesize = nodesize;
    ...
}

几何着色器:

varying float vNodesize[];

void main() {
    ...vNodesize[i]...
}

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

于 2011-06-30T14:21:47.187 回答
-1

您使用的是哪个 open gl 版本?

来自 Open GL 语言规范 (4.10.6)

几何处理器上可执行的几何着色器的单次调用将对具有固定数量顶点的已声明输入图元进行操作。这个单一的调用可以发出可变数量的顶点,这些顶点被组装成声明的输出基元类型的基元并传递给后续的管道阶段。

这意味着您需要指定几何假设的基元类型(点、线、三角形、四边形)。

如果我理解正确,您希望几何着色器为每个顶点发出一个立方体。因此,您应该将几何输入类型设置为点。

因此,geom 着色器代码应该像这样开始:

varying float vNodesize[];

void main() {
    ...vNodesize[i]...
}

其中i = 0表示点 =1 表示线,依此类推。

于 2011-06-30T16:43:32.203 回答