Cómo convertir CCSprite a blanco y negro / gris utilizando setBlendFunc

¿Es posible hacer un CCSprite a blanco y negro usando setBlendFunc? Si es así, díganos cómo hacerlo.

Más detalles:

Tengo que hacer que mi juego sprite (background, personaje) salce gris / blanco y negro durante un cierto punto de time. No quiero tomar otra image para esto. He intentado CCTexture2DMutable. Pero la cuestión es que se necesita un recuerdo extra del mismo sprite.

¿Hay alguna manera de usar una image de máscara y hacer que todo sprite a escala de grises. Por favor ayuda.

Esto no es matemáticamente correcto grayscale, pero se ve en blanco y negro:

// setup grayscaling: GLfloat rgba[4] = { 0.65f, 0.65f, 0.65f, 1.0f }; glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE ); glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_DOT3_RGB ); glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, rgba ); glTexEnvi( GL_TEXTURE_ENV, GL_SRC0_RGB, GL_CONSTANT ); glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR ); glTexEnvi( GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE ); glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR ); // ... glDrawArrays() here ... // turn off grayscaling: glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 

Inserte este código en el método de dibujo CCSprite. 0.65f valor 0.65f de rgba se establece experimentalmente, intente sintonizarlo.

No es posible hacerlo a través de setBlendFunc; sin embargo, se puede hacer utilizando CCMutableTexture. Si esta es una alternativa viable, publicaré el código requerido para hacerlo.