arrays - 大型数组中的几何着色器错误

标签 arrays opengl glsl shader marching-cubes

当我尝试链接几何着色器时,它会抛出以下错误:

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/

相关文章:

opengl - (OpenGL 3.1 - 4.2) (GLSL) 高效的统一变量?

javascript - 使用 javascript 添加基于 json 值的动态 div 标签

OpenGL,带光的交错 VBO(顶点、法线和颜色)

opengl - `sqrt` 在 GLSL 中对于负值有何表现?

c - OpenGL 纹理变换

ubuntu - OpenGL 在 Ubuntu 中找不到任何 v3.3 函数

Mysql使用连接和数组匹配

ruby-on-rails - 如何在rails 4中传递数组强参数

javascript - 按多个属性对数组中的对象进行排序

c++ - "hello triangle"没有显示。是否有某些功能未正确使用?