LVEDRENDERINGENGINE_API void __stdcall LvEd_Begin(ObjectGUID renderSurface, float viewxform[], float projxform[])
{
    ErrorHandler::ClearError();
    
    s_engineData->pRenderSurface = reinterpret_cast<RenderSurface*>(renderSurface);

    RenderContext* rc = RenderContext::Inst();

    ExpFog fog;
    fog.enabled = 0;
    if(s_engineData->GameLevel)
    {
        fog = s_engineData->GameLevel->GetFog();
    }            
    rc->SetFog(fog);
    
    // set render target and depth buffer.
    rc->SetContext(gD3D11->GetImmediateContext());
    ID3D11DeviceContext* d3dcontext = rc->Context();

    ID3D11RenderTargetView* rt[1] = {s_engineData->pRenderSurface->GetRenderTargetView()};

    // set render target and depth buffer.
    d3dcontext->OMSetRenderTargets(1,rt,s_engineData->pRenderSurface->GetDepthStencilView());

    // Setup the viewport
    D3D11_VIEWPORT vp = s_engineData->pRenderSurface->GetViewPort();    
    d3dcontext->RSSetViewports( 1, &vp );
    float4 vf(vp.Width,vp.Height,vp.TopLeftX,vp.TopLeftY);
    rc->SetViewPort(vf);

    Matrix view(viewxform);    
    rc->Cam().SetViewProj(view, Matrix(projxform));
    
    d3dcontext->RSSetState(NULL);
    d3dcontext->OMSetDepthStencilState(NULL,0);
    d3dcontext->OMSetBlendState( NULL, NULL, 0xFFFFFFFF );

    // setup default lighting.
    DirLight& light = *LightingState::Inst()->DefaultDirLight();
    light.ambient = float3(0.05f,0.06f,0.07f);    
    light.diffuse = float3(250.0f/255.0f, 245.0f/255.0f, 240.0f/255.0f);       
    light.specular = light.diffuse; // float3(0.4f,0.4f,0.4f);
    light.dir = float3(0.258819073f, -0.965925932f, 0.0f);
    
    d3dcontext->ClearDepthStencilView( s_engineData->pRenderSurface->GetDepthStencilView(), D3D11_CLEAR_DEPTH, 1.0f, 0 );
    if(s_engineData->GameLevel->m_activeskyeDome && s_engineData->GameLevel->m_activeskyeDome->GetVisible())
    {
        s_engineData->GameLevel->m_activeskyeDome->Render(RenderContext::Inst());
    }
    else
    {
        float4 color = s_engineData->pRenderSurface->GetBkgColor();
        d3dcontext->ClearRenderTargetView( s_engineData->pRenderSurface->GetRenderTargetView(), &color.x );
    }

    //Level editor may perform some rendering before LvEd_RenderGame get called.
    s_engineData->basicRenderer->Begin(RenderContext::Inst()->Context(), 
        s_engineData->pRenderSurface,
        RenderContext::Inst()->Cam().View(),
        RenderContext::Inst()->Cam().Proj());
}