经过断点尝试,发现官方竟然没设初始化类RenderCommand中的_pipelineDescriptor变量,所以导致这个问题。我解决的办法经过测试是可以的用的,就不知道有没有问题,毕竟我也没用4.0做项目。
//搜索CCRenderCommand.h public中添加如下代码
inline void setProgramState(backend::ProgramState* state) { _pipelineDescriptor.programState = state; }
//再次搜索CCSkin.cpp,找到下列draw函数
void Skin::draw(Renderer *renderer, const Mat4 &/*transform*/, uint32_t flags)
{
auto mv = Director::getInstance()->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
// TODO: implement z order
_quadCommand.setProgramState(getProgramState()); //添加这句代码就可以了
_quadCommand.init(_globalZOrder,
_texture,
_blendFunc,
&_quad,
1,
mv,
flags);
renderer->addCommand(&_quadCommand);
}