Exemplo n.º 1
0
/*
=================
SV_IsSimulating
=================
*/
qboolean SV_IsSimulating( void )
{
	if( sv.background && SV_Active() && CL_Active())
	{
		if( CL_IsInConsole( ))
			return false;
		return true; // force simulating for background map
	}

	if( sv.hostflags & SVF_PLAYERSONLY )
		return false;
	if( !SV_HasActivePlayers())
		return false;
	if( !sv.paused && CL_IsInGame( ))
		return true;
	return false;
}
Exemplo n.º 2
0
static void _makeFrameBlack( float opacity )
{
	if ( opacity < 0.0f || opacity > 1.0f )
		opacity = 1.0f;

	if ( CL_IsInConsole( ) ) // No strobing on the console
	{

		pglEnable( GL_SCISSOR_TEST );
		pglScissor( con_rect.x, ( -con_rect.y ) - ( con_rect.h * 1.25 ), con_rect.w, con_rect.h ); // Preview strobe setting on static
		pglClearColor( 0.0f, 0.0f, 0.0f, opacity );
		pglClear( GL_COLOR_BUFFER_BIT );
		pglDisable( GL_SCISSOR_TEST );
	}
	else
	{
		pglClearColor( 0.0f, 0.0f, 0.0f, opacity );
		pglClear( GL_COLOR_BUFFER_BIT );
	}
}
Exemplo n.º 3
0
void R_Strobe_Tick( void )
{
	double delta, delta2;
	double currentTime                       = Sys_DoubleTime( );
	static int frameSnapshot                 = 0;
	static double recentTime2                = 0.0;
	static double recentTime                 = 0.0;
	static double deltaArray[DEVIATION_SIZE] = {0.0};

	if ( CL_IsInMenu( ) || ( !vid_fullscreen->integer && CL_IsInConsole( ) ) ) // Disable when not in fullscreen due to viewport problems
	{
		R_Set2DMode( false );
		return;
	}

	delta2             = currentTime - recentTime2;
	recentTime2        = currentTime;
	strobe.elapsedTime = currentTime - strobe.initialTime;

	/*
	if (deltaArray[0] == -1.0)
	{
		for ( int k = 0; k < ARRAYSIZE( deltaArray ); ++k )
		{
			deltaArray[k] = _currentFPS( );
		}
	}
	*/

	if ( strobe.cdTimer >= 0.0 && delta2 > 0.0 )
		strobe.cdTimer += delta2;
	if ( strobe.fCounter - frameSnapshot == 1 )
	{
		deltaArray[strobe.fCounter % ARRAYSIZE( deltaArray )] = _currentFPS( );
		strobe.deviation                                      = _standardDeviation( deltaArray, ARRAYSIZE( deltaArray ) );
	}
	frameSnapshot = strobe.fCounter;

	if ( r_strobe_cooldown->integer > 0 )
	{
		if ( ( strobe.cdTimer > (double)abs( r_strobe_cooldown->integer ) ) && strobe.cdTriggered == true )
		{
			strobe.cdTriggered = false;
			strobe.cdTimer     = -1.0;
		}

		if ( strobe.fCounter > ARRAYSIZE( deltaArray ) )
		{
			if ( strobe.deviation > DEVIATION_LIMIT )
			{
				strobe.cdTriggered = true;
				strobe.cdTimer     = 0.0;
			}
		}
	}
	else
	{
		strobe.cdTriggered = false;
	}

	if ( ( ( strobe.strobeInterval != r_strobe->integer ) && ( strobe.strobeInterval ) ) ||
	     /*((swapInterval != r_strobe_swapinterval->integer) && (swapInterval != 0)) || */
	     strobe.fCounter == INT_MAX )
	{
		_reset( );
		R_Strobe_Tick( );
	}

	strobe.strobeInterval = r_strobe->integer;
	strobe.swapInterval   = r_strobe_swapinterval->integer;

	if ( ( strobe.strobeInterval == 0 ) ||
	     ( ( gl_swapInterval->integer == 0 ) && ( strobe.strobeInterval ) ) ||
	     ( strobe.strobeInterval > 25 || strobe.strobeInterval < -25 ) )
	{
		if ( !gl_swapInterval->integer )
			MsgDev( D_WARN, "Strobing requires V-SYNC enabled! (gl_swapInterval != 0) \n" );

		if ( strobe.strobeInterval )
		{
			Cvar_Set( "r_strobe", "0" );
		}

		R_Set2DMode( false );
		return;
	}

	if ( ( strobe.fCounter % 2 ) == 0 )
	{
		++strobe.pCounter;
		strobe.frameState |= PHASE_POSITIVE;
	}
	else
	{
		++strobe.nCounter;
		strobe.frameState &= ~PHASE_POSITIVE;
	}

	if ( strobe.swapInterval < 0 )
		strobe.swapInterval = abs( strobe.swapInterval );

	if ( ( strobe.swapInterval ) && ( strobe.strobeInterval % 2 ) ) // Swapping not enabled for even intervals as it is neither necessary nor works as intended
	{
		delta = currentTime - recentTime;
		if ( ( delta >= (double)( strobe.swapInterval ) ) && ( delta < (double)( 2 * strobe.swapInterval ) ) ) // Basic timer
		{
			strobe.frameState |= PHASE_INVERTED;
		}
		else if ( delta < (double)( strobe.swapInterval ) )
		{
			strobe.frameState &= ~PHASE_INVERTED;
		}
		else //if (delta >= (double)(2 * swapInterval))
		{
			recentTime = currentTime;
		}
	}

	switch ( strobe.frameState & ( PHASE_POSITIVE | PHASE_INVERTED ) )
	{
	case ( PHASE_POSITIVE | PHASE_INVERTED ):
		if ( ( abs( strobe.strobeInterval ) % 2 ) == 0 )
			strobe.frameState = ( ( ( strobe.pCounter - 1 ) % ( abs( strobe.strobeInterval ) + 1 ) ) == ( abs( strobe.strobeInterval ) / 2 ) ) ? strobe.frameState | FRAME_RENDER : strobe.frameState & ~FRAME_RENDER; //even
		else
			strobe.frameState &= ~FRAME_RENDER;
		break;

	case ( PHASE_POSITIVE & ~PHASE_INVERTED ):
		if ( abs( strobe.strobeInterval ) % 2 == 0 )
			strobe.frameState = ( ( ( strobe.pCounter - 1 ) % ( abs( strobe.strobeInterval ) + 1 ) ) == 0 ) ? strobe.frameState | FRAME_RENDER : strobe.frameState & ~FRAME_RENDER; //even
		else
		{
			if ( abs( strobe.strobeInterval ) == 1 )
				strobe.frameState |= FRAME_RENDER;
			else
				strobe.frameState = ( ( ( strobe.pCounter - 1 ) % ( ( abs( strobe.strobeInterval ) + 1 ) / 2 ) ) == 0 ) ? strobe.frameState | FRAME_RENDER : strobe.frameState & ~FRAME_RENDER; //odd
		}
		break;

	case ( ~PHASE_POSITIVE & PHASE_INVERTED ):
		if ( abs( strobe.strobeInterval ) % 2 == 0 )
			strobe.frameState = ( ( ( strobe.nCounter - 1 ) % ( abs( strobe.strobeInterval ) + 1 ) ) == 0 ) ? strobe.frameState | FRAME_RENDER : strobe.frameState & ~FRAME_RENDER; //even
		else
		{
			if ( abs( strobe.strobeInterval ) == 1 )
				strobe.frameState |= FRAME_RENDER;
			else
				strobe.frameState = ( ( ( strobe.nCounter - 1 ) % ( ( abs( strobe.strobeInterval ) + 1 ) / 2 ) ) == 0 ) ? strobe.frameState | FRAME_RENDER : strobe.frameState & ~FRAME_RENDER; //odd
		}
		break;

	case 0:
		if ( ( abs( strobe.strobeInterval ) % 2 ) == 0 )
			strobe.frameState = ( ( ( strobe.nCounter - 1 ) % ( abs( strobe.strobeInterval ) + 1 ) ) == ( abs( strobe.strobeInterval ) / 2 ) ) ? strobe.frameState | FRAME_RENDER : strobe.frameState & ~FRAME_RENDER; //even
		else
			strobe.frameState &= ~FRAME_RENDER;
		break;

	default:
		strobe.frameState = ( PHASE_POSITIVE | FRAME_RENDER );
	}

	if ( strobe.strobeInterval < 0 )
		strobe.frameState ^= FRAME_RENDER;

	_processFrame( );
}