//----------------------------------------------------------------------------
bool GamePlayApp::OnIdle ()
{
	bool odle = Application::OnIdle();
	if (!odle)
		return false;

	if (IsIsInBackground())
		return false;

	if (!mIsProjectCreated)
		return false;

	Project *proj = Project::GetSingletonPtr();
	if (!proj)
		return false;

	Scene *scene = proj->GetScene();

	UIView *uiView = PX2_UIM.GetDefaultView();

	if (mRenderer->PreDraw())
	{
		mRenderer->SetViewport(0, 0, mWidth, mHeight);
		
		mRenderer->InitRenderStates();
		mRenderer->ClearBuffers();

		// scene
		if (scene)
		{
			mRenderer->SetCamera(scene->GetCameraActor()->GetCamera());
			scene->CallRendererSetViewport();
			mRenderer->Draw(scene->GetCuller().GetVisibleSet().Sort());
		}

		// ui
		if (uiView && proj->IsShowUI())
		{
			mRenderer->InitRenderStates();
			mRenderer->ClearDepthBuffer();

			CameraPtr beforeCam = mRenderer->GetCamera();

			mRenderer->SetCamera(uiView->GetCamera());
			uiView->CallRendererSetViewport ();
			mRenderer->Draw(uiView->GetCuller().GetVisibleSet().Sort());
			if (proj->IsShowProjectInfo())
			{				
				DrawInfo(uiView->GetCamera());
			}

			mRenderer->SetCamera(beforeCam);
		}

		mRenderer->PostDraw();
		mRenderer->DisplayColorBuffer();
	}

	return true;
}
//----------------------------------------------------------------------------
void GamePlayApp::CreateProject ()
{
	if (mIsProjectCreated)
		return;

	PX2_LOG_INFO("Begin CreateProject.");

	mWireProperty = new0 WireProperty();
	mWireProperty->Enabled = true;
	mCullProperty = new0 CullProperty();
	mCullProperty->Enabled = false;
	mDepthProperty = new DepthProperty();

	// clear color
	mClearColor =  Project::GetSingleton().GetColor();
	mRenderer->SetClearColor(mClearColor);

	// load scene
	PX2_LOG_INFO("Begin load scene.");
	std::string scenePath = Project::GetSingleton().GetSceneFilename();
	PX2_LOG_INFO("scenePath is %s", scenePath.c_str());
	if ("" != scenePath)
	{
		ObjectPtr sceneObj = 0;
		sceneObj = ResourceManager::GetSingleton().BlockLoad(scenePath);

		Scene *scene = DynamicCast<Scene>(sceneObj);
		if (scene)
		{
			Camera *cam = scene->GetCameraActor()->GetCamera();
			mRenderer->SetCamera(cam);
			GraphicsRoot::GetSingleton().SetCamera(cam);
			scene->GetCuller().SetCamera(cam);
			scene->ShowHelpMovables(false);
			Project::GetSingleton().SetScene(scene);

			PX2_LOG_INFO("Load scene successful.");
		}
		else
		{
			PX2_LOG_INFO("Load scene failed.");
		}
	}
	PX2_LOG_INFO("End load scene.");

	// ui
	PX2_LOG_INFO("Begin load UI.");
	std::string uiPath = Project::GetSingleton().GetUIFilename();
	PX2_LOG_INFO("uiPath is %s: ", uiPath.c_str());
	if ("" != uiPath)
	{
		ObjectPtr uiObj = 0;
		uiObj = ResourceManager::GetSingleton().BlockLoad(uiPath);

		UIFrame *ui = DynamicCast<UIFrame>(uiObj);
		if (ui)
		{
			Project::GetSingleton().SetUI(ui);

			PX2_LOG_INFO("Load ui successful.");
		}
		else
		{
			PX2_LOG_INFO("Load ui failed.");
		}
	}
	PX2_LOG_INFO("End load UI.");

	PX2_SM.CallFile("Data/scripts/onCreateProject.lua");
	
	mIsProjectCreated = true;

	PX2_LOG_INFO("End CreateProject.");
}