第二种方式就是使用shader,这种方式的优点是不需要修改源代码,但性能上不如第一种方式。
编写shader涉及到顶点着色器和片断着色器,前者使用sprite默认的即可。sprite使用哪个着色器,只要看一下CCSprite.cpp里这句就找到了
1 | setGLProgramState(GLProgramState::getOrCreateWithGLProgramName(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP, texture)); |
然后我们稍微改动一下片断着色器,如下
1 | #ifdef GL_ES |
我们通过代码将mask作为一个Texture传进来,然后取它的每个像素的alpha值拿来用。
使用代码为:
1 | GLProgram *gp = GLProgram::createWithFilenames("res/test.vert", "res/test.frag"); |
这里只需要小心一点不要把s->setGLProgramState(gs);写成s->setGLProgram(gp);就行,node上同时提供了这两个接口,但使用后者会创建一个新的GLProgramState,我们已经创建的gs也就失去了作用了
Ursprünglicher Link: http://yangguang1029.github.io/2016/11/28/cocos-jpgmaskpng2/
Copyright-Erklärung: 转载请注明出处.