新shader uniform 声明需要顺序吗?

UBO ‘’ introduces implicit padding: 4 bytes before ‘’, consider re-ordering the members 这个错误是声明uniform成员需要重新排列顺序吗?需要vec4 - vec2 - float,int 这个顺序吗?这样是不是过于严格咯?很多声明参数是按一个功能来声明的,这样会各种类型相互交叉,按类型排序好像有些不方便

2.3中对shader的语法要求更为严格,不过编辑器给出的错误提示也很清晰,大部分可以根据错误信息来更改

比如:

UBO后边必须要加分号:

HSL.effect - fs - 38: error EFX2209: missing semicolon after UBO ‘ARGS’ declaration

sampler2D必须在UBO外部声明

HSL.effect - fs - 36: error EFX2208: sampler uniforms must be declared outside blocks.

UBO内部不应出现 vec3 成员

HSL.effect - fs: error EFX2204: uniform vec3 a_position: please use 1, 2 or 4-component vectors to avoid implicit padding

UBO内部不允许任何会引入 padding 的成员声明顺序

HSL.effect - fs: error EFX2205: UBO ‘ARGS’ introduces implicit padding: 12 bytes before ‘a_position’, consider re-ordering the members

1赞

有什么书写提示扩展或者插件吗?碰到好多次保存之后异常/错误的情况。有一些又不太好查找问题出在哪儿。我用的vscode

vsCode shaderEffect

uniform vec2 pointList[100]: array UBO members need to be 16 bytes aligned to avoid implicit padding
uniform Properties {
float height;
float width;
vec2 center;
vec2 size;
vec2 pointList[100];
};

这种该怎么处理每种顺序都尝试了下还是不行

改成这样试试 vec4 pointList[100]; 对数组类型成员,每个元素 size 不能小于 vec4

问下怎么解决的啊

shader 报错 - vs - 21: error EFX2201: non-sampler uniforms must be declared in blocks.
这个错什么意思 有大佬知道怎么解决吗

non-sampler uniforms must be declared in blocks.

如果你定义 uniform a; 这样子是有问题的。会有这样子的报错。

uniform Constant {
float a;
float b;
};

1赞