Merge branch 'v3' into v3-wp8-fix

This commit is contained in:
Dale Stammen 2015-03-03 08:40:07 -08:00
commit e93fe1b13b
19 changed files with 327 additions and 1920 deletions

View File

@ -131,17 +131,26 @@ void Animate3D::startWithTarget(Node *target)
auto action = (*runningAction).second;
if (action != this)
{
s_fadeOutAnimates[sprite] = action;
action->_state = Animate3D::Animate3DState::FadeOut;
action->_accTransTime = 0.0f;
action->_weight = 1.0f;
action->_lastTime = 0.f;
s_fadeInAnimates[sprite] = this;
_accTransTime = 0.0f;
_state = Animate3D::Animate3DState::FadeIn;
_weight = 0.f;
_lastTime = 0.f;
if (_transTime < 0.001f)
{
s_runningAnimates[sprite] = this;
_state = Animate3D::Animate3DState::Running;
_weight = 1.0f;
}
else
{
s_fadeOutAnimates[sprite] = action;
action->_state = Animate3D::Animate3DState::FadeOut;
action->_accTransTime = 0.0f;
action->_weight = 1.0f;
action->_lastTime = 0.f;
s_fadeInAnimates[sprite] = this;
_accTransTime = 0.0f;
_state = Animate3D::Animate3DState::FadeIn;
_weight = 0.f;
_lastTime = 0.f;
}
}
}
else

View File

@ -89,9 +89,12 @@ public:
void setOriginInterval(float interval);
float getOriginInterval() const {return _originInterval; }
/** animate transition time */
/** get animate transition time between 3d animations */
static float getTransitionTime() { return _transTime; }
/** set animate transition time between 3d animations */
static void setTransitionTime(float transTime) { if (transTime >= 0.f) _transTime = transTime; }
/**get & set play reverse, these are deprecated, use set negative speed instead*/
CC_DEPRECATED_ATTRIBUTE bool getPlayBack() const { return _playReverse; }
CC_DEPRECATED_ATTRIBUTE void setPlayBack(bool reverse) { _playReverse = reverse; }

View File

@ -723,15 +723,11 @@ void Sprite3D::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
GLuint textureID = mesh->getTexture() ? mesh->getTexture()->getName() : 0;
#endif
float globalZ = _globalZOrder;
bool isTransparent = (mesh->_isTransparent || color.a < 1.f);
if (isTransparent && Camera::getVisitingCamera())
{
// use the view matrix for Applying to recalculating transparent mesh's Z-Order
const auto& viewMat = Camera::getVisitingCamera()->getViewMatrix();
//fetch the Z from the result matrix
globalZ = -(viewMat.m[2] * transform.m[12] + viewMat.m[6] * transform.m[13] + viewMat.m[10] * transform.m[14] + viewMat.m[14]);
}
float globalZ = isTransparent ? 0 : _globalZOrder;
if (isTransparent)
flags |= Node::FLAGS_RENDER_AS_3D;
meshCommand.init(globalZ, textureID, programstate, _blend, mesh->getVertexBuffer(), mesh->getIndexBuffer(), mesh->getPrimitiveType(), mesh->getIndexFormat(), mesh->getIndexCount(), transform, flags);
meshCommand.setLightMask(_lightMask);

View File

@ -111,6 +111,8 @@ void MeshCommand::init(float globalZOrder,
{
CCASSERT(glProgramState, "GLProgramState cannot be nill");
RenderCommand::init(globalZOrder, mv, flags);
_globalOrder = globalZOrder;
_textureID = textureID;
_blendType = blendType;

View File

@ -48,7 +48,9 @@ void RenderCommand::init(float globalZOrder, const cocos2d::Mat4 &transform, uin
_globalOrder = globalZOrder;
if (flags & Node::FLAGS_RENDER_AS_3D)
{
_depth = Camera::getVisitingCamera()->getDepthInView(transform);
if (Camera::getVisitingCamera())
_depth = Camera::getVisitingCamera()->getDepthInView(transform);
set3D(true);
}
else

View File

@ -54,7 +54,7 @@
-- @return Animate3D#Animate3D ret (return value: cc.Animate3D)
--------------------------------
-- animate transition time
-- get animate transition time between 3d animations
-- @function [parent=#Animate3D] getTransitionTime
-- @param self
-- @return float#float ret (return value: float)
@ -74,6 +74,13 @@
-- @param #float frameRate
-- @return Animate3D#Animate3D ret (return value: cc.Animate3D)
--------------------------------
-- set animate transition time between 3d animations
-- @function [parent=#Animate3D] setTransitionTime
-- @param self
-- @param #float transTime
-- @return Animate3D#Animate3D self (return value: cc.Animate3D)
--------------------------------
--
-- @function [parent=#Animate3D] startWithTarget

View File

@ -2565,6 +2565,42 @@ int lua_cocos2dx_3d_Animate3D_createWithFrames(lua_State* tolua_S)
#endif
return 0;
}
int lua_cocos2dx_3d_Animate3D_setTransitionTime(lua_State* tolua_S)
{
int argc = 0;
bool ok = true;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif
#if COCOS2D_DEBUG >= 1
if (!tolua_isusertable(tolua_S,1,"cc.Animate3D",0,&tolua_err)) goto tolua_lerror;
#endif
argc = lua_gettop(tolua_S) - 1;
if (argc == 1)
{
double arg0;
ok &= luaval_to_number(tolua_S, 2,&arg0, "cc.Animate3D:setTransitionTime");
if(!ok)
{
tolua_error(tolua_S,"invalid arguments in function 'lua_cocos2dx_3d_Animate3D_setTransitionTime'", nullptr);
return 0;
}
cocos2d::Animate3D::setTransitionTime(arg0);
lua_settop(tolua_S, 1);
return 1;
}
luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d\n ", "cc.Animate3D:setTransitionTime",argc, 1);
return 0;
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'lua_cocos2dx_3d_Animate3D_setTransitionTime'.",&tolua_err);
#endif
return 0;
}
static int lua_cocos2dx_3d_Animate3D_finalize(lua_State* tolua_S)
{
printf("luabindings: finalizing LUA object (Animate3D)");
@ -2586,6 +2622,7 @@ int lua_register_cocos2dx_3d_Animate3D(lua_State* tolua_S)
tolua_function(tolua_S,"create", lua_cocos2dx_3d_Animate3D_create);
tolua_function(tolua_S,"getTransitionTime", lua_cocos2dx_3d_Animate3D_getTransitionTime);
tolua_function(tolua_S,"createWithFrames", lua_cocos2dx_3d_Animate3D_createWithFrames);
tolua_function(tolua_S,"setTransitionTime", lua_cocos2dx_3d_Animate3D_setTransitionTime);
tolua_endmodule(tolua_S);
std::string typeName = typeid(cocos2d::Animate3D).name();
g_luaType[typeName] = "cc.Animate3D";

View File

@ -74,6 +74,7 @@ int register_all_cocos2dx_3d(lua_State* tolua_S);
#endif // __cocos2dx_3d_h__

View File

@ -216,8 +216,9 @@ void PUParticle3DQuadRender::render(Renderer* renderer, const Mat4 &transform, P
_indexBuffer->updateIndices(&_indexData[0], index/* * sizeof(unsigned short)*/, 0);
GLuint texId = (_texture ? _texture->getName() : 0);
float depthZ = -(viewMat.m[2] * transform.m[12] + viewMat.m[6] * transform.m[13] + viewMat.m[10] * transform.m[14] + viewMat.m[14]);
_meshCommand->init(depthZ, texId, _glProgramState, particleSystem->getBlendFunc(), _vertexBuffer->getVBO(), _indexBuffer->getVBO(), GL_TRIANGLES, GL_UNSIGNED_SHORT, index, transform, 0);
// float depthZ = -(viewMat.m[2] * transform.m[12] + viewMat.m[6] * transform.m[13] + viewMat.m[10] * transform.m[14] + viewMat.m[14]);
_meshCommand->init(0, texId, _glProgramState, particleSystem->getBlendFunc(), _vertexBuffer->getVBO(), _indexBuffer->getVBO(), GL_TRIANGLES, GL_UNSIGNED_SHORT, index, transform, Node::FLAGS_RENDER_AS_3D);
_meshCommand->setTransparent(true);
renderer->addCommand(_meshCommand);
}

View File

@ -47,7 +47,6 @@ static std::function<Layer*()> createFunctions[] =
CL(Particle3DUVAnimDemo),
CL(Particle3DFirePlaceDemo),
CL(Particle3DElectricBeamSystemDemo),
CL(Particle3DExplosionBlueDemo),
};
#define MAX_LAYER (sizeof(createFunctions) / sizeof(createFunctions[0]))
@ -242,7 +241,7 @@ bool Particle3DBlackHoleDemo::init()
if (!Particle3DTestDemo::init())
return false;
auto rootps = PUParticleSystem3D::create("blackHole.pu", "pu_mediapack_01.material");
auto rootps = PUParticleSystem3D::create("blackHole.pu", "pu_example.material");
rootps->setCameraMask((unsigned short)CameraFlag::USER1);
rootps->setPosition(-25.0f, 0.0f);
auto moveby = MoveBy::create(2.0f, Vec2(50.0f, 0.0f));
@ -269,7 +268,7 @@ bool Particle3DHypnoDemo::init()
if (!Particle3DTestDemo::init())
return false;
auto rootps = PUParticleSystem3D::create("hypno.pu", "pu_mediapack_01.material");
auto rootps = PUParticleSystem3D::create("hypno.pu", "pu_example.material");
rootps->setCameraMask((unsigned short)CameraFlag::USER1);
// auto scale = ScaleBy::create(1.0f, 2.0f, 2.0f, 2.0f);
// auto rotate = RotateBy::create(1.0f, Vec3(0.0, 100.0f, 0.0f));
@ -292,7 +291,7 @@ bool Particle3DTimeShiftDemo::init()
if (!Particle3DTestDemo::init())
return false;
auto rootps = PUParticleSystem3D::create("timeShift.pu", "pu_mediapack_01.material");
auto rootps = PUParticleSystem3D::create("timeShift.pu", "pu_example.material");
rootps->setScale(2.0f);
rootps->setCameraMask((unsigned short)CameraFlag::USER1);
rootps->startParticleSystem();
@ -312,7 +311,7 @@ bool Particle3DUVAnimDemo::init()
if (!Particle3DTestDemo::init())
return false;
auto rootps = PUParticleSystem3D::create("UVAnimation.pu", "pu_mediapack_01.material");
auto rootps = PUParticleSystem3D::create("UVAnimation.pu", "pu_example.material");
rootps->setCameraMask((unsigned short)CameraFlag::USER1);
rootps->startParticleSystem();
@ -331,7 +330,7 @@ bool Particle3DFirePlaceDemo::init()
if (!Particle3DTestDemo::init())
return false;
auto rootps = PUParticleSystem3D::create("mp_torch.pu", "pu_mediapack_01.material");
auto rootps = PUParticleSystem3D::create("mp_torch.pu", "pu_example.material");
rootps->setCameraMask((unsigned short)CameraFlag::USER1);
rootps->setScale(5.0f);
rootps->startParticleSystem();
@ -352,7 +351,7 @@ bool Particle3DLineStreakDemo::init()
return false;
auto rootps = PUParticleSystem3D::create("lineStreak.pu", "pu_mediapack_01.material");
auto rootps = PUParticleSystem3D::create("lineStreak.pu", "pu_example.material");
rootps->setCameraMask((unsigned short)CameraFlag::USER1);
rootps->setScale(5.0f);
//rootps->runAction(RepeatForever::create(Sequence::create(rotate, nullptr)));
@ -385,23 +384,3 @@ bool Particle3DElectricBeamSystemDemo::init()
return true;
}
std::string Particle3DExplosionBlueDemo::subtitle() const
{
return "ExplosionBlue";
}
bool Particle3DExplosionBlueDemo::init()
{
if (!Particle3DTestDemo::init())
return false;
auto rootps = PUParticleSystem3D::create("mp_explosion_04_blue.pu");
rootps->setCameraMask((unsigned short)CameraFlag::USER1);
rootps->setScale(0.25f);
rootps->startParticleSystem();
this->addChild(rootps, 0, PARTICLE_SYSTEM_TAG);
return true;
}

View File

@ -162,19 +162,6 @@ public:
virtual bool init() override;
};
class Particle3DExplosionBlueDemo : public Particle3DTestDemo
{
public:
CREATE_FUNC(Particle3DExplosionBlueDemo);
Particle3DExplosionBlueDemo(){};
virtual ~Particle3DExplosionBlueDemo(){};
virtual std::string subtitle() const override;
virtual bool init() override;
};
class Particle3DTestScene : public TestScene
{
public:

View File

@ -539,3 +539,123 @@ material ParticleUniverse/Beam_2
}
}
}
//-----------------------------------------------------------------------------------------------------------------------
material PUMediaPack/Pentagram_02
{
technique
{
pass
{
lighting off
scene_blend add
depth_write off
texture_unit
{
texture pump_pentagram_02.png
tex_address_mode clamp
}
}
}
}
//-----------------------------------------------------------------------------------------------------------------------
material PUMediaPack/Flare_04
{
technique
{
pass
{
lighting off
scene_blend add
depth_write off
texture_unit
{
texture pump_flare_04.png
tex_address_mode clamp
}
}
}
}
//-----------------------------------------------------------------------------------------------------------------------
material PUMediaPack/Streak_03
{
technique
{
pass
{
lighting off
scene_blend add
depth_write off
texture_unit
{
texture pump_streak_03.png
tex_address_mode clamp
}
}
}
}
//-----------------------------------------------------------------------------------------
material ParticleUniverse/Swirl_02
{
technique
{
pass
{
lighting off
scene_blend add
depth_write off
texture_unit
{
texture pump_swirl_02.png
tex_address_mode clamp
}
}
}
}
//-----------------------------------------------------------------------------------------------------------------------
material PUMediaPack/Watch
{
technique
{
pass
{
lighting off
depth_write off
scene_blend add
texture_unit
{
texture pump_watch.png
tex_address_mode clamp
}
}
}
}
//-----------------------------------------------------------------------------------------------------------------------
material PUMediaPack/Hourglass
{
technique
{
pass
{
lighting off
depth_write off
scene_blend add
texture_unit
{
texture pump_hourglass.png
tex_address_mode clamp
}
}
}
}

View File

@ -1,380 +0,0 @@
//-----------------------------------------------------------------------------------------------------------------------
// This script is part of the Particle Universe Media Pack 1 product.
//
// Copyright (c) 2010 Henry van Merode
//
// Usage of this program is licensed under the terms of the Particle Universe Commercial License Media Pack 1.
// You can find a copy of the Commercial License in the Media Pack 1 package.
//-----------------------------------------------------------------------------------------------------------------------
system Explosion/mp_explosion_04_blue
{
technique
{
visual_particle_quota 12
material mp_explosion_04
renderer Billboard
{
texture_coords_rows 2
texture_coords_columns 2
billboard_rotation_type vertex
}
emitter Point
{
emission_rate 100
angle 360
time_to_live dyn_random
{
min 0.4
max 1.2
}
velocity dyn_random
{
min 100
max 500
}
duration 0.1
all_particle_dimensions dyn_random
{
min 1
max 50
}
colour 0.670588 0.8 0.996078 1
}
affector ScaleVelocity
{
velocity_scale dyn_curved_linear
{
control_point 0 -1500
control_point 1 -200
}
}
affector Scale
{
xyz_scale 500
}
affector Colour
{
time_colour 0 0 0.333333 0.701961 1
time_colour 1 0 0 0 1
}
affector TextureRotator
{
rotation dyn_random
{
min -3
max 3
}
rotation_speed 0
}
observer OnTime
{
observe_until_event true
handler DoStopSystem
{
}
since_start_system true
on_time greater_than 2
}
observer OnEmission
{
handler DoPlacementParticle
{
force_emitter BlackSmokeEmitter
inherit_direction true
inherit_time_to_live true
inherit_width true
inherit_height true
inherit_depth true
}
}
}
technique
{
visual_particle_quota 12
material mp_explosion_smoke_01
renderer Billboard
{
billboard_rotation_type vertex
}
emitter Point BlackSmokeEmitter
{
emission_rate 100
angle 360
time_to_live dyn_random
{
min 0.8
max 1.2
}
velocity dyn_random
{
min 100
max 500
}
duration 0.1
all_particle_dimensions dyn_random
{
min 1
max 50
}
colour 0 0 0 1
}
affector ScaleVelocity
{
velocity_scale dyn_curved_linear
{
control_point 0 -1500
control_point 1 -200
}
}
affector Scale
{
xyz_scale 400
}
affector Colour
{
time_colour 0 0.294118 0.294118 0.294118 0
time_colour 0.5 0.172549 0.172549 0.172549 0.3
time_colour 0.6 0.137255 0.137255 0.137255 0.5
time_colour 1 0 0 0 0
}
affector TextureRotator
{
rotation dyn_random
{
min -3
max 3
}
rotation_speed 0
}
}
technique
{
visual_particle_quota 50
material mp_explosion_04
renderer Billboard
{
texture_coords_rows 2
texture_coords_columns 2
billboard_type oriented_self
billboard_origin bottom_center
billboard_rotation_type vertex
}
emitter Point
{
emission_rate 1000
angle 360
time_to_live dyn_random
{
min 0.2
max 0.4
}
velocity dyn_random
{
min 200
max 300
}
duration 0.2
particle_width dyn_random
{
min 10
max 30
}
particle_height dyn_random
{
min 1
max 10
}
texture_coords 2
colour 0.670588 0.815686 0.996078 1
}
affector Scale
{
y_scale dyn_random
{
min 100
max 300
}
}
affector Colour
{
time_colour 0 0 0.384314 0.807843 1
time_colour 0.6 1 1 1 1
time_colour 1 0 0 0 1
}
}
technique
{
visual_particle_quota 50
material mp_explosion_04
renderer Billboard
{
texture_coords_rows 2
texture_coords_columns 2
billboard_type oriented_self
billboard_origin bottom_center
billboard_rotation_type vertex
}
emitter Point
{
emission_rate 1000
angle 360
time_to_live dyn_random
{
min 0.2
max 0.4
}
velocity dyn_random
{
min 100
max 200
}
duration 0.2
particle_width dyn_random
{
min 10
max 30
}
particle_height dyn_random
{
min 1
max 10
}
texture_coords 3
colour 0.984314 0.992157 0.67451 1
}
affector Scale
{
x_scale dyn_random
{
min 60
max 90
}
y_scale dyn_random
{
min 200
max 300
}
}
affector Colour
{
time_colour 0 0 0.396078 0.835294 1
time_colour 0.2 1 1 1 1
time_colour 1 0 0 0 1
colour_operation multiply
}
}
technique
{
visual_particle_quota 12
material mp_explosion_04
renderer Billboard
{
texture_coords_rows 2
texture_coords_columns 2
billboard_type oriented_self
billboard_rotation_type vertex
}
emitter Box
{
emission_rate 30
angle 360
time_to_live dyn_random
{
min 0.3
max 0.5
}
velocity dyn_random
{
min 5
max 10
}
duration 0.15
all_particle_dimensions dyn_random
{
min 1
max 50
}
texture_coords 1
colour 0.984314 0.992157 0.67451 1
box_width 20
box_height 20
box_depth 20
}
affector Scale
{
xyz_scale dyn_random
{
min 700
max 1000
}
}
affector Colour
{
time_colour 0 1 1 1 1
time_colour 1 0 0 0 1
}
affector TextureRotator
{
rotation dyn_random
{
min -3
max 3
}
rotation_speed 0
}
}
technique
{
visual_particle_quota 20
material mp_explosion_debris
renderer Billboard
{
billboard_type oriented_self
billboard_rotation_type vertex
}
emitter Point
{
emission_rate 200
angle 360
time_to_live dyn_random
{
min 0.5
max 1
}
velocity dyn_random
{
min 200
max 350
}
duration 0.1
colour 0 0 0 1
}
affector ScaleVelocity
{
velocity_scale dyn_curved_linear
{
control_point 0 -1500
control_point 0.2 -200
}
}
affector Scale
{
xyz_scale 300
}
affector Colour
{
time_colour 0 0.65098 0.815686 1 1
time_colour 0.5 0.0901961 0.52549 1 1
time_colour 1 0 0 0 1
}
affector TextureRotator
{
rotation dyn_random
{
min -3
max 3
}
rotation_speed 0
}
}
}

View File

@ -106,7 +106,7 @@ function Particle3DLineStreakDemo:subtitle()
end
function Particle3DLineStreakDemo:onEnter()
local rootps = cc.PUParticleSystem3D:create("lineStreak.pu", "pu_mediapack_01.material")
local rootps = cc.PUParticleSystem3D:create("lineStreak.pu", "pu_example.material")
rootps:setCameraMask(cc.CameraFlag.USER1)
rootps:setScale(5.0)
rootps:startParticleSystem()
@ -143,7 +143,7 @@ function Particle3DBlackHoleDemo:subtitle()
end
function Particle3DBlackHoleDemo:onEnter()
local rootps = cc.PUParticleSystem3D:create("blackHole.pu", "pu_mediapack_01.material")
local rootps = cc.PUParticleSystem3D:create("blackHole.pu", "pu_example.material")
rootps:setCameraMask(cc.CameraFlag.USER1)
rootps:setPosition(-25.0, 0.0)
local moveby = cc.MoveBy:create(2.0, cc.p(50.0, 0.0))
@ -182,7 +182,7 @@ function Particle3DHypnoDemo:subtitle()
end
function Particle3DHypnoDemo:onEnter()
local rootps = cc.PUParticleSystem3D:create("hypno.pu", "pu_mediapack_01.material")
local rootps = cc.PUParticleSystem3D:create("hypno.pu", "pu_example.material")
rootps:setCameraMask(cc.CameraFlag.USER1)
rootps:startParticleSystem()
self:addChild(rootps, 0, PARTICLE_SYSTEM_TAG)
@ -258,7 +258,7 @@ function Particle3DTimeShiftDemo:subtitle()
end
function Particle3DTimeShiftDemo:onEnter()
local rootps = cc.PUParticleSystem3D:create("timeShift.pu", "pu_mediapack_01.material")
local rootps = cc.PUParticleSystem3D:create("timeShift.pu", "pu_example.material")
rootps:setScale(2.0)
rootps:setCameraMask(cc.CameraFlag.USER1)
rootps:startParticleSystem()
@ -295,7 +295,7 @@ function Particle3DUVAnimDemo:subtitle()
end
function Particle3DUVAnimDemo:onEnter()
local rootps = cc.PUParticleSystem3D:create("UVAnimation.pu", "pu_mediapack_01.material")
local rootps = cc.PUParticleSystem3D:create("UVAnimation.pu", "pu_example.material")
rootps:setCameraMask(cc.CameraFlag.USER1)
rootps:startParticleSystem()
self:addChild(rootps, 0, PARTICLE_SYSTEM_TAG)
@ -330,7 +330,7 @@ function Particle3DFirePlaceDemo:subtitle()
end
function Particle3DFirePlaceDemo:onEnter()
local rootps = cc.PUParticleSystem3D:create("mp_torch.pu", "pu_mediapack_01.material")
local rootps = cc.PUParticleSystem3D:create("mp_torch.pu", "pu_example.material")
rootps:setCameraMask(cc.CameraFlag.USER1)
rootps:setScale(5.0)
rootps:startParticleSystem()
@ -376,43 +376,6 @@ function Particle3DElectricBeamSystemDemo:onExit()
self:unscheduleUpdate()
end
-- Particle3DExplosionBlueDemo
local Particle3DExplosionBlueDemo = class("Particle3DExplosionBlueDemo", function ()
local layer = cc.Layer:create()
Helper.initWithLayer(layer)
return layer
end)
function Particle3DExplosionBlueDemo:ctor()
-- body
self:init()
end
function Particle3DExplosionBlueDemo:init()
baseInit(self)
end
function Particle3DExplosionBlueDemo:title()
return "Particle3D Test"
end
function Particle3DExplosionBlueDemo:subtitle()
return "ExplosionBlue"
end
function Particle3DExplosionBlueDemo:onEnter()
local rootps = cc.PUParticleSystem3D:create("mp_explosion_04_blue.pu")
rootps:setCameraMask(cc.CameraFlag.USER1)
rootps:setScale(0.25)
rootps:startParticleSystem()
self:addChild(rootps, 0, PARTICLE_SYSTEM_TAG)
end
function Particle3DExplosionBlueDemo:onExit()
self:unscheduleUpdate()
end
function Particle3DTest()
local scene = cc.Scene:create()
@ -425,8 +388,7 @@ function Particle3DTest()
Particle3DTimeShiftDemo.create,
Particle3DUVAnimDemo.create,
Particle3DFirePlaceDemo.create,
Particle3DElectricBeamSystemDemo.create,
Particle3DExplosionBlueDemo.create,
Particle3DElectricBeamSystemDemo.create
}
scene:addChild(Particle3DLineStreakDemo.create())

