[已解决]js3.0 beta shader无效

代码如下


...

       this.sprite.runAction(cc.Sequence.create(rotateToA, scaleToA));
        helloLabel.runAction(cc.Spawn.create(cc.MoveBy.create(2.5, cc.p(0, size.height - 40)),cc.TintTo.create(2.5,255,125,0)));
        graySprite(this.sprite);   
        return true;
    }
});
function graySprite(sprite)
{
    if(sprite)
    {
        var shader = cc.GLProgram.create("gray.vsh", "gray.fsh");
        shader.retain();
        //shader.initWithByteArrays("res/gray.vsh", "res/gray.fsh");
        //shader.initWithFilenames("res/gray.vsh", "res/gray.fsh");
        shader.addAttribute(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION);
        shader.addAttribute(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR);
        shader.addAttribute(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS);

        shader.link();
        shader.updateUniforms();
        sprite._shaderProgram = shader;
    }    
}
            

是从官网抄的demo
shader在cocos2d-x 3.1 cpp 环境下可以正确显示
在cocos2d-js 3.0 beta 环境下编译通过后无法正确显示

求大神指教是我哪里用错了么

3.0的shader有bug,而且h5和jsb的还不一样
我也想实现变灰,之前调了好久,最后是下面这样解决的——

        if(!cc.GLProgram.createWithByteArrays){
            cc.GLProgram.createWithByteArrays = function(vert, frag){
                var shader = cc.GLProgram.create();  
                shader.initWithVertexShaderByteArray(vert, frag); 
                shader.link();  
                shader.updateUniforms();
                setTimeout(function(){
                    shader.link();  
                    shader.updateUniforms();                
                }, 0);
                return shader;
            }
        }

        var isHtml5 = (typeof document !== 'undefined');
        var SHADER_POSITION_GRAY_FRAG = 
            "varying vec4 v_fragmentColor;\n"+  
            "varying vec2 v_texCoord;\n"+    
            (isHtml5? "uniform sampler2D CC_Texture0;\n":"")+
            "void main()\n"+         
            "{\n"+
            "    vec4 v_orColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);\n"+
            "    float gray = dot(v_orColor.rgb, vec3(0.299, 0.587, 0.114));\n"+
            "    gl_FragColor = vec4(gray, gray, gray, v_orColor.a);\n"+
            "}\n";
        
        var SHADER_POSITION_GRAY_VERT = 
            "attribute vec4 a_position;\n"+
            "attribute vec2 a_texCoord;\n"+
            "attribute vec4 a_color;\n"+
            "\n"+
            "varying vec4 v_fragmentColor;\n"+
            "varying vec2 v_texCoord;\n"+
            "\n"+                               
            "void main()\n"+
            "{\n"+                           
            "gl_Position = "+ (isHtml5?"(CC_PMatrix * CC_MVMatrix)":"CC_PMatrix") + " * a_position;\n"+
            "v_fragmentColor = a_color;\n"+
            "v_texCoord = a_texCoord;\n"+
            "}";

        function graySprite(sprite){ 
            var shader = cc.GLProgram.createWithByteArrays(SHADER_POSITION_GRAY_VERT, SHADER_POSITION_GRAY_FRAG);
                shader.addAttribute(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION);  
                shader.addAttribute(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR);  
                shader.addAttribute(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS);                
                sprite.setGLProgram(shader);  
        }

```

找到问题了,setShaderProgram被废弃了。。。

被废弃了?那你是如何处理的呢?