2010-07-06 15:46:45 +08:00
|
|
|
/****************************************************************************
|
2011-03-19 10:59:01 +08:00
|
|
|
Copyright (c) 2010-2011 cocos2d-x.org
|
|
|
|
Copyright (c) 2008-2010 Ricardo Quesada
|
2011-07-07 16:03:03 +08:00
|
|
|
Copyright (c) 2011 Zynga Inc.
|
2010-07-06 15:46:45 +08:00
|
|
|
|
2010-07-06 20:55:05 +08:00
|
|
|
http://www.cocos2d-x.org
|
|
|
|
|
2010-07-06 15:46:45 +08:00
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
|
|
in the Software without restriction, including without limitation the rights
|
|
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
|
|
all copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
|
THE SOFTWARE.
|
|
|
|
****************************************************************************/
|
|
|
|
|
2010-07-06 10:19:51 +08:00
|
|
|
#ifndef __CCMACROS_H__
|
|
|
|
#define __CCMACROS_H__
|
|
|
|
|
2010-09-04 18:18:14 +08:00
|
|
|
#ifndef _USE_MATH_DEFINES
|
2010-07-19 14:59:13 +08:00
|
|
|
#define _USE_MATH_DEFINES
|
2010-09-04 18:18:14 +08:00
|
|
|
#endif
|
|
|
|
|
2011-03-07 17:11:57 +08:00
|
|
|
#include "CCCommon.h"
|
|
|
|
#include "CCStdC.h"
|
2011-01-15 18:05:35 +08:00
|
|
|
|
2011-03-07 17:11:57 +08:00
|
|
|
#ifndef CCAssert
|
|
|
|
#define CCAssert(cond, msg) CC_ASSERT(cond)
|
|
|
|
#endif // CCAssert
|
2010-07-06 15:46:45 +08:00
|
|
|
|
2010-12-28 15:05:55 +08:00
|
|
|
#include "ccConfig.h"
|
|
|
|
|
2010-07-06 15:46:45 +08:00
|
|
|
/** @def CC_SWAP
|
|
|
|
simple macro that swaps 2 variables
|
|
|
|
*/
|
2010-08-23 14:57:37 +08:00
|
|
|
#define CC_SWAP(x, y, type) \
|
|
|
|
{ type temp = (x); \
|
|
|
|
x = y; y = temp; \
|
|
|
|
}
|
2010-07-06 15:46:45 +08:00
|
|
|
|
|
|
|
|
|
|
|
/** @def CCRANDOM_MINUS1_1
|
|
|
|
returns a random float between -1 and 1
|
|
|
|
*/
|
2010-08-28 17:42:12 +08:00
|
|
|
#define CCRANDOM_MINUS1_1() ((2.0f*((float)rand()/RAND_MAX))-1.0f)
|
2010-07-06 15:46:45 +08:00
|
|
|
|
|
|
|
/** @def CCRANDOM_0_1
|
|
|
|
returns a random float between 0 and 1
|
|
|
|
*/
|
2010-08-28 17:42:12 +08:00
|
|
|
#define CCRANDOM_0_1() ((float)rand()/RAND_MAX)
|
2010-07-06 15:46:45 +08:00
|
|
|
|
|
|
|
/** @def CC_DEGREES_TO_RADIANS
|
|
|
|
converts degrees to radians
|
|
|
|
*/
|
2010-09-24 18:10:32 +08:00
|
|
|
#define CC_DEGREES_TO_RADIANS(__ANGLE__) ((__ANGLE__) * 0.01745329252f) // PI / 180
|
2010-07-06 15:46:45 +08:00
|
|
|
|
|
|
|
/** @def CC_RADIANS_TO_DEGREES
|
|
|
|
converts radians to degrees
|
|
|
|
*/
|
2010-09-24 18:10:32 +08:00
|
|
|
#define CC_RADIANS_TO_DEGREES(__ANGLE__) ((__ANGLE__) * 57.29577951f) // PI * 180
|
2010-07-06 15:46:45 +08:00
|
|
|
|
|
|
|
/** @def CC_BLEND_SRC
|
|
|
|
default gl blend src function. Compatible with premultiplied alpha images.
|
|
|
|
*/
|
2010-12-24 15:21:57 +08:00
|
|
|
#if CC_OPTIMIZE_BLEND_FUNC_FOR_PREMULTIPLIED_ALPHA
|
2011-11-18 21:23:54 +08:00
|
|
|
#define CC_BLEND_SRC GL_ONE
|
|
|
|
#define CC_BLEND_DST GL_ONE_MINUS_SRC_ALPHA
|
2010-12-24 15:21:57 +08:00
|
|
|
#else
|
2011-11-18 21:23:54 +08:00
|
|
|
#define CC_BLEND_SRC GL_SRC_ALPHA
|
|
|
|
#define CC_BLEND_DST GL_ONE_MINUS_SRC_ALPHA
|
2010-12-24 15:21:57 +08:00
|
|
|
#endif // ! CC_OPTIMIZE_BLEND_FUNC_FOR_PREMULTIPLIED_ALPHA
|
2010-07-06 15:46:45 +08:00
|
|
|
|
|
|
|
/** @def CC_BLEND_DST
|
|
|
|
default gl blend dst function. Compatible with premultiplied alpha images.
|
|
|
|
*/
|
|
|
|
#define CC_BLEND_DST GL_ONE_MINUS_SRC_ALPHA
|
|
|
|
|
|
|
|
/** @def CC_ENABLE_DEFAULT_GL_STATES
|
|
|
|
GL states that are enabled:
|
|
|
|
- GL_TEXTURE_2D
|
|
|
|
- GL_VERTEX_ARRAY
|
|
|
|
- GL_TEXTURE_COORD_ARRAY
|
|
|
|
- GL_COLOR_ARRAY
|
|
|
|
*/
|
|
|
|
#define CC_ENABLE_DEFAULT_GL_STATES() { \
|
|
|
|
glEnableClientState(GL_VERTEX_ARRAY); \
|
|
|
|
glEnableClientState(GL_COLOR_ARRAY); \
|
|
|
|
glEnableClientState(GL_TEXTURE_COORD_ARRAY); \
|
|
|
|
glEnable(GL_TEXTURE_2D); \
|
|
|
|
}
|
|
|
|
|
2011-11-18 21:23:54 +08:00
|
|
|
/** @def CC_DISABLE_DEFAULT_GL_STATES
|
2010-07-06 15:46:45 +08:00
|
|
|
Disable default GL states:
|
|
|
|
- GL_TEXTURE_2D
|
|
|
|
- GL_VERTEX_ARRAY
|
|
|
|
- GL_TEXTURE_COORD_ARRAY
|
|
|
|
- GL_COLOR_ARRAY
|
|
|
|
*/
|
|
|
|
#define CC_DISABLE_DEFAULT_GL_STATES() { \
|
|
|
|
glDisable(GL_TEXTURE_2D); \
|
|
|
|
glDisableClientState(GL_COLOR_ARRAY); \
|
|
|
|
glDisableClientState(GL_TEXTURE_COORD_ARRAY); \
|
|
|
|
glDisableClientState(GL_VERTEX_ARRAY); \
|
|
|
|
}
|
|
|
|
|
2010-07-06 17:55:33 +08:00
|
|
|
#ifndef FLT_EPSILON
|
|
|
|
#define FLT_EPSILON 1.192092896e-07F
|
|
|
|
#endif // FLT_EPSILON
|
|
|
|
|
2010-07-06 15:46:45 +08:00
|
|
|
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
|
|
|
|
TypeName(const TypeName&);\
|
|
|
|
void operator=(const TypeName&)
|
2010-07-06 10:19:51 +08:00
|
|
|
|
2010-12-24 11:40:44 +08:00
|
|
|
/**
|
|
|
|
@since v0.99.5
|
|
|
|
@todo upto-0.99.5 check the code for retina
|
|
|
|
*/
|
|
|
|
#if CC_IS_RETINA_DISPLAY_SUPPORTED
|
|
|
|
|
|
|
|
/****************************/
|
|
|
|
/** RETINA DISPLAY ENABLED **/
|
|
|
|
/****************************/
|
|
|
|
|
|
|
|
/** @def CC_CONTENT_SCALE_FACTOR
|
|
|
|
On Mac it returns 1;
|
|
|
|
On iPhone it returns 2 if RetinaDisplay is On. Otherwise it returns 1
|
|
|
|
*/
|
2010-12-28 15:05:55 +08:00
|
|
|
#include "CCDirector.h"
|
|
|
|
#define CC_CONTENT_SCALE_FACTOR() CCDirector::sharedDirector()->getContentScaleFactor()
|
2010-12-24 11:40:44 +08:00
|
|
|
|
|
|
|
|
|
|
|
/** @def CC_RECT_PIXELS_TO_POINTS
|
|
|
|
Converts a rect in pixels to points
|
|
|
|
*/
|
|
|
|
#define CC_RECT_PIXELS_TO_POINTS(__pixels__) \
|
2011-03-07 17:11:57 +08:00
|
|
|
CCRectMake( (__pixels__).origin.x / CC_CONTENT_SCALE_FACTOR(), (__pixels__).origin.y / CC_CONTENT_SCALE_FACTOR(), \
|
2010-12-24 11:40:44 +08:00
|
|
|
(__pixels__).size.width / CC_CONTENT_SCALE_FACTOR(), (__pixels__).size.height / CC_CONTENT_SCALE_FACTOR() )
|
|
|
|
|
|
|
|
/** @def CC_RECT_POINTS_TO_PIXELS
|
|
|
|
Converts a rect in points to pixels
|
|
|
|
*/
|
|
|
|
#define CC_RECT_POINTS_TO_PIXELS(__points__) \
|
2011-03-07 17:11:57 +08:00
|
|
|
CCRectMake( (__points__).origin.x * CC_CONTENT_SCALE_FACTOR(), (__points__).origin.y * CC_CONTENT_SCALE_FACTOR(), \
|
2010-12-24 11:40:44 +08:00
|
|
|
(__points__).size.width * CC_CONTENT_SCALE_FACTOR(), (__points__).size.height * CC_CONTENT_SCALE_FACTOR() )
|
|
|
|
|
|
|
|
#else // retina disabled
|
|
|
|
|
|
|
|
/*****************************/
|
|
|
|
/** RETINA DISPLAY DISABLED **/
|
|
|
|
/*****************************/
|
|
|
|
|
|
|
|
#define CC_CONTENT_SCALE_FACTOR() 1
|
|
|
|
#define CC_RECT_PIXELS_TO_POINTS(__pixels__) __pixels__
|
|
|
|
#define CC_RECT_POINTS_TO_PIXELS(__points__) __points__
|
|
|
|
|
|
|
|
#endif
|
2010-07-06 10:19:51 +08:00
|
|
|
|
2011-08-16 11:56:17 +08:00
|
|
|
/**
|
2011-11-18 21:23:54 +08:00
|
|
|
Helper marcos which converts 4-byte little/big endian
|
2011-08-16 11:56:17 +08:00
|
|
|
integral number to the machine native number representation
|
2011-11-18 21:23:54 +08:00
|
|
|
|
2011-08-16 11:56:17 +08:00
|
|
|
It should work same as apples CFSwapInt32LittleToHost(..)
|
|
|
|
*/
|
|
|
|
|
|
|
|
/// when define returns true it means that our architecture uses big endian
|
2011-11-18 21:23:54 +08:00
|
|
|
#define CC_HOST_IS_BIG_ENDIAN (bool)(*(unsigned short *)"\0\xff" < 0x100)
|
2011-08-30 15:20:41 +08:00
|
|
|
#define CC_SWAP32(i) ((i & 0x000000ff) << 24 | (i & 0x0000ff00) << 8 | (i & 0x00ff0000) >> 8 | (i & 0xff000000) >> 24)
|
2011-11-18 21:23:54 +08:00
|
|
|
#define CC_SWAP16(i) ((i & 0x00ff) << 8 | (i &0xff00) >> 8)
|
2011-08-16 11:56:17 +08:00
|
|
|
#define CC_SWAP_INT32_LITTLE_TO_HOST(i) ((CC_HOST_IS_BIG_ENDIAN == true)? CC_SWAP32(i) : (i) )
|
|
|
|
#define CC_SWAP_INT16_LITTLE_TO_HOST(i) ((CC_HOST_IS_BIG_ENDIAN == true)? CC_SWAP16(i) : (i) )
|
|
|
|
#define CC_SWAP_INT32_BIG_TO_HOST(i) ((CC_HOST_IS_BIG_ENDIAN == true)? (i) : CC_SWAP32(i) )
|
|
|
|
#define CC_SWAP_INT16_BIG_TO_HOST(i) ((CC_HOST_IS_BIG_ENDIAN == true)? (i): CC_SWAP16(i) )
|
|
|
|
|
2010-07-06 10:19:51 +08:00
|
|
|
#endif // __CCMACROS_H__
|