mirror of https://github.com/axmolengine/axmol.git
Merge branch 'develop' into develop_nutty_modify_framework_fixedupdatebugs
This commit is contained in:
commit
ca5667cb7c
|
@ -38,7 +38,7 @@ varying vec2 v_texCoord; \n\
|
||||||
\n\
|
\n\
|
||||||
void main() \n\
|
void main() \n\
|
||||||
{ \n\
|
{ \n\
|
||||||
gl_Position = a_position; \n\
|
gl_Position = CC_PMatrix * a_position; \n\
|
||||||
v_fragmentColor = a_color; \n\
|
v_fragmentColor = a_color; \n\
|
||||||
v_texCoord = a_texCoord; \n\
|
v_texCoord = a_texCoord; \n\
|
||||||
} \n\
|
} \n\
|
||||||
|
|
|
@ -274,9 +274,12 @@ void EGLViewEventHandler::OnGLFWMouseScrollCallback(GLFWwindow* window, double x
|
||||||
|
|
||||||
void EGLViewEventHandler::OnGLFWKeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods)
|
void EGLViewEventHandler::OnGLFWKeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
EventKeyboard event(g_keyCodeMap[key], GLFW_PRESS == action || GLFW_REPEAT == action);
|
if (GLFW_REPEAT != action)
|
||||||
auto dispatcher = Director::getInstance()->getEventDispatcher();
|
{
|
||||||
dispatcher->dispatchEvent(&event);
|
EventKeyboard event(g_keyCodeMap[key], GLFW_PRESS == action);
|
||||||
|
auto dispatcher = Director::getInstance()->getEventDispatcher();
|
||||||
|
dispatcher->dispatchEvent(&event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EGLViewEventHandler::OnGLFWCharCallback(GLFWwindow *window, unsigned int character)
|
void EGLViewEventHandler::OnGLFWCharCallback(GLFWwindow *window, unsigned int character)
|
||||||
|
|
|
@ -279,9 +279,12 @@ void EGLViewEventHandler::OnGLFWMouseScrollCallback(GLFWwindow* window, double x
|
||||||
|
|
||||||
void EGLViewEventHandler::OnGLFWKeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods)
|
void EGLViewEventHandler::OnGLFWKeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
EventKeyboard event(g_keyCodeMap[key], GLFW_PRESS == action || GLFW_REPEAT == action);
|
if (GLFW_REPEAT != action)
|
||||||
auto dispatcher = Director::getInstance()->getEventDispatcher();
|
{
|
||||||
dispatcher->dispatchEvent(&event);
|
EventKeyboard event(g_keyCodeMap[key], GLFW_PRESS == action);
|
||||||
|
auto dispatcher = Director::getInstance()->getEventDispatcher();
|
||||||
|
dispatcher->dispatchEvent(&event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EGLViewEventHandler::OnGLFWCharCallback(GLFWwindow *window, unsigned int character)
|
void EGLViewEventHandler::OnGLFWCharCallback(GLFWwindow *window, unsigned int character)
|
||||||
|
|
|
@ -374,9 +374,12 @@ void EGLViewEventHandler::OnGLFWMouseScrollCallback(GLFWwindow* window, double x
|
||||||
|
|
||||||
void EGLViewEventHandler::OnGLFWKeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods)
|
void EGLViewEventHandler::OnGLFWKeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods)
|
||||||
{
|
{
|
||||||
EventKeyboard event(g_keyCodeMap[key], GLFW_PRESS == action || GLFW_REPEAT == action);
|
if (GLFW_REPEAT != action)
|
||||||
auto dispatcher = Director::getInstance()->getEventDispatcher();
|
{
|
||||||
dispatcher->dispatchEvent(&event);
|
EventKeyboard event(g_keyCodeMap[key], GLFW_PRESS == action);
|
||||||
|
auto dispatcher = Director::getInstance()->getEventDispatcher();
|
||||||
|
dispatcher->dispatchEvent(&event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EGLViewEventHandler::OnGLFWCharCallback(GLFWwindow *window, unsigned int character)
|
void EGLViewEventHandler::OnGLFWCharCallback(GLFWwindow *window, unsigned int character)
|
||||||
|
|
|
@ -58,12 +58,6 @@ void QuadCommand::init(int viewport, int32_t depth, GLuint textureID, GLProgram*
|
||||||
_capacity = quadCount;
|
_capacity = quadCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
kmMat4 p, mvp;
|
|
||||||
kmGLGetMatrix(KM_GL_PROJECTION, &p);
|
|
||||||
|
|
||||||
kmMat4Multiply(&mvp, &p, &mv);
|
|
||||||
|
|
||||||
|
|
||||||
_quadCount = quadCount;
|
_quadCount = quadCount;
|
||||||
memcpy(_quad, quad, sizeof(V3F_C4B_T2F_Quad) * quadCount);
|
memcpy(_quad, quad, sizeof(V3F_C4B_T2F_Quad) * quadCount);
|
||||||
|
|
||||||
|
@ -74,7 +68,7 @@ void QuadCommand::init(int viewport, int32_t depth, GLuint textureID, GLProgram*
|
||||||
vec1.x = q->bl.vertices.x;
|
vec1.x = q->bl.vertices.x;
|
||||||
vec1.y = q->bl.vertices.y;
|
vec1.y = q->bl.vertices.y;
|
||||||
vec1.z = q->bl.vertices.z;
|
vec1.z = q->bl.vertices.z;
|
||||||
kmVec3TransformCoord(&out1, &vec1, &mvp);
|
kmVec3Transform(&out1, &vec1, &mv);
|
||||||
q->bl.vertices.x = out1.x;
|
q->bl.vertices.x = out1.x;
|
||||||
q->bl.vertices.y = out1.y;
|
q->bl.vertices.y = out1.y;
|
||||||
q->bl.vertices.z = out1.z;
|
q->bl.vertices.z = out1.z;
|
||||||
|
@ -83,7 +77,7 @@ void QuadCommand::init(int viewport, int32_t depth, GLuint textureID, GLProgram*
|
||||||
vec2.x = q->br.vertices.x;
|
vec2.x = q->br.vertices.x;
|
||||||
vec2.y = q->br.vertices.y;
|
vec2.y = q->br.vertices.y;
|
||||||
vec2.z = q->br.vertices.z;
|
vec2.z = q->br.vertices.z;
|
||||||
kmVec3TransformCoord(&out2, &vec2, &mvp);
|
kmVec3Transform(&out2, &vec2, &mv);
|
||||||
q->br.vertices.x = out2.x;
|
q->br.vertices.x = out2.x;
|
||||||
q->br.vertices.y = out2.y;
|
q->br.vertices.y = out2.y;
|
||||||
q->br.vertices.z = out2.z;
|
q->br.vertices.z = out2.z;
|
||||||
|
@ -92,7 +86,7 @@ void QuadCommand::init(int viewport, int32_t depth, GLuint textureID, GLProgram*
|
||||||
vec3.x = q->tr.vertices.x;
|
vec3.x = q->tr.vertices.x;
|
||||||
vec3.y = q->tr.vertices.y;
|
vec3.y = q->tr.vertices.y;
|
||||||
vec3.z = q->tr.vertices.z;
|
vec3.z = q->tr.vertices.z;
|
||||||
kmVec3TransformCoord(&out3, &vec3, &mvp);
|
kmVec3Transform(&out3, &vec3, &mv);
|
||||||
q->tr.vertices.x = out3.x;
|
q->tr.vertices.x = out3.x;
|
||||||
q->tr.vertices.y = out3.y;
|
q->tr.vertices.y = out3.y;
|
||||||
q->tr.vertices.z = out3.z;
|
q->tr.vertices.z = out3.z;
|
||||||
|
@ -101,7 +95,7 @@ void QuadCommand::init(int viewport, int32_t depth, GLuint textureID, GLProgram*
|
||||||
vec4.x = q->tl.vertices.x;
|
vec4.x = q->tl.vertices.x;
|
||||||
vec4.y = q->tl.vertices.y;
|
vec4.y = q->tl.vertices.y;
|
||||||
vec4.z = q->tl.vertices.z;
|
vec4.z = q->tl.vertices.z;
|
||||||
kmVec3TransformCoord(&out4, &vec4, &mvp);
|
kmVec3Transform(&out4, &vec4, &mv);
|
||||||
q->tl.vertices.x = out4.x;
|
q->tl.vertices.x = out4.x;
|
||||||
q->tl.vertices.y = out4.y;
|
q->tl.vertices.y = out4.y;
|
||||||
q->tl.vertices.z = out4.z;
|
q->tl.vertices.z = out4.z;
|
||||||
|
|
|
@ -25,6 +25,8 @@ static int sceneIdx = -1;
|
||||||
|
|
||||||
static std::function<Layer*()> createFunctions[] =
|
static std::function<Layer*()> createFunctions[] =
|
||||||
{
|
{
|
||||||
|
CL(CameraTest1),
|
||||||
|
CL(CameraTest2),
|
||||||
CL(CameraCenterTest),
|
CL(CameraCenterTest),
|
||||||
CL(Test2),
|
CL(Test2),
|
||||||
CL(Test4),
|
CL(Test4),
|
||||||
|
@ -33,6 +35,7 @@ static std::function<Layer*()> createFunctions[] =
|
||||||
CL(StressTest1),
|
CL(StressTest1),
|
||||||
CL(StressTest2),
|
CL(StressTest2),
|
||||||
CL(NodeToWorld),
|
CL(NodeToWorld),
|
||||||
|
CL(NodeToWorld3D),
|
||||||
CL(SchedulerTest1),
|
CL(SchedulerTest1),
|
||||||
CL(CameraOrbitTest),
|
CL(CameraOrbitTest),
|
||||||
CL(CameraZoomTest),
|
CL(CameraZoomTest),
|
||||||
|
@ -491,6 +494,56 @@ std::string NodeToWorld::title() const
|
||||||
return "nodeToParent transform";
|
return "nodeToParent transform";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// NodeToWorld3D
|
||||||
|
//
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
NodeToWorld3D::NodeToWorld3D()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// This code tests that nodeToParent works OK:
|
||||||
|
// - It tests different anchor Points
|
||||||
|
// - It tests different children anchor points
|
||||||
|
|
||||||
|
Size s = Director::getInstance()->getWinSize();
|
||||||
|
auto parent = Node::create();
|
||||||
|
parent->setContentSize(s);
|
||||||
|
parent->setAnchorPoint(Point(0.5, 0.5));
|
||||||
|
parent->setPosition(s.width/2, s.height/2);
|
||||||
|
this->addChild(parent);
|
||||||
|
|
||||||
|
auto back = Sprite::create(s_back3);
|
||||||
|
parent->addChild( back, -10);
|
||||||
|
back->setAnchorPoint( Point(0,0) );
|
||||||
|
auto backSize = back->getContentSize();
|
||||||
|
|
||||||
|
auto item = MenuItemImage::create(s_PlayNormal, s_PlaySelect);
|
||||||
|
auto menu = Menu::create(item, NULL);
|
||||||
|
menu->alignItemsVertically();
|
||||||
|
menu->setPosition( Point(backSize.width/2, backSize.height/2));
|
||||||
|
back->addChild(menu);
|
||||||
|
|
||||||
|
auto rot = RotateBy::create(5, 360);
|
||||||
|
auto fe = RepeatForever::create( rot);
|
||||||
|
item->runAction( fe );
|
||||||
|
|
||||||
|
auto move = MoveBy::create(3, Point(200,0));
|
||||||
|
auto move_back = move->reverse();
|
||||||
|
auto seq = Sequence::create( move, move_back, NULL);
|
||||||
|
auto fe2 = RepeatForever::create(seq);
|
||||||
|
back->runAction(fe2);
|
||||||
|
|
||||||
|
auto orbit = OrbitCamera::create(10, 0, 1, 0, 360, 0, 90);
|
||||||
|
parent->runAction(orbit);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string NodeToWorld3D::title() const
|
||||||
|
{
|
||||||
|
return "nodeToParent transform in 3D";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
// CameraOrbitTest
|
// CameraOrbitTest
|
||||||
|
@ -827,6 +880,179 @@ std::string NodeNonOpaqueTest::subtitle() const
|
||||||
return "Node rendered with GL_BLEND enabled";
|
return "Node rendered with GL_BLEND enabled";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// MySprite: Used by CameraTest1 and CameraTest2
|
||||||
|
//
|
||||||
|
class MySprite : public Sprite
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static MySprite* create(const std::string &spritefilename)
|
||||||
|
{
|
||||||
|
auto sprite = new MySprite;
|
||||||
|
sprite->initWithFile(spritefilename);
|
||||||
|
sprite->autorelease();
|
||||||
|
|
||||||
|
auto shader = CCShaderCache::getInstance()->getProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR);
|
||||||
|
sprite->setShaderProgram(shader);
|
||||||
|
return sprite;
|
||||||
|
}
|
||||||
|
virtual void draw() override;
|
||||||
|
void onDraw();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
CustomCommand _customCommand;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
void MySprite::draw()
|
||||||
|
{
|
||||||
|
_customCommand.init(0, _vertexZ);
|
||||||
|
_customCommand.func = CC_CALLBACK_0(MySprite::onDraw, this);
|
||||||
|
Director::getInstance()->getRenderer()->addCommand(&_customCommand);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MySprite::onDraw()
|
||||||
|
{
|
||||||
|
CC_NODE_DRAW_SETUP();
|
||||||
|
|
||||||
|
GL::blendFunc( _blendFunc.src, _blendFunc.dst );
|
||||||
|
|
||||||
|
GL::bindTexture2D( _texture->getName() );
|
||||||
|
GL::enableVertexAttribs( GL::VERTEX_ATTRIB_FLAG_POS_COLOR_TEX );
|
||||||
|
|
||||||
|
#define kQuadSize sizeof(_quad.bl)
|
||||||
|
long offset = (long)&_quad;
|
||||||
|
|
||||||
|
// vertex
|
||||||
|
int diff = offsetof( V3F_C4B_T2F, vertices);
|
||||||
|
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_POSITION, 3, GL_FLOAT, GL_FALSE, kQuadSize, (void*) (offset + diff));
|
||||||
|
|
||||||
|
// texCoods
|
||||||
|
diff = offsetof( V3F_C4B_T2F, texCoords);
|
||||||
|
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_TEX_COORDS, 2, GL_FLOAT, GL_FALSE, kQuadSize, (void*)(offset + diff));
|
||||||
|
|
||||||
|
// color
|
||||||
|
diff = offsetof( V3F_C4B_T2F, colors);
|
||||||
|
glVertexAttribPointer(GLProgram::VERTEX_ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, kQuadSize, (void*)(offset + diff));
|
||||||
|
|
||||||
|
|
||||||
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
|
|
||||||
|
CHECK_GL_ERROR_DEBUG();
|
||||||
|
CC_INCREMENT_GL_DRAWS(1);
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// CameraTest1
|
||||||
|
//
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
|
void CameraTest1::onEnter()
|
||||||
|
{
|
||||||
|
TestCocosNodeDemo::onEnter();
|
||||||
|
Director::getInstance()->setProjection(Director::Projection::_3D);
|
||||||
|
Director::getInstance()->setDepthTest(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CameraTest1::onExit()
|
||||||
|
{
|
||||||
|
Director::getInstance()->setProjection(Director::Projection::_2D);
|
||||||
|
TestCocosNodeDemo::onExit();
|
||||||
|
}
|
||||||
|
|
||||||
|
CameraTest1::CameraTest1()
|
||||||
|
{
|
||||||
|
auto s = Director::getInstance()->getWinSize();
|
||||||
|
|
||||||
|
_sprite1 = MySprite::create(s_back3);
|
||||||
|
addChild( _sprite1 );
|
||||||
|
_sprite1->setPosition( Point(1*s.width/4, s.height/2) );
|
||||||
|
_sprite1->setScale(0.5);
|
||||||
|
|
||||||
|
_sprite2 = Sprite::create(s_back3);
|
||||||
|
addChild( _sprite2 );
|
||||||
|
_sprite2->setPosition( Point(3*s.width/4, s.height/2) );
|
||||||
|
_sprite2->setScale(0.5);
|
||||||
|
|
||||||
|
auto camera = OrbitCamera::create(10, 0, 1, 0, 360, 0, 0);
|
||||||
|
_sprite1->runAction( camera );
|
||||||
|
_sprite2->runAction( camera->clone() );
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CameraTest1::title() const
|
||||||
|
{
|
||||||
|
return "Camera Test 1";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CameraTest1::subtitle() const
|
||||||
|
{
|
||||||
|
return "Both images should rotate with a 3D effect";
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// CameraTest2
|
||||||
|
//
|
||||||
|
//------------------------------------------------------------------
|
||||||
|
void CameraTest2::onEnter()
|
||||||
|
{
|
||||||
|
TestCocosNodeDemo::onEnter();
|
||||||
|
Director::getInstance()->setProjection(Director::Projection::_3D);
|
||||||
|
Director::getInstance()->setDepthTest(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CameraTest2::onExit()
|
||||||
|
{
|
||||||
|
Director::getInstance()->setProjection(Director::Projection::_2D);
|
||||||
|
TestCocosNodeDemo::onExit();
|
||||||
|
}
|
||||||
|
|
||||||
|
CameraTest2::CameraTest2()
|
||||||
|
{
|
||||||
|
auto s = Director::getInstance()->getWinSize();
|
||||||
|
|
||||||
|
_sprite1 = MySprite::create(s_back3);
|
||||||
|
addChild( _sprite1 );
|
||||||
|
_sprite1->setPosition( Point(1*s.width/4, s.height/2) );
|
||||||
|
_sprite1->setScale(0.5);
|
||||||
|
|
||||||
|
_sprite2 = Sprite::create(s_back3);
|
||||||
|
addChild( _sprite2 );
|
||||||
|
_sprite2->setPosition( Point(3*s.width/4, s.height/2) );
|
||||||
|
_sprite2->setScale(0.5);
|
||||||
|
|
||||||
|
scheduleUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CameraTest2::title() const
|
||||||
|
{
|
||||||
|
return "Camera Test 2";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CameraTest2::subtitle() const
|
||||||
|
{
|
||||||
|
return "Both images should look the same";
|
||||||
|
}
|
||||||
|
|
||||||
|
void CameraTest2::update(float dt)
|
||||||
|
{
|
||||||
|
kmVec3 eye, center, up;
|
||||||
|
|
||||||
|
kmVec3Fill(&eye, 150, 0, 200);
|
||||||
|
kmVec3Fill(¢er, 0, 0, 0);
|
||||||
|
kmVec3Fill(&up, 0, 1, 0);
|
||||||
|
|
||||||
|
|
||||||
|
kmMat4 lookupMatrix;
|
||||||
|
kmMat4LookAt(&lookupMatrix, &eye, ¢er, &up);
|
||||||
|
|
||||||
|
_sprite1->setAdditionalTransform(lookupMatrix);
|
||||||
|
_sprite2->setAdditionalTransform(lookupMatrix);
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// main
|
||||||
|
///
|
||||||
void CocosNodeTestScene::runThisTest()
|
void CocosNodeTestScene::runThisTest()
|
||||||
{
|
{
|
||||||
auto layer = nextCocosNodeAction();
|
auto layer = nextCocosNodeAction();
|
||||||
|
|
|
@ -110,6 +110,16 @@ protected:
|
||||||
NodeToWorld();
|
NodeToWorld();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class NodeToWorld3D : public TestCocosNodeDemo
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CREATE_FUNC(NodeToWorld3D);
|
||||||
|
virtual std::string title() const override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
NodeToWorld3D();
|
||||||
|
};
|
||||||
|
|
||||||
class CameraOrbitTest : public TestCocosNodeDemo
|
class CameraOrbitTest : public TestCocosNodeDemo
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -148,6 +158,39 @@ protected:
|
||||||
CameraCenterTest();
|
CameraCenterTest();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class CameraTest1 : public TestCocosNodeDemo
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CREATE_FUNC(CameraTest1);
|
||||||
|
virtual std::string title() const override;
|
||||||
|
virtual std::string subtitle() const override;
|
||||||
|
virtual void onEnter() override;
|
||||||
|
virtual void onExit() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
CameraTest1();
|
||||||
|
|
||||||
|
Sprite *_sprite1;
|
||||||
|
Sprite *_sprite2;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CameraTest2 : public TestCocosNodeDemo
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CREATE_FUNC(CameraTest2);
|
||||||
|
virtual std::string title() const override;
|
||||||
|
virtual std::string subtitle() const override;
|
||||||
|
virtual void onEnter() override;
|
||||||
|
virtual void onExit() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void update(float dt) override;
|
||||||
|
CameraTest2();
|
||||||
|
|
||||||
|
Sprite *_sprite1;
|
||||||
|
Sprite *_sprite2;
|
||||||
|
};
|
||||||
|
|
||||||
class ConvertToNode : public TestCocosNodeDemo
|
class ConvertToNode : public TestCocosNodeDemo
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
Loading…
Reference in New Issue