我使用的是3.6版本,发现网上关于shader的教程不多,目前需要用到高亮和变灰的效果,然后从cpptest里面找到了.fsh的文件,然后按照例子的api自己写一个类,但是试了很久都没有效果,求高手指点哪里出错,谢了!
bool cGameButton::setEffect()
{
auto fileUtiles = cocos2d::FileUtils::getInstance();
auto fragmentFullPath = fileUtiles->fullPathForFilename(“shaders/grey.fsh”);
auto fragSource = fileUtiles->getStringFromFile(fragmentFullPath);
auto glprogram = cocos2d::GLProgram::createWithByteArrays(cocos2d::ccPositionTextureColor_noMVP_vert, fragSource.c_str());
glprogram->retain();
// set
m_pState = cocos2d::GLProgramState::getOrCreateWithGLProgram(glprogram);
m_pState->retain();
// cocos2d::Vec3 color(1.0f, 0.2f, 0.3f);
// GLfloat radius = 0.01f;
// GLfloat threshold = 1.75;
// m_pState->setUniformVec3(“u_outlineColor”, color);
// m_pState->setUniformFloat(“u_radius”, radius);
// m_pState->setUniformFloat(“u_threshold”, threshold);
// cocos2d::Size size = getTexture()->getContentSizeInPixels();
// m_pState->setUniformVec2(“resolution”, size);
// m_pState->setUniformFloat(“blurRadius”, 10);
// m_pState->setUniformFloat(“sampleNum”, 5);
//
setGLProgramState(m_pState);
glprogram->link();
glprogram->updateUniforms();
return true;
}
void cGameButton::draw(cocos2d::Renderer *renderer, const cocos2d::Mat4 &transform, uint32_t flags)
{
#if CC_USE_CULLING
// Don’t do calculate the culling if the transform was not updated
_insideBounds = (flags & FLAGS_TRANSFORM_DIRTY) ? renderer->checkVisibility(transform, _contentSize) : _insideBounds;
if(_insideBounds)
#endif
{
cocos2d::GLProgramState* tmpState = m_pState ? m_pState : getGLProgramState();
_quadCommand.init(_globalZOrder, _texture->getName(), tmpState, _blendFunc, &_quad, 1, transform, flags);
renderer->addCommand(&_quadCommand);
}
}