注意:之前已经提出了一般性问题,但这种错误似乎真的取决于细节。如果这确实是重复的话,请道歉
我收到属性a_Morph_0
的“超出范围”错误,尽管检查了很多内容:
a_Position
和a_Morph_0
的顺序会相应地更改错误,即它仍会引用a_Morph_0。顶点着色器代码:
attribute vec4 a_Position;
attribute vec4 a_Morph_0;
attribute vec4 a_Morph_1;
uniform float u_MorphWeights[2];
uniform mat4 u_MVPMatrix;
uniform mat4 u_ModelMatrix;
void main() {
vec4 m_Position = a_Position;
m_Position += (u_MorphWeights[0] * a_Morph_0);
m_Position += (u_MorphWeights[1] * a_Morph_1);
gl_Position = u_MVPMatrix * m_Position;
}
一些相关数据:
elements
的数据:Uint16Array(3)[0,1,2] a_Position
的数据:Float32Array(9)[0,0,0,1,0,0,0.5,0,0,0] a_Morph_0
的数据:Float32Array(9)[0,0,0,0,0,0,-1,1,0] a_Morph_1
的数据:Float32Array(9)[0,0,0,0,0,0,1,1,0] 抽奖调用的次数为3.具体来说:
gl.drawElements(4, 3, 5123, 0);
Spector的截图:
我还应该检查其他什么?
答案 0 :(得分:0)
我发现了我的错误 - 如果我们查看Spector输出,变形属性有一个非零的offsetPointer,即36和72
这在我当前的实现中是不正确的,因为在将数据上传到GPU缓冲区之前,数据被切成正确的段。因此,偏移量应始终为0.