######################################################
Creating and Accessing an Auxiliary VRL's Render Image
######################################################

.. code:: cpp

    // Assuming that 'window' is a valid HOOPS Luminate window object:
    RED::IWindow* iwindow = window->As< RED::IWindow >();

    // Creating an auxiliary VRL that render to a HD half float buffer:
    RED::Object* auxvrl;
    RC_TEST( iwindow->CreateVRL( auxvrl, 1920, 1080, RED::FMT_HALF_FLOAT_RGBA, true, iresmgr->GetState() ) );

    // Retrieve the VRL interface:
    RED::IViewpointRenderList* iauxvrl = auxvrl->As< RED::IViewpointRenderList >();

    // Add data to visualize.

    // Render the window:
    RC_TEST( iwindow->FrameDrawing() );

    // Access the built-in VRL image:
    RED::Object* image = iauxvrl->GetRenderImage();
    RED::IImage2D* iimage2D = image->As< RED::IImage2D >();

    // For instance, read-back the VRL pixels to CPU:
    RC_TEST( iimage2D->GetPixels() );

A viewpoint render list (VRL) is either corresponding to an off-screen buffer if it's an auxiliary VRL or to an on-screen buffer if it's the default VRL of a window. A VRL has two built-in render images that provide an access to its contents:

    * ``RED::IViewpointRenderList::GetRenderImage``: access the color buffer image with the contents of the VRL after it has been drawn.
    * ``RED::IViewpointRenderList::GetRenderDepthImage``: access the depth buffer image of the contents of the VRL after it has been drawn.

These methods return ready-to-use, GPU uploaded, 2D images, using the ``RED::TGT_TEX_RECT`` target. Note that the application may also specify other images for accessing a VRLs contents, using ``RED::IImage2D::SetRenderImage`` or ``RED::IImage2D::SetRenderDepthImage``. 