在Mac上将变化的数组从顶点传递到几何着色器

MvG*_*MvG 2 arrays opengl shader geometry-shader vertex-shader

我希望能够将每个顶点的任意数量的变化值从顶点着色器传递到几何着色器.我知道OpenGL没有动态数组,所以应该在编译时指定数字.整个过程应该在带有NVIDIA GeForce 9400M显卡的Apple MacBook上运行,并且驱动程序只提供OpenGL 2.1以及一些扩展.

这里的问题似乎是几何着色器在表单或每个顶点有一个元素的数组中获取其输入.据我所知,我的设置中没有可用的数组数组,也没有包含数组的接口块数组.到目前为止,我能想出的最佳解决方案是指定一些变量来传递这些信息,从顶点着色器中的数组中提取并转换回几何着色器中具有特定步长的数组.这样,仍然可以使用计算的索引来执行对值的访问.

有更好,更优雅的方式吗?

小智 5

EXT_geometry_shader4规范:

用户定义的变量变量可以在顶点着色器中声明为数组.这意味着在输入到几何着色器时,必须将它们声明为二维数组.有关更多信息,请参阅OpenGL着色语言规范的4.3.6和7.6节.

例如,在顶点着色器中,您可以指定

varying vec2 value[2];
Run Code Online (Sandbox Code Playgroud)

并且在几何着色器中,这变成二维阵列,例如使用三角形作为输入基元

varying in vec2 value[3][2];
Run Code Online (Sandbox Code Playgroud)

注意数组索引的违反直觉的顺序!还要注意必须使用整数常量显式指定数组维度.使用非常量整数变量或gl_VerticesIn会产生编译器错误.这两个评论都已经在问题中提到的MacBook Pro型号上进行了测试.