2013-11-19 3 views
0

Я пытаюсь преобразовать маленькую игру, требующую emscripten. Мне удалось собрать его без каких-либо ошибок, но я получаю следующее сообщение об ошибке при попытке компиляции/использовать шейдеры WebGL: INVALID_OPERATION: useProgram: программа не действует WebGL: INVALID_OPERATION: getAttribLocation: программа не связанабегущий шейдерный код в emscripten

это шейдер код

вершина:

attribute vec3 vertexPosition_modelspace; 
attribute vec2 vertexUV; 
varying vec2 UV; 
varying float alfa; 
uniform mat4 Proj; 

void main() 
{ 
    UV = vertexUV; 
    alfa = vertexPosition_modelspace.z; 
    gl_Position = Proj * vec4(vertexPosition_modelspace, 1.0); 

} 

фрагмент

varying vec2 UV; 
varying float alfa; 
uniform sampler2D myTextureSampler; 

    void main() 
    { 
     gl_FragColor = texture2D(myTextureSampler, UV); 
     gl_FragColor.a =gl_FragColor.a* alfa; 
    } 

Любая помощь? Спасибо.

ответ

2

Я думаю, что вам не хватает

precision mediump float; 

в верхней части фрагмента шейдер. OpenGL ES 2.0 (и, следовательно, WebGL) требует указания точности в шейдерах фрагментов.

В идеале ваша оригинальная программа на C/C++ проверила бы ошибки и напечатала ошибки, потому что браузер, вероятно, сказал бы вам об этой проблеме. При желании вы могли бы, вероятно, оберните linkProgram и compileShader что-то вроде

gl = canvas.getContext("experimental-webgl"); 
oldLinkProgram = gl.linkProgram; 
gl.linkProgram = function() { 

    // call the original linkProgram 
    oldLinkProgram.apply(gl, arguments); 

    var program = arguments[0]; 

    // Check the link status 
    var linked = gl.getProgramParameter(program, gl.LINK_STATUS); 
    if (!linked) { 
     console.error("ERROR !!!! linking program: " + gl.getProgramInfoLog(program)); 
    } 
}; 

oldCompileShader = gl.compileShader; 
gl.compileShader = function() { 

    // call the original compileShader 
    oldCompileShader.apply(gl, arguments); 

    var shader = arguments[0]; 

    // Check the compile status 
    var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS); 
    if (!compiled) { 
     console.error("ERROR !!!! compiling program: " + gl.getShaderInfoLog(shader)); 
    } 
}; 

Затем проверьте консоль вашего браузера на наличие ошибок.

Смежные вопросы