Iphone 更新Cocos2d中片段着色器中的纹理

Iphone 更新Cocos2d中片段着色器中的纹理,iphone,ios,opengl-es,cocos2d-iphone,shader,Iphone,Ios,Opengl Es,Cocos2d Iphone,Shader,我正在尝试更新碎片着色器中的纹理,但没有任何运气。看起来着色器只读取纹理一次,然后没有更新。这是我的密码: 着色器初始化 CCGLProgram *shader = [[CCGLProgram alloc] initWithVertexShaderFilename:@"vertex.vsh" fragmentShaderFilename:@"fragment.fsh"]; [shader addAttribute:@"P" index:0]; [shader addAttribute:@"Cl"

我正在尝试更新碎片着色器中的纹理,但没有任何运气。看起来着色器只读取纹理一次,然后没有更新。这是我的密码:

  • 着色器初始化

    CCGLProgram *shader = [[CCGLProgram alloc] initWithVertexShaderFilename:@"vertex.vsh" fragmentShaderFilename:@"fragment.fsh"];
    [shader addAttribute:@"P" index:0];
    [shader addAttribute:@"Cl" index:1];
    [shader addAttribute:@"st" index:2];
    [shader link];
    [shader updateUniforms];
    mutableSprite.shaderProgram = shader;
    uniformAlphaTexture = glGetUniformLocation(shader->_program, "alphaTexture");
    
  • 着色器更新

    CCGLProgram *shader = mutableSprite.shaderProgram;
    [shader use];
    ccGLBindTexture2DN(1, alphaSprite.texture.name);
    glUniform1i(uniformAlphaTexture, 1);
    

  • 所以我将alphaSprite发送到着色器。第一次看起来不错,但在向alphaSprite添加孔(rgba)并调用代码#2后,着色器内部的纹理没有更新,它仍然使用初始alphaSprite纹理。

    可能是一些问题,例如活动纹理。我一直使用相同的着色器交换纹理。我也希望这一切都发生在同一条线上…你是对的。代码是正确的,我尝试从主包中随机输入纹理,效果很好。将所有这些内容发送到后台线程是正确的吗?应该可以,但是如果你想这样做,你还需要做一些事情。每个线程都应该有自己的上下文,因此在某个时候,您必须在后台线程上创建上下文,并将其设置为当前上下文。要将内容与另一个上下文一起使用,您需要创建一个上下文“共享组”,并将两个上下文绑定到该上下文。试着看一下这个: