void GUIRenderer::display(float invFrameRate)
	{
		ShaderManager::instance()->bind(GUIShader);
		glUniform1i(diffuseTexSamplerLoc, 0);

		glActiveTexture(GL_TEXTURE0);

		for(unsigned int i=0;i<widgets.size();++i)
		{
			if(widgets[i]->isVisible())
			{
				Vector2<int> translateVector(widgets[i]->getGlobalPositionX(), widgets[i]->getGlobalPositionY());
				glUniform2iv(translateDistanceLoc, 1, (const int*)translateVector);

				widgets[i]->display(translateDistanceLoc, invFrameRate);
			}
		}

		#ifdef _DEBUG
			//display font texture
//			std::shared_ptr<XmlChunk> fontChunk = GUISkinService::instance()->getXmlSkin()->getUniqueChunk(true, "text", XmlAttribute("nameSkin", "defaultSkin"));
//			std::shared_ptr<XmlChunk> fileFontChunk = GUISkinService::instance()->getXmlSkin()->getUniqueChunk(true, "ttf", XmlAttribute(), fontChunk);
//			std::shared_ptr<XmlChunk> sizeFontChunk = GUISkinService::instance()->getXmlSkin()->getUniqueChunk(true, "size", XmlAttribute(), fontChunk);
//			Font *font = MediaManager::instance()->getMedia<Font>(fileFontChunk->getStringValue(), (void*) sizeFontChunk->getIntValue());
//
//			TextureDisplayer textureDisplayer(font->getTextureID(), TextureDisplayer::DEFAULT_VALUE);
//			textureDisplayer.setPosition(TextureDisplayer::USER_DEFINED_X, TextureDisplayer::USER_DEFINED_Y);
//			textureDisplayer.setSize(20.0, font->getDimensionTexture() + 20.0, 20.0, font->getDimensionTexture() + 20.0);
//			textureDisplayer.initialize(width, height, -1.0, -1.0);
//			textureDisplayer.display();
//			font->release();
		#endif
	}
	void GUIRenderer::display(float dt)
	{
		ScopeProfiler profiler("3d", "uiRenderDisplay");

		ShaderManager::instance()->bind(GUIShader);
		glUniform1i(diffuseTexSamplerLoc, 0);

		glActiveTexture(GL_TEXTURE0);

		for (auto &widget : widgets)
		{
			if(widget->isVisible())
			{
				Vector2<int> translateVector(widget->getGlobalPositionX(), widget->getGlobalPositionY());
				glUniform2iv(translateDistanceLoc, 1, (const int*)translateVector);

				widget->display(translateDistanceLoc, dt);
			}
		}

		#ifdef _DEBUG
//			//display font texture
//			Font *font = MediaManager::instance()->getMedia<Font>("font/font.fnt");
//
//			TextureDisplayer textureDisplayer(font->getTextureID(), TextureDisplayer::DEFAULT_VALUE);
//			textureDisplayer.setPosition(TextureDisplayer::USER_DEFINED_X, TextureDisplayer::USER_DEFINED_Y);
//			textureDisplayer.setSize(20.0, font->getDimensionTexture() + 20.0, 20.0, font->getDimensionTexture() + 20.0);
//			textureDisplayer.initialize(512, 512, -1.0, -1.0);
//			textureDisplayer.display();
//			font->release();
		#endif
	}
void DebugDraw::drawBox(const btVector3 &bbMin, const btVector3 &bbMax, const btTransform &trans, const btVector3 &color)
{
	float openGlMatrix[16];
	trans.getOpenGLMatrix(openGlMatrix);
	btScalar transX = openGlMatrix[12];
	btScalar transY = openGlMatrix[13];
	btScalar transZ = openGlMatrix[14];
	btVector3 translateVector(transX, transY, transZ);
	glPushMatrix();
		glMultMatrixf(openGlMatrix);
		drawLine(btVector3(bbMin.getX(), bbMin.getY(), bbMin.getZ()), btVector3(bbMax.getX(), bbMin.getY(), bbMin.getZ()), color);
		drawLine(btVector3(bbMin.getX(), bbMin.getY(), bbMin.getZ()), btVector3(bbMin.getX(), bbMax.getY(), bbMin.getZ()), color);
		drawLine(btVector3(bbMin.getX(), bbMax.getY(), bbMin.getZ()), btVector3(bbMax.getX(), bbMax.getY(), bbMin.getZ()), color);
		drawLine(btVector3(bbMax.getX(), bbMax.getY(), bbMin.getZ()), btVector3(bbMax.getX(), bbMin.getY(), bbMin.getZ()), color);
		drawLine(btVector3(bbMin.getX(), bbMin.getY(), bbMax.getZ()), btVector3(bbMin.getX(), bbMin.getY(), bbMin.getZ()), color);
		drawLine(btVector3(bbMin.getX(), bbMin.getY(), bbMax.getZ()), btVector3(bbMin.getX(), bbMax.getY(), bbMax.getZ()), color);
		drawLine(btVector3(bbMin.getX(), bbMax.getY(), bbMax.getZ()), btVector3(bbMin.getX(), bbMax.getY(), bbMin.getZ()), color);
		drawLine(btVector3(bbMin.getX(), bbMax.getY(), bbMax.getZ()), btVector3(bbMax.getX(), bbMax.getY(), bbMax.getZ()), color);
		drawLine(btVector3(bbMax.getX(), bbMax.getY(), bbMax.getZ()), btVector3(bbMax.getX(), bbMax.getY(), bbMin.getZ()), color);
		drawLine(btVector3(bbMax.getX(), bbMax.getY(), bbMax.getZ()), btVector3(bbMax.getX(), bbMin.getY(), bbMax.getZ()), color);
		drawLine(btVector3(bbMax.getX(), bbMin.getY(), bbMax.getZ()), btVector3(bbMin.getX(), bbMin.getY(), bbMax.getZ()), color);
		drawLine(btVector3(bbMax.getX(), bbMin.getY(), bbMax.getZ()), btVector3(bbMax.getX(), bbMin.getY(), bbMin.getZ()), color);
	glPopMatrix();
}