我需要计算我的顶点着色器输出的每个顶点属性的数量大于 GL_MAX_VERTEX_ATTRIBS。有没有一种有效的方法,例如使用统一的索引数组指向多个缓冲区并以这种方式访问每个顶点数据?
最佳答案
这是硬件限制,所以简短的回答是否定的。 如果您考虑其他方法的解决方法,例如使用也有限制的制服,那么这也不是办法。
我能想到的一种可能的方法是从纹理中获取额外的数据。由于您可以从顶点着色器访问纹理,但不支持纹理过滤(您不需要它,所以这对您来说无关紧要)。 使用较新的 OpenGL,可以在纹理中存储相当大量的数据,甚至在顶点着色器中也可以不受限制地访问它们,这似乎是一种可行的方法。
尽管使用这种方法,您需要面对一个问题,您如何知道当前索引,即它是哪个顶点? 您可以查看内置的 gl_VertexID。
关于c++ - 我如何有效地处理 OpenGL 中的大量逐顶点属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19548432/