[cocos2dx] Closes #2501, batch command needs to be created after two color tint vertex colors have been set.

This commit is contained in:
Mario Zechner 2024-05-02 14:31:21 +02:00
parent 511dd0c1da
commit da3d1cd4b3

View File

@ -460,17 +460,11 @@ namespace spine {
trianglesTwoColor.indices = twoColorBatch->allocateIndices(trianglesTwoColor.indexCount); trianglesTwoColor.indices = twoColorBatch->allocateIndices(trianglesTwoColor.indexCount);
memcpy(trianglesTwoColor.indices, _clipper->getClippedTriangles().buffer(), sizeof(unsigned short) * _clipper->getClippedTriangles().size()); memcpy(trianglesTwoColor.indices, _clipper->getClippedTriangles().buffer(), sizeof(unsigned short) * _clipper->getClippedTriangles().size());
#if COCOS2D_VERSION < 0x00040000
TwoColorTrianglesCommand *batchedTriangles = lastTwoColorTrianglesCommand = twoColorBatch->addCommand(renderer, _globalZOrder, texture->getName(), _glProgramState, blendFunc, trianglesTwoColor, transform, transformFlags);
#else
TwoColorTrianglesCommand *batchedTriangles = lastTwoColorTrianglesCommand = twoColorBatch->addCommand(renderer, _globalZOrder, texture, _programState, blendFunc, trianglesTwoColor, transform, transformFlags);
#endif
const float *verts = _clipper->getClippedVertices().buffer(); const float *verts = _clipper->getClippedVertices().buffer();
const float *uvs = _clipper->getClippedUVs().buffer(); const float *uvs = _clipper->getClippedUVs().buffer();
V3F_C4B_C4B_T2F *vertex = batchedTriangles->getTriangles().verts; V3F_C4B_C4B_T2F *vertex = trianglesTwoColor.verts;
for (int v = 0, vn = batchedTriangles->getTriangles().vertCount, vv = 0; v < vn; ++v, vv += 2, ++vertex) { for (int v = 0, vn = trianglesTwoColor.vertCount, vv = 0; v < vn; ++v, vv += 2, ++vertex) {
vertex->position.x = verts[vv]; vertex->position.x = verts[vv];
vertex->position.y = verts[vv + 1]; vertex->position.y = verts[vv + 1];
vertex->texCoords.u = uvs[vv]; vertex->texCoords.u = uvs[vv];
@ -478,19 +472,24 @@ namespace spine {
vertex->color = color4B; vertex->color = color4B;
vertex->color2 = darkColor4B; vertex->color2 = darkColor4B;
} }
} else {
#if COCOS2D_VERSION < 0x00040000 #if COCOS2D_VERSION < 0x00040000
TwoColorTrianglesCommand *batchedTriangles = lastTwoColorTrianglesCommand = twoColorBatch->addCommand(renderer, _globalZOrder, texture->getName(), _glProgramState, blendFunc, trianglesTwoColor, transform, transformFlags); TwoColorTrianglesCommand *batchedTriangles = lastTwoColorTrianglesCommand = twoColorBatch->addCommand(renderer, _globalZOrder, texture->getName(), _glProgramState, blendFunc, trianglesTwoColor, transform, transformFlags);
#else #else
TwoColorTrianglesCommand *batchedTriangles = lastTwoColorTrianglesCommand = twoColorBatch->addCommand(renderer, _globalZOrder, texture, _programState, blendFunc, trianglesTwoColor, transform, transformFlags); lastTwoColorTrianglesCommand = twoColorBatch->addCommand(renderer, _globalZOrder, texture, _programState, blendFunc, trianglesTwoColor, transform, transformFlags);
#endif #endif
} else {
V3F_C4B_C4B_T2F *vertex = batchedTriangles->getTriangles().verts; V3F_C4B_C4B_T2F* vertex = trianglesTwoColor.verts;
for (int v = 0, vn = batchedTriangles->getTriangles().vertCount; v < vn; ++v, ++vertex) { for (int v = 0, vn = trianglesTwoColor.vertCount; v < vn; ++v, ++vertex)
vertex->color = color4B; {
vertex->color = color4B;
vertex->color2 = darkColor4B; vertex->color2 = darkColor4B;
} }
#if COCOS2D_VERSION < 0x00040000
lastTwoColorTrianglesCommand = twoColorBatch->addCommand(renderer, _globalZOrder, texture->getName(), _glProgramState, blendFunc, trianglesTwoColor, transform, transformFlags);
#else
lastTwoColorTrianglesCommand = twoColorBatch->addCommand(renderer, _globalZOrder, texture, _programState, blendFunc, trianglesTwoColor, transform, transformFlags);
#endif
} }
} }
_clipper->clipEnd(*slot); _clipper->clipEnd(*slot);