为什么我的Float32List没有按预期传递到我的着色器中的vec4? vec2工作正常

时间:2014-10-11 17:45:27

标签: dart glsl webgl shader

我是Dart,WebGL,GLSL的新手;但是我有一些简单的代码将一些精灵渲染到屏幕上。在尝试添加对渲染纹理部分的支持时(为了支持精灵表),我遇到了一些我无法弄清楚的奇怪行为(我不认为这是一个错误,我认为我是误解;但我可以弄清楚!)。

我设法将代码剥离成非常简单的东西,我可以在它之间切换工作与否;在我的着色器中使用以下行:

vTextureCoord = aTextureCoord * aTextureRect.xy / aTextureFullSize; // WORKS FINE
vTextureCoord = aTextureCoord * aTextureRect.zw / aTextureFullSize; // RENDERS BLANK SQUARE

请注意,这些行之间的唯一区别是使用.xy vs .zw

aTextureRect属性声明如下:

attribute vec4 aTextureRect;

我这样设置:

aTextureRect = _gl.getAttribLocation(program, "aTextureRect");
_gl.vertexAttrib2fv(shader.aTextureRect, new Float32List.fromList([128.0, 128.0, 128.0, 128.0]));

请注意,我将所有4个浮点数设置为相同的值。

似乎只设置了我vec4的前两部分(xy);其他两个都不是128(我通过将它们分别代替y来证实这一点,并且没有任何渲染。)

这是我在着色器中使用的第一个vec4;所有其他属性都是vec2,所以我认为它的工作方式有所不同;但我正在努力弄清楚是什么!

1 个答案:

答案 0 :(得分:1)

哦,伙计,我已经盯着屏幕太久了!

_gl.vertexAttrib2fv(shader.aTextureRect, new Float32List.fromList([128.0, 128.0, 128.0, 128.0]));
                ^

应该

_gl.vertexAttrib4fv(shader.aTextureRect, new Float32List.fromList([128.0, 128.0, 128.0, 128.0]));
                ^

至少WebGL崩溃并告诉我,我传递的数据超出预期,是吗? < /讽刺>