相关疑难解决方法(0)

在 WebGL 中切换着色器程序

我有一个现有的 WebGL 渲染器(代码太多,无法共享),它曾经非常简单:它只有一个顶点着色器、一个片段着色器和一个具有两者的着色器程序。它用于渲染四边形。

我正在尝试扩展它以拥有第二个着色器程序,用于渲染点精灵。它有自己的顶点属性数组,以及第二个顶点着色器、片段着色器和着色器程序。

我似乎无法在两者之间正确切换:我不断出现显示故障、随机消失的对象等。这是我必须在它们之间切换的两个功能。知道我错过了什么吗?

GLWrapProto.switchQuadProgram = function ()
{
    var gl = this.gl;

    gl.useProgram(this.shaderProgramPoint);

    gl.disableVertexAttribArray(this.locAPosPoint);

    gl.useProgram(this.shaderProgram);

    gl.enableVertexAttribArray(this.locAPos);
    gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
    gl.vertexAttribPointer(this.locAPos, 2, gl.FLOAT, false, 0, 0);

    gl.enableVertexAttribArray(this.locATex);
    gl.bindBuffer(gl.ARRAY_BUFFER, this.texcoordBuffer);
    gl.vertexAttribPointer(this.locATex, 2, gl.FLOAT, false, 0, 0);
};

GLWrapProto.switchPointProgram = function ()
{
    var gl = this.gl;

    gl.useProgram(this.shaderProgram);

    gl.disableVertexAttribArray(this.locAPos);
    gl.disableVertexAttribArray(this.locATex);

    gl.useProgram(this.shaderProgramPoint);

    gl.enableVertexAttribArray(this.locAPosPoint);
    gl.bindBuffer(gl.ARRAY_BUFFER, this.pointBuffer);
    gl.vertexAttribPointer(this.locAPosPoint, 4, gl.FLOAT, false, 0, 0);
};
Run Code Online (Sandbox Code Playgroud)

javascript shader glsl webgl

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

标签 统计

glsl ×1

javascript ×1

shader ×1

webgl ×1