#include <osg/Camera>
#include <osg/Geode>
#include <osg/Geometry>
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
#include <osgGA/StateSetManipulator>

int	main(int ac, char **av)
{
	// Viewer init
	osgViewer::Viewer	viewer;

	viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));
    viewer.addEventHandler(new osgViewer::StatsHandler());
    viewer.addEventHandler(new osgViewer::WindowSizeHandler);
	viewer.setUpViewInWindow(100, 100, 800, 600);

	// Create my HUD
	{
		osg::Camera	*camera = new osg::Camera();

		camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
		camera->setViewMatrix(osg::Matrix::identity());
		camera->setRenderOrder(osg::Camera::POST_RENDER);
		camera->setClearMask(GL_DEPTH_BUFFER_BIT);
		camera->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
		camera->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);
		camera->setProjectionMatrixAsOrtho2D(0, 800, 0, 600);

		// Add a text		
		{
			osg::Geode		*geode = new osg::Geode();
			osgText::Text	*text = new osgText::Text();

			text->setDataVariance(osg::Object::DYNAMIC);
			text->setCharacterSize(30);
			text->setPosition(osg::Vec3(500, 500, 0));
			text->setText("Test");
			text->setFont("arial.ttf");
			geode->addDrawable(text);
			camera->addChild(geode);
		}
		
		// Add a rectangle
		{
			osg::Geode	*geode = new osg::Geode();

			geode->addDrawable(osg::createTexturedQuadGeometry(osg::Vec3(500, 500, 0), osg::Vec3(100, 0, 0), osg::Vec3(0, 50, 0)));
			// Change color to black
			{
				osg::Vec4Array	*colours = new osg::Vec4Array(1);

				(*colours)[0].set(0.0f, 0.0f, 0.0, 1.0f);
				geode->getDrawable(0)->asGeometry()->setColorArray(colours);
				geode->getDrawable(0)->asGeometry()->setColorBinding(osg::Geometry::BIND_OVERALL);
			}
			camera->addChild(geode);
		}

		viewer.setSceneData(camera);
	}

	return viewer.run();
}
