Skip to content

Commit 7442cd3

Browse files
committed
Moving some ARC hotspots to a no-arc file.
Conflicts: cocos2d/CCSprite.m
1 parent 5880a3f commit 7442cd3

File tree

6 files changed

+157
-118
lines changed

6 files changed

+157
-118
lines changed

cocos2d-ios.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@
297297
D39FA9C818C1BC6B00441627 /* CCShader_Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D39FA9C718C1BC6B00441627 /* CCShader_Private.h */; };
298298
D3A2E7D2181E12750033614C /* CCPhysicsShape.h in Headers */ = {isa = PBXBuildFile; fileRef = D3A2E7D0181E12750033614C /* CCPhysicsShape.h */; };
299299
D3A2E7D3181E12750033614C /* CCPhysicsShape.m in Sources */ = {isa = PBXBuildFile; fileRef = D3A2E7D1181E12750033614C /* CCPhysicsShape.m */; };
300+
D3B2010D19805F4500D92915 /* CCNoARC.m in Sources */ = {isa = PBXBuildFile; fileRef = D3B2010C19805F4500D92915 /* CCNoARC.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
300301
E01E6D8C121F130E001A484F /* CCLabelBMFont.h in Headers */ = {isa = PBXBuildFile; fileRef = E01E6D8A121F130E001A484F /* CCLabelBMFont.h */; };
301302
E01E6D8D121F130E001A484F /* CCLabelBMFont.m in Sources */ = {isa = PBXBuildFile; fileRef = E01E6D8B121F130E001A484F /* CCLabelBMFont.m */; };
302303
E02BB6D6126CA93A006E46A2 /* CCAnimationCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E02BB6D4126CA93A006E46A2 /* CCAnimationCache.h */; };
@@ -636,6 +637,7 @@
636637
D39FA9C718C1BC6B00441627 /* CCShader_Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCShader_Private.h; sourceTree = "<group>"; };
637638
D3A2E7D0181E12750033614C /* CCPhysicsShape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCPhysicsShape.h; sourceTree = "<group>"; };
638639
D3A2E7D1181E12750033614C /* CCPhysicsShape.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CCPhysicsShape.m; sourceTree = "<group>"; };
640+
D3B2010C19805F4500D92915 /* CCNoARC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CCNoARC.m; sourceTree = "<group>"; };
639641
E01E6D8A121F130E001A484F /* CCLabelBMFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = CCLabelBMFont.h; sourceTree = "<group>"; };
640642
E01E6D8B121F130E001A484F /* CCLabelBMFont.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = CCLabelBMFont.m; sourceTree = "<group>"; };
641643
E02BB6D4126CA93A006E46A2 /* CCAnimationCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCAnimationCache.h; sourceTree = "<group>"; };
@@ -787,6 +789,7 @@
787789
D38058181889AD6000822437 /* CCRenderer.h */,
788790
D309054F18AC23110081BF11 /* CCRenderer_private.h */,
789791
D38058191889AD6000822437 /* CCRenderer.m */,
792+
D3B2010C19805F4500D92915 /* CCNoARC.m */,
790793
);
791794
path = cocos2d;
792795
sourceTree = "<group>";
@@ -1689,6 +1692,7 @@
16891692
A6DC4E0A18055DCC00C280A6 /* CCTransition.m in Sources */,
16901693
9DE9042A192D630000AEB37A /* CCEffectRenderer.m in Sources */,
16911694
B77060021831A07B0043CC67 /* NSMutableDictionary+WeakReferences.m in Sources */,
1695+
D3B2010D19805F4500D92915 /* CCNoARC.m in Sources */,
16921696
A6A0734617C788EB004343C8 /* CCResponderManager.m in Sources */,
16931697
A6A0734B17C78EF3004343C8 /* CCResponder.m in Sources */,
16941698
B78AE46317E7AF1C0028BE0B /* CCButton.m in Sources */,

cocos2d/CCNoARC.m

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#import "CCTexture.h"
2+
#import "CCNode_Private.h"
3+
#import "CCSprite_Private.h"
4+
5+
6+
@implementation CCNode(NoARC)
7+
8+
static inline GLKMatrix4
9+
CCNodeTransform(CCNode *node, GLKMatrix4 parentTransform)
10+
{
11+
CGAffineTransform t = [node nodeToParentTransform];
12+
float z = node->_vertexZ;
13+
14+
// Convert to 4x4 column major GLK matrix.
15+
return GLKMatrix4Multiply(parentTransform, GLKMatrix4Make(
16+
t.a, t.b, 0.0f, 0.0f,
17+
t.c, t.d, 0.0f, 0.0f,
18+
0.0f, 0.0f, 1.0f, 0.0f,
19+
t.tx, t.ty, z, 1.0f
20+
));
21+
}
22+
23+
-(GLKMatrix4)transform:(const GLKMatrix4 *)parentTransform
24+
{
25+
return CCNodeTransform(self, *parentTransform);
26+
}
27+
28+
-(void) visit:(__unsafe_unretained CCRenderer *)renderer parentTransform:(const GLKMatrix4 *)parentTransform
29+
{
30+
// quick return if not visible. children won't be drawn.
31+
if (!_visible) return;
32+
33+
[self sortAllChildren];
34+
35+
GLKMatrix4 transform = CCNodeTransform(self, *parentTransform);
36+
BOOL drawn = NO;
37+
38+
for(CCNode *child in _children){
39+
if(!drawn && child.zOrder >= 0){
40+
[self draw:renderer transform:&transform];
41+
drawn = YES;
42+
}
43+
44+
[child visit:renderer parentTransform:&transform];
45+
}
46+
47+
if(!drawn) [self draw:renderer transform:&transform];
48+
49+
// reset for next frame
50+
_orderOfArrival = 0;
51+
}
52+
53+
@end
54+
55+
56+
@implementation CCSprite(NoARC)
57+
58+
static inline void
59+
EnqueueTriangles(CCSprite *self, CCRenderer *renderer, const GLKMatrix4 *transform)
60+
{
61+
CCRenderBuffer buffer = [renderer enqueueTriangles:2 andVertexes:4 withState:self.renderState globalSortOrder:0];
62+
CCRenderBufferSetVertex(buffer, 0, CCVertexApplyTransform(self->_verts.bl, transform));
63+
CCRenderBufferSetVertex(buffer, 1, CCVertexApplyTransform(self->_verts.br, transform));
64+
CCRenderBufferSetVertex(buffer, 2, CCVertexApplyTransform(self->_verts.tr, transform));
65+
CCRenderBufferSetVertex(buffer, 3, CCVertexApplyTransform(self->_verts.tl, transform));
66+
67+
CCRenderBufferSetTriangle(buffer, 0, 0, 1, 2);
68+
CCRenderBufferSetTriangle(buffer, 1, 0, 2, 3);
69+
}
70+
71+
-(void)draw:(CCRenderer *)renderer transform:(const GLKMatrix4 *)transform;
72+
{
73+
if(!CCRenderCheckVisbility(transform, _vertexCenter, _vertexExtents)) return;
74+
75+
if (_effect)
76+
{
77+
_effectRenderer.contentSize = self.texture.contentSize;
78+
if ([self.effect prepareForRendering] == CCEffectPrepareSuccess)
79+
{
80+
// Preparing an effect for rendering can modify its uniforms
81+
// dictionary which means we need to reinitialize our copy of the
82+
// uniforms.
83+
[self updateShaderUniformsFromEffect];
84+
}
85+
[_effectRenderer drawSprite:self withEffect:self.effect uniforms:_shaderUniforms renderer:renderer transform:transform];
86+
}
87+
else
88+
{
89+
EnqueueTriangles(self, renderer, transform);
90+
}
91+
92+
#if CC_SPRITE_DEBUG_DRAW
93+
const GLKVector2 zero = {{0, 0}};
94+
const GLKVector4 white = {{1, 1, 1, 1}};
95+
96+
CCRenderBuffer debug = [renderer enqueueLines:4 andVertexes:4 withState:[CCRenderState debugColor] globalSortOrder:0];
97+
CCRenderBufferSetVertex(debug, 0, (CCVertex){GLKMatrix4MultiplyVector4(*transform, _verts.bl.position), zero, zero, white});
98+
CCRenderBufferSetVertex(debug, 1, (CCVertex){GLKMatrix4MultiplyVector4(*transform, _verts.br.position), zero, zero, white});
99+
CCRenderBufferSetVertex(debug, 2, (CCVertex){GLKMatrix4MultiplyVector4(*transform, _verts.tr.position), zero, zero, white});
100+
CCRenderBufferSetVertex(debug, 3, (CCVertex){GLKMatrix4MultiplyVector4(*transform, _verts.tl.position), zero, zero, white});
101+
102+
CCRenderBufferSetLine(debug, 0, 0, 1);
103+
CCRenderBufferSetLine(debug, 1, 1, 2);
104+
CCRenderBufferSetLine(debug, 2, 2, 3);
105+
CCRenderBufferSetLine(debug, 3, 3, 0);
106+
#endif
107+
}
108+
109+
-(void)enqueueTriangles:(CCRenderer *)renderer transform:(const GLKMatrix4 *)transform
110+
{
111+
EnqueueTriangles(self, renderer, transform);
112+
}
113+
114+
@end

