Merge branch 'develop' into develop_nutty_modify_framework_fixedupdatebugs

This commit is contained in:
CaiWenzhi 2014-01-10 10:46:30 +08:00
commit ca5667cb7c
7 changed files with 292 additions and 20 deletions

View File

@ -38,7 +38,7 @@ varying vec2 v_texCoord; \n\
\n\
void main() \n\
{ \n\
gl_Position = a_position; \n\
gl_Position = CC_PMatrix * a_position; \n\
v_fragmentColor = a_color; \n\
v_texCoord = a_texCoord; \n\
} \n\

View File

@ -274,9 +274,12 @@ void EGLViewEventHandler::OnGLFWMouseScrollCallback(GLFWwindow* window, double x
void EGLViewEventHandler::OnGLFWKeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods)
{
EventKeyboard event(g_keyCodeMap[key], GLFW_PRESS == action || GLFW_REPEAT == action);
auto dispatcher = Director::getInstance()->getEventDispatcher();
dispatcher->dispatchEvent(&event);
if (GLFW_REPEAT != action)
{
EventKeyboard event(g_keyCodeMap[key], GLFW_PRESS == action);
auto dispatcher = Director::getInstance()->getEventDispatcher();
dispatcher->dispatchEvent(&event);
}
}
void EGLViewEventHandler::OnGLFWCharCallback(GLFWwindow *window, unsigned int character)

View File

@ -279,9 +279,12 @@ void EGLViewEventHandler::OnGLFWMouseScrollCallback(GLFWwindow* window, double x
void EGLViewEventHandler::OnGLFWKeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods)
{
EventKeyboard event(g_keyCodeMap[key], GLFW_PRESS == action || GLFW_REPEAT == action);
auto dispatcher = Director::getInstance()->getEventDispatcher();
dispatcher->dispatchEvent(&event);
if (GLFW_REPEAT != action)
{
EventKeyboard event(g_keyCodeMap[key], GLFW_PRESS == action);
auto dispatcher = Director::getInstance()->getEventDispatcher();
dispatcher->dispatchEvent(&event);
}
}
void EGLViewEventHandler::OnGLFWCharCallback(GLFWwindow *window, unsigned int character)

View File

@ -374,9 +374,12 @@ void EGLViewEventHandler::OnGLFWMouseScrollCallback(GLFWwindow* window, double x
void EGLViewEventHandler::OnGLFWKeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods)
{
EventKeyboard event(g_keyCodeMap[key], GLFW_PRESS == action || GLFW_REPEAT == action);
auto dispatcher = Director::getInstance()->getEventDispatcher();
dispatcher->dispatchEvent(&event);
if (GLFW_REPEAT != action)
{
EventKeyboard event(g_keyCodeMap[key], GLFW_PRESS == action);
auto dispatcher = Director::getInstance()->getEventDispatcher();
dispatcher->dispatchEvent(&event);
}
}
void EGLViewEventHandler::OnGLFWCharCallback(GLFWwindow *window, unsigned int character)

View File

@ -58,12 +58,6 @@ void QuadCommand::init(int viewport, int32_t depth, GLuint textureID, GLProgram*
_capacity = quadCount;
}
kmMat4 p, mvp;
kmGLGetMatrix(KM_GL_PROJECTION, &p);
kmMat4Multiply(&mvp, &p, &mv);
_quadCount = 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.y = q->bl.vertices.y;
vec1.z = q->bl.vertices.z;
kmVec3TransformCoord(&out1, &vec1, &mvp);
kmVec3Transform(&out1, &vec1, &mv);
q->bl.vertices.x = out1.x;
q->bl.vertices.y = out1.y;
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.y = q->br.vertices.y;
vec2.z = q->br.vertices.z;
kmVec3TransformCoord(&out2, &vec2, &mvp);
kmVec3Transform(&out2, &vec2, &mv);
q->br.vertices.x = out2.x;
q->br.vertices.y = out2.y;
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.y = q->tr.vertices.y;
vec3.z = q->tr.vertices.z;
kmVec3TransformCoord(&out3, &vec3, &mvp);
kmVec3Transform(&out3, &vec3, &mv);
q->tr.vertices.x = out3.x;
q->tr.vertices.y = out3.y;
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.y = q->tl.vertices.y;
vec4.z = q->tl.vertices.z;
kmVec3TransformCoord(&out4, &vec4, &mvp);
kmVec3Transform(&out4, &vec4, &mv);
q->tl.vertices.x = out4.x;
q->tl.vertices.y = out4.y;
q->tl.vertices.z = out4.z;

View File

@ -25,6 +25,8 @@ static int sceneIdx = -1;
static std::function<Layer*()> createFunctions[] =
{
CL(CameraTest1),
CL(CameraTest2),
CL(CameraCenterTest),
CL(Test2),
CL(Test4),
@ -33,6 +35,7 @@ static std::function<Layer*()> createFunctions[] =
CL(StressTest1),
CL(StressTest2),
CL(NodeToWorld),
CL(NodeToWorld3D),
CL(SchedulerTest1),
CL(CameraOrbitTest),
CL(CameraZoomTest),
@ -491,6 +494,56 @@ std::string NodeToWorld::title() const
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
@ -827,6 +880,179 @@ std::string NodeNonOpaqueTest::subtitle() const
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(&center, 0, 0, 0);
kmVec3Fill(&up, 0, 1, 0);
kmMat4 lookupMatrix;
kmMat4LookAt(&lookupMatrix, &eye, &center, &up);
_sprite1->setAdditionalTransform(lookupMatrix);
_sprite2->setAdditionalTransform(lookupMatrix);
}
///
/// main
///
void CocosNodeTestScene::runThisTest()
{
auto layer = nextCocosNodeAction();

View File

@ -110,6 +110,16 @@ protected:
NodeToWorld();
};
class NodeToWorld3D : public TestCocosNodeDemo
{
public:
CREATE_FUNC(NodeToWorld3D);
virtual std::string title() const override;
protected:
NodeToWorld3D();
};
class CameraOrbitTest : public TestCocosNodeDemo
{
public:
@ -148,6 +158,39 @@ protected:
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
{
public: