私は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);でクラッシュします。私は理由を理解できません。それはコンパイルしていない理由がわからない場合は、次のようにコードを変更
はい...このような初心者の間違いです。私はそれを速く動かすために、現在は一本の文字列でシェーダ全体を書いていましたが、どこに置いておかなければならなかったかを\ n入れて忘れました。 –