目的
有时候做需要让图片或者按钮变灰,效果比较好的是修改着色器程序。
环境
1、cocos2dx版本
cocos3.4
2、vs版本
vs2013
具体步骤
1、添加顶点着色器代码字符串。
GLchar my_vert[] = "\
attribute vec4 a_position;\n\
attribute vec2 a_texCoord;\n\
attribute vec4 a_color;\n\
\n\
#ifdef GL_ES \n\
varying lowp vec4 v_fragmentColor; \n\
varying mediump vec2 v_texCoord; \n\
#else \n\
varying vec4 v_fragmentColor;\n\
varying vec2 v_texCoord; \n\
#endif \n\
\n\
void main() \n\
{ \n\
gl_Position = CC_PMatrix * a_position; \n\
v_fragmentColor = a_color; \n\
v_texCoord = a_texCoord; \n\
}";
2、添加片段着色器代码字符串
GLchar my_frag[] = "\
#ifdef GL_ES \n\
precision lowp float; \n\
#endif \n\
\n\
varying vec4 v_fragmentColor; \n\
varying vec2 v_texCoord; \n\
\n\
void main() \n\
{\n\
gl_FragColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);\n\
float f=(gl_FragColor.r+gl_FragColor.g+gl_FragColor.b)/3.0f; \n\
gl_FragColor=vec4(f,f,f,gl_FragColor.a);\n\
}";
3、创建新的GLProgram
GLProgram *p = GLProgram::createWithByteArrays(my_vert, my_frag);
4、将GLProgram加入GLProgramCache
GLProgramCache::getInstance()->addGLProgram(p, "my_pro");
5、替换掉目标的GLProgram
图片Sprite
auto sprite = Sprite::create("HelloWorld.png");
sprite->setGLProgram(p);