void PickingRenderer::_RenderMesh( BasicObject* tempObject )
{
	Transform* cameraTransform	=	_renderingCamera->transform;
	Camera* cameraComponent		=	_renderingCamera->camera;
	Material* material			=	tempObject->meshDrawing->GetMaterial();
	Mesh* mesh					=	tempObject->meshDrawing->GetMesh();

	if ( material == NULL || mesh == NULL )		return;

	Shader* shader				=	material->GetShader();

	uint programID = shader->GetProgramID( E_ShadingType::Picking );
	_gl->glUseProgram( programID );

	_gl->glBindBuffer( GL_ARRAY_BUFFER,			mesh->GetVertexBufferID() );
	_gl->glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, mesh->GetIndexBufferID() );


	_gl->glEnableVertexAttribArray(0);
    _gl->glVertexAttribPointer( 0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) (offsetof(Vertex, position)) );


	int worldLoc			= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_world" );
    int viewLoc				= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_view" );
    int projectionLoc		= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_projection" );
    int scaleMatLoc			= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_scaleMat" );
    int rotationMatLoc		= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_rotationMat" );
    int positionMatLoc		= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_positionMat" );
	int camRotationMatLoc	= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_camRotationMat" );

	int objectIndexLoc		= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_uniqueIndex" );

	Matrix4 worldMatrix			= tempObject->transform->GetWorldMatrix();
	Matrix4 viewMatrix			= cameraTransform->GetViewMatrix();
	Matrix4 projectionMatrix	= cameraComponent->GetProjectionMatrix();
	Matrix4 scaleMatrix			= tempObject->transform->GetScaleMatrix();
	Matrix4 rotationMatrix		= tempObject->transform->GetRotationMatrix();
	Matrix4 positionMatrix		= tempObject->transform->GetPositionMatrix();
	Matrix4 camRotationMatrix	= cameraTransform->GetRotationMatrix();

	_gl->glUniformMatrix4fv	( worldLoc,				1, GL_FALSE, worldMatrix.GetValuePtr() );
	_gl->glUniformMatrix4fv	( viewLoc,				1, GL_FALSE, viewMatrix.GetValuePtr() );
	_gl->glUniformMatrix4fv	( projectionLoc,		1, GL_FALSE, projectionMatrix.GetValuePtr() );
	_gl->glUniformMatrix4fv	( scaleMatLoc,			1, GL_FALSE, scaleMatrix.GetValuePtr() );
	_gl->glUniformMatrix4fv	( rotationMatLoc,		1, GL_FALSE, rotationMatrix.GetValuePtr() );
	_gl->glUniformMatrix4fv	( positionMatLoc,		1, GL_FALSE, positionMatrix.GetValuePtr() );
	_gl->glUniformMatrix4fv	( camRotationMatLoc,	1, GL_FALSE, camRotationMatrix.GetValuePtr() );

	_gl->glUniform1i		( objectIndexLoc, tempObject->uniqueIndex );
	

	if ( material->IsWireframe() )
	{
		_gl->glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
		_gl->glLineWidth( material->GetLineWidth() );
		_gl->glDisable( GL_CULL_FACE );
	}
	else
	{
		_gl->glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );

		if ( material->GetFaceCulling() == E_FaceCulling::CULL_NONE )
		{
			_gl->glDisable( GL_CULL_FACE );
		}
		else 
		{
			_gl->glEnable(GL_CULL_FACE);

			if ( material->GetFaceCulling() == E_FaceCulling::CULL_BACK )
				_gl->glCullFace( GL_BACK );
			if ( material->GetFaceCulling() == E_FaceCulling::CULL_FRONT )
				_gl->glCullFace( GL_FRONT );
		}
	}


	if ( mesh->GetMeshType() == E_MeshType::POLYGON )
		_gl->glDrawElements( GL_TRIANGLES, mesh->GetNumIndices(), GL_UNSIGNED_INT, 0 );
	else
		_gl->glDrawElements( GL_LINES, mesh->GetNumIndices(), GL_UNSIGNED_INT, 0 );

	// unbind
	_gl->glBindBuffer( GL_ARRAY_BUFFER, 0 );
	_gl->glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );
	_gl->glUseProgram( 0 );
}