Firefox 将向量数组传递给着色器

Firefox 将向量数组传递给着色器,firefox,webgl,twgl.js,Firefox,Webgl,Twgl.js,Firefox试图向着色器传递Vec3数组,但给了我以下警告: WebGL警告:统一设置器:(统一u_颜色[0])“值”长度 (4) 必须是的大小的正整数倍 此外,它只渲染黑色,而不是给定的颜色 const colrs=[ [239, 71, 111], [255, 209, 102], [6, 214, 160], [17, 138, 178] ], dmnsn=[1200300], glCtx=(()=>twgl.getContext(document.createElement(“can

Firefox试图向着色器传递Vec3数组,但给了我以下警告:

WebGL警告:统一设置器:(统一u_颜色[0])“值”长度 (4) 必须是的大小的正整数倍

此外,它只渲染黑色,而不是给定的颜色

const colrs=[
[239, 71, 111],
[255, 209, 102],
[6, 214, 160],
[17, 138, 178]
],
dmnsn=[1200300],
glCtx=(()=>twgl.getContext(document.createElement(“canvas”))(
setDefaults({attribPrefix:“a_”})
);
var bfInf=twgl.primitives.createXYQuadBufferInfo(glCtx),
pgInf=twgl.createProgramInfo(glCtx,[“vs”,“fs]”);
函数rendr(fbi、pi、u){
twgl.bindFramebufferInfo(glCtx,fbi);
twgl.drawObjectList(glCtx[
{
节目信息:pi,
bufferInfo:bfInf,
制服:u
}
]);
}
函数prep(){
glCtx.canvas.width=dmnsn[0];
glCtx.canvas.height=dmnsn[1];
document.body.append(glCtx.canvas);
rendr(null,pgInf,{u_colors:colrs});
}
prep()

属性向量4 a_位置;
属性向量2 a_texcoord;
可变矢量2 v_texcoord;
void main(){
v_texcoord=a_texcoord;
gl_位置=a_位置;
}
高精度浮点;
统一的vec3 u_颜色[4];
void main(){
gl_FragColor=vec4(u_颜色[0],1.0);
}

WebGL不需要数组数组

const someArrayWith4ArraysOf3Values = [
  [11, 22, 33],
  [44, 55, 66],
  [77, 88, 99],
  [10, 11, 12],
];
gl.uniform3fv(some4ElementVec3Uniform, someArrayWith4ArraysOf3Values); // bad
它需要一个平面阵列

const someArrayWith12Values = [
  11, 22, 33,
  44, 55, 66,
  77, 88, 99,
  10, 11, 12,
];
gl.uniform3fv(some4ElementVec3Uniform, someArrayWith12Values); // good
此外,着色器中的颜色是从0到1的浮点值,因此您可能希望在着色器中将颜色设置为从0到1的值或除以255

const colrs=[
[1, 0.7, 0.5],
[255, 209, 102],
[6, 214, 160],
[17, 138, 178]
].flat(),
dmnsn=[1200300],
glCtx=(()=>twgl.getContext(document.createElement(“canvas”))(
setDefaults({attribPrefix:“a_”})
);
var bfInf=twgl.primitives.createXYQuadBufferInfo(glCtx),
pgInf=twgl.createProgramInfo(glCtx,[“vs”,“fs]”);
函数rendr(fbi、pi、u){
twgl.bindFramebufferInfo(glCtx,fbi);
twgl.drawObjectList(glCtx[
{
节目信息:pi,
bufferInfo:bfInf,
制服:u
}
]);
}
函数prep(){
glCtx.canvas.width=dmnsn[0];
glCtx.canvas.height=dmnsn[1];
document.body.append(glCtx.canvas);
rendr(null,pgInf,{u_colors:colrs});
}
prep()

属性向量4 a_位置;
属性向量2 a_texcoord;
可变矢量2 v_texcoord;
void main(){
v_texcoord=a_texcoord;
gl_位置=a_位置;
}
高精度浮点;
统一的vec3 u_颜色[4];
void main(){
gl_FragColor=vec4(u_颜色[0],1.0);
}

谢谢!哦,是的,我忘了颜色是浮动的:)