From 23af9ad659d10f94f0e4c94a7bb03311bf0c4a4f Mon Sep 17 00:00:00 2001 From: jvasti Date: Mon, 28 Jul 2014 17:49:26 +0300 Subject: [PATCH] Cocos2d-iphone v.3.1 support PolygonBatch has been removed since Cocos2d-iphone has automatic batching. CCDrawingPrimitives calls have been changed to CCDrawNode calls and the rendering of triangles have been ported to CCRenderer. Xcode projects have been updated with the necessary GLKit dependancy --- .../project.pbxproj | 10 +- .../project.pbxproj | 25 +---- .../3.0/src/spine/PolygonBatch.h | 51 --------- .../3.0/src/spine/PolygonBatch.m | 106 ------------------ .../3.0/src/spine/SkeletonRenderer.h | 5 +- .../3.0/src/spine/SkeletonRenderer.m | 80 +++++++------ 6 files changed, 54 insertions(+), 223 deletions(-) delete mode 100644 spine-cocos2d-iphone/3.0/src/spine/PolygonBatch.h delete mode 100644 spine-cocos2d-iphone/3.0/src/spine/PolygonBatch.m mode change 100644 => 100755 spine-cocos2d-iphone/3.0/src/spine/SkeletonRenderer.h mode change 100644 => 100755 spine-cocos2d-iphone/3.0/src/spine/SkeletonRenderer.m diff --git a/spine-cocos2d-iphone/3.0/spine-cocos2d-iphone-ios.xcodeproj/project.pbxproj b/spine-cocos2d-iphone/3.0/spine-cocos2d-iphone-ios.xcodeproj/project.pbxproj index db3f6406c..638c26ba5 100644 --- a/spine-cocos2d-iphone/3.0/spine-cocos2d-iphone-ios.xcodeproj/project.pbxproj +++ b/spine-cocos2d-iphone/3.0/spine-cocos2d-iphone-ios.xcodeproj/project.pbxproj @@ -51,12 +51,12 @@ 43F7FF661927F91900CA4038 /* SkinnedMeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF4E1927F91900CA4038 /* SkinnedMeshAttachment.c */; }; 43F7FF671927F91900CA4038 /* Slot.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF4F1927F91900CA4038 /* Slot.c */; }; 43F7FF681927F91900CA4038 /* SlotData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF501927F91900CA4038 /* SlotData.c */; }; - 43F7FF871927F94800CA4038 /* PolygonBatch.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF821927F94800CA4038 /* PolygonBatch.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 43F7FF881927F94800CA4038 /* SkeletonAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF841927F94800CA4038 /* SkeletonAnimation.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 43F7FF891927F94800CA4038 /* SkeletonRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF861927F94800CA4038 /* SkeletonRenderer.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 43F7FF8E1927F96700CA4038 /* GoblinsExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF8B1927F96700CA4038 /* GoblinsExample.m */; }; 43F7FF8F1927F96700CA4038 /* SpineboyExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF8D1927F96700CA4038 /* SpineboyExample.m */; }; 652107961895250000B1FF07 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 652107951895250000B1FF07 /* CoreText.framework */; }; + 83F1A0EF1986955A001F6B44 /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83F1A0EE1986955A001F6B44 /* GLKit.framework */; }; 9A5D2499170A94DA0030D4DD /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5D2498170A94DA0030D4DD /* QuartzCore.framework */; }; 9A5D249B170A94DA0030D4DD /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5D249A170A94DA0030D4DD /* OpenGLES.framework */; }; 9A5D249D170A94DA0030D4DD /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5D249C170A94DA0030D4DD /* OpenAL.framework */; }; @@ -153,8 +153,6 @@ 43F7FF7E1927F92500CA4038 /* Slot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Slot.h; path = "../../spine-c/include/spine/Slot.h"; sourceTree = ""; }; 43F7FF7F1927F92500CA4038 /* SlotData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SlotData.h; path = "../../spine-c/include/spine/SlotData.h"; sourceTree = ""; }; 43F7FF801927F92500CA4038 /* spine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spine.h; path = "../../spine-c/include/spine/spine.h"; sourceTree = ""; }; - 43F7FF811927F94800CA4038 /* PolygonBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PolygonBatch.h; path = src/spine/PolygonBatch.h; sourceTree = ""; }; - 43F7FF821927F94800CA4038 /* PolygonBatch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PolygonBatch.m; path = src/spine/PolygonBatch.m; sourceTree = ""; }; 43F7FF831927F94800CA4038 /* SkeletonAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonAnimation.h; path = src/spine/SkeletonAnimation.h; sourceTree = ""; }; 43F7FF841927F94800CA4038 /* SkeletonAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SkeletonAnimation.m; path = src/spine/SkeletonAnimation.m; sourceTree = ""; }; 43F7FF851927F94800CA4038 /* SkeletonRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonRenderer.h; path = src/spine/SkeletonRenderer.h; sourceTree = ""; }; @@ -164,6 +162,7 @@ 43F7FF8C1927F96700CA4038 /* SpineboyExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpineboyExample.h; path = example/SpineboyExample.h; sourceTree = ""; }; 43F7FF8D1927F96700CA4038 /* SpineboyExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpineboyExample.m; path = example/SpineboyExample.m; sourceTree = ""; }; 652107951895250000B1FF07 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; + 83F1A0EE1986955A001F6B44 /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; }; 9A5D2495170A94DA0030D4DD /* SpineExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SpineExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 9A5D2498170A94DA0030D4DD /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 9A5D249A170A94DA0030D4DD /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; @@ -182,6 +181,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 83F1A0EF1986955A001F6B44 /* GLKit.framework in Frameworks */, A28E1F0C192926C500D16B23 /* libcocos2d.a in Frameworks */, 652107961895250000B1FF07 /* CoreText.framework in Frameworks */, 9A5D2499170A94DA0030D4DD /* QuartzCore.framework in Frameworks */, @@ -275,8 +275,6 @@ 43C32823170B0BC7004A9460 /* spine-cocos2d-iphone */ = { isa = PBXGroup; children = ( - 43F7FF811927F94800CA4038 /* PolygonBatch.h */, - 43F7FF821927F94800CA4038 /* PolygonBatch.m */, 43F7FF831927F94800CA4038 /* SkeletonAnimation.h */, 43F7FF841927F94800CA4038 /* SkeletonAnimation.m */, 43F7FF851927F94800CA4038 /* SkeletonRenderer.h */, @@ -342,6 +340,7 @@ 9A5D2497170A94DA0030D4DD /* Frameworks */ = { isa = PBXGroup; children = ( + 83F1A0EE1986955A001F6B44 /* GLKit.framework */, 652107951895250000B1FF07 /* CoreText.framework */, 9A5D2498170A94DA0030D4DD /* QuartzCore.framework */, 9A5D249A170A94DA0030D4DD /* OpenGLES.framework */, @@ -494,7 +493,6 @@ 43F7FF661927F91900CA4038 /* SkinnedMeshAttachment.c in Sources */, 43F7FF671927F91900CA4038 /* Slot.c in Sources */, 43F7FF681927F91900CA4038 /* SlotData.c in Sources */, - 43F7FF871927F94800CA4038 /* PolygonBatch.m in Sources */, 43F7FF881927F94800CA4038 /* SkeletonAnimation.m in Sources */, 43F7FF891927F94800CA4038 /* SkeletonRenderer.m in Sources */, 43F7FF8E1927F96700CA4038 /* GoblinsExample.m in Sources */, diff --git a/spine-cocos2d-iphone/3.0/spine-cocos2d-iphone-osx.xcodeproj/project.pbxproj b/spine-cocos2d-iphone/3.0/spine-cocos2d-iphone-osx.xcodeproj/project.pbxproj index a9406f963..5e38e24e3 100644 --- a/spine-cocos2d-iphone/3.0/spine-cocos2d-iphone-osx.xcodeproj/project.pbxproj +++ b/spine-cocos2d-iphone/3.0/spine-cocos2d-iphone-osx.xcodeproj/project.pbxproj @@ -40,7 +40,6 @@ 43F7FD861927C31700CA4038 /* SkinnedMeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD6E1927C31700CA4038 /* SkinnedMeshAttachment.c */; }; 43F7FD871927C31700CA4038 /* Slot.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD6F1927C31700CA4038 /* Slot.c */; }; 43F7FD881927C31700CA4038 /* SlotData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD701927C31700CA4038 /* SlotData.c */; }; - 43F7FDA71927C33C00CA4038 /* PolygonBatch.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FDA21927C33C00CA4038 /* PolygonBatch.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 43F7FDA81927C33C00CA4038 /* SkeletonAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FDA41927C33C00CA4038 /* SkeletonAnimation.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 43F7FDA91927C33C00CA4038 /* SkeletonRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FDA61927C33C00CA4038 /* SkeletonRenderer.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 43F7FDAC1927C34600CA4038 /* SpineboyExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FDAB1927C34600CA4038 /* SpineboyExample.m */; }; @@ -48,6 +47,7 @@ 43F7FDB11927C35600CA4038 /* goblins-ffd.json in Resources */ = {isa = PBXBuildFile; fileRef = 43F7FDAE1927C35600CA4038 /* goblins-ffd.json */; }; 43F7FDB21927C35600CA4038 /* goblins-ffd.png in Resources */ = {isa = PBXBuildFile; fileRef = 43F7FDAF1927C35600CA4038 /* goblins-ffd.png */; }; 43F7FDB51927D04200CA4038 /* GoblinsExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FDB41927D04200CA4038 /* GoblinsExample.m */; }; + 83F1A0E319868B46001F6B44 /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83F1A0E219868B46001F6B44 /* GLKit.framework */; }; A2BD1E68192A41C100405470 /* libcocos2d.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A2BD1E63192A417300405470 /* libcocos2d.a */; }; A2BD1E73192A47A000405470 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A2BD1E6C192A47A000405470 /* AVFoundation.framework */; }; A2BD1E74192A47A000405470 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A2BD1E6D192A47A000405470 /* QuartzCore.framework */; }; @@ -66,13 +66,6 @@ remoteGlobalIDString = E01E663D121CA00A001A484F; remoteInfo = cocos2d; }; - A2BD1E64192A417300405470 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = A2BD1E5C192A417300405470 /* cocos2d-osx.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = A06430E713C1414300CC5554; - remoteInfo = kazmath; - }; A2BD1E66192A417300405470 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = A2BD1E5C192A417300405470 /* cocos2d-osx.xcodeproj */; @@ -146,8 +139,6 @@ 43F7FD9E1927C32800CA4038 /* Slot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Slot.h; path = "../../spine-c/include/spine/Slot.h"; sourceTree = ""; }; 43F7FD9F1927C32800CA4038 /* SlotData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SlotData.h; path = "../../spine-c/include/spine/SlotData.h"; sourceTree = ""; }; 43F7FDA01927C32800CA4038 /* spine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spine.h; path = "../../spine-c/include/spine/spine.h"; sourceTree = ""; }; - 43F7FDA11927C33C00CA4038 /* PolygonBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PolygonBatch.h; path = src/spine/PolygonBatch.h; sourceTree = ""; }; - 43F7FDA21927C33C00CA4038 /* PolygonBatch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PolygonBatch.m; path = src/spine/PolygonBatch.m; sourceTree = ""; }; 43F7FDA31927C33C00CA4038 /* SkeletonAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonAnimation.h; path = src/spine/SkeletonAnimation.h; sourceTree = ""; }; 43F7FDA41927C33C00CA4038 /* SkeletonAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SkeletonAnimation.m; path = src/spine/SkeletonAnimation.m; sourceTree = ""; }; 43F7FDA51927C33C00CA4038 /* SkeletonRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonRenderer.h; path = src/spine/SkeletonRenderer.h; sourceTree = ""; }; @@ -159,6 +150,7 @@ 43F7FDAF1927C35600CA4038 /* goblins-ffd.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "goblins-ffd.png"; sourceTree = ""; }; 43F7FDB31927D04200CA4038 /* GoblinsExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GoblinsExample.h; sourceTree = ""; }; 43F7FDB41927D04200CA4038 /* GoblinsExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GoblinsExample.m; sourceTree = ""; }; + 83F1A0E219868B46001F6B44 /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; }; A2BD1E5C192A417300405470 /* cocos2d-osx.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "cocos2d-osx.xcodeproj"; path = "cocos2d/cocos2d-osx.xcodeproj"; sourceTree = SOURCE_ROOT; }; A2BD1E6C192A47A000405470 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; A2BD1E6D192A47A000405470 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; @@ -174,6 +166,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 83F1A0E319868B46001F6B44 /* GLKit.framework in Frameworks */, A2BD1E78192A47A000405470 /* AppKit.framework in Frameworks */, A2BD1E73192A47A000405470 /* AVFoundation.framework in Frameworks */, A2BD1E75192A47A000405470 /* OpenGL.framework in Frameworks */, @@ -211,6 +204,7 @@ 4319B51616FF9B2600C1D7A9 /* Frameworks */ = { isa = PBXGroup; children = ( + 83F1A0E219868B46001F6B44 /* GLKit.framework */, A2BD1E6C192A47A000405470 /* AVFoundation.framework */, A2BD1E6D192A47A000405470 /* QuartzCore.framework */, A2BD1E6E192A47A000405470 /* OpenGL.framework */, @@ -322,8 +316,6 @@ 4319B8931701168F00C1D7A9 /* spine-cocos2d-iphone */ = { isa = PBXGroup; children = ( - 43F7FDA11927C33C00CA4038 /* PolygonBatch.h */, - 43F7FDA21927C33C00CA4038 /* PolygonBatch.m */, 43F7FDA31927C33C00CA4038 /* SkeletonAnimation.h */, 43F7FDA41927C33C00CA4038 /* SkeletonAnimation.m */, 43F7FDA51927C33C00CA4038 /* SkeletonRenderer.h */, @@ -359,7 +351,6 @@ isa = PBXGroup; children = ( A2BD1E63192A417300405470 /* libcocos2d.a */, - A2BD1E65192A417300405470 /* libkazmath.a */, A2BD1E67192A417300405470 /* libObjectiveChipmunk.a */, ); name = Products; @@ -426,13 +417,6 @@ remoteRef = A2BD1E62192A417300405470 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - A2BD1E65192A417300405470 /* libkazmath.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libkazmath.a; - remoteRef = A2BD1E64192A417300405470 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; A2BD1E67192A417300405470 /* libObjectiveChipmunk.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; @@ -493,7 +477,6 @@ 43F7FD861927C31700CA4038 /* SkinnedMeshAttachment.c in Sources */, 43F7FD871927C31700CA4038 /* Slot.c in Sources */, 43F7FD881927C31700CA4038 /* SlotData.c in Sources */, - 43F7FDA71927C33C00CA4038 /* PolygonBatch.m in Sources */, 43F7FDA81927C33C00CA4038 /* SkeletonAnimation.m in Sources */, 43F7FDA91927C33C00CA4038 /* SkeletonRenderer.m in Sources */, 43F7FDAC1927C34600CA4038 /* SpineboyExample.m in Sources */, diff --git a/spine-cocos2d-iphone/3.0/src/spine/PolygonBatch.h b/spine-cocos2d-iphone/3.0/src/spine/PolygonBatch.h deleted file mode 100644 index caf852591..000000000 --- a/spine-cocos2d-iphone/3.0/src/spine/PolygonBatch.h +++ /dev/null @@ -1,51 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.1 - * - * Copyright (c) 2013, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to install, execute and perform the Spine Runtimes - * Software (the "Software") solely for internal use. Without the written - * permission of Esoteric Software (typically granted by licensing Spine), you - * may not (a) modify, translate, adapt or otherwise create derivative works, - * improvements of the Software or develop new applications using the Software - * or (b) remove, delete, alter or obscure any trademarks or any copyright, - * trademark, patent or other intellectual property or proprietary rights - * notices on or in the Software, including any copy thereof. Redistributions - * in binary or source form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#import - -@interface spPolygonBatch : NSObject { - int _capacity; - ccV2F_C4B_T2F* _vertices; - int _verticesCount; - GLushort* _triangles; - int _trianglesCount; - CCTexture* _texture; -} - -+ (id) createWithCapacity:(int)capacity; - -- (id) initWithCapacity:(int)capacity; - -- (void) add:(CCTexture*)texture vertices:(const float*)vertices uvs:(const float*)uvs - verticesCount:(int)verticesCount triangles:(const int*)triangles trianglesCount:(int)trianglesCount - color:(ccColor4B*)color; -- (void) flush; - -@end diff --git a/spine-cocos2d-iphone/3.0/src/spine/PolygonBatch.m b/spine-cocos2d-iphone/3.0/src/spine/PolygonBatch.m deleted file mode 100644 index 7e8869706..000000000 --- a/spine-cocos2d-iphone/3.0/src/spine/PolygonBatch.m +++ /dev/null @@ -1,106 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.1 - * - * Copyright (c) 2013, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to install, execute and perform the Spine Runtimes - * Software (the "Software") solely for internal use. Without the written - * permission of Esoteric Software (typically granted by licensing Spine), you - * may not (a) modify, translate, adapt or otherwise create derivative works, - * improvements of the Software or develop new applications using the Software - * or (b) remove, delete, alter or obscure any trademarks or any copyright, - * trademark, patent or other intellectual property or proprietary rights - * notices on or in the Software, including any copy thereof. Redistributions - * in binary or source form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#import -#import -#import -#import "CCTexture_Private.h" - -@implementation spPolygonBatch - -+ (id) createWithCapacity:(int)capacity { - return [[(spPolygonBatch*)[self alloc] initWithCapacity:capacity] autorelease]; -} - -- (id) initWithCapacity:(int)capacity { - // 32767 is max index, so 32767 / 3 - (32767 / 3 % 3) = 10920. - NSAssert(capacity <= 10920, @"capacity cannot be > 10920"); - NSAssert(capacity >= 0, @"capacity cannot be < 0"); - - self = [super init]; - if (!self) return nil; - - _capacity = capacity; - _vertices = MALLOC(ccV2F_C4B_T2F, capacity); - _triangles = MALLOC(GLushort, capacity * 3); - - return self; -} - -- (void) dealloc { - FREE(_vertices); - FREE(_triangles); - [super dealloc]; -} - -- (void) add:(CCTexture*)addTexture vertices:(const float*)addVertices uvs:(const float*)uvs - verticesCount:(int)addVerticesCount triangles:(const int*)addTriangles trianglesCount:(int)addTrianglesCount - color:(ccColor4B*)color { - - if ( - addTexture != _texture - || _verticesCount + (addVerticesCount >> 1) > _capacity - || _trianglesCount + addTrianglesCount > _capacity * 3) { - [self flush]; - _texture = addTexture; - } - - for (int i = 0; i < addTrianglesCount; ++i, ++_trianglesCount) - _triangles[_trianglesCount] = addTriangles[i] + _verticesCount; - - for (int i = 0; i < addVerticesCount; i += 2, ++_verticesCount) { - ccV2F_C4B_T2F* vertex = _vertices + _verticesCount; - vertex->vertices.x = addVertices[i]; - vertex->vertices.y = addVertices[i + 1]; - vertex->colors = *color; - vertex->texCoords.u = uvs[i]; - vertex->texCoords.v = uvs[i + 1]; - } -} - -- (void) flush { - if (!_verticesCount) return; - - ccGLBindTexture2D(_texture.name); - glEnableVertexAttribArray(kCCVertexAttrib_Position); - glEnableVertexAttribArray(kCCVertexAttrib_Color); - glEnableVertexAttribArray(kCCVertexAttrib_TexCoords); - glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, sizeof(ccV2F_C4B_T2F), &_vertices[0].vertices); - glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV2F_C4B_T2F), &_vertices[0].colors); - glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV2F_C4B_T2F), &_vertices[0].texCoords); - glDrawElements(GL_TRIANGLES, _trianglesCount, GL_UNSIGNED_SHORT, _triangles); - - _verticesCount = 0; - _trianglesCount = 0; - - CHECK_GL_ERROR_DEBUG(); -} - -@end diff --git a/spine-cocos2d-iphone/3.0/src/spine/SkeletonRenderer.h b/spine-cocos2d-iphone/3.0/src/spine/SkeletonRenderer.h old mode 100644 new mode 100755 index b657d2e6e..ec91328af --- a/spine-cocos2d-iphone/3.0/src/spine/SkeletonRenderer.h +++ b/spine-cocos2d-iphone/3.0/src/spine/SkeletonRenderer.h @@ -31,8 +31,6 @@ #import #import "cocos2d.h" -@class spPolygonBatch; - /** Draws a skeleton. */ @interface SkeletonRenderer : CCNode { spSkeleton* _skeleton; @@ -41,10 +39,9 @@ bool _debugBones; bool _premultipliedAlpha; ccBlendFunc _blendFunc; - + CCDrawNode *_drawNode; bool _ownsSkeletonData; spAtlas* _atlas; - spPolygonBatch* batch; float* worldVertices; } diff --git a/spine-cocos2d-iphone/3.0/src/spine/SkeletonRenderer.m b/spine-cocos2d-iphone/3.0/src/spine/SkeletonRenderer.m old mode 100644 new mode 100755 index db0a1521a..e70a7371e --- a/spine-cocos2d-iphone/3.0/src/spine/SkeletonRenderer.m +++ b/spine-cocos2d-iphone/3.0/src/spine/SkeletonRenderer.m @@ -31,9 +31,8 @@ #import #import #import -#import #import "CCNode_Private.h" -#import "CCDrawingPrimitives.h" +#import "CCDrawNode.h" static const int quadTriangles[6] = {0, 1, 2, 2, 3, 0}; @@ -65,16 +64,16 @@ static const int quadTriangles[6] = {0, 1, 2, 2, 3, 0}; worldVertices = MALLOC(float, 1000); // Max number of vertices per mesh. - batch = [[spPolygonBatch createWithCapacity:2000] retain]; // Max number of vertices and triangles per batch. - _skeleton = spSkeleton_create(skeletonData); _rootBone = _skeleton->bones[0]; - - _blendFunc.src = GL_ONE; - _blendFunc.dst = GL_ONE_MINUS_SRC_ALPHA; - [self setOpacityModifyRGB:YES]; - - [self setShaderProgram:[[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionTextureColor]]; + + _blendFunc.src = GL_ONE; + _blendFunc.dst = GL_ONE_MINUS_SRC_ALPHA; + _drawNode = [[CCDrawNode alloc] init]; + [_drawNode setBlendMode: [CCBlendMode premultipliedAlphaMode]]; + [self addChild:_drawNode]; + + [self setShader:[CCShader positionTextureColorShader]]; } - (id) initWithData:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData { @@ -125,18 +124,16 @@ static const int quadTriangles[6] = {0, 1, 2, 2, 3, 0}; } - (void) dealloc { + if (_ownsSkeletonData) spSkeletonData_dispose(_skeleton->data); if (_atlas) spAtlas_dispose(_atlas); spSkeleton_dispose(_skeleton); - [batch release]; FREE(worldVertices); [super dealloc]; } -- (void) draw { - CC_NODE_DRAW_SETUP(); - ccGLBindVAO(0); - +-(void)draw:(CCRenderer *)renderer transform:(const GLKMatrix4 *)transform { + CCColor* nodeColor = self.color; _skeleton->r = nodeColor.red; _skeleton->g = nodeColor.green; @@ -151,6 +148,7 @@ static const int quadTriangles[6] = {0, 1, 2, 2, 3, 0}; int trianglesCount = 0; float r = 0, g = 0, b = 0, a = 0; for (int i = 0, n = _skeleton->slotCount; i < n; i++) { + spSlot* slot = _skeleton->drawOrder[i]; if (!slot->attachment) continue; CCTexture *texture = 0; @@ -170,6 +168,7 @@ static const int quadTriangles[6] = {0, 1, 2, 2, 3, 0}; break; } case SP_ATTACHMENT_MESH: { + spMeshAttachment* attachment = (spMeshAttachment*)slot->attachment; spMeshAttachment_computeWorldVertices(attachment, slot->skeleton->x, slot->skeleton->y, slot, worldVertices); texture = [self getTextureForMesh:attachment]; @@ -184,6 +183,7 @@ static const int quadTriangles[6] = {0, 1, 2, 2, 3, 0}; break; } case SP_ATTACHMENT_SKINNED_MESH: { + spSkinnedMeshAttachment* attachment = (spSkinnedMeshAttachment*)slot->attachment; spSkinnedMeshAttachment_computeWorldVertices(attachment, slot->skeleton->x, slot->skeleton->y, slot, worldVertices); texture = [self getTextureForSkinnedMesh:attachment]; @@ -201,8 +201,7 @@ static const int quadTriangles[6] = {0, 1, 2, 2, 3, 0}; } if (texture) { if (slot->data->additiveBlending != additive) { - [batch flush]; - ccGLBlendFunc(_blendFunc.src, slot->data->additiveBlending ? GL_ONE : _blendFunc.dst); + [self setBlendMode:[CCBlendMode blendModeWithOptions:@{CCBlendFuncSrcColor: @(_blendFunc.src),CCBlendFuncDstColor: @(slot->data->additiveBlending ? GL_ONE : _blendFunc.dst)}]]; additive = slot->data->additiveBlending; } color.a = _skeleton->a * slot->a * a * 255; @@ -210,16 +209,29 @@ static const int quadTriangles[6] = {0, 1, 2, 2, 3, 0}; color.r = _skeleton->r * slot->r * r * multiplier; color.g = _skeleton->g * slot->g * g * multiplier; color.b = _skeleton->b * slot->b * b * multiplier; - [batch add:texture vertices:worldVertices uvs:uvs verticesCount:verticesCount - triangles:triangles trianglesCount:trianglesCount color:&color]; + 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(CCRenderCheckVisbility(transform, center, extents)){ + CCRenderBuffer buffer = [renderer enqueueTriangles:trianglesCount/3 andVertexes:verticesCount withState:self.renderState globalSortOrder:0]; + for(int i = 0; (i*2) < verticesCount; ++i) { + CCVertex vertex; + vertex.position = GLKVector4Make(worldVertices[i*2], worldVertices[i*2 + 1], 0.0, 1.0); + vertex.color = GLKVector4Make(color.r, color.g, color.b, color.a); + vertex.texCoord1 = GLKVector2Make(uvs[i*2], 1 - uvs[(i*2) +1]); + CCRenderBufferSetVertex(buffer, i, CCVertexApplyTransform(vertex, transform)); + } + for(int j = 0; j*3 < trianglesCount; ++j) { + CCRenderBufferSetTriangle(buffer, j, triangles[j*3], triangles[(j*3) + 1], triangles[(j*3) + 2]); + } + } } + } - [batch flush]; - + [_drawNode clear]; if (_debugSlots) { // Slots. - ccDrawColor4B(0, 0, 255, 255); - glLineWidth(1); CGPoint points[4]; for (int i = 0, n = _skeleton->slotCount; i < n; i++) { spSlot* slot = _skeleton->drawOrder[i]; @@ -230,26 +242,24 @@ static const int quadTriangles[6] = {0, 1, 2, 2, 3, 0}; points[1] = ccp(worldVertices[2], worldVertices[3]); points[2] = ccp(worldVertices[4], worldVertices[5]); points[3] = ccp(worldVertices[6], worldVertices[7]); - ccDrawPoly(points, 4, true); + [_drawNode drawPolyWithVerts:points count:4 fillColor:[CCColor clearColor] borderWidth:1 borderColor:[CCColor blueColor]]; + } } if (_debugBones) { // Bone lengths. - glLineWidth(2); - ccDrawColor4B(255, 0, 0, 255); for (int i = 0, n = _skeleton->boneCount; i < n; i++) { spBone *bone = _skeleton->bones[i]; float x = bone->data->length * bone->m00 + bone->worldX; float y = bone->data->length * bone->m10 + bone->worldY; - ccDrawLine(ccp(bone->worldX, bone->worldY), ccp(x, y)); + [_drawNode drawSegmentFrom:ccp(bone->worldX, bone->worldY) to: ccp(x, y)radius:2 color:[CCColor redColor]]; } + // Bone origins. - ccPointSize(4); - ccDrawColor4B(0, 0, 255, 255); // Root bone is blue. for (int i = 0, n = _skeleton->boneCount; i < n; i++) { spBone *bone = _skeleton->bones[i]; - ccDrawPoint(ccp(bone->worldX, bone->worldY)); - if (i == 0) ccDrawColor4B(0, 255, 0, 255); + [_drawNode drawDot:ccp(bone->worldX, bone->worldY) radius:4 color:[CCColor greenColor]]; + if (i == 0) [_drawNode drawDot:ccp(bone->worldX, bone->worldY) radius:4 color:[CCColor blueColor]]; } } } @@ -289,10 +299,10 @@ static const int quadTriangles[6] = {0, 1, 2, 2, 3, 0}; continue; for (int ii = 0; ii < verticesCount; ii += 2) { float x = worldVertices[ii] * scaleX, y = worldVertices[ii + 1] * scaleY; - minX = min(minX, x); - minY = min(minY, y); - maxX = max(maxX, x); - maxY = max(maxY, y); + minX = fmin(minX, x); + minY = fmin(minY, y); + maxX = fmax(maxX, x); + maxY = fmax(maxY, y); } } minX = self.position.x + minX;