diff --git a/spine-cocos2dx/src/spine/v4/SkeletonBatch.cpp b/spine-cocos2dx/src/spine/v4/SkeletonBatch.cpp index 62e39c192..34dc83cee 100644 --- a/spine-cocos2dx/src/spine/v4/SkeletonBatch.cpp +++ b/spine-cocos2dx/src/spine/v4/SkeletonBatch.cpp @@ -163,11 +163,10 @@ cocos2d::TrianglesCommand* SkeletonBatch::addCommand(cocos2d::Renderer* renderer CCASSERT(programState, "programState should not be null"); auto& pipelinePS = command->getPipelineDescriptor().programState; - if (pipelinePS != programState) + if (pipelinePS == nullptr || pipelinePS->getProgram() != programState->getProgram()) { CC_SAFE_RELEASE(pipelinePS); - pipelinePS = programState; - CC_SAFE_RETAIN(pipelinePS); + pipelinePS = programState->clone(); updateProgramStateLayout(pipelinePS); } @@ -175,8 +174,8 @@ cocos2d::TrianglesCommand* SkeletonBatch::addCommand(cocos2d::Renderer* renderer pipelinePS->setUniform(_locMVP, projectionMat.m, sizeof(projectionMat.m)); pipelinePS->setTexture(_locTexture, 0, texture->getBackendTexture()); - command->init(globalOrder, texture, blendType, triangles, mv, flags); - renderer->addCommand(command); + command->init(globalOrder, texture, blendType, triangles, mv, flags); + renderer->addCommand(command); return command; }