void renderCamSetupGL ( Scene& scene, int prog )
{
	// Set model, view, projection matrices
	Camera3D* cam = scene.getCamera ();	
	Matrix4F ident;
	ident.Identity();	
	glProgramUniformMatrix4fv( prog, scene.getParam(prog, UMODEL), 1, GL_FALSE, ident.GetDataF() );
	glProgramUniformMatrix4fv( prog, scene.getParam(prog, UVIEW), 1, GL_FALSE, cam->getViewMatrix().GetDataF() ); 
	glProgramUniformMatrix4fv( prog, scene.getParam(prog, UPROJ), 1, GL_FALSE, cam->getProjMatrix().GetDataF() );
}
void glut_render(void)
{
	//setup camera
	static Matrix4 viewMat;
	static Matrix4 MVP;
	cam.getViewMatrix(viewMat);
	MVP = projMat * viewMat;

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	glMatrixMode(GL_PROJECTION);
	glLoadMatrixf(MVP.toFloatPtr());

	const float screenRatio = (float)screenHeight/(float)screenWidth;

	//begin frame
	glClearColor(0.0,0.0,0.0,0.0);
	glClearDepth(1.0);
	glClear(GL_COLOR_BUFFER_BIT);

#ifdef GL_TIMER_QUERY_PERFORMANCE_MEASURE
	glBeginQuery(GL_TIME_ELAPSED,query);
#endif

	//render lines using additive blending and selected rendering path
	glDisable(GL_DEPTH_TEST);
	glDepthMask(GL_FALSE);



	///////////// TODO RENDER
	glColor3f(1.0f,1.0f,1.0f);
//	glutWireTeapot(1.0);

	switch(renderingMethod)
	{
	case 0:
		testInstancing->render(TEST_INSTANCING_MAX_INSTANCE,NULL,MVP.toFloatPtr(),viewMat.toFloatPtr(),projMat.toFloatPtr());
		break;
	case 1:
		testInstancing->render(TEST_INSTANCING_MAX_INSTANCE,trianglePosition,MVP.toFloatPtr(),viewMat.toFloatPtr(),projMat.toFloatPtr());
		break;
	case 2:
		testInstancing->renderInstancing(TEST_INSTANCING_MAX_INSTANCE,NULL,MVP.toFloatPtr(),viewMat.toFloatPtr(),projMat.toFloatPtr());
		break;
	case 3:
		testInstancing->renderInstancing(TEST_INSTANCING_MAX_INSTANCE,trianglePosition,MVP.toFloatPtr(),viewMat.toFloatPtr(),projMat.toFloatPtr());
		break;
	default:
		break;
	}


#ifdef GL_TIMER_QUERY_PERFORMANCE_MEASURE
	glEndQuery(GL_TIME_ELAPSED);
	int done=0;
	while (!done)
	{
		glGetQueryObjectiv(query, GL_QUERY_RESULT_AVAILABLE, &done);
	}
	// get the query result
	glGetQueryObjectui64v(query, GL_QUERY_RESULT, &elapsed_time);
	deltaTimeAccu+=elapsed_time;
	deltaTimeAccuCount++;
#endif


	//end of frame
	glFlush();
	glutSwapBuffers();
	glutPostRedisplay();

#ifdef _DEBUG
	GLenum err = glGetError();
	if(err!=GL_NONE)
	{
		//
		printf("OpenGL error!\n");
	}
#endif
}