【问题标题】:Static array in GLSL uniform block [duplicate]GLSL统一块中的静态数组[重复]
【发布时间】:2019-05-15 21:03:24
【问题描述】:

我有一个带有这个统一块的 GLSL 计算着色器:

#define MAX_OCTAVE_COUNT 8

layout(std140) uniform Parameters {
    float time;
    int octaveCount, octaveSize, executionCount;
    float octaveWeight[MAX_OCTAVE_COUNT];
    int chunkSize;
} params;

我将这个结构(D 语言)传递给它:

struct GenParams {
    GLfloat time;
    GLint octaveCount, octaveSize, executionCount;
    GLfloat[MAX_OCTAVE_COUNT] octaveWeight;
    GLint chunkSize;
}

但是,对于octaveWeight[x],其中x > 0,数据未通过(对于x = 0 是)。当我将浮动的静态数组更改为两个vec4(仅在着色器端)时,它可以工作。

这里有什么问题?

【问题讨论】:

    标签: opengl glsl


    【解决方案1】:

    见:https://computergraphics.stackexchange.com/questions/4454/opengl-es-3-uniform-buffer-object-with-float-array

    如果成员是标量或向量数组,则基对齐 和数组步幅设置为匹配单个数组的基本对齐方式 元素,根据规则(1),(2)和(3),并四舍五入到 vec4的基本对齐。数组末尾可能有填充;这 数组后面成员的基本偏移量向上舍入到 基本对齐的下一个倍数。

    因此数组中的浮点数被四舍五入为 vec4 大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-09
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      相关资源
      最近更新 更多