/* ================== SCR_DrawScreenField This will be called twice if rendering in stereo mode ================== */ void SCR_DrawScreenField( stereoFrame_t stereoFrame ) { re.BeginFrame( stereoFrame ); // wide aspect ratio screens need to have the sides cleared // unless they are displaying game renderings if ( cls.state != CA_ACTIVE ) { if ( cls.glconfig.vidWidth * 480 > cls.glconfig.vidHeight * 640 ) { re.SetColor( g_color_table[0] ); re.DrawStretchPic( 0, 0, cls.glconfig.vidWidth, cls.glconfig.vidHeight, 0, 0, 0, 0, cls.whiteShader ); re.SetColor( NULL ); } } if ( !uivm ) { Com_DPrintf("draw screen without UI loaded\n"); return; } // if the menu is going to cover the entire screen, we // don't need to render anything under it if (!VM_Call(uivm, UI_IS_FULLSCREEN)) { switch( cls.state ) { default: Com_Error( ERR_FATAL, "SCR_DrawScreenField: bad cls.state" ); break; case CA_CINEMATIC: SCR_DrawCinematic(); break; case CA_DISCONNECTED: // force menu up S_StopAllSounds(); VM_Call(uivm, UI_SET_ACTIVE_MENU, UIMENU_MAIN); break; case CA_CONNECTING: case CA_CHALLENGING: case CA_CONNECTED: // connecting clients will only show the connection dialog // refresh to update the time VM_Call(uivm, UI_REFRESH, cls.realtime); VM_Call(uivm, UI_DRAW_CONNECT_SCREEN, qfalse); break; case CA_LOADING: case CA_PRIMED: // draw the game information screen and loading progress CL_CGameRendering( stereoFrame ); MV_DrawConnectingInfo(); // also draw the connection information, so it doesn't // flash away too briefly on local or lan games // refresh to update the time VM_Call(uivm, UI_REFRESH, cls.realtime); VM_Call(uivm, UI_DRAW_CONNECT_SCREEN, qtrue); break; case CA_ACTIVE: CL_CGameRendering( stereoFrame ); SCR_DrawDemoRecording(); break; } } // the menu draws next if ( cls.keyCatchers & KEYCATCH_UI && uivm ) { VM_Call(uivm, UI_REFRESH, cls.realtime); } // console draws next Con_DrawConsole (); // debug graph can be drawn on top of anything if ( cl_debuggraph->integer || cl_timegraph->integer || cl_debugMove->integer ) { SCR_DrawDebugGraph (); } }
/* ================== SCR_DrawScreenField This will be called twice if rendering in stereo mode ================== */ void SCR_DrawScreenField( stereoFrame_t stereoFrame ) { re.BeginFrame( stereoFrame ); if ( !uivm ) { Com_DPrintf("draw screen without UI loaded\n"); return; } // if the menu is going to cover the entire screen, we // don't need to render anything under it if (!VM_Call(uivm, UI_IS_FULLSCREEN)) { switch( cls.state ) { default: Com_Error( ERR_FATAL, "SCR_DrawScreenField: bad cls.state" ); break; case CA_CINEMATIC: SCR_DrawCinematic(); break; case CA_DISCONNECTED: // force menu up S_StopAllSounds(); VM_Call(uivm, UI_SET_ACTIVE_MENU, UIMENU_MAIN); break; case CA_CONNECTING: case CA_CHALLENGING: case CA_CONNECTED: { // workaround for ingame UI not loading connect.menu qhandle_t hShader = re.RegisterShader("menu/art/unknownmap"); re.DrawStretchPic(0, 0, 640, 480, 0, 0, 1, 1, hShader, 1, 1); } // connecting clients will only show the connection dialog // refresh to update the time VM_Call(uivm, UI_REFRESH, cls.realtime); VM_Call(uivm, UI_DRAW_CONNECT_SCREEN, qfalse); break; case CA_LOADING: case CA_PRIMED: // draw the game information screen and loading progress CL_CGameRendering( stereoFrame ); MV_DrawConnectingInfo(); // also draw the connection information, so it doesn't // flash away too briefly on local or lan games // refresh to update the time VM_Call(uivm, UI_REFRESH, cls.realtime); VM_Call(uivm, UI_DRAW_CONNECT_SCREEN, qtrue); break; case CA_ACTIVE: CL_CGameRendering( stereoFrame ); SCR_DrawDemoRecording(); break; } } // the menu draws next if ( cls.keyCatchers & KEYCATCH_UI && uivm ) { VM_Call(uivm, UI_REFRESH, cls.realtime); } // console draws next Con_DrawConsole (); // debug graph can be drawn on top of anything if ( cl_debuggraph->integer || cl_timegraph->integer || cl_debugMove->integer ) { SCR_DrawDebugGraph (); } }