From 84b05477bda149c9cb6581299e25563b76cbc39c Mon Sep 17 00:00:00 2001 From: g-cont Date: Sat, 1 Sep 2018 00:00:00 +0300 Subject: [PATCH] 01 Sep 2018 --- engine/client/cl_gameui.c | 4 ++++ engine/client/gl_export.h | 1 + engine/client/gl_image.c | 17 ++++++++++++++--- engine/client/gl_vidnt.c | 2 +- engine/server/server.h | 1 + engine/server/sv_main.c | 2 ++ engine/server/sv_pmove.c | 3 +++ 7 files changed, 26 insertions(+), 4 deletions(-) diff --git a/engine/client/cl_gameui.c b/engine/client/cl_gameui.c index a1ca2bf6..308e3bcd 100644 --- a/engine/client/cl_gameui.c +++ b/engine/client/cl_gameui.c @@ -38,6 +38,10 @@ void UI_UpdateMenu( float realtime ) return; } + // don't show menu while level is loaded + if( GameState->nextstate != STATE_RUNFRAME && !GameState->loadGame ) + return; + // menu time (not paused, not clamped) gameui.globals->time = host.realtime; gameui.globals->frametime = host.realframetime; diff --git a/engine/client/gl_export.h b/engine/client/gl_export.h index b48834f4..0be6ae59 100644 --- a/engine/client/gl_export.h +++ b/engine/client/gl_export.h @@ -148,6 +148,7 @@ typedef float GLmatrix[16]; #define GL_2_BYTES 0x1407 #define GL_3_BYTES 0x1408 #define GL_4_BYTES 0x1409 +#define GL_HALF_FLOAT_ARB 0x140B #define GL_VERTEX_ARRAY 0x8074 #define GL_NORMAL_ARRAY 0x8075 diff --git a/engine/client/gl_image.c b/engine/client/gl_image.c index 0841bc12..5078ee66 100644 --- a/engine/client/gl_image.c +++ b/engine/client/gl_image.c @@ -610,7 +610,7 @@ static void GL_SetTextureTarget( gl_texture_t *tex, rgbdata_t *pic ) tex->target = GL_TEXTURE_2D_ARRAY_EXT; else if( pic->width > 1 && pic->height > 1 && pic->depth > 1 ) tex->target = GL_TEXTURE_3D; - else if( FBitSet( tex->flags, TF_RECTANGLE ) && pic->width == glState.width && pic->height == glState.height ) + else if( FBitSet( tex->flags, TF_RECTANGLE )) tex->target = GL_TEXTURE_RECTANGLE_EXT; else tex->target = GL_TEXTURE_2D; // default case @@ -667,7 +667,7 @@ static void GL_SetTextureFormat( gl_texture_t *tex, pixformat_t format, int chan tex->format = GL_DEPTH_COMPONENT32F; else tex->format = GL_DEPTH_COMPONENT24; } - else if( FBitSet( tex->flags, TF_ARB_FLOAT ) && GL_Support( GL_ARB_TEXTURE_FLOAT_EXT )) + else if( FBitSet( tex->flags, TF_ARB_FLOAT|TF_ARB_16BIT ) && GL_Support( GL_ARB_TEXTURE_FLOAT_EXT )) { if( haveColor && haveAlpha ) { @@ -994,6 +994,11 @@ static void GL_TextureImageRAW( gl_texture_t *tex, GLint side, GLint level, GLin if( FBitSet( tex->flags, TF_DEPTHMAP )) inFormat = GL_DEPTH_COMPONENT; + if( FBitSet( tex->flags, TF_ARB_16BIT )) + dataType = GL_HALF_FLOAT_ARB; + else if( FBitSet( tex->flags, TF_ARB_FLOAT )) + dataType = GL_FLOAT; + if( tex->target == GL_TEXTURE_1D ) { if( subImage ) pglTexSubImage1D( tex->target, level, 0, width, inFormat, dataType, data ); @@ -1650,13 +1655,19 @@ creates texture from buffer */ int GL_CreateTexture( const char *name, int width, int height, const void *buffer, texFlags_t flags ) { + int datasize = 1; rgbdata_t r_empty; + if( FBitSet( flags, TF_ARB_16BIT )) + datasize = 2; + else if( FBitSet( flags, TF_ARB_FLOAT )) + datasize = 4; + memset( &r_empty, 0, sizeof( r_empty )); r_empty.width = width; r_empty.height = height; r_empty.type = PF_RGBA_32; - r_empty.size = r_empty.width * r_empty.height * 4; + r_empty.size = r_empty.width * r_empty.height * datasize * 4; r_empty.buffer = (byte *)buffer; // clear invalid combinations diff --git a/engine/client/gl_vidnt.c b/engine/client/gl_vidnt.c index c6c3aaeb..ec72883e 100644 --- a/engine/client/gl_vidnt.c +++ b/engine/client/gl_vidnt.c @@ -1619,7 +1619,7 @@ void GL_InitCommands( void ) gl_test = Cvar_Get( "gl_test", "0", 0, "engine developer cvar for quick testing new features" ); gl_wireframe = Cvar_Get( "gl_wireframe", "0", FCVAR_ARCHIVE|FCVAR_SPONLY, "show wireframe overlay" ); gl_round_down = Cvar_Get( "gl_round_down", "2", FCVAR_RENDERINFO, "round texture sizes to nearest POT value" ); - gl_msaa = Cvar_Get( "gl_msaa", "2", FCVAR_ARCHIVE, "enable multi sample anti-aliasing" ); + gl_msaa = Cvar_Get( "gl_msaa", "1", FCVAR_ARCHIVE, "enable multi sample anti-aliasing" ); // these cvar not used by engine but some mods requires this gl_polyoffset = Cvar_Get( "gl_polyoffset", "2.0", FCVAR_ARCHIVE, "polygon offset for decals" ); diff --git a/engine/server/server.h b/engine/server/server.h index 1e2fd62e..85818b84 100644 --- a/engine/server/server.h +++ b/engine/server/server.h @@ -387,6 +387,7 @@ extern convar_t sv_unlagpush; extern convar_t sv_unlagsamples; extern convar_t rcon_password; extern convar_t sv_instancedbaseline; +extern convar_t sv_background_freeze; extern convar_t sv_minupdaterate; extern convar_t sv_maxupdaterate; extern convar_t sv_downloadurl; diff --git a/engine/server/sv_main.c b/engine/server/sv_main.c index 06513fbd..5d10e16f 100644 --- a/engine/server/sv_main.c +++ b/engine/server/sv_main.c @@ -92,6 +92,7 @@ CVAR_DEFINE_AUTO( sv_skyvec_x, "0", FCVAR_MOVEVARS|FCVAR_UNLOGGED, "skylight dir CVAR_DEFINE_AUTO( sv_skyvec_y, "0", FCVAR_MOVEVARS|FCVAR_UNLOGGED, "skylight direction by y-axis" ); CVAR_DEFINE_AUTO( sv_skyvec_z, "0", FCVAR_MOVEVARS|FCVAR_UNLOGGED, "skylight direction by z-axis" ); CVAR_DEFINE_AUTO( sv_wateralpha, "1", FCVAR_MOVEVARS|FCVAR_UNLOGGED, "world surfaces water transparency factor. 1.0 - solid, 0.0 - fully transparent" ); +CVAR_DEFINE_AUTO( sv_background_freeze, "1", FCVAR_ARCHIVE, "freeze player movement on background maps (e.g. to prevent falling)" ); CVAR_DEFINE_AUTO( showtriggers, "0", FCVAR_LATCH, "debug cvar shows triggers" ); CVAR_DEFINE_AUTO( sv_airmove, "1", FCVAR_SERVER, "obsolete, compatibility issues" ); CVAR_DEFINE_AUTO( sv_version, "", FCVAR_READ_ONLY, "engine version string" ); @@ -847,6 +848,7 @@ void SV_Init( void ) Cvar_RegisterVariable (&violence_hgibs); Cvar_RegisterVariable (&mp_logecho); Cvar_RegisterVariable (&mp_logfile); + Cvar_RegisterVariable (&sv_background_freeze); // when we in developer-mode automatically turn cheats on if( host_developer.value ) Cvar_SetValue( "sv_cheats", 1.0f ); diff --git a/engine/server/sv_pmove.c b/engine/server/sv_pmove.c index 136e5724..25f2b977 100644 --- a/engine/server/sv_pmove.c +++ b/engine/server/sv_pmove.c @@ -32,6 +32,9 @@ void SV_ClearPhysEnts( void ) qboolean SV_PlayerIsFrozen( edict_t *pClient ) { + if( sv_background_freeze.value && sv.background ) + return true; + if( FBitSet( host.features, ENGINE_QUAKE_COMPATIBLE )) return false;