cocos2d/CCNode.h

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -553,9 +553,6 @@ A common user pattern in building a Cocos2d game is to subclass CCNode, add it t
553553
/// @name Accessing Transformations and Matrices
554554
/// -----------------------------------------------------------------------
555555

556-
/** Returns the 4x4 drawing transformation for this node. Really only useful when overriding visit:parentTransform: */
557-
-(GLKMatrix4)transform:(const GLKMatrix4 *)parentTransform;
558-
559556
/** Returns the matrix that transform the node's (local) space coordinates into the parent's space coordinates.
560557
The matrix is in Pixels.
561558
*/
@@ -630,9 +627,6 @@ A common user pattern in building a Cocos2d game is to subclass CCNode, add it t
630627
/** Calls visit:parentTransform using the current renderer and projection. */
631628
-(void) visit;
632629

633-
/** Recursive method that visit its children and draw them. */
634-
-(void) visit:(CCRenderer *)renderer parentTransform:(const GLKMatrix4 *)parentTransform;
635-
636630
/** Sets and returns the color (tint), alpha is ignored when setting. */
637631
@property (nonatomic,strong) CCColor* color;
638632

@@ -699,3 +693,14 @@ A common user pattern in building a Cocos2d game is to subclass CCNode, add it t
699693

700694
@end
701695

696+
697+
@interface CCNode(NoARC)
698+
699+
/** Returns the 4x4 drawing transformation for this node. Really only useful when overriding visit:parentTransform: */
700+
-(GLKMatrix4)transform:(const GLKMatrix4 *)parentTransform;
701+
702+
/** Recursive method that visit its children and draw them. */
703+
-(void) visit:(CCRenderer *)renderer parentTransform:(const GLKMatrix4 *)parentTransform;
704+
705+
@end
706+

cocos2d/CCNode.m

Lines changed: 4 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -909,31 +909,8 @@ - (void) sortAllChildren
909909

910910
-(void)draw:(__unsafe_unretained CCRenderer *)renderer transform:(const GLKMatrix4 *)transform {}
911911

912-
-(void) visit:(__unsafe_unretained CCRenderer *)renderer parentTransform:(const GLKMatrix4 *)parentTransform
913-
{
914-
// quick return if not visible. children won't be drawn.
915-
if (!_visible)
916-
return;
917-
918-
[self sortAllChildren];
919-
920-
GLKMatrix4 transform = NodeTransform(self, *parentTransform);
921-
BOOL drawn = NO;
922-
923-
for(CCNode *child in _children){
924-
if(!drawn && child.zOrder >= 0){
925-
[self draw:renderer transform:&transform];
926-
drawn = YES;
927-
}
928-
929-
[child visit:renderer parentTransform:&transform];
930-
}
931-
932-
if(!drawn) [self draw:renderer transform:&transform];
933-
934-
// reset for next frame
935-
_orderOfArrival = 0;
936-
}
912+
// Defined in CCNoARC.m
913+
// -(void) visit:(__unsafe_unretained CCRenderer *)renderer parentTransform:(const GLKMatrix4 *)parentTransform
937914

938915
-(void)visit
939916
{
@@ -946,25 +923,8 @@ -(void)visit
946923

947924
#pragma mark CCNode - Transformations
948925

949-
static inline GLKMatrix4
950-
NodeTransform(__unsafe_unretained CCNode *node, GLKMatrix4 parentTransform)
951-
{
952-
CGAffineTransform t = [node nodeToParentTransform];
953-
float z = node->_vertexZ;
954-
955-
// Convert to 4x4 column major GLK matrix.
956-
return GLKMatrix4Multiply(parentTransform, GLKMatrix4Make(
957-
t.a, t.b, 0.0f, 0.0f,
958-
t.c, t.d, 0.0f, 0.0f,
959-
0.0f, 0.0f, 1.0f, 0.0f,
960-
t.tx, t.ty, z, 1.0f
961-
));
962-
}
963-
964-
-(GLKMatrix4)transform:(const GLKMatrix4 *)parentTransform
965-
{
966-
return NodeTransform(self, *parentTransform);
967-
}
926+
// Implemented in CCNoARC.m
927+
//-(GLKMatrix4)transform:(const GLKMatrix4 *)parentTransform
968928

969929
#pragma mark CCPhysics support.
970930

cocos2d/CCSprite.m

Lines changed: 4 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,6 @@
4141
#import "CCRenderer_private.h"
4242
#import "CCSprite_Private.h"
4343
#import "CCTexture_Private.h"
44-
#import "CCEffect.h"
45-
#import "CCEffectRenderer.h"
46-
#import "CCEffectStack.h"
47-
#import "CCEffect_Private.h"
4844

4945
#pragma mark -
5046
#pragma mark CCSprite
@@ -59,17 +55,8 @@
5955
@implementation CCSprite {
6056
// Offset Position, used by sprite sheet editors.
6157
CGPoint _unflippedOffsetPositionFromCenter;
62-
63-
// Center of extents (half width/height) of the sprite for culling purposes.
64-
GLKVector2 _vertexCenter, _vertexExtents;
6558

66-
// Vertex coords, texture coords and color info.
67-
CCSpriteVertexes _verts;
68-
6959
BOOL _flipX, _flipY;
70-
71-
CCEffect *_effect;
72-
CCEffectRenderer *_effectRenderer;
7360
}
7461

7562
+(id)spriteWithImageNamed:(NSString*)imageName
@@ -350,61 +337,11 @@ - (CGAffineTransform)nodeToTextureTransform
350337

351338
#pragma mark CCSprite - draw
352339

353-
static inline void
354-
EnqueueTriangles(CCSprite *self, CCRenderer *renderer, const GLKMatrix4 *transform)
355-
{
356-
CCRenderBuffer buffer = [renderer enqueueTriangles:2 andVertexes:4 withState:self.renderState globalSortOrder:0];
357-
CCRenderBufferSetVertex(buffer, 0, CCVertexApplyTransform(self->_verts.bl, transform));
358-
CCRenderBufferSetVertex(buffer, 1, CCVertexApplyTransform(self->_verts.br, transform));
359-
CCRenderBufferSetVertex(buffer, 2, CCVertexApplyTransform(self->_verts.tr, transform));
360-
CCRenderBufferSetVertex(buffer, 3, CCVertexApplyTransform(self->_verts.tl, transform));
361-
362-
CCRenderBufferSetTriangle(buffer, 0, 0, 1, 2);
363-
CCRenderBufferSetTriangle(buffer, 1, 0, 2, 3);
364-
}
365-
366-
-(void)draw:(CCRenderer *)renderer transform:(const GLKMatrix4 *)transform;
367-
{
368-
if(!CCRenderCheckVisbility(transform, _vertexCenter, _vertexExtents)) return;
369-
370-
if (_effect)
371-
{
372-
_effectRenderer.contentSize = self.texture.contentSize;
373-
if ([self.effect prepareForRendering] == CCEffectPrepareSuccess)
374-
{
375-
// Preparing an effect for rendering can modify its uniforms
376-
// dictionary which means we need to reinitialize our copy of the
377-
// uniforms.
378-
[self updateShaderUniformsFromEffect];
379-
}
380-
[_effectRenderer drawSprite:self withEffect:self.effect uniforms:_shaderUniforms renderer:renderer transform:transform];
381-
}
382-
else
383-
{
384-
EnqueueTriangles(self, renderer, transform);
385-
}
386-
387-
#if CC_SPRITE_DEBUG_DRAW
388-
const GLKVector2 zero = {{0, 0}};
389-
const GLKVector4 white = {{1, 1, 1, 1}};
390-
391-
CCRenderBuffer debug = [renderer enqueueLines:4 andVertexes:4 withState:[CCRenderState debugColor] globalSortOrder:0];
392-
CCRenderBufferSetVertex(debug, 0, (CCVertex){GLKMatrix4MultiplyVector4(*transform, _verts.bl.position), zero, zero, white});
393-
CCRenderBufferSetVertex(debug, 1, (CCVertex){GLKMatrix4MultiplyVector4(*transform, _verts.br.position), zero, zero, white});
394-
CCRenderBufferSetVertex(debug, 2, (CCVertex){GLKMatrix4MultiplyVector4(*transform, _verts.tr.position), zero, zero, white});
395-
CCRenderBufferSetVertex(debug, 3, (CCVertex){GLKMatrix4MultiplyVector4(*transform, _verts.tl.position), zero, zero, white});
396-
397-
CCRenderBufferSetLine(debug, 0, 0, 1);
398-
CCRenderBufferSetLine(debug, 1, 1, 2);
399-
CCRenderBufferSetLine(debug, 2, 2, 3);
400-
CCRenderBufferSetLine(debug, 3, 3, 0);
401-
#endif
402-
}
340+
//Implemented in CCNoARC.m
341+
//-(void)draw:(CCRenderer *)renderer transform:(const GLKMatrix4 *)transform;
403342

404-
-(void)enqueueTriangles:(CCRenderer *)renderer transform:(const GLKMatrix4 *)transform
405-
{
406-
EnqueueTriangles(self, renderer, transform);
407-
}
343+
//Implemented in CCNoARC.m
344+
//-(void)enqueueTriangles:(CCRenderer *)renderer transform:(const GLKMatrix4 *)transform
408345

409346
#pragma mark CCSprite - CCNode overrides
410347

cocos2d/CCSprite_Private.h

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,29 @@
2424
*/
2525

2626
#import "CCSprite.h"
27+
#import "CCEffectRenderer.h"
28+
#import "CCEffect_Private.h"
2729

28-
@interface CCSprite ()
30+
@interface CCSprite () {
31+
@private
32+
33+
// Vertex coords, texture coords and color info.
34+
CCSpriteVertexes _verts;
35+
36+
// Center of extents (half width/height) of the sprite for culling purposes.
37+
GLKVector2 _vertexCenter, _vertexExtents;
38+
39+
CCEffect *_effect;
40+
CCEffectRenderer *_effectRenderer;
41+
}
2942

3043
+ (CCSpriteTexCoordSet)textureCoordsForTexture:(CCTexture *)texture withRect:(CGRect)rect rotated:(BOOL)rotated xFlipped:(BOOL)flipX yFlipped:(BOOL)flipY;
44+
45+
@end
46+
47+
48+
@interface CCSprite(NoARC)
49+
3150
-(void)enqueueTriangles:(CCRenderer *)renderer transform:(const GLKMatrix4 *)transform;
3251

3352
@end

0 commit comments

Comments
 (0)