View File

@ -113,7 +113,7 @@ local _allTests = {
{ isSupported = true, name = "OpenGLTest" , create_func= OpenGLTestMain },
{ isSupported = true, name = "ParallaxTest" , create_func = ParallaxTestMain },
{ isSupported = true, name = "ParticleTest" , create_func = ParticleTest },
{ isSupported = true, name = "Particle3DTest" , create_func = Particle3DTest },
{ isSupported = true, name = "Particle3D (PU)" , create_func = Particle3DTest },
{ isSupported = true, name = "PerformanceTest" , create_func= PerformanceTestMain },
{ isSupported = true, name = "PhysicsTest" , create_func = PhysicsTest },
{ isSupported = true, name = "RenderTextureTest" , create_func = RenderTextureTestMain },

View File

@ -0,0 +1,8 @@
#put xctool.sh into your PATH
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
COCOS2DX_ROOT="$DIR"/../..
cd ${COCOS2DX_ROOT}
mkdir linux-build
cd linux-build
cmake ..
make -j4

View File

@ -0,0 +1,8 @@
#put xctool.sh into your PATH
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
COCOS2DX_ROOT="$DIR"/../..
cd ${COCOS2DX_ROOT}
mkdir mac-build
cd mac-build
cmake ..
make -j4

View File

@ -23,7 +23,7 @@ def set_description(desc, url):
req = urllib2.Request(url + 'submitDescription', req_data)
#print(os.environ['BUILD_URL'])
req.add_header('Content-Type', 'application/x-www-form-urlencoded')
base64string = base64.encodestring(os.environ['JENKINS_ADMIN']+ ":" + os.environ['JENKINS_ADMIN_PW']).replace('\n', '')
base64string = base64.encodestring(os.environ['JENKINS_ADMIN'] + ":" + os.environ['JENKINS_ADMIN_PW']).replace('\n', '')
req.add_header("Authorization", "Basic " + base64string)
try:
urllib2.urlopen(req)
@ -35,11 +35,8 @@ def check_current_3rd_libs(branch):
#get current_libs config
backup_files = range(2)
current_files = range(2)
config_file_paths = ['external/config.json','templates/lua-template-runtime/runtime/config.json']
if (branch == 'v2'):
config_file_paths = ['external/config.json']
backup_files = range(1)
current_files = range(1)
config_file_paths = ['external/config.json', 'templates/lua-template-runtime/runtime/config.json']
for i, config_file_path in enumerate(config_file_paths):
if not os.path.isfile(config_file_path):
raise Exception("Could not find 'external/config.json'")
@ -55,7 +52,7 @@ def check_current_3rd_libs(branch):
current_file = filename
current_files[i] = current_file
if os.path.isfile(backup_file):
copy(backup_file, current_file)
copy(backup_file, current_file)
#run download-deps.py
print("prepare to downloading ...")
os.system('python download-deps.py -r no')
@ -68,7 +65,7 @@ def connect_db():
db_host = os.environ['db_host']
db_user = os.environ['db_user']
db_pw = os.environ['db_pw']
db_name=os.environ['db_name']
db_name = os.environ['db_name']
try:
db = MySQLdb.connect(db_host, db_user, db_pw, db_name)
except:
@ -95,26 +92,27 @@ def scan_all_libs(db, pr_num):
stats = {}
lib_path = './tests/cpp-tests/proj.android/obj/local/armeabi'
for root, dirs, files in os.walk(lib_path):
for _file in files:
if not _file.endswith(".a"):
continue
print _file
libfile = lib_path + '/' + _file
_filename = _file.split('.')[0]
filesize = os.path.getsize(libfile)/1024
stats[_filename]=filesize
save_build_stats(db, pr_num, _filename, filesize)
for _file in files:
if not _file.endswith(".a"):
continue
print _file
libfile = lib_path + '/' + _file
_filename = _file.split('.')[0]
filesize = os.path.getsize(libfile) / 1024
stats[_filename] = filesize
save_build_stats(db, pr_num, _filename, filesize)
return stats
http_proxy = ''
if(os.environ.has_key('HTTP_PROXY')):
if('HTTP_PROXY' in os.environ):
http_proxy = os.environ['HTTP_PROXY']
proxyDict = {'http':http_proxy,'https':http_proxy}
proxyDict = {'http': http_proxy, 'https': http_proxy}
def main():
#get payload from os env
payload_str = os.environ['payload']
payload_str = payload_str.decode('utf-8','ignore')
payload_str = payload_str.decode('utf-8', 'ignore')
#parse to json obj
payload = json.loads(payload_str)
@ -130,9 +128,7 @@ def main():
url = payload['html_url']
print "url:" + url
pr_desc = '<h3><a href='+ url + '> pr#' + str(pr_num) + ' is '+ action +'</a></h3>'
pr_desc = '<h3><a href=' + url + '> pr#' + str(pr_num) + ' is ' + action + '</a></h3>'
#get statuses url
statuses_url = payload['statuses_url']
@ -149,21 +145,20 @@ def main():
set_description(pr_desc, target_url)
data = {"state":"pending", "target_url":target_url, "context":"Jenkins CI", "description":"Build started..."}
data = {"state": "pending", "target_url": target_url, "context": "Jenkins CI", "description": "Build started..."}
access_token = os.environ['GITHUB_ACCESS_TOKEN']
Headers = {"Authorization":"token " + access_token}
Headers = {"Authorization": "token " + access_token}
try:
requests.post(statuses_url, data=json.dumps(data), headers=Headers, proxies = proxyDict)
requests.post(statuses_url, data=json.dumps(data), headers=Headers, proxies=proxyDict)
except:
traceback.print_exc()
#reset path to workspace root
os.system("cd " + os.environ['WORKSPACE']);
os.system("cd " + os.environ['WORKSPACE'])
#pull latest code
os.system("git pull origin v3")
os.system("git checkout v3")
os.system("git pull origin " + branch)
os.system("git checkout " + branch)
os.system("git branch -D pull" + str(pr_num))
#clean workspace
print "Before checkout: git clean -xdf -f"
@ -174,7 +169,7 @@ def main():
if(ret != 0):
return(2)
#checkout a new branch from v3
#checkout a new branch from v3 or v4-develop
git_checkout = "git checkout -b " + "pull" + str(pr_num)
os.system(git_checkout)
#merge pull reqeust head
@ -199,119 +194,91 @@ def main():
check_current_3rd_libs(branch)
# Generate binding glue codes
if(branch == 'v3'):
ret = os.system("python tools/jenkins-scripts/gen_jsb.py")
elif(branch == 'v2'):
os.chdir('tools/tojs')
if(platform.system() == 'Windows'):
os.environ['NDK_ROOT'] = os.environ['NDK_ROOT_R8E']
ret = os.system("genbindings-win32.bat")
os.environ['NDK_ROOT'] = os.environ['NDK_ROOT_R9B']
else:
ret = os.system("./genbindings.sh")
os.chdir('../..')
if(branch == 'v3' or branch == 'v4-develop'):
ret = os.system("python tools/jenkins-scripts/gen_jsb.py")
if(ret != 0):
return(1)
#make temp dir
print "current dir is: " + os.environ['WORKSPACE']
os.system("cd " + os.environ['WORKSPACE']);
os.system("cd " + os.environ['WORKSPACE'])
os.mkdir("android_build_objs")
#add symbol link
PROJECTS=["cpp-empty-test", "cpp-tests"]
PROJECTS = ["cpp-empty-test", "cpp-tests"]
print platform.system()
if(platform.system() == 'Darwin'):
for item in PROJECTS:
cmd = "ln -s " + os.environ['WORKSPACE']+"/android_build_objs/ " + os.environ['WORKSPACE']+"/tests/"+item+"/proj.android/obj"
os.system(cmd)
cmd = "ln -s " + os.environ['WORKSPACE'] + "/android_build_objs/ " + os.environ['WORKSPACE'] + "/tests/" + item + "/proj.android/obj"
os.system(cmd)
elif(platform.system() == 'Windows'):
for item in PROJECTS:
p = item.replace("/", os.sep)
cmd = "mklink /J "+os.environ['WORKSPACE']+os.sep+"tests"+os.sep +p+os.sep+"proj.android"+os.sep+"obj " + os.environ['WORKSPACE']+os.sep+"android_build_objs"
print cmd
os.system(cmd)
p = item.replace("/", os.sep)
cmd = "mklink /J " + os.environ['WORKSPACE'] + os.sep + "tests" + os.sep + p + os.sep + "proj.android" + os.sep + "obj " + os.environ['WORKSPACE'] + os.sep + "android_build_objs"
print cmd
os.system(cmd)
#build
#TODO: add android-linux build
# TODO: add wp8.1 universal build
#TODO: add mac build
node_name = os.environ['NODE_NAME']
if(branch == 'v3'):
if(node_name == 'android_mac') or (node_name == 'android_win7'):
#modify tests/cpp-empty-test/Classes/AppDelegate.cpp to support Console
modify_file = 'tests/cpp-empty-test/Classes/AppDelegate.cpp'
data = codecs.open(modify_file, encoding='UTF-8').read()
data = re.sub("director->setDisplayStats\(true\);", "director->setDisplayStats(true); director->getConsole()->listenOnTCP(5678);", data)
codecs.open(modify_file, 'wb', encoding='UTF-8').write(data)
#modify tests/cpp-empty-test/proj.android/AndroidManifest.xml to support Console
modify_file = 'tests/cpp-empty-test/proj.android/AndroidManifest.xml'
data = codecs.open(modify_file, encoding='UTF-8').read()
data = re.sub('<uses-feature android:glEsVersion="0x00020000" />', '<uses-feature android:glEsVersion="0x00020000" /> <uses-permission android:name="android.permission.INTERNET"/>', data)
codecs.open(modify_file, 'wb', encoding='UTF-8').write(data)
print "Start build android..."
ret = os.system("python build/android-build.py -p 10 all")
# create and save apk
if(ret == 0):
sample_dir = 'tests/cpp-tests/proj.android/'
local_apk = sample_dir + 'bin/CppTests-debug.apk'
backup_apk = os.environ['BACKUP_PATH'] + 'CppTests_' + str(pr_num) + '.apk'
os.system('cp ' + local_apk + ' ' + backup_apk)
db = connect_db()
scan_all_libs(db, pr_num)
ret = os.system("python build/android-build.py -p 10 -b release cpp-empty-test")
if(ret == 0):
_path = 'tests/cpp-empty-test/proj.android/libs/armeabi/libcpp_empty_test.so'
filesize = os.path.getsize(_path)
pr_desc = pr_desc + '<h3>size of libcpp_empty_test.so is:' + str(filesize/1024) + 'kb</h3>'
set_description(pr_desc, target_url)
save_build_stats(db, pr_num, 'libcpp_empty_test', filesize/1024)
ret = os.system("python build/android-build.py -p 10 -b release lua-empty-test")
if(ret == 0):
_path = 'tests/lua-empty-test/project/proj.android/libs/armeabi/liblua_empty_test.so'
filesize = os.path.getsize(_path)
pr_desc = pr_desc + '<h3>size of liblua_empty_test.so is:' + str(filesize/1024) + 'kb</h3>'
set_description(pr_desc, target_url)
save_build_stats(db, pr_num, 'liblua_empty_test', filesize/1024)
close_db(db)
elif(node_name == 'win32_win7'):
ret = subprocess.call('"%VS110COMNTOOLS%..\IDE\devenv.com" "build\cocos2d-win32.vc2012.sln" /Build "Debug|Win32"', shell=True)
elif(node_name == 'ios_mac'):
ret = os.system("tools/jenkins-scripts/ios-build.sh")
elif(node_name == 'linux_centos'):
os.chdir("build/")
ret = os.system("cmake ../")
ret = os.system("make -j10")
os.chdir("../")
elif(branch == 'v2'):
SAMPLES_DIRS = ['Cpp/HelloCpp', 'Cpp/SimpleGame', 'Cpp/TestCpp', 'Javascript/TestJavascript', 'Lua/HelloLua', 'Lua/TestLua']
SAMPLES_NAMES = ['HelloCpp', 'SimpleGame', 'TestCpp', 'TestJavascript', 'HelloLua', 'TestLua']
if(node_name == 'android_mac'):
for item in SAMPLES_DIRS:
proj_dir = "samples/" + item + "/proj.android"
os.system('ln -s ../../../../android_build_objs obj')
os.system(proj_dir + "/build_native.sh")
if (ret != 0):
break
elif(node_name == 'win32_win7'):
ret = subprocess.call('"%VS110COMNTOOLS%..\IDE\devenv.com" "cocos2d-win32.vc2012.sln" /Build "Debug|Win32"', shell=True)
elif(node_name == 'ios_mac'):
for i, item in enumerate(SAMPLES_DIRS):
cmd = "xcodebuild -project samples/" + item + "/proj.ios/" + SAMPLES_NAMES[i] + ".xcodeproj -scheme " + SAMPLES_NAMES[i] + ' -destination "platform=iOS Simulator,name=iPhone Retina (4-inch)"'
cmd_clean = cmd + ' clean'
cmd_build = cmd + ' build'
ret = os.system(cmd_clean)
if(ret != 0):
break
ret = os.system(cmd_build)
if(ret != 0):
break
elif(node_name == 'linux_centos'):
data = codecs.open('cocos2dx/proj.linux/cocos2dx.mk', encoding='UTF-8').read()
data = re.sub('-lglfw','-L$(GLFW_279_LIB) -lglfw', data)
codecs.open('cocos2dx/proj.linux/cocos2dx.mk', 'wb', encoding='UTF-8').write(data)
ret = os.system('make -j10')
else:
ret = 0
jenkins_script_path = 'tools/jenkins-scripts/'
if(branch == 'v3' or branch == 'v4-develop'):
if(node_name == 'android') or (node_name == 'android_bak'):
#modify tests/cpp-empty-test/Classes/AppDelegate.cpp to support Console
# FIXME: We should use patch instead
modify_file = 'tests/cpp-empty-test/Classes/AppDelegate.cpp'
data = codecs.open(modify_file, encoding='UTF-8').read()
data = re.sub("director->setDisplayStats\(true\);", "director->setDisplayStats(true); director->getConsole()->listenOnTCP(5678);", data)
codecs.open(modify_file, 'wb', encoding='UTF-8').write(data)
#modify tests/cpp-empty-test/proj.android/AndroidManifest.xml to support Console
modify_file = 'tests/cpp-empty-test/proj.android/AndroidManifest.xml'
data = codecs.open(modify_file, encoding='UTF-8').read()
data = re.sub('<uses-feature android:glEsVersion="0x00020000" />', '<uses-feature android:glEsVersion="0x00020000" /> <uses-permission android:name="android.permission.INTERNET"/>', data)
codecs.open(modify_file, 'wb', encoding='UTF-8').write(data)
print "Start build android..."
ret = os.system("python build/android-build.py -p 10 all")
# create and save apk
if(ret == 0):
sample_dir = 'tests/cpp-tests/proj.android/'
local_apk = sample_dir + 'bin/CppTests-debug.apk'
backup_apk = os.environ['BACKUP_PATH'] + 'CppTests_' + str(pr_num) + '.apk'
os.system('cp ' + local_apk + ' ' + backup_apk)
db = connect_db()
scan_all_libs(db, pr_num)
ret = os.system("python build/android-build.py -p 10 -b release cpp-empty-test")
if(ret == 0):
_path = 'tests/cpp-empty-test/proj.android/libs/armeabi/libcpp_empty_test.so'
filesize = os.path.getsize(_path)
pr_desc = pr_desc + '<h3>size of libcpp_empty_test.so is:' + str(filesize / 1024) + 'kb</h3>'
set_description(pr_desc, target_url)
save_build_stats(db, pr_num, 'libcpp_empty_test', filesize / 1024)
ret = os.system("python build/android-build.py -p 10 -b release lua-empty-test")
if(ret == 0):
_path = 'tests/lua-empty-test/project/proj.android/libs/armeabi/liblua_empty_test.so'
filesize = os.path.getsize(_path)
pr_desc = pr_desc + '<h3>size of liblua_empty_test.so is:' + str(filesize / 1024) + 'kb</h3>'
set_description(pr_desc, target_url)
save_build_stats(db, pr_num, 'liblua_empty_test', filesize / 1024)
close_db(db)
elif(node_name == 'win32' or node_name == 'win32_win7' or node_name == 'win32_bak'):
build_vs_project_name = 'cocos2d-win32.vc2013.sln'
if(branch == 'v3'):
build_vs_project_name = 'cocos2d-win32.vc2012.sln'
ret = subprocess.call('"%VS120COMNTOOLS%..\IDE\devenv.com" "build\"' + build_vs_project_name + ' /Build "Debug|Win32"', shell=True)
elif(node_name == 'windows-universal' or node_name == 'windows-universal_bak'):
ret = subprocess.call('"%VS120COMNTOOLS%..\IDE\devenv.com" "build\cocos2d-win8.1-universal.sln" /Build "Debug|Win32"', shell=True)
elif(node_name == 'ios_mac' or node_name == 'ios' or node_name == 'ios_bak'):
ret = os.system(jenkins_script_path + "ios-build.sh")
elif(node_name == 'mac' or node_name == 'mac_bak'):
ret = os.system(jenkins_script_path + "mac-build.sh")
elif(node_name == 'linux_centos' or node_name == 'linux' or node_name == 'linux_bak'):
ret = os.system(jenkins_script_path + "linux-build.sh")
#get build result
print "build finished and return " + str(ret)
@ -326,7 +293,7 @@ def main():
os.system("cd " + os.environ['WORKSPACE'])
os.system("git reset --hard")
os.system("git clean -xdf -f")
os.system("git checkout v3")
os.system("git checkout " + branch)
os.system("git branch -D pull" + str(pr_num))
return(exit_code)