internal List<IPickable> Render4Picking(RenderEventArgs arg)
{
arg.UsingViewPort.On();
// record clear color
var originalClearColor = new float[4];
OpenGL.GetFloat(GetTarget.ColorClearValue, originalClearColor);
// white color means nothing picked.
OpenGL.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
OpenGL.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT | OpenGL.GL_STENCIL_BUFFER_BIT);
// restore clear color
OpenGL.glClearColor(originalClearColor[0], originalClearColor[1], originalClearColor[2], originalClearColor[3]);
uint renderedVertexCount = 0;
var pickedRendererList = new List<IPickable>();
RenderPickableObject(this.rootObject, arg, ref renderedVertexCount, pickedRendererList);
OpenGL.Flush();
arg.UsingViewPort.Off();
return pickedRendererList;
}