当我尝试链接几何着色器时,它会抛出以下错误:
0(76) : error C5041: cannot locate suitable resource to bind variable "triTable". Possibly large array.
引用着色器中声明的此数组:
const int triTable[256][16] =
{ { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
{ 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
{ 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
...
...
...
{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } };
数组相当大。这是否与数组太大而无法在着色器中声明有关,或者是否存在其他问题?
最佳答案
三角形数据并不意味着是常数(或制服)。
是的,数据太大,无法放入数组中。使用 OpenGL 时,统一数据和其他类型的数据存在硬件限制。
最好您应该将三角形数据放入顶点数组对象并使用它进行渲染,但是如果由于某种原因您希望每次调用着色器时都可以使用三角形数据,您可以通过将顶点编码为纹理而不是统一数组,然后从着色器内的纹理中获取。
一般来说,纹理解决了着色器调用之间需要大量常量数据的问题。
请注意,您可以获得 float 纹理格式,这可能是您用于顶点数据的格式。
关于arrays - 大型数组中的几何着色器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29262469/