【发布时间】:2012-02-05 03:48:38
【问题描述】:
我有一个现有的 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);
};
【问题讨论】:
标签: javascript glsl shader webgl