我想在WebGl和JavaScript中做一个简单的应用程序,并且当我在网上找到一些教程时,在创建一些基本着色器时遇到了一个奇怪的问题。它创建着色器程序的功能如下:WebGL着色器创建问题
this.CreateShaderProgram = function(vertexShader, fragmentShader)
{
var tmp = this.gl.createProgram();
var tempVert = this.gl.createShader(this.gl.VERTEX_SHADER);
this.gl.shaderSource(tempVert, vertexShader);
this.gl.compileShader(tempVert);
if(!this.gl.getShaderParameter(tempVert, this.gl.COMPILE_STATUS)) {
this.Log("invalid shader : " + vertexShader);
return null;
};
var tempFrag = this.gl.createShader(this.gl.FRAGMENT_SHADER);
this.gl.shaderSource(tempFrag, fragmentShader);
this.gl.compileShader(tempFrag);
if(!this.gl.getShaderParameter(tempFrag, this.gl.COMPILE_STATUS)) {
this.Log("invalid shader : " + fragmentShader);
return null;
};
this.gl.attachShader(tmp, tempVert);
this.gl.attachShader(tmp, tempFrag);
return tmp;
}
而且2个着色器看起来像:
attribute vec3 aVertexPosition;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
void main(void) {
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
}
--------------------------------------------
#ifdef GL_ES precision highp float;
#endif
void main(void) {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); };
奇怪的是,第一个顶点着色器编译成功,但是对于片段着色器它崩溃了“this.gl.compileShader(tempFrag);”线,我不明白为什么。
是的......这是一个初学者的错误。我现在用一个字符串编写了整个着色器,以使其更快地工作,但是我忘了将它包含在本应该出现的位置。 – 2010-11-28 21:04:01