cocos2dx使用自定义shader

自定义shader,首先得要定义自己的顶点着色器和像素着色器,下面是一个很简单的彩色转灰度图的shader

/*顶点着色器*/
const char* vert = R"( attribute vec4 a_position; attribute vec2 a_texCoord; varying vec2 v_texCoord; void main() { gl_Position = CC_PMatrix * a_position; v_texCoord = a_texCoord; } )";
/*像素着色器*/
const char* frag = R"( varying vec2 v_texCoord; void main() { vec4 col = texture2D(CC_Texture0, v_texCoord); //对于彩色转灰度,有一个很著名的心理学公式:Gray = R*0.299 + G*0.587 + B*0.114 gl_FragColor = col.r*0.299 + col.g*0.587 + col.b*0.114; //保持alpha值不变 gl_FragColor.a = col.a; } )";

cocos2dx中使用GLProgram来管理shader,使用GLProgramCache来缓存加载完成的GLProgram

GLProgram* p = GLProgram::createWithByteArrays(vert, frag);
GLProgramCache::getInstance()->addGLProgram(p, "gray");

之后就可以在需要的地方使用这个shader了

auto sprite = Sprite::create("HelloWorld.png");
addChild(sprite);
sprite->setPosition(visibleSize.width / 2, visibleSize.height / 2);
auto shaderState = GLProgramState::getOrCreateWithGLProgramName("gray");
sprite->setGLProgramState(shaderState);

效果图对比
cocos2dx使用自定义shader_第1张图片

你可能感兴趣的:(cocos2d-x)