2016-07-29 6 views
0

、WebGLのはVaryings with the same name but different type, or statically used varyings in fragment shader are not declared in vertex shader: textureCoordinatesなぜ私のWebGLシェーダは変化を使用しないようにしますか?私はプログラムに私の頂点とフラグメントシェーダをリンクしようとすると

をスローし、私は私の頂点とフラグメントシェーダの両方にvarying vec2 testを持っている、とコンパイラがすることができないであろう、なぜ何らかの理由を見ることができません両方で同じvaryingを見つけてください。

バーテックスシェーダ:

varying vec2 test; 
void main(void) { 
    gl_Position = vec4(0.0, 0.0, 0.0, 0.0); 
    test = vec2(1.0, 0.0); 
} 

フラグメントシェーダ:

precision highp float; 
varying vec2 test; 
void main(void) { 
    gl_FragColor = vec4(test.xy, 0.0, 1.0); 
} 

テストコード:

const canvas = document.createElement('canvas'); 
gl = canvas.getContext('webgl') 
let vert = gl.createShader(gl.VERTEX_SHADER); 
gl.shaderSource(vert, "varying vec2 test;\nvoid main(void) {\n gl_Position = vec4(0.0, 0.0, 0.0, 0.0);\n test = vec2(1.0, 0.0);\n}"); 
gl.compileShader(vert); 

let frag = gl.createShader(gl.FRAGMENT_SHADER); 
gl.shaderSource(frag, "precision highp float;\nvarying vec2 test;\nvoid main() {\n\tgl_FragColor = vec4(test.xy, 0.0, 1.0);\n}"); 
gl.compileShader(frag); 

let program = gl.createProgram(); 
gl.attachShader(program, vert); 
gl.attachShader(program, frag); 

gl.linkProgram(program); 
gl.useProgram(program); 
+0

あなたはどのブラウザを使用していますか? Chrome for Windows v51.0.2704.103m(64ビット)でエラーは発生しません。ここで私が実行している[正確なコード](http://pastebin.com/6EXAetZ2)です。 – Exide

+0

@ブラウザのアップデートで問題を修正しました。奇妙な。 –

答えて

0

だけの推測が、私はあなたが使用していないからですかしらフラグメントシェーダーのtextureCoordinates。名前は&のものとちょうど良く一致しているので、それは問題ではないと思います。

FRAG:

// The fragment shader is the rasterization process of webgl 

// use float precision for this shader 
precision mediump float; 

// the input texture coordinate values from the vertex shader 
varying vec2 vTextureCoord; 
// the texture data, this is bound via gl.bindTexture() 
uniform sampler2D texture; 
// the colour uniform 
uniform vec3 color; 

void main(void) { 
    // gl_FragColor is the output colour for a particular pixel. 
    // use the texture data, specifying the texture coordinate, and modify it by the colour value. 
    gl_FragColor = texture2D(texture, vec2(vTextureCoord.s, vTextureCoord.t)) * vec4(color, 1.0); 
} 

ヴェール:

// setup passable attributes for the vertex position & texture coordinates 
attribute vec3 aVertexPosition; 
attribute vec2 aTextureCoord; 

// setup a uniform for our perspective * lookat * model view matrix 
uniform mat4 uMatrix; 
// setup an output variable for our texture coordinates 
varying vec2 vTextureCoord; 
void main() { 
    // take our final matrix to modify the vertex position to display the data on screen in a perspective way 
    // With shader code here, you can modify the look of an image in all sorts of ways 
    // the 4th value here is the w coordinate, and it is called Homogeneous coordinates, (x,y,z,w). 
    // It effectively allows the perspective math to work. With 3d graphics, it should be set to 1. Less than 1 will appear too big 
    // Greater than 1 will appear too small 
    gl_Position = uMatrix * vec4(aVertexPosition, 1); 
    vTextureCoord = aTextureCoord; 
} 
+0

私は元の質問を修正して、コードが失敗したことの最小の実例を含むようにしました。私が変わるものを利用しても、それは失敗するようです。 –

0

問題が52.0.2743.82にv51.somethingからOSX用のChromeを更新することで解決した(64私はここで同じことをやりましたビット)奇妙な。

関連する問題