From 08c7c566f31a5eac404926b8649a8edb6d4b2198 Mon Sep 17 00:00:00 2001 From: badlogic Date: Thu, 25 Jul 2019 15:16:55 +0200 Subject: [PATCH] [cocos2d-objc] Fixed culling of attachments in SkeletonRenderer.m. See #1418. --- .../src/spine/SkeletonRenderer.m | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/spine-cocos2d-objc/src/spine/SkeletonRenderer.m b/spine-cocos2d-objc/src/spine/SkeletonRenderer.m index 8d4ca6382..dfe171ba2 100644 --- a/spine-cocos2d-objc/src/spine/SkeletonRenderer.m +++ b/spine-cocos2d-objc/src/spine/SkeletonRenderer.m @@ -270,10 +270,21 @@ static bool handlerQueued = false; b *= _skeleton->color.b * slot->color.b; } self.texture = texture; - CGSize size = texture.contentSize; - GLKVector2 center = GLKVector2Make(size.width / 2.0, size.height / 2.0); - GLKVector2 extents = GLKVector2Make(size.width / 2.0, size.height / 2.0); - if (_skipVisibilityCheck || CCRenderCheckVisbility(transform, center, extents)) { + bool isVisible = true; + if (!_skipVisibilityCheck) { + float minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN; + for (int i = 0; i < verticesCount * 2; i+=2) { + minX = MIN(vertices[i], minX); + maxX = MAX(vertices[i], maxX); + minY = MIN(vertices[i+1], minY); + maxY = MAX(vertices[i+1], maxY); + } + GLKVector2 center = GLKVector2Make((maxX - minX) / 2, (maxY - minY) / 2); + GLKVector2 extents = GLKVector2Make((maxX - minX), (maxY - minY)); + isVisible = CCRenderCheckVisbility(transform, center, extents); + } + + if (isVisible) { if (spSkeletonClipping_isClipping(_clipper)) { spSkeletonClipping_clipTriangles(_clipper, vertices, verticesCount, triangles, trianglesCount, uvs, 2);