我正在尝试在webgl中使用多个着色器程序,但仍然会遇到问题.
似乎如果我在程序中有不同数量的顶点着色器属性,那么我没有得到任何没有错误的渲染.是否有一些约束意味着程序必须具有相同数量的属性?更改程序时是否需要禁用/启用属性位置?
似乎只是创建多个程序导致问题(我甚至不必使用第二个着色器,只是它被创建的事实导致问题).
要创建属性,我正在使用以下代码段(当所有程序中的属性数相同时,工作正常):
for ( var i=0 ; i<vertexAttributes.length ; i++ )
{
shaderProgram[vertexAttributes[i].name] = gl.getAttribLocation(shaderProgram,vertexAttributes[i].name);
gl.enableVertexAttribArray(shaderProgram[vertexAttributes[i].name]);
}
Run Code Online (Sandbox Code Playgroud)
很抱歉发布了如此大量的代码,但这最能说明问题所在.这是来自learningwebgl.com教程之一的代码,我所做的就是添加第二对着色器("shader2-fs"和"shader2-vs")和一个名为initShaders2的新函数.如果在webGLStart()中调用initShaders2(因为它在代码中),那么什么都没有被绘制?我很困惑!
<script type="text/javascript" src="two_files/glMatrix-0.js"></script>
<script type="text/javascript" src="two_files/webgl-utils.js"></script>
<script id="shader-fs" type="x-shader/x-fragment">
precision mediump float;
varying vec4 vColor;
void main(void) {
gl_FragColor = vColor;
}
</script>
<script id="shader-vs" type="x-shader/x-vertex">
attribute vec3 aVertexPosition;
attribute vec4 aVertexColor;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
varying vec4 vColor;
void main(void) {
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
vColor = aVertexColor;
}
</script>
<script id="shader2-fs" type="x-shader/x-fragment"> …Run Code Online (Sandbox Code Playgroud)