小编Dan*_*ton的帖子

WebGL中的多个程序不起作用

我正在尝试在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)

javascript shader opengl-es glsl webgl

1
推荐指数
1
解决办法
3154
查看次数

标签 统计

glsl ×1

javascript ×1

opengl-es ×1

shader ×1

webgl ×1