【问题标题】:Variable size array GLSL可变大小数组 GLSL
【发布时间】:2016-09-17 01:19:37
【问题描述】:

我正在为我正在构建的 OpenGL/Java 引擎创建着色器。我已经搜索了一段时间,但我找不到拥有可变大小数组的方法。我知道我可以创建一个静态大小的,例如:

uniform vec3 variable[4];

但是,如果可能的话,我将如何根据我从 CPU 加载到着色器的内容来创建大小为 X 的数组。

提前致谢!

【问题讨论】:

    标签: java glsl lwjgl


    【解决方案1】:

    GLSL 不允许改变数组大小。但是,从 OpenGL 4 开始,它确实支持大小可变的着色器存储缓冲区对象。

    更多关于 SSBO 的信息:https://www.opengl.org/wiki/Shader_Storage_Buffer_Object

    现在考虑一下,也可以将数据编码为纹理,然后将其传递给着色器。例如,4 个 rgba 组件中的每一个都可能是您想要传递的数据的 1 个字节。对于大于一个字节的数据,您可以将其分解为字节。

    【讨论】:

      【解决方案2】:

      你不能。

      要么按照 CConard96 所说的去做,要么如果您不能使用 SSBO,那么只需声明一个硬编码的最大值并设置一个您需要的较低值。

      例如像 Nicol Bolas 所说的here

      #define MAX_NUM_TOTAL_LIGHTS 100
      struct Light {
        vec3 position;
        float padding;
      }
      layout (std140) uniform Lights {
        Light light[MAX_NUM_TOTAL_LIGHTS];
        int numLights;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-29
        • 2017-06-16
        • 1970-01-01
        • 2015-10-24
        • 2018-06-01
        • 2019-06-28
        • 1970-01-01
        • 2012-05-01
        相关资源
        最近更新 更多