请问怎么切换回默认 Shader ?

要实现的效果是:把很多精灵贴在一个简单的 3D 曲面上,每帧渲染一次

现在的方案是:
1.在一个节点上创建 renderTexture ,并应用 Shader
2.在 update 里 visit() 另一个放置精灵的节点,设置 spriteFrame._texture = renderTexture._texture
结果 Shader 被传递给了另一个节点的所有子节点,导致他们的贴图都换了。

请问有什么好的解决方案? 如果要切换默认 Shader,那切换到默认 Shader 的方式是什么?

两种方式:

  1. 使用cocos的接口this.sp._sgNode.setState(isGray ? 1: 0);
    2.把默认shader的内容放到一个自定义的shader里面,当自定义shader使用

参考这个帖子
http://forum.cocos.com/t/shader-shader/47738/7

谢谢。看了你写的文章,学到了很有用的东西。
现在 setState() 方法没有了,我找了一个不知道是不是默认 Shader:

#ifdef GL_ES
precision lowp float;
#endif

varying vec4 v_fragmentColor;
varying vec2 v_texCoord;

void main()
{
gl_FragColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);
}

但我的问题还没有解决,可能是别的代码写错了,我再研究一下。

我刚试了,这个方法是有的。
cocos creator 1.9.0

properties: {
    sprBackGround: cc.Sprite,
}
...
this.sprBackGround._sgNode.setState(1);

创建新的spriteFrame就不会有你描述的问题,不要去修改spriteFrame._texture,因为spriteFrame是多个节点共享的一个实例。

谢谢大大回复。 的确是改了_texture 的问题。

你说的没错,是我看错位置了。
这个方法在 cc.Sprite 的 ._sgNode 下,我看的是 精灵实例的节点的 ._sgNode
还是基本的东西没有完全掌握。