~a1batross/xash3d-fwgs

This thread contains a patchset. You're looking at the original emails, but you may wish to use the patch review UI. Review patch
19

[PATCH v3 00/19] Fix engine/renderer timings synchronization. Bump to RefAPI 6

Details
Message ID
<20231228191946.3980135-1-a1ba.omarov@gmail.com>
DKIM signature
missing
Download raw message
This set of patches fixes the earliest bug since renderers split:
timings.

It eliminates the need to synchronize renderers timings by passing a
pointer from engine to renderer in a form of API structure. The
structure in the API was designed to be compatible with internal engine
structures that holds these values.

It also fixes another bug: truncated client time. For some reason it
was in single-precision float all this time and nobody noticed.

Possible Questions:

Q: Why have structures when it's possible to pass separate pointers to
   double?

A: I had this in the non-published version of RefAPI 6 however turning
   gpGlobals->time into a pointer enables dereferencing it.
   The -> operator does two things here: it will be always evaluated
   FIRST (as of C standard) and it already dereferences the pointer.
   I thought it's more aethetically pleasant to work with a structure
   than a single variable pointer.
   The downside of this is a set of static assertions in the engine,
   however it's an engine problem to keep it compatible.

Q: Why not to rename everything in the engine to use these shared
   structures?

A: I considered this too but didn't want to go with this, as replacing
   every cl.{time,oldtime} and host.{realtime,frametime} into something
   else would probably not only touch hundreds of lines in renderers
   but thousands in the engine. Also calling client time cl.time just
   makes sense.

Changes since v1:
* As suggested by mittorn, we now use PARMs to get engine pointers.
* It also eliminates older functions that were introduced in RefAPI 5.
* ref_client_t and ref_host_t now expose more data to avoid excessive
  EngineGetParm calls. Though not everything was replaced, it's outside
  of the scope of this patch set and can be easily fixed later without
  breaking compatibility. 

Changes since v2:
* No changes. Sorry, I put wrong in-reply-to.

Alibek Omarov (19):
  engine: ref_api: add PARMs to get pointers to engine data like cl,
    host, world, etc. Partially expose cl and host.
  engine: client: add support for new PARMs
  ref: gl: acquire engine pointers
  ref: gl: convert to usage of ref_client_t to get client time
  ref: gl: convert to usage of ref_host_t to get real engine time
  ref: gl: remove usage of PARM_NUMMODELS
  ref: gl: remove usage of PARM_WORLD_VERSION
  ref: gl: remove usage of PARM_MAX_CLIENTS
  ref: gl: remove usage of PARM_VIEWENT_INDEX and PARM_PLAYER_INDEX
  ref: gl: remove GetMoveVars() call
  ref: gl: remove GetPredictedOrigin call
  ref: soft: acquire engine pointers
  ref: soft: convert to usage of ref_client_t to get client time
  ref: soft: convert to usage of ref_host_t to get real engine time
  ref: soft: remove usage of PARM_MAX_CLIENTS
  ref: soft: remove usage of PARM_VIEWENT_INDEX and PARM_PLAYER_INDEX
  ref: soft: remove GetMoveVars() call
  ref: soft: remove GetPredictedOrigin() call
  engine: ref_api: draft RefAPI 6.

 engine/client/cl_parse.c    |  3 --
 engine/client/cl_parse_48.c |  3 --
 engine/client/cl_render.c   | 22 +++++++------
 engine/client/client.h      | 36 +++++++++++++---------
 engine/client/ref_common.c  | 61 +++++++++++++++----------------------
 engine/client/ref_common.h  |  1 -
 engine/common/common.h      |  6 ++--
 engine/ref_api.h            | 48 ++++++++++++++++++-----------
 ref/gl/gl_alias.c           |  6 ++--
 ref/gl/gl_beams.c           | 28 ++++++++---------
 ref/gl/gl_context.c         |  5 +++
 ref/gl/gl_local.h           | 11 ++++---
 ref/gl/gl_opengl.c          |  9 +++---
 ref/gl/gl_rlight.c          |  4 +--
 ref/gl/gl_rmain.c           | 24 +++++++--------
 ref/gl/gl_rpart.c           |  6 ++--
 ref/gl/gl_rsurf.c           | 16 +++++-----
 ref/gl/gl_sprite.c          | 26 ++++++++--------
 ref/gl/gl_studio.c          | 26 ++++++++--------
 ref/gl/gl_warp.c            | 16 +++++-----
 ref/soft/r_beams.c          | 28 ++++++++---------
 ref/soft/r_bsp.c            |  2 +-
 ref/soft/r_context.c        |  5 +++
 ref/soft/r_edge.c           |  4 +--
 ref/soft/r_light.c          |  4 +--
 ref/soft/r_local.h          | 21 +++++++------
 ref/soft/r_main.c           | 35 +++++++++++----------
 ref/soft/r_part.c           |  6 ++--
 ref/soft/r_scan.c           |  4 +--
 ref/soft/r_sprite.c         | 26 ++++++++--------
 ref/soft/r_studio.c         | 26 ++++++++--------
 ref/soft/r_surf.c           |  4 +--
 32 files changed, 265 insertions(+), 257 deletions(-)

-- 
2.34.1

[PATCH v3 01/19] engine: ref_api: add PARMs to get pointers to engine data like cl, host, world, etc. Partially expose cl and host.

Details
Message ID
<20231228191946.3980135-2-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +27 -0
---
 engine/ref_api.h | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/engine/ref_api.h b/engine/ref_api.h
index 4cc8af71..5599584a 100644
--- a/engine/ref_api.h
+++ b/engine/ref_api.h
@@ -28,6 +28,7 @@ GNU General Public License for more details.
#include "r_efx.h"
#include "com_image.h"
#include "filesystem.h"
#include "common/protocol.h"

// RefAPI changelog:
// 1. Initial release
@@ -120,6 +121,26 @@ typedef struct ref_globals_s
	int desktopBitsPixel;
} ref_globals_t;

typedef struct ref_client_s
{
	double   time;
	double   oldtime;
	int      viewentity;
	int      playernum;
	int      maxclients;
	int      nummodels;
	model_t *models[MAX_MODELS+1];
	qboolean paused;
	vec3_t   simorg;
} ref_client_t;

typedef struct ref_host_s
{
	double realtime;
	double frametime;
	int    features;
} ref_host_t;

enum
{
	GL_KEEP_UNIT = -1,
@@ -262,6 +283,12 @@ typedef enum
	PARM_NUMENTITIES       = -12, // local game only
	PARM_NUMMODELS         = -13, // cl.nummodels
	PARM_WORLD_VERSION     = -14,
	PARM_GET_CLIENT_PTR    = -15, // ref_client_t
	PARM_GET_HOST_PTR      = -16, // ref_host_t
	PARM_GET_WORLD_PTR     = -17, // world
	PARM_GET_MOVEVARS_PTR  = -18, // clgame.movevars
	PARM_GET_PALETTE_PTR   = -19, // clgame.palette
	PARM_GET_VIEWENT_PTR   = -20, // clgame.viewent
} ref_parm_e;

typedef struct ref_api_s
-- 
2.34.1

[PATCH v3 02/19] engine: client: add support for new PARMs

Details
Message ID
<20231228191946.3980135-3-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +62 -17
Reorganize internal engine structs, carefully check structs compatibility before casting types
---
 engine/client/cl_render.c  | 12 ++++++++++++
 engine/client/client.h     | 36 +++++++++++++++++++++---------------
 engine/client/ref_common.c | 25 +++++++++++++++++++++++++
 engine/common/common.h     |  6 ++++--
 4 files changed, 62 insertions(+), 17 deletions(-)

diff --git a/engine/client/cl_render.c b/engine/client/cl_render.c
index 489c3752..3cecabc6 100644
--- a/engine/client/cl_render.c
+++ b/engine/client/cl_render.c
@@ -209,6 +209,18 @@ intptr_t CL_RenderGetParm( const int parm, const int arg, const qboolean checkRe
			return cl.nummodels;
		case PARM_WORLD_VERSION:
			return world.version;
		case PARM_GET_CLIENT_PTR:
			return (intptr_t)&cl.time; // with the offset
		case PARM_GET_HOST_PTR:
			return (intptr_t)&host.realtime; // with the offset
		case PARM_GET_WORLD_PTR:
			return (intptr_t)&world;
		case PARM_GET_MOVEVARS_PTR:
			return (intptr_t)&clgame.movevars;
		case PARM_GET_PALETTE_PTR:
			return (intptr_t)&clgame.palette;
		case PARM_GET_VIEWENT_PTR:
			return (intptr_t)&clgame.viewent;
		}
	}
	return 0;
diff --git a/engine/client/client.h b/engine/client/client.h
index a3a3c5d6..2986f45f 100644
--- a/engine/client/client.h
+++ b/engine/client/client.h
@@ -174,6 +174,26 @@ typedef struct
// at every server map change
typedef struct
{
	// ==== shared through RefAPI's ref_client_t ====
	double		time;			// this is the time value that the client
						// is rendering at.  always <= cls.realtime
						// a lerp point for other data
	double		oldtime;			// previous cl.time, time-oldtime is used
						// to decay light values and smooth step ups
	int		viewentity;

	// server state information
	int		playernum;
	int		maxclients;

	int		nummodels;
	model_t		*models[MAX_MODELS+1];		// precached models (plus sentinel slot)

	qboolean	paused;

	vec3_t		simorg;			// predicted origin
	// ==== shared through RefAPI's ref_client_t ===

	int		servercount;		// server identification for prespawns
	int		validsequence;		// this is the sequence number of the last good
						// world snapshot/update we got.  If this is 0, we can't
@@ -183,7 +203,6 @@ typedef struct

	qboolean		video_prepped;		// false if on new level or new ref dll
	qboolean		audio_prepped;		// false if on new level or new snd dll
	qboolean		paused;

	int		delta_sequence;		// acknowledged sequence number

@@ -205,11 +224,6 @@ typedef struct
	runcmd_t		commands[MULTIPLAYER_BACKUP];		// each mesage will send several old cmds
	local_state_t	predicted_frames[MULTIPLAYER_BACKUP];	// local client state

	double		time;			// this is the time value that the client
						// is rendering at.  always <= cls.realtime
						// a lerp point for other data
	double		oldtime;			// previous cl.time, time-oldtime is used
						// to decay light values and smooth step ups
	double		timedelta;		// floating delta between two updates

	char		serverinfo[MAX_SERVERINFO_STRING];
@@ -223,7 +237,6 @@ typedef struct

	// player final info
	usercmd_t		*cmd;			// cl.commands[outgoing_sequence].cmd
	int		viewentity;
	vec3_t		viewangles;
	vec3_t		viewheight;
	vec3_t		punchangle;
@@ -236,14 +249,9 @@ typedef struct
	float		addangletotal;
	float		prevaddangletotal;

	// predicted origin and velocity
	vec3_t		simorg;
	// predicted velocity
	vec3_t		simvel;

	// server state information
	int		playernum;
	int		maxclients;

	entity_state_t	instanced_baseline[MAX_CUSTOM_BASELINES];
	int		instanced_baseline_count;

@@ -251,8 +259,6 @@ typedef struct
	char		event_precache[MAX_EVENTS][MAX_QPATH];
	char		files_precache[MAX_CUSTOM][MAX_QPATH];
	lightstyle_t	lightstyles[MAX_LIGHTSTYLES];
	model_t		*models[MAX_MODELS+1];		// precached models (plus sentinel slot)
	int		nummodels;
	int		numfiles;

	consistency_t	consistency_list[MAX_MODELS];
diff --git a/engine/client/ref_common.c b/engine/client/ref_common.c
index 5a176255..3ee9915f 100644
--- a/engine/client/ref_common.c
+++ b/engine/client/ref_common.c
@@ -18,6 +18,31 @@ CVAR_DEFINE_AUTO( r_showtree, "0", FCVAR_ARCHIVE, "build the graph of visible BS
static CVAR_DEFINE_AUTO( r_refdll, "", FCVAR_RENDERINFO, "choose renderer implementation, if supported" );
static CVAR_DEFINE_AUTO( r_refdll_loaded, "", FCVAR_READ_ONLY, "currently loaded renderer" );

// there is no need to expose whole host and cl structs into the renderer
// but we still need to update timings accurately as possible
// this looks horrible but the only other option would be passing four
// time pointers and then it's looks even worse with dereferences everywhere
#define STATIC_OFFSET_CHECK( s1, s2, field, base, msg ) \
	STATIC_ASSERT( offsetof( s1, field ) == offsetof( s2, field ) - offsetof( s2, base ), msg )
#define REF_CLIENT_CHECK( field ) \
	STATIC_OFFSET_CHECK( ref_client_t, client_t, field, time, "broken ref_client_t offset" ); \
	STATIC_ASSERT_( szchk_##__LINE__, sizeof(((ref_client_t *)0)->field ) == sizeof( cl.field ), "broken ref_client_t size" )
#define REF_HOST_CHECK( field ) \
	STATIC_OFFSET_CHECK( ref_host_t, host_parm_t, field, realtime, "broken ref_client_t offset" ); \
	STATIC_ASSERT_( szchk_##__LINE__, sizeof(((ref_host_t *)0)->field ) == sizeof( host.field ), "broken ref_client_t size" )

REF_CLIENT_CHECK( time );
REF_CLIENT_CHECK( oldtime );
REF_CLIENT_CHECK( viewentity );
REF_CLIENT_CHECK( playernum );
REF_CLIENT_CHECK( maxclients );
REF_CLIENT_CHECK( models );
REF_CLIENT_CHECK( paused );
REF_CLIENT_CHECK( simorg );
REF_HOST_CHECK( realtime );
REF_HOST_CHECK( frametime );
REF_HOST_CHECK( features );

void R_GetTextureParms( int *w, int *h, int texnum )
{
	if( w ) *w = REF_GET_PARM( PARM_TEX_WIDTH, texnum );
diff --git a/engine/common/common.h b/engine/common/common.h
index c4d4c87c..8f053788 100644
--- a/engine/common/common.h
+++ b/engine/common/common.h
@@ -302,8 +302,12 @@ typedef struct host_parm_s
	int		argc;
	char	**argv;

	// ==== shared through RefAPI's ref_host_t
	double		realtime;		// host.curtime
	double		frametime;	// time between engine frames
	uint		features;		// custom features that enables by mod-maker request
	// ==== shared through RefAPI's ref_host_t

	double		realframetime;	// for some system events, e.g. console animations

	uint		framecount;	// global framecount
@@ -344,8 +348,6 @@ typedef struct host_parm_s
	poolhandle_t imagepool;	// imagelib mempool
	poolhandle_t soundpool;	// soundlib mempool

	uint		features;		// custom features that enables by mod-maker request

	// for IN_MouseMove() easy access
	int		window_center_x;
	int		window_center_y;
-- 
2.34.1

[PATCH v3 03/19] ref: gl: acquire engine pointers

Details
Message ID
<20231228191946.3980135-4-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +13 -8
---
 ref/gl/gl_context.c | 5 +++++
 ref/gl/gl_local.h   | 7 ++++---
 ref/gl/gl_opengl.c  | 9 ++++-----
 3 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/ref/gl/gl_context.c b/ref/gl/gl_context.c
index 5b388511..356d23c6 100644
--- a/ref/gl/gl_context.c
+++ b/ref/gl/gl_context.c
@@ -24,6 +24,8 @@ GNU General Public License for more details.

ref_api_t      gEngfuncs;
ref_globals_t *gpGlobals;
ref_client_t  *gp_cl;
ref_host_t    *gp_host;

static void R_ClearScreen( void )
{
@@ -518,5 +520,8 @@ int EXPORT GetRefAPI( int version, ref_interface_t *funcs, ref_api_t *engfuncs,
	memcpy( &gEngfuncs, engfuncs, sizeof( ref_api_t ));
	gpGlobals = globals;

	gp_cl = (ref_client_t *)ENGINE_GET_PARM( PARM_GET_CLIENT_PTR );
	gp_host = (ref_host_t *)ENGINE_GET_PARM( PARM_GET_HOST_PTR );

	return REF_API_VERSION;
}
diff --git a/ref/gl/gl_local.h b/ref/gl/gl_local.h
index 2eb59e6d..4bc028b8 100644
--- a/ref/gl/gl_local.h
+++ b/ref/gl/gl_local.h
@@ -258,7 +258,6 @@ typedef struct
	struct world_static_s *world;
	cl_entity_t *entities;
	movevars_t *movevars;
	model_t **models;
	color24 *palette;
	cl_entity_t *viewent;

@@ -725,6 +724,8 @@ extern glstate_t		glState;
extern glwstate_t		glw_state;
extern ref_api_t      gEngfuncs;
extern ref_globals_t *gpGlobals;
extern ref_client_t  *gp_cl;
extern ref_host_t    *gp_host;

#define ENGINE_GET_PARM_ (*gEngfuncs.EngineGetParm)
#define ENGINE_GET_PARM( parm ) ENGINE_GET_PARM_( ( parm ), 0 )
@@ -739,10 +740,10 @@ static inline cl_entity_t *CL_GetEntityByIndex( int index )

static inline model_t *CL_ModelHandle( int index )
{
	return tr.models[index];
	return gp_cl->models[index];
}

#define WORLDMODEL (tr.models[1])
#define WORLDMODEL (gp_cl->models[1])

//
// renderer cvars
diff --git a/ref/gl/gl_opengl.c b/ref/gl/gl_opengl.c
index 0ae9d767..ae3d87cf 100644
--- a/ref/gl/gl_opengl.c
+++ b/ref/gl/gl_opengl.c
@@ -1287,11 +1287,10 @@ qboolean R_Init( void )
	}

	// see R_ProcessEntData for tr.entities initialization
	tr.world = gEngfuncs.GetWorld();
	tr.models = gEngfuncs.pfnGetModels();
	tr.movevars = gEngfuncs.pfnGetMoveVars();
	tr.palette = gEngfuncs.CL_GetPaletteColor();
	tr.viewent = gEngfuncs.GetViewModel();
	tr.world = (struct world_static_s *)ENGINE_GET_PARM( PARM_GET_WORLD_PTR );
	tr.movevars = (movevars_t *)ENGINE_GET_PARM( PARM_GET_MOVEVARS_PTR );
	tr.palette = (color24 *)ENGINE_GET_PARM( PARM_GET_PALETTE_PTR );
	tr.viewent = (cl_entity_t *)ENGINE_GET_PARM( PARM_GET_VIEWENT_PTR );

	GL_SetDefaults();
	R_CheckVBO();
-- 
2.34.1

[PATCH v3 04/19] ref: gl: convert to usage of ref_client_t to get client time

Details
Message ID
<20231228191946.3980135-5-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +59 -59
---
 ref/gl/gl_alias.c  |  2 +-
 ref/gl/gl_beams.c  | 20 ++++++++++----------
 ref/gl/gl_rlight.c |  4 ++--
 ref/gl/gl_rmain.c  | 24 ++++++++++++------------
 ref/gl/gl_rpart.c  |  6 +++---
 ref/gl/gl_rsurf.c  | 10 +++++-----
 ref/gl/gl_sprite.c | 26 +++++++++++++-------------
 ref/gl/gl_studio.c | 10 +++++-----
 ref/gl/gl_warp.c   | 16 ++++++++--------
 9 files changed, 59 insertions(+), 59 deletions(-)

diff --git a/ref/gl/gl_alias.c b/ref/gl/gl_alias.c
index 550d5a64..c763c8f7 100644
--- a/ref/gl/gl_alias.c
+++ b/ref/gl/gl_alias.c
@@ -1332,7 +1332,7 @@ static void R_AliasSetupTimings( void )
	if( RI.drawWorld )
	{
		// synchronize with server time
		g_alias.time = gpGlobals->time;
		g_alias.time = gp_cl->time;
	}
	else
	{
diff --git a/ref/gl/gl_beams.c b/ref/gl/gl_beams.c
index 1a78d3fa..1ec35e24 100644
--- a/ref/gl/gl_beams.c
+++ b/ref/gl/gl_beams.c
@@ -608,7 +608,7 @@ void R_DrawBeamFollow( BEAM *pbeam, float frametime )
	if( pnew )
	{
		VectorCopy( pbeam->source, pnew->org );
		pnew->die = gpGlobals->time + pbeam->amplitude;
		pnew->die = gp_cl->time + pbeam->amplitude;
		VectorClear( pnew->vel );

		pnew->next = particles;
@@ -655,7 +655,7 @@ void R_DrawBeamFollow( BEAM *pbeam, float frametime )
	VectorMA( delta, -pbeam->width, normal, last2 );

	div = 1.0f / pbeam->amplitude;
	fraction = ( pbeam->die - gpGlobals->time ) * div;
	fraction = ( pbeam->die - gp_cl->time ) * div;

	vLast = 0.0f;
	vStep = 1.0f;
@@ -688,7 +688,7 @@ void R_DrawBeamFollow( BEAM *pbeam, float frametime )

		if( particles->next != NULL )
		{
			fraction = (particles->die - gpGlobals->time) * div;
			fraction = (particles->die - gp_cl->time) * div;
		}
		else
		{
@@ -916,7 +916,7 @@ qboolean R_BeamRecomputeEndpoints( BEAM *pbeam )
		else if( !FBitSet( pbeam->flags, FBEAM_FOREVER ))
		{
			ClearBits( pbeam->flags, FBEAM_ENDENTITY );
			pbeam->die = gpGlobals->time;
			pbeam->die = gp_cl->time;
			return false;
		}
		else
@@ -949,7 +949,7 @@ void R_BeamDraw( BEAM *pbeam, float frametime )
	if( !model || model->type != mod_sprite )
	{
		pbeam->flags &= ~FBEAM_ISACTIVE; // force to ignore
		pbeam->die = gpGlobals->time;
		pbeam->die = gp_cl->time;
		return;
	}

@@ -1007,7 +1007,7 @@ void R_BeamDraw( BEAM *pbeam, float frametime )
	if( pbeam->flags & ( FBEAM_FADEIN|FBEAM_FADEOUT ))
	{
		// update life cycle
		pbeam->t = pbeam->freq + ( pbeam->die - gpGlobals->time );
		pbeam->t = pbeam->freq + ( pbeam->die - gp_cl->time );
		if( pbeam->t != 0.0f ) pbeam->t = 1.0f - pbeam->freq / pbeam->t;
	}

@@ -1055,7 +1055,7 @@ void R_BeamDraw( BEAM *pbeam, float frametime )

	TriRenderMode( FBitSet( pbeam->flags, FBEAM_SOLID ) ? kRenderNormal : kRenderTransAdd );

	if( !TriSpriteTexture( model, (int)(pbeam->frame + pbeam->frameRate * gpGlobals->time) % pbeam->frameCount ))
	if( !TriSpriteTexture( model, (int)(pbeam->frame + pbeam->frameRate * gp_cl->time) % pbeam->frameCount ))
	{
		ClearBits( pbeam->flags, FBEAM_ISACTIVE );
		return;
@@ -1160,8 +1160,8 @@ static void R_BeamSetup( BEAM *pbeam, vec3_t start, vec3_t end, int modelIndex,
	VectorCopy( end, pbeam->target );
	VectorSubtract( end, start, pbeam->delta );

	pbeam->freq = speed * gpGlobals->time;
	pbeam->die = life + gpGlobals->time;
	pbeam->freq = speed * gp_cl->time;
	pbeam->die = life + gp_cl->time;
	pbeam->amplitude = amplitude;
	pbeam->brightness = brightness;
	pbeam->width = width;
@@ -1291,7 +1291,7 @@ void CL_DrawBeams( int fTrans, BEAM *active_beams )
		if( !fTrans && !FBitSet( pBeam->flags, FBEAM_SOLID ))
			continue;

		R_BeamDraw( pBeam, gpGlobals->time -   gpGlobals->oldtime );
		R_BeamDraw( pBeam, gp_cl->time -   gp_cl->oldtime );
	}

	pglShadeModel( GL_FLAT );
diff --git a/ref/gl/gl_rlight.c b/ref/gl/gl_rlight.c
index 745f249f..b994d762 100644
--- a/ref/gl/gl_rlight.c
+++ b/ref/gl/gl_rlight.c
@@ -36,7 +36,7 @@ void CL_RunLightStyles( void )
{
	int		i, k, flight, clight;
	float		l, lerpfrac, backlerp;
	float		frametime = (gpGlobals->time -   gpGlobals->oldtime);
	float		frametime = (gp_cl->time -   gp_cl->oldtime);
	float		scale;
	lightstyle_t	*ls;

@@ -160,7 +160,7 @@ void R_PushDlights( void )
	{
		l = gEngfuncs.GetDynamicLight( i );

		if( l->die < gpGlobals->time || !l->radius )
		if( l->die < gp_cl->time || !l->radius )
			continue;

		if( GL_FrustumCullSphere( &RI.frustum, l->origin, l->radius, 15 ))
diff --git a/ref/gl/gl_rmain.c b/ref/gl/gl_rmain.c
index 9adb068b..995bd3e6 100644
--- a/ref/gl/gl_rmain.c
+++ b/ref/gl/gl_rmain.c
@@ -339,8 +339,8 @@ void R_SetupFrustum( void )

	if( RP_NORMALPASS() && ( ENGINE_GET_PARM( PARM_WATER_LEVEL ) >= 3 ) && ENGINE_GET_PARM( PARM_QUAKE_COMPATIBLE ))
	{
		RI.fov_x = atan( tan( DEG2RAD( RI.fov_x ) / 2 ) * ( 0.97f + sin( gpGlobals->time * 1.5f ) * 0.03f )) * 2 / (M_PI_F / 180.0f);
		RI.fov_y = atan( tan( DEG2RAD( RI.fov_y ) / 2 ) * ( 1.03f - sin( gpGlobals->time * 1.5f ) * 0.03f )) * 2 / (M_PI_F / 180.0f);
		RI.fov_x = atan( tan( DEG2RAD( RI.fov_x ) / 2 ) * ( 0.97f + sin( gp_cl->time * 1.5f ) * 0.03f )) * 2 / (M_PI_F / 180.0f);
		RI.fov_y = atan( tan( DEG2RAD( RI.fov_y ) / 2 ) * ( 1.03f - sin( gp_cl->time * 1.5f ) * 0.03f )) * 2 / (M_PI_F / 180.0f);
	}

	// build the transformation matrix for the given view angles
@@ -954,7 +954,7 @@ void R_RenderScene( void )

	// frametime is valid only for normal pass
	if( RP_NORMALPASS( ))
		tr.frametime = gpGlobals->time -   gpGlobals->oldtime;
		tr.frametime = gp_cl->time -   gp_cl->oldtime;
	else tr.frametime = 0.0;

	// begin a new frame
@@ -1181,16 +1181,16 @@ int CL_FxBlend( cl_entity_t *e )
	switch( e->curstate.renderfx )
	{
	case kRenderFxPulseSlowWide:
		blend = e->curstate.renderamt + 0x40 * sin( gpGlobals->time * 2 + offset );
		blend = e->curstate.renderamt + 0x40 * sin( gp_cl->time * 2 + offset );
		break;
	case kRenderFxPulseFastWide:
		blend = e->curstate.renderamt + 0x40 * sin( gpGlobals->time * 8 + offset );
		blend = e->curstate.renderamt + 0x40 * sin( gp_cl->time * 8 + offset );
		break;
	case kRenderFxPulseSlow:
		blend = e->curstate.renderamt + 0x10 * sin( gpGlobals->time * 2 + offset );
		blend = e->curstate.renderamt + 0x10 * sin( gp_cl->time * 2 + offset );
		break;
	case kRenderFxPulseFast:
		blend = e->curstate.renderamt + 0x10 * sin( gpGlobals->time * 8 + offset );
		blend = e->curstate.renderamt + 0x10 * sin( gp_cl->time * 8 + offset );
		break;
	case kRenderFxFadeSlow:
		if( RP_NORMALPASS( ))
@@ -1229,27 +1229,27 @@ int CL_FxBlend( cl_entity_t *e )
		blend = e->curstate.renderamt;
		break;
	case kRenderFxStrobeSlow:
		blend = 20 * sin( gpGlobals->time * 4 + offset );
		blend = 20 * sin( gp_cl->time * 4 + offset );
		if( blend < 0 ) blend = 0;
		else blend = e->curstate.renderamt;
		break;
	case kRenderFxStrobeFast:
		blend = 20 * sin( gpGlobals->time * 16 + offset );
		blend = 20 * sin( gp_cl->time * 16 + offset );
		if( blend < 0 ) blend = 0;
		else blend = e->curstate.renderamt;
		break;
	case kRenderFxStrobeFaster:
		blend = 20 * sin( gpGlobals->time * 36 + offset );
		blend = 20 * sin( gp_cl->time * 36 + offset );
		if( blend < 0 ) blend = 0;
		else blend = e->curstate.renderamt;
		break;
	case kRenderFxFlickerSlow:
		blend = 20 * (sin( gpGlobals->time * 2 ) + sin( gpGlobals->time * 17 + offset ));
		blend = 20 * (sin( gp_cl->time * 2 ) + sin( gp_cl->time * 17 + offset ));
		if( blend < 0 ) blend = 0;
		else blend = e->curstate.renderamt;
		break;
	case kRenderFxFlickerFast:
		blend = 20 * (sin( gpGlobals->time * 16 ) + sin( gpGlobals->time * 23 + offset ));
		blend = 20 * (sin( gp_cl->time * 16 ) + sin( gp_cl->time * 23 + offset ));
		if( blend < 0 ) blend = 0;
		else blend = e->curstate.renderamt;
		break;
diff --git a/ref/gl/gl_rpart.c b/ref/gl/gl_rpart.c
index 88bfdd0d..c2c71845 100644
--- a/ref/gl/gl_rpart.c
+++ b/ref/gl/gl_rpart.c
@@ -87,7 +87,7 @@ void CL_DrawParticles( double frametime, particle_t *cl_active_particles, float
			p->color = bound( 0, p->color, 255 );
			color = tr.palette[p->color];

			alpha = 255 * (p->die - gpGlobals->time) * 16.0f;
			alpha = 255 * (p->die - gp_cl->time) * 16.0f;
			if( alpha > 255 || p->type == pt_static )
				alpha = 255;

@@ -194,7 +194,7 @@ void CL_DrawTracers( double frametime, particle_t *cl_active_tracers )

	for( p = cl_active_tracers; p; p = p->next )
	{
		atten = (p->die - gpGlobals->time);
		atten = (p->die - gp_cl->time);
		if( atten > 0.1f ) atten = 0.1f;

		VectorScale( p->vel, ( p->ramp * atten ), delta );
@@ -259,7 +259,7 @@ void CL_DrawTracers( double frametime, particle_t *cl_active_tracers )
			p->vel[1] *= scale;
			p->vel[2] -= gravity;

			p->packedColor = 255 * (p->die - gpGlobals->time) * 2;
			p->packedColor = 255 * (p->die - gp_cl->time) * 2;
			if( p->packedColor > 255 ) p->packedColor = 255;
		}
		else if( p->type == pt_slowgrav )
diff --git a/ref/gl/gl_rsurf.c b/ref/gl/gl_rsurf.c
index 92a23e96..de2de7d9 100644
--- a/ref/gl/gl_rsurf.c
+++ b/ref/gl/gl_rsurf.c
@@ -408,7 +408,7 @@ texture_t *R_TextureAnim( texture_t *b )
			speed = 10;
		else speed = 20;

		reletive = (int)(gpGlobals->time * speed) % base->anim_total;
		reletive = (int)(gp_cl->time * speed) % base->anim_total;
	}


@@ -500,7 +500,7 @@ texture_t *R_TextureAnimation( msurface_t *s )
			speed = 10;
		else speed = 20;

		reletive = (int)(gpGlobals->time * speed) % base->anim_total;
		reletive = (int)(gp_cl->time * speed) % base->anim_total;
	}

	count = 0;
@@ -828,8 +828,8 @@ void DrawGLPoly( glpoly_t *p, float xScale, float yScale )
		flAngle = ( flConveyorSpeed >= 0 ) ? 180 : 0;

		SinCos( flAngle * ( M_PI_F / 180.0f ), &sy, &cy );
		sOffset = gpGlobals->time * cy * flRate;
		tOffset = gpGlobals->time * sy * flRate;
		sOffset = gp_cl->time * cy * flRate;
		tOffset = gp_cl->time * sy * flRate;

		// make sure that we are positive
		if( sOffset < 0.0f ) sOffset += 1.0f + -(int)sOffset;
@@ -1601,7 +1601,7 @@ void R_DrawBrushModel( cl_entity_t *e )
	{
		l = gEngfuncs.GetDynamicLight( k );

		if( l->die < gpGlobals->time || !l->radius )
		if( l->die < gp_cl->time || !l->radius )
			continue;

		VectorCopy( l->origin, oldorigin ); // save lightorigin
diff --git a/ref/gl/gl_sprite.c b/ref/gl/gl_sprite.c
index 6703a781..60083078 100644
--- a/ref/gl/gl_sprite.c
+++ b/ref/gl/gl_sprite.c
@@ -430,7 +430,7 @@ mspriteframe_t *R_GetSpriteFrame( const model_t *pModel, int frame, float yaw )

		// when loading in Mod_LoadSpriteGroup, we guaranteed all interval values
		// are positive, so we don't have to worry about division by zero
		targettime = gpGlobals->time - ((int)( gpGlobals->time / fullinterval )) * fullinterval;
		targettime = gp_cl->time - ((int)( gp_cl->time / fullinterval )) * fullinterval;

		for( i = 0; i < (numframes - 1); i++ )
		{
@@ -494,25 +494,25 @@ float R_GetSpriteFrameInterpolant( cl_entity_t *ent, mspriteframe_t **oldframe,
				// this can be happens when rendering switched between single and angled frames
				// or change model on replace delta-entity
				ent->latched.prevblending[0] = ent->latched.prevblending[1] = frame;
				ent->latched.sequencetime = gpGlobals->time;
				ent->latched.sequencetime = gp_cl->time;
				lerpFrac = 1.0f;
			}

			if( ent->latched.sequencetime < gpGlobals->time )
			if( ent->latched.sequencetime < gp_cl->time )
			{
				if( frame != ent->latched.prevblending[1] )
				{
					ent->latched.prevblending[0] = ent->latched.prevblending[1];
					ent->latched.prevblending[1] = frame;
					ent->latched.sequencetime = gpGlobals->time;
					ent->latched.sequencetime = gp_cl->time;
					lerpFrac = 0.0f;
				}
				else lerpFrac = (gpGlobals->time - ent->latched.sequencetime) * 11.0f;
				else lerpFrac = (gp_cl->time - ent->latched.sequencetime) * 11.0f;
			}
			else
			{
				ent->latched.prevblending[0] = ent->latched.prevblending[1] = frame;
				ent->latched.sequencetime = gpGlobals->time;
				ent->latched.sequencetime = gp_cl->time;
				lerpFrac = 0.0f;
			}
		}
@@ -526,7 +526,7 @@ float R_GetSpriteFrameInterpolant( cl_entity_t *ent, mspriteframe_t **oldframe,
		{
			// reset interpolation on change model
			ent->latched.prevblending[0] = ent->latched.prevblending[1] = frame;
			ent->latched.sequencetime = gpGlobals->time;
			ent->latched.sequencetime = gp_cl->time;
			lerpFrac = 0.0f;
		}

@@ -541,7 +541,7 @@ float R_GetSpriteFrameInterpolant( cl_entity_t *ent, mspriteframe_t **oldframe,
		numframes = pspritegroup->numframes;
		fullinterval = pintervals[numframes-1];
		jinterval = pintervals[1] - pintervals[0];
		time = gpGlobals->time;
		time = gp_cl->time;
		jtime = 0.0f;

		// when loading in Mod_LoadSpriteGroup, we guaranteed all interval values
@@ -580,25 +580,25 @@ float R_GetSpriteFrameInterpolant( cl_entity_t *ent, mspriteframe_t **oldframe,
				// this can be happens when rendering switched between single and angled frames
				// or change model on replace delta-entity
				ent->latched.prevblending[0] = ent->latched.prevblending[1] = frame;
				ent->latched.sequencetime = gpGlobals->time;
				ent->latched.sequencetime = gp_cl->time;
				lerpFrac = 1.0f;
			}

			if( ent->latched.sequencetime < gpGlobals->time )
			if( ent->latched.sequencetime < gp_cl->time )
			{
				if( frame != ent->latched.prevblending[1] )
				{
					ent->latched.prevblending[0] = ent->latched.prevblending[1];
					ent->latched.prevblending[1] = frame;
					ent->latched.sequencetime = gpGlobals->time;
					ent->latched.sequencetime = gp_cl->time;
					lerpFrac = 0.0f;
				}
				else lerpFrac = (gpGlobals->time - ent->latched.sequencetime) * ent->curstate.framerate;
				else lerpFrac = (gp_cl->time - ent->latched.sequencetime) * ent->curstate.framerate;
			}
			else
			{
				ent->latched.prevblending[0] = ent->latched.prevblending[1] = frame;
				ent->latched.sequencetime = gpGlobals->time;
				ent->latched.sequencetime = gp_cl->time;
				lerpFrac = 0.0f;
			}
		}
diff --git a/ref/gl/gl_studio.c b/ref/gl/gl_studio.c
index 6e09674e..66b3f88a 100644
--- a/ref/gl/gl_studio.c
+++ b/ref/gl/gl_studio.c
@@ -174,8 +174,8 @@ static void R_StudioSetupTimings( void )
	if( RI.drawWorld )
	{
		// synchronize with server time
		g_studio.time = gpGlobals->time;
		g_studio.frametime = gpGlobals->time - gpGlobals->oldtime;
		g_studio.time = gp_cl->time;
		g_studio.frametime = gp_cl->time - gp_cl->oldtime;
	}
	else
	{
@@ -424,8 +424,8 @@ pfnGetEngineTimes
static void pfnGetEngineTimes( int *framecount, double *current, double *old )
{
	if( framecount ) *framecount = tr.realframecount;
	if( current ) *current = gpGlobals->time;
	if( old ) *old =   gpGlobals->oldtime;
	if( current ) *current = gp_cl->time;
	if( old ) *old =   gp_cl->oldtime;
}

/*
@@ -2756,7 +2756,7 @@ static void R_StudioClientEvents( void )

		ClearBits( e->curstate.effects, EF_MUZZLEFLASH );
		VectorCopy( e->attachment[0], el->origin );
		el->die = gpGlobals->time + 0.05f;
		el->die = gp_cl->time + 0.05f;
		el->color.r = 255;
		el->color.g = 192;
		el->color.b = 64;
diff --git a/ref/gl/gl_warp.c b/ref/gl/gl_warp.c
index 7ba1afd7..62517cf1 100644
--- a/ref/gl/gl_warp.c
+++ b/ref/gl/gl_warp.c
@@ -526,7 +526,7 @@ static void R_CloudTexCoord( vec3_t v, float speed, float *s, float *t )
	float	length, speedscale;
	vec3_t	dir;

	speedscale = gpGlobals->time * speed;
	speedscale = gp_cl->time * speed;
	speedscale -= (int)speedscale & ~127;

	VectorSubtract( v, RI.vieworg, dir );
@@ -813,8 +813,8 @@ void EmitWaterPolys( msurface_t *warp, qboolean reverse )
		{
			if( waveHeight )
			{
				nv = r_turbsin[(int)(gpGlobals->time * 160.0f + v[1] + v[0]) & 255] + 8.0f;
				nv = (r_turbsin[(int)(v[0] * 5.0f + gpGlobals->time * 171.0f - v[1]) & 255] + 8.0f ) * 0.8f + nv;
				nv = r_turbsin[(int)(gp_cl->time * 160.0f + v[1] + v[0]) & 255] + 8.0f;
				nv = (r_turbsin[(int)(v[0] * 5.0f + gp_cl->time * 171.0f - v[1]) & 255] + 8.0f ) * 0.8f + nv;
				nv = nv * waveHeight + v[2];
			}
			else nv = v[2];
@@ -824,8 +824,8 @@ void EmitWaterPolys( msurface_t *warp, qboolean reverse )

			if( !r_ripple.value )
			{
				s = os + r_turbsin[(int)((ot * 0.125f + gpGlobals->time) * TURBSCALE) & 255];
				t = ot + r_turbsin[(int)((os * 0.125f + gpGlobals->time) * TURBSCALE) & 255];
				s = os + r_turbsin[(int)((ot * 0.125f + gp_cl->time) * TURBSCALE) & 255];
				t = ot + r_turbsin[(int)((os * 0.125f + gp_cl->time) * TURBSCALE) & 255];
			}
			else
			{
@@ -865,7 +865,7 @@ void R_ResetRipples( void )
{
	g_ripple.curbuf = g_ripple.buf[0];
	g_ripple.oldbuf = g_ripple.buf[1];
	g_ripple.time = g_ripple.oldtime = gpGlobals->time - 0.1;
	g_ripple.time = g_ripple.oldtime = gp_cl->time - 0.1;
	memset( g_ripple.buf, 0, sizeof( g_ripple.buf ));
}

@@ -936,14 +936,14 @@ static int MostSignificantBit( unsigned int v )

void R_AnimateRipples( void )
{
	double frametime = gpGlobals->time - g_ripple.time;
	double frametime = gp_cl->time - g_ripple.time;

	g_ripple.update = r_ripple.value && frametime >= r_ripple_updatetime.value;

	if( !g_ripple.update )
		return;

	g_ripple.time = gpGlobals->time;
	g_ripple.time = gp_cl->time;

	R_SwapBufs();

-- 
2.34.1

[PATCH v3 05/19] ref: gl: convert to usage of ref_host_t to get real engine time

Details
Message ID
<20231228191946.3980135-6-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +4 -4
---
 ref/gl/gl_alias.c  | 2 +-
 ref/gl/gl_studio.c | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/ref/gl/gl_alias.c b/ref/gl/gl_alias.c
index c763c8f7..e203468f 100644
--- a/ref/gl/gl_alias.c
+++ b/ref/gl/gl_alias.c
@@ -1337,7 +1337,7 @@ static void R_AliasSetupTimings( void )
	else
	{
		// menu stuff
		g_alias.time = gpGlobals->realtime;
		g_alias.time = gp_host->realtime;
	}

	m_fDoRemap = false;
diff --git a/ref/gl/gl_studio.c b/ref/gl/gl_studio.c
index 66b3f88a..d5ead206 100644
--- a/ref/gl/gl_studio.c
+++ b/ref/gl/gl_studio.c
@@ -180,8 +180,8 @@ static void R_StudioSetupTimings( void )
	else
	{
		// menu stuff
		g_studio.time = gpGlobals->realtime;
		g_studio.frametime = gpGlobals->frametime;
		g_studio.time = gp_host->realtime;
		g_studio.frametime = gp_host->frametime;
	}
}

@@ -2772,7 +2772,7 @@ static void R_StudioClientEvents( void )
		return;

	end = R_StudioEstimateFrame( e, pseqdesc, g_studio.time );
	start = end - e->curstate.framerate * gpGlobals->frametime * pseqdesc->fps;
	start = end - e->curstate.framerate * gp_host->frametime * pseqdesc->fps;
	pevent = (mstudioevent_t *)((byte *)m_pStudioHeader + pseqdesc->eventindex);

	if( e->latched.sequencetime == e->curstate.animtime )
-- 
2.34.1

[PATCH v3 06/19] ref: gl: remove usage of PARM_NUMMODELS

Details
Message ID
<20231228191946.3980135-7-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +2 -2
---
 ref/gl/gl_rsurf.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/ref/gl/gl_rsurf.c b/ref/gl/gl_rsurf.c
index de2de7d9..3b539ba4 100644
--- a/ref/gl/gl_rsurf.c
+++ b/ref/gl/gl_rsurf.c
@@ -3774,7 +3774,7 @@ void GL_RebuildLightmaps( void )

	LM_InitBlock();

	for( i = 0; i < ENGINE_GET_PARM( PARM_NUMMODELS ); i++ )
	for( i = 0; i < gp_cl->nummodels; i++ )
	{
		if(( m = CL_ModelHandle( i + 1 )) == NULL )
			continue;
@@ -3839,7 +3839,7 @@ void GL_BuildLightmaps( void )

	LM_InitBlock();

	for( i = 0; i < ENGINE_GET_PARM( PARM_NUMMODELS ); i++ )
	for( i = 0; i < gp_cl->nummodels; i++ )
	{
		if(( m = CL_ModelHandle( i + 1 )) == NULL )
			continue;
-- 
2.34.1

[PATCH v3 07/19] ref: gl: remove usage of PARM_WORLD_VERSION

Details
Message ID
<20231228191946.3980135-8-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +1 -1
---
 ref/gl/gl_rsurf.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ref/gl/gl_rsurf.c b/ref/gl/gl_rsurf.c
index 3b539ba4..c2705495 100644
--- a/ref/gl/gl_rsurf.c
+++ b/ref/gl/gl_rsurf.c
@@ -3819,7 +3819,7 @@ void GL_BuildLightmaps( void )

	// update the lightmap blocksize
	if( FBitSet( ENGINE_GET_PARM( PARM_FEATURES ), ENGINE_LARGE_LIGHTMAPS )
		|| ENGINE_GET_PARM( PARM_WORLD_VERSION ) == QBSP2_VERSION )
		|| tr.world->version == QBSP2_VERSION )
		tr.block_size = BLOCK_SIZE_MAX;
	else tr.block_size = BLOCK_SIZE_DEFAULT;

-- 
2.34.1

[PATCH v3 08/19] ref: gl: remove usage of PARM_MAX_CLIENTS

Details
Message ID
<20231228191946.3980135-9-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +3 -3
---
 ref/gl/gl_studio.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/ref/gl/gl_studio.c b/ref/gl/gl_studio.c
index d5ead206..ee7492c9 100644
--- a/ref/gl/gl_studio.c
+++ b/ref/gl/gl_studio.c
@@ -3297,7 +3297,7 @@ static int R_StudioDrawPlayer( int flags, entity_state_t *pplayer )

	m_nPlayerIndex = pplayer->number - 1;

	if( m_nPlayerIndex < 0 || m_nPlayerIndex >= ENGINE_GET_PARM( PARM_MAX_CLIENTS ) )
	if( m_nPlayerIndex < 0 || m_nPlayerIndex >= gp_cl->maxclients )
		return 0;

	RI.currentmodel = R_StudioSetupPlayerModel( m_nPlayerIndex );
@@ -3379,7 +3379,7 @@ static int R_StudioDrawPlayer( int flags, entity_state_t *pplayer )
			RI.currententity->curstate.body = 255;
		}

		if( !( !gpGlobals->developer && ENGINE_GET_PARM( PARM_MAX_CLIENTS ) == 1 ) && ( RI.currentmodel == RI.currententity->model ))
		if( !( !gpGlobals->developer && gp_cl->maxclients == 1 ) && ( RI.currentmodel == RI.currententity->model ))
			RI.currententity->curstate.body = 1; // force helmet

		lighting.plightvec = dir;
@@ -3442,7 +3442,7 @@ static int R_StudioDrawModel( int flags )
		int		result;

		if( RI.currententity->curstate.renderamt <= 0 ||
			RI.currententity->curstate.renderamt > ENGINE_GET_PARM( PARM_MAX_CLIENTS ) )
			RI.currententity->curstate.renderamt > gp_cl->maxclients )
			return 0;

		// get copy of player
-- 
2.34.1

[PATCH v3 09/19] ref: gl: remove usage of PARM_VIEWENT_INDEX and PARM_PLAYER_INDEX

Details
Message ID
<20231228191946.3980135-10-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +3 -3
---
 ref/gl/gl_beams.c | 2 +-
 ref/gl/gl_local.h | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/ref/gl/gl_beams.c b/ref/gl/gl_beams.c
index 1ec35e24..17cffbe7 100644
--- a/ref/gl/gl_beams.c
+++ b/ref/gl/gl_beams.c
@@ -867,7 +867,7 @@ static qboolean R_BeamComputePoint( int beamEnt, vec3_t pt )
	// get attachment
	if( attach > 0 )
		VectorCopy( ent->attachment[attach - 1], pt );
	else if( ent->index == ENGINE_GET_PARM( PARM_PLAYER_INDEX ) )
	else if( ent->index == ( gp_cl->playernum + 1 ))
	{
		vec3_t simorg;
		gEngfuncs.GetPredictedOrigin( simorg );
diff --git a/ref/gl/gl_local.h b/ref/gl/gl_local.h
index 4bc028b8..315312a2 100644
--- a/ref/gl/gl_local.h
+++ b/ref/gl/gl_local.h
@@ -87,10 +87,10 @@ extern poolhandle_t r_temppool;
#define RP_NONVIEWERREF	(RP_ENVVIEW)
#define R_ModelOpaque( rm )	( rm == kRenderNormal )
#define R_StaticEntity( ent )	( VectorIsNull( ent->origin ) && VectorIsNull( ent->angles ))
#define RP_LOCALCLIENT( e )	((e) != NULL && (e)->index == ENGINE_GET_PARM( PARM_PLAYER_INDEX ) && e->player )
#define RP_LOCALCLIENT( e )	((e) != NULL && (e)->index == ( gp_cl->playernum + 1 ) && e->player )
#define RP_NORMALPASS()	( FBitSet( RI.params, RP_NONVIEWERREF ) == 0 )

#define CL_IsViewEntityLocalPlayer() ( ENGINE_GET_PARM( PARM_VIEWENT_INDEX ) == ENGINE_GET_PARM( PARM_PLAYER_INDEX ) )
#define CL_IsViewEntityLocalPlayer() ( gp_cl->viewentity == ( gp_cl->playernum + 1 ))

#define CULL_VISIBLE	0		// not culled
#define CULL_BACKSIDE	1		// backside of transparent wall
-- 
2.34.1

[PATCH v3 10/19] ref: gl: remove GetMoveVars() call

Details
Message ID
<20231228191946.3980135-11-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +2 -2
---
 ref/gl/gl_alias.c  | 2 +-
 ref/gl/gl_studio.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/ref/gl/gl_alias.c b/ref/gl/gl_alias.c
index e203468f..9bbb204b 100644
--- a/ref/gl/gl_alias.c
+++ b/ref/gl/gl_alias.c
@@ -765,7 +765,7 @@ similar to R_StudioDynamicLight
*/
void R_AliasDynamicLight( cl_entity_t *ent, alight_t *plight )
{
	movevars_t	*mv = gEngfuncs.pfnGetMoveVars();
	movevars_t	*mv = tr.movevars;
	vec3_t		lightDir, vecSrc, vecEnd;
	vec3_t		origin, dist, finalLight;
	float		add, radius, total;
diff --git a/ref/gl/gl_studio.c b/ref/gl/gl_studio.c
index ee7492c9..fee12322 100644
--- a/ref/gl/gl_studio.c
+++ b/ref/gl/gl_studio.c
@@ -1324,7 +1324,7 @@ R_StudioDynamicLight
*/
void R_StudioDynamicLight( cl_entity_t *ent, alight_t *plight )
{
	movevars_t	*mv = gEngfuncs.pfnGetMoveVars();
	movevars_t	*mv = tr.movevars;
	vec3_t		lightDir, vecSrc, vecEnd;
	vec3_t		origin, dist, finalLight;
	float		add, radius, total;
-- 
2.34.1

[PATCH v3 11/19] ref: gl: remove GetPredictedOrigin call

Details
Message ID
<20231228191946.3980135-12-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +2 -6
---
 ref/gl/gl_beams.c  | 6 +-----
 ref/gl/gl_studio.c | 2 +-
 2 files changed, 2 insertions(+), 6 deletions(-)

diff --git a/ref/gl/gl_beams.c b/ref/gl/gl_beams.c
index 17cffbe7..67cf849a 100644
--- a/ref/gl/gl_beams.c
+++ b/ref/gl/gl_beams.c
@@ -868,11 +868,7 @@ static qboolean R_BeamComputePoint( int beamEnt, vec3_t pt )
	if( attach > 0 )
		VectorCopy( ent->attachment[attach - 1], pt );
	else if( ent->index == ( gp_cl->playernum + 1 ))
	{
		vec3_t simorg;
		gEngfuncs.GetPredictedOrigin( simorg );
		VectorCopy( simorg, pt );
	}
		VectorCopy( gp_cl->simorg, pt );
	else VectorCopy( ent->origin, pt );

	return true;
diff --git a/ref/gl/gl_studio.c b/ref/gl/gl_studio.c
index fee12322..665c6dcf 100644
--- a/ref/gl/gl_studio.c
+++ b/ref/gl/gl_studio.c
@@ -3607,7 +3607,7 @@ void R_RunViewmodelEvents( void )

	R_StudioSetupTimings();

	gEngfuncs.GetPredictedOrigin( simorg );
	VectorCopy( gp_cl->simorg, simorg );
	for( i = 0; i < 4; i++ )
		VectorCopy( simorg, RI.currententity->attachment[i] );
	RI.currentmodel = RI.currententity->model;
-- 
2.34.1

[PATCH v3 12/19] ref: soft: acquire engine pointers

Details
Message ID
<20231228191946.3980135-13-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +17 -12
---
 ref/soft/r_context.c |  5 +++++
 ref/soft/r_local.h   | 17 +++++++++--------
 ref/soft/r_main.c    |  7 +++----
 3 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/ref/soft/r_context.c b/ref/soft/r_context.c
index 69fcdace..a4cce9d3 100644
--- a/ref/soft/r_context.c
+++ b/ref/soft/r_context.c
@@ -17,6 +17,8 @@ GNU General Public License for more details.

ref_api_t      gEngfuncs;
ref_globals_t *gpGlobals;
ref_client_t  *gp_cl;
ref_host_t    *gp_host;
gl_globals_t tr;
ref_speeds_t r_stats;
poolhandle_t r_temppool;
@@ -564,5 +566,8 @@ int EXPORT GAME_EXPORT GetRefAPI( int version, ref_interface_t *funcs, ref_api_t
	memcpy( &gEngfuncs, engfuncs, sizeof( ref_api_t ));
	gpGlobals = globals;

	gp_cl = (ref_client_t *)ENGINE_GET_PARM( PARM_GET_CLIENT_PTR );
	gp_host = (ref_host_t *)ENGINE_GET_PARM( PARM_GET_HOST_PTR );

	return REF_API_VERSION;
}
diff --git a/ref/soft/r_local.h b/ref/soft/r_local.h
index ef00edf3..8eddc8f4 100644
--- a/ref/soft/r_local.h
+++ b/ref/soft/r_local.h
@@ -297,7 +297,6 @@ typedef struct
	// get from engine
	cl_entity_t *entities;
	movevars_t *movevars;
	model_t **models;
	color24 *palette;
	cl_entity_t *viewent;

@@ -676,6 +675,13 @@ void TriBrightness( float brightness );
#define ENGINE_GET_PARM_ (*gEngfuncs.EngineGetParm)
#define ENGINE_GET_PARM( parm ) ENGINE_GET_PARM_( (parm), 0 )

extern ref_api_t      gEngfuncs;
extern ref_globals_t *gpGlobals;
extern ref_client_t  *gp_cl;
extern ref_host_t    *gp_host;

DECLARE_ENGINE_SHARED_CVAR_LIST()

//
// helper funcs
//
@@ -686,15 +692,10 @@ static inline cl_entity_t *CL_GetEntityByIndex( int index )

static inline model_t *CL_ModelHandle( int index )
{
	return tr.models[index];
	return gp_cl->models[index];
}

#define WORLDMODEL (tr.models[1])

extern ref_api_t      gEngfuncs;
extern ref_globals_t *gpGlobals;

DECLARE_ENGINE_SHARED_CVAR_LIST()
#define WORLDMODEL (gp_cl->models[1])

// todo: gl_cull.c
#define R_CullModel(...) 0
diff --git a/ref/soft/r_main.c b/ref/soft/r_main.c
index f9cd64ed..8b768ac0 100644
--- a/ref/soft/r_main.c
+++ b/ref/soft/r_main.c
@@ -1939,10 +1939,9 @@ qboolean GAME_EXPORT R_Init( void )
	}

	// see R_ProcessEntData for tr.entities initialization
	tr.models = gEngfuncs.pfnGetModels();
	tr.movevars = gEngfuncs.pfnGetMoveVars();
	tr.palette = gEngfuncs.CL_GetPaletteColor();
	tr.viewent = gEngfuncs.GetViewModel();
	tr.movevars = (movevars_t *)ENGINE_GET_PARM( PARM_GET_MOVEVARS_PTR );
	tr.palette = (color24 *)ENGINE_GET_PARM( PARM_GET_PALETTE_PTR );
	tr.viewent = (cl_entity_t *)ENGINE_GET_PARM( PARM_GET_VIEWENT_PTR );

	R_InitBlit( glblit );

-- 
2.34.1

[PATCH v3 13/19] ref: soft: convert to usage of ref_client_t to get client time

Details
Message ID
<20231228191946.3980135-14-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +54 -54
---
 ref/soft/r_beams.c  | 20 ++++++++++----------
 ref/soft/r_bsp.c    |  2 +-
 ref/soft/r_edge.c   |  4 ++--
 ref/soft/r_light.c  |  4 ++--
 ref/soft/r_main.c   | 28 ++++++++++++++--------------
 ref/soft/r_part.c   |  6 +++---
 ref/soft/r_scan.c   |  4 ++--
 ref/soft/r_sprite.c | 26 +++++++++++++-------------
 ref/soft/r_studio.c | 10 +++++-----
 ref/soft/r_surf.c   |  4 ++--
 10 files changed, 54 insertions(+), 54 deletions(-)

diff --git a/ref/soft/r_beams.c b/ref/soft/r_beams.c
index 2e77c841..01224b18 100644
--- a/ref/soft/r_beams.c
+++ b/ref/soft/r_beams.c
@@ -611,7 +611,7 @@ void R_DrawBeamFollow( BEAM *pbeam, float frametime )
	if( pnew )
	{
		VectorCopy( pbeam->source, pnew->org );
		pnew->die = gpGlobals->time + pbeam->amplitude;
		pnew->die = gp_cl->time + pbeam->amplitude;
		VectorClear( pnew->vel );

		pnew->next = particles;
@@ -658,7 +658,7 @@ void R_DrawBeamFollow( BEAM *pbeam, float frametime )
	VectorMA( delta, -pbeam->width, normal, last2 );

	div = 1.0f / pbeam->amplitude;
	fraction = ( pbeam->die - gpGlobals->time ) * div;
	fraction = ( pbeam->die - gp_cl->time ) * div;

	vLast = 0.0f;
	vStep = 1.0f;
@@ -694,7 +694,7 @@ void R_DrawBeamFollow( BEAM *pbeam, float frametime )

		if( particles->next != NULL )
		{
			fraction = (particles->die - gpGlobals->time) * div;
			fraction = (particles->die - gp_cl->time) * div;
		}
		else
		{
@@ -929,7 +929,7 @@ qboolean R_BeamRecomputeEndpoints( BEAM *pbeam )
		else if( !FBitSet( pbeam->flags, FBEAM_FOREVER ))
		{
			ClearBits( pbeam->flags, FBEAM_ENDENTITY );
			pbeam->die = gpGlobals->time;
			pbeam->die = gp_cl->time;
			return false;
		}
		else
@@ -962,7 +962,7 @@ void R_BeamDraw( BEAM *pbeam, float frametime )
	if( !model || model->type != mod_sprite )
	{
		pbeam->flags &= ~FBEAM_ISACTIVE; // force to ignore
		pbeam->die = gpGlobals->time;
		pbeam->die = gp_cl->time;
		return;
	}

@@ -1020,7 +1020,7 @@ void R_BeamDraw( BEAM *pbeam, float frametime )
	if( pbeam->flags & ( FBEAM_FADEIN|FBEAM_FADEOUT ))
	{
		// update life cycle
		pbeam->t = pbeam->freq + ( pbeam->die - gpGlobals->time );
		pbeam->t = pbeam->freq + ( pbeam->die - gp_cl->time );
		if( pbeam->t != 0.0f ) pbeam->t = 1.0f - pbeam->freq / pbeam->t;
	}

@@ -1068,7 +1068,7 @@ void R_BeamDraw( BEAM *pbeam, float frametime )

	TriRenderMode( FBitSet( pbeam->flags, FBEAM_SOLID ) ? kRenderNormal : kRenderTransAdd );

	if( !TriSpriteTexture( model, (int)(pbeam->frame + pbeam->frameRate * gpGlobals->time) % pbeam->frameCount ))
	if( !TriSpriteTexture( model, (int)(pbeam->frame + pbeam->frameRate * gp_cl->time) % pbeam->frameCount ))
	{
		ClearBits( pbeam->flags, FBEAM_ISACTIVE );
		return;
@@ -1173,8 +1173,8 @@ static void R_BeamSetup( BEAM *pbeam, vec3_t start, vec3_t end, int modelIndex,
	VectorCopy( end, pbeam->target );
	VectorSubtract( end, start, pbeam->delta );

	pbeam->freq = speed * gpGlobals->time;
	pbeam->die = life + gpGlobals->time;
	pbeam->freq = speed * gp_cl->time;
	pbeam->die = life + gp_cl->time;
	pbeam->amplitude = amplitude;
	pbeam->brightness = brightness;
	pbeam->width = width;
@@ -1304,7 +1304,7 @@ void GAME_EXPORT CL_DrawBeams( int fTrans, BEAM *active_beams )
		if( !fTrans && !FBitSet( pBeam->flags, FBEAM_SOLID ))
			continue;

		R_BeamDraw( pBeam, gpGlobals->time -   gpGlobals->oldtime );
		R_BeamDraw( pBeam, gp_cl->time -   gp_cl->oldtime );
	}

	//pglShadeModel( GL_FLAT );
diff --git a/ref/soft/r_bsp.c b/ref/soft/r_bsp.c
index f12b70d8..c5a624cd 100644
--- a/ref/soft/r_bsp.c
+++ b/ref/soft/r_bsp.c
@@ -950,7 +950,7 @@ void R_RenderWorld (void)

	// auto cycle the world frame for texture animation
	RI.currententity = CL_GetEntityByIndex(0);
	//RI.currententity->frame = (int)(gpGlobals->time*2);
	//RI.currententity->frame = (int)(gp_cl->time*2);

	VectorCopy (RI.vieworg, tr.modelorg);
	RI.currentmodel = WORLDMODEL;
diff --git a/ref/soft/r_edge.c b/ref/soft/r_edge.c
index d83dd1e2..30631bd1 100644
--- a/ref/soft/r_edge.c
+++ b/ref/soft/r_edge.c
@@ -864,9 +864,9 @@ void D_CalcGradients (msurface_t *pface)
	{

		if(pface->flags & SURF_DRAWTURB)
			sadjust += 0x10000 * (-128 * ( (gpGlobals->time * 0.25f) - (int)(gpGlobals->time * 0.25f) ));
			sadjust += 0x10000 * (-128 * ( (gp_cl->time * 0.25f) - (int)(gp_cl->time * 0.25f) ));
		else
			sadjust += 0x10000 * (-128 * ( (gpGlobals->time * 0.77f) - (int)(gpGlobals->time * 0.77f) ));
			sadjust += 0x10000 * (-128 * ( (gp_cl->time * 0.77f) - (int)(gp_cl->time * 0.77f) ));
		bbextents = ((pface->extents[0] << 16) >> miplevel) - 1;
	}
	else
diff --git a/ref/soft/r_light.c b/ref/soft/r_light.c
index 41e8f740..92e17ffb 100644
--- a/ref/soft/r_light.c
+++ b/ref/soft/r_light.c
@@ -39,7 +39,7 @@ void GAME_EXPORT CL_RunLightStyles( void )
{
	int		i, k, flight, clight;
	float		l, lerpfrac, backlerp;
	float		frametime = (gpGlobals->time -   gpGlobals->oldtime);
	float		frametime = (gp_cl->time -   gp_cl->oldtime);
	float		scale;
	lightstyle_t	*ls;

@@ -163,7 +163,7 @@ void R_PushDlights( void )
	{
		l = gEngfuncs.GetDynamicLight( i );

		if( l->die < gpGlobals->time || !l->radius )
		if( l->die < gp_cl->time || !l->radius )
			continue;

		//if( GL_FrustumCullSphere( &RI.frustum, l->origin, l->radius, 15 ))
diff --git a/ref/soft/r_main.c b/ref/soft/r_main.c
index 8b768ac0..c3207af3 100644
--- a/ref/soft/r_main.c
+++ b/ref/soft/r_main.c
@@ -441,8 +441,8 @@ void R_SetupFrustum( void )

	/*if( RP_NORMALPASS() && ( ENGINE_GET_PARM( PARM_WATER_LEVEL ) >= 3 ) && ENGINE_GET_PARM( PARM_QUAKE_COMPATIBLE ))
	{
		RI.fov_x = atan( tan( DEG2RAD( RI.fov_x ) / 2 ) * ( 0.97 + sin( gpGlobals->time * 1.5 ) * 0.03 )) * 2 / (M_PI / 180.0);
		RI.fov_y = atan( tan( DEG2RAD( RI.fov_y ) / 2 ) * ( 1.03 - sin( gpGlobals->time * 1.5 ) * 0.03 )) * 2 / (M_PI / 180.0);
		RI.fov_x = atan( tan( DEG2RAD( RI.fov_x ) / 2 ) * ( 0.97 + sin( gp_cl->time * 1.5 ) * 0.03 )) * 2 / (M_PI / 180.0);
		RI.fov_y = atan( tan( DEG2RAD( RI.fov_y ) / 2 ) * ( 1.03 - sin( gp_cl->time * 1.5 ) * 0.03 )) * 2 / (M_PI / 180.0);
	}*/

	// build the transformation matrix for the given view angles
@@ -1171,7 +1171,7 @@ void R_DrawBEntitiesOnList (void)
			dlight_t *l = gEngfuncs.GetDynamicLight( k );
			vec3_t origin_l, oldorigin;

			if( l->die < gpGlobals->time || !l->radius )
			if( l->die < gp_cl->time || !l->radius )
				continue;

			VectorCopy( l->origin, oldorigin ); // save lightorigin
@@ -1326,7 +1326,7 @@ void R_DrawBrushModel(cl_entity_t *pent)
			dlight_t *l = gEngfuncs.GetDynamicLight( k );
			vec3_t origin_l, oldorigin;

			if( l->die < gpGlobals->time || !l->radius )
			if( l->die < gp_cl->time || !l->radius )
				continue;

			VectorCopy( l->origin, oldorigin ); // save lightorigin
@@ -1561,7 +1561,7 @@ void GAME_EXPORT R_RenderScene( void )

	// frametime is valid only for normal pass
	if( RP_NORMALPASS( ))
		tr.frametime = gpGlobals->time -   gpGlobals->oldtime;
		tr.frametime = gp_cl->time -   gp_cl->oldtime;
	else tr.frametime = 0.0;

	// begin a new frame
@@ -1984,16 +1984,16 @@ int CL_FxBlend( cl_entity_t *e )
	switch( e->curstate.renderfx )
	{
	case kRenderFxPulseSlowWide:
		blend = e->curstate.renderamt + 0x40 * sin( gpGlobals->time * 2 + offset );
		blend = e->curstate.renderamt + 0x40 * sin( gp_cl->time * 2 + offset );
		break;
	case kRenderFxPulseFastWide:
		blend = e->curstate.renderamt + 0x40 * sin( gpGlobals->time * 8 + offset );
		blend = e->curstate.renderamt + 0x40 * sin( gp_cl->time * 8 + offset );
		break;
	case kRenderFxPulseSlow:
		blend = e->curstate.renderamt + 0x10 * sin( gpGlobals->time * 2 + offset );
		blend = e->curstate.renderamt + 0x10 * sin( gp_cl->time * 2 + offset );
		break;
	case kRenderFxPulseFast:
		blend = e->curstate.renderamt + 0x10 * sin( gpGlobals->time * 8 + offset );
		blend = e->curstate.renderamt + 0x10 * sin( gp_cl->time * 8 + offset );
		break;
	case kRenderFxFadeSlow:
		if( RP_NORMALPASS( ))
@@ -2032,27 +2032,27 @@ int CL_FxBlend( cl_entity_t *e )
		blend = e->curstate.renderamt;
		break;
	case kRenderFxStrobeSlow:
		blend = 20 * sin( gpGlobals->time * 4 + offset );
		blend = 20 * sin( gp_cl->time * 4 + offset );
		if( blend < 0 ) blend = 0;
		else blend = e->curstate.renderamt;
		break;
	case kRenderFxStrobeFast:
		blend = 20 * sin( gpGlobals->time * 16 + offset );
		blend = 20 * sin( gp_cl->time * 16 + offset );
		if( blend < 0 ) blend = 0;
		else blend = e->curstate.renderamt;
		break;
	case kRenderFxStrobeFaster:
		blend = 20 * sin( gpGlobals->time * 36 + offset );
		blend = 20 * sin( gp_cl->time * 36 + offset );
		if( blend < 0 ) blend = 0;
		else blend = e->curstate.renderamt;
		break;
	case kRenderFxFlickerSlow:
		blend = 20 * (sin( gpGlobals->time * 2 ) + sin( gpGlobals->time * 17 + offset ));
		blend = 20 * (sin( gp_cl->time * 2 ) + sin( gp_cl->time * 17 + offset ));
		if( blend < 0 ) blend = 0;
		else blend = e->curstate.renderamt;
		break;
	case kRenderFxFlickerFast:
		blend = 20 * (sin( gpGlobals->time * 16 ) + sin( gpGlobals->time * 23 + offset ));
		blend = 20 * (sin( gp_cl->time * 16 ) + sin( gp_cl->time * 23 + offset ));
		if( blend < 0 ) blend = 0;
		else blend = e->curstate.renderamt;
		break;
diff --git a/ref/soft/r_part.c b/ref/soft/r_part.c
index 7f9e7fc2..12e9cdf6 100644
--- a/ref/soft/r_part.c
+++ b/ref/soft/r_part.c
@@ -86,7 +86,7 @@ void GAME_EXPORT CL_DrawParticles( double frametime, particle_t *cl_active_parti
			p->color = bound( 0, p->color, 255 );
			color = tr.palette[p->color];

			alpha = 255 * (p->die - gpGlobals->time) * 16.0f;
			alpha = 255 * (p->die - gp_cl->time) * 16.0f;
			if( alpha > 255 || p->type == pt_static )
				alpha = 255;

@@ -200,7 +200,7 @@ void GAME_EXPORT CL_DrawTracers( double frametime, particle_t *cl_active_tracers

	for( p = cl_active_tracers; p; p = p->next )
	{
		atten = (p->die - gpGlobals->time);
		atten = (p->die - gp_cl->time);
		if( atten > 0.1f ) atten = 0.1f;

		VectorScale( p->vel, ( p->ramp * atten ), delta );
@@ -268,7 +268,7 @@ void GAME_EXPORT CL_DrawTracers( double frametime, particle_t *cl_active_tracers
			p->vel[1] *= scale;
			p->vel[2] -= gravity;

			p->packedColor = 255 * (p->die - gpGlobals->time) * 2;
			p->packedColor = 255 * (p->die - gp_cl->time) * 2;
			if( p->packedColor > 255 ) p->packedColor = 255;
		}
		else if( p->type == pt_slowgrav )
diff --git a/ref/soft/r_scan.c b/ref/soft/r_scan.c
index d4e186f3..666c6748 100644
--- a/ref/soft/r_scan.c
+++ b/ref/soft/r_scan.c
@@ -100,7 +100,7 @@ void Turbulent8 (espan_t *pspan)
	float			sdivz, tdivz, zi, z, du, dv, spancountminus1;
	float			sdivz16stepu, tdivz16stepu, zi16stepu;

	r_turb_turb = sintable + ((int)(gpGlobals->time*SPEED)&(CYCLE-1));
	r_turb_turb = sintable + ((int)(gp_cl->time*SPEED)&(CYCLE-1));

	r_turb_sstep = 0;	// keep compiler happy
	r_turb_tstep = 0;	// ditto
@@ -239,7 +239,7 @@ void TurbulentZ8 (espan_t *pspan, int alpha1)
	if( alpha == 0 )
		return;

	r_turb_turb = sintable + ((int)(gpGlobals->time*SPEED)&(CYCLE-1));
	r_turb_turb = sintable + ((int)(gp_cl->time*SPEED)&(CYCLE-1));

	r_turb_sstep = 0;	// keep compiler happy
	r_turb_tstep = 0;	// ditto
diff --git a/ref/soft/r_sprite.c b/ref/soft/r_sprite.c
index e00205f0..1cf594d5 100644
--- a/ref/soft/r_sprite.c
+++ b/ref/soft/r_sprite.c
@@ -430,7 +430,7 @@ mspriteframe_t *R_GetSpriteFrame( const model_t *pModel, int frame, float yaw )

		// when loading in Mod_LoadSpriteGroup, we guaranteed all interval values
		// are positive, so we don't have to worry about division by zero
		targettime = gpGlobals->time - ((int)( gpGlobals->time / fullinterval )) * fullinterval;
		targettime = gp_cl->time - ((int)( gp_cl->time / fullinterval )) * fullinterval;

		for( i = 0; i < (numframes - 1); i++ )
		{
@@ -494,25 +494,25 @@ float R_GetSpriteFrameInterpolant( cl_entity_t *ent, mspriteframe_t **oldframe,
				// this can be happens when rendering switched between single and angled frames
				// or change model on replace delta-entity
				ent->latched.prevblending[0] = ent->latched.prevblending[1] = frame;
				ent->latched.sequencetime = gpGlobals->time;
				ent->latched.sequencetime = gp_cl->time;
				lerpFrac = 1.0f;
			}

			if( ent->latched.sequencetime < gpGlobals->time )
			if( ent->latched.sequencetime < gp_cl->time )
			{
				if( frame != ent->latched.prevblending[1] )
				{
					ent->latched.prevblending[0] = ent->latched.prevblending[1];
					ent->latched.prevblending[1] = frame;
					ent->latched.sequencetime = gpGlobals->time;
					ent->latched.sequencetime = gp_cl->time;
					lerpFrac = 0.0f;
				}
				else lerpFrac = (gpGlobals->time - ent->latched.sequencetime) * 11.0f;
				else lerpFrac = (gp_cl->time - ent->latched.sequencetime) * 11.0f;
			}
			else
			{
				ent->latched.prevblending[0] = ent->latched.prevblending[1] = frame;
				ent->latched.sequencetime = gpGlobals->time;
				ent->latched.sequencetime = gp_cl->time;
				lerpFrac = 0.0f;
			}
		}
@@ -526,7 +526,7 @@ float R_GetSpriteFrameInterpolant( cl_entity_t *ent, mspriteframe_t **oldframe,
		{
			// reset interpolation on change model
			ent->latched.prevblending[0] = ent->latched.prevblending[1] = frame;
			ent->latched.sequencetime = gpGlobals->time;
			ent->latched.sequencetime = gp_cl->time;
			lerpFrac = 0.0f;
		}

@@ -541,7 +541,7 @@ float R_GetSpriteFrameInterpolant( cl_entity_t *ent, mspriteframe_t **oldframe,
		numframes = pspritegroup->numframes;
		fullinterval = pintervals[numframes-1];
		jinterval = pintervals[1] - pintervals[0];
		time = gpGlobals->time;
		time = gp_cl->time;
		jtime = 0.0f;

		// when loading in Mod_LoadSpriteGroup, we guaranteed all interval values
@@ -580,25 +580,25 @@ float R_GetSpriteFrameInterpolant( cl_entity_t *ent, mspriteframe_t **oldframe,
				// this can be happens when rendering switched between single and angled frames
				// or change model on replace delta-entity
				ent->latched.prevblending[0] = ent->latched.prevblending[1] = frame;
				ent->latched.sequencetime = gpGlobals->time;
				ent->latched.sequencetime = gp_cl->time;
				lerpFrac = 1.0f;
			}

			if( ent->latched.sequencetime < gpGlobals->time )
			if( ent->latched.sequencetime < gp_cl->time )
			{
				if( frame != ent->latched.prevblending[1] )
				{
					ent->latched.prevblending[0] = ent->latched.prevblending[1];
					ent->latched.prevblending[1] = frame;
					ent->latched.sequencetime = gpGlobals->time;
					ent->latched.sequencetime = gp_cl->time;
					lerpFrac = 0.0f;
				}
				else lerpFrac = (gpGlobals->time - ent->latched.sequencetime) * ent->curstate.framerate;
				else lerpFrac = (gp_cl->time - ent->latched.sequencetime) * ent->curstate.framerate;
			}
			else
			{
				ent->latched.prevblending[0] = ent->latched.prevblending[1] = frame;
				ent->latched.sequencetime = gpGlobals->time;
				ent->latched.sequencetime = gp_cl->time;
				lerpFrac = 0.0f;
			}
		}
diff --git a/ref/soft/r_studio.c b/ref/soft/r_studio.c
index b82c1f5d..8683fd54 100644
--- a/ref/soft/r_studio.c
+++ b/ref/soft/r_studio.c
@@ -163,8 +163,8 @@ static void R_StudioSetupTimings( void )
	if( RI.drawWorld )
	{
		// synchronize with server time
		g_studio.time = gpGlobals->time;
		g_studio.frametime = gpGlobals->time -   gpGlobals->oldtime;
		g_studio.time = gp_cl->time;
		g_studio.frametime = gp_cl->time -   gp_cl->oldtime;
	}
	else
	{
@@ -413,8 +413,8 @@ pfnGetEngineTimes
static void pfnGetEngineTimes( int *framecount, double *current, double *old )
{
	if( framecount ) *framecount = tr.realframecount;
	if( current ) *current = gpGlobals->time;
	if( old ) *old =   gpGlobals->oldtime;
	if( current ) *current = gp_cl->time;
	if( old ) *old =   gp_cl->oldtime;
}

/*
@@ -2516,7 +2516,7 @@ static void R_StudioClientEvents( void )

		ClearBits( e->curstate.effects, EF_MUZZLEFLASH );
		VectorCopy( e->attachment[0], el->origin );
		el->die = gpGlobals->time + 0.05f;
		el->die = gp_cl->time + 0.05f;
		el->color.r = 255;
		el->color.g = 192;
		el->color.b = 64;
diff --git a/ref/soft/r_surf.c b/ref/soft/r_surf.c
index 41f2090c..3debf716 100644
--- a/ref/soft/r_surf.c
+++ b/ref/soft/r_surf.c
@@ -401,7 +401,7 @@ texture_t *R_TextureAnim( texture_t *b )
			speed = 10;
		else speed = 20;

		reletive = (int)(gpGlobals->time * speed) % base->anim_total;
		reletive = (int)(gp_cl->time * speed) % base->anim_total;
	}


@@ -455,7 +455,7 @@ texture_t *R_TextureAnimation( msurface_t *s )
			speed = 10;
		else speed = 20;

		reletive = (int)(gpGlobals->time * speed) % base->anim_total;
		reletive = (int)(gp_cl->time * speed) % base->anim_total;
	}

	count = 0;
-- 
2.34.1

[PATCH v3 14/19] ref: soft: convert to usage of ref_host_t to get real engine time

Details
Message ID
<20231228191946.3980135-15-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +3 -3
---
 ref/soft/r_studio.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/ref/soft/r_studio.c b/ref/soft/r_studio.c
index 8683fd54..04bf46f3 100644
--- a/ref/soft/r_studio.c
+++ b/ref/soft/r_studio.c
@@ -169,8 +169,8 @@ static void R_StudioSetupTimings( void )
	else
	{
		// menu stuff
		g_studio.time = gpGlobals->realtime;
		g_studio.frametime = gpGlobals->frametime;
		g_studio.time = gp_host->realtime;
		g_studio.frametime = gp_host->frametime;
	}
}

@@ -2532,7 +2532,7 @@ static void R_StudioClientEvents( void )
		return;

	end = R_StudioEstimateFrame( e, pseqdesc, g_studio.time );
	start = end - e->curstate.framerate * gpGlobals->frametime * pseqdesc->fps;
	start = end - e->curstate.framerate * gp_host->frametime * pseqdesc->fps;
	pevent = (mstudioevent_t *)((byte *)m_pStudioHeader + pseqdesc->eventindex);

	if( e->latched.sequencetime == e->curstate.animtime )
-- 
2.34.1

[PATCH v3 15/19] ref: soft: remove usage of PARM_MAX_CLIENTS

Details
Message ID
<20231228191946.3980135-16-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +3 -3
---
 ref/soft/r_studio.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/ref/soft/r_studio.c b/ref/soft/r_studio.c
index 04bf46f3..23729c08 100644
--- a/ref/soft/r_studio.c
+++ b/ref/soft/r_studio.c
@@ -3063,7 +3063,7 @@ static int R_StudioDrawPlayer( int flags, entity_state_t *pplayer )

	m_nPlayerIndex = pplayer->number - 1;

	if( m_nPlayerIndex < 0 || m_nPlayerIndex >= ENGINE_GET_PARM( PARM_MAX_CLIENTS ) )
	if( m_nPlayerIndex < 0 || m_nPlayerIndex >= gp_cl->maxclients )
		return 0;

	RI.currentmodel = R_StudioSetupPlayerModel( m_nPlayerIndex );
@@ -3145,7 +3145,7 @@ static int R_StudioDrawPlayer( int flags, entity_state_t *pplayer )
			RI.currententity->curstate.body = 255;
		}

		if( !( !gpGlobals->developer && ENGINE_GET_PARM( PARM_MAX_CLIENTS ) == 1 ) && ( RI.currentmodel == RI.currententity->model ))
		if( !( !gpGlobals->developer && gp_cl->maxclients == 1 ) && ( RI.currentmodel == RI.currententity->model ))
			RI.currententity->curstate.body = 1; // force helmet

		lighting.plightvec = dir;
@@ -3208,7 +3208,7 @@ static int R_StudioDrawModel( int flags )
		int		result;

		if( RI.currententity->curstate.renderamt <= 0 ||
			RI.currententity->curstate.renderamt > ENGINE_GET_PARM( PARM_MAX_CLIENTS ) )
			RI.currententity->curstate.renderamt > gp_cl->maxclients )
			return 0;

		// get copy of player
-- 
2.34.1

[PATCH v3 16/19] ref: soft: remove usage of PARM_VIEWENT_INDEX and PARM_PLAYER_INDEX

Details
Message ID
<20231228191946.3980135-17-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +3 -3
---
 ref/soft/r_beams.c | 2 +-
 ref/soft/r_local.h | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/ref/soft/r_beams.c b/ref/soft/r_beams.c
index 01224b18..b9517520 100644
--- a/ref/soft/r_beams.c
+++ b/ref/soft/r_beams.c
@@ -880,7 +880,7 @@ static qboolean R_BeamComputePoint( int beamEnt, vec3_t pt )
	// get attachment
	if( attach > 0 )
		VectorCopy( ent->attachment[attach - 1], pt );
	else if( ent->index == ENGINE_GET_PARM( PARM_PLAYER_INDEX ) )
	else if( ent->index == ( gp_cl->playernum + 1 ))
	{
		vec3_t simorg;
		gEngfuncs.GetPredictedOrigin( simorg );
diff --git a/ref/soft/r_local.h b/ref/soft/r_local.h
index 8eddc8f4..3a5dbcd2 100644
--- a/ref/soft/r_local.h
+++ b/ref/soft/r_local.h
@@ -78,10 +78,10 @@ extern poolhandle_t r_temppool;
#define RP_NONVIEWERREF	(RP_ENVVIEW)
#define R_ModelOpaque( rm )	( rm == kRenderNormal )
#define R_StaticEntity( ent )	( VectorIsNull( ent->origin ) && VectorIsNull( ent->angles ))
#define RP_LOCALCLIENT( e )	((e) != NULL && (e)->index == gEngfuncs.GetPlayerIndex() && e->player )
#define RP_LOCALCLIENT( e )	((e) != NULL && (e)->index == ( gp_cl->playernum + 1 ) && e->player )
#define RP_NORMALPASS()	( FBitSet( RI.params, RP_NONVIEWERREF ) == 0 )

#define CL_IsViewEntityLocalPlayer() ( ENGINE_GET_PARM( PARM_VIEWENT_INDEX ) == ENGINE_GET_PARM( PARM_PLAYER_INDEX ) )
#define CL_IsViewEntityLocalPlayer() ( gp_cl->viewentity == ( gp_cl->playernum + 1 ))

#define CULL_VISIBLE	0		// not culled
#define CULL_BACKSIDE	1		// backside of transparent wall
-- 
2.34.1

[PATCH v3 17/19] ref: soft: remove GetMoveVars() call

Details
Message ID
<20231228191946.3980135-18-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +1 -1
---
 ref/soft/r_studio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ref/soft/r_studio.c b/ref/soft/r_studio.c
index 23729c08..6ca2b707 100644
--- a/ref/soft/r_studio.c
+++ b/ref/soft/r_studio.c
@@ -1320,7 +1320,7 @@ R_StudioDynamicLight
*/
void R_StudioDynamicLight( cl_entity_t *ent, alight_t *plight )
{
	movevars_t	*mv = gEngfuncs.pfnGetMoveVars();
	movevars_t	*mv = tr.movevars;
	vec3_t		lightDir, vecSrc, vecEnd;
	vec3_t		origin, dist, finalLight;
	float		add, radius, total;
-- 
2.34.1

[PATCH v3 18/19] ref: soft: remove GetPredictedOrigin() call

Details
Message ID
<20231228191946.3980135-19-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +2 -6
---
 ref/soft/r_beams.c  | 6 +-----
 ref/soft/r_studio.c | 2 +-
 2 files changed, 2 insertions(+), 6 deletions(-)

diff --git a/ref/soft/r_beams.c b/ref/soft/r_beams.c
index b9517520..9a1e69a6 100644
--- a/ref/soft/r_beams.c
+++ b/ref/soft/r_beams.c
@@ -881,11 +881,7 @@ static qboolean R_BeamComputePoint( int beamEnt, vec3_t pt )
	if( attach > 0 )
		VectorCopy( ent->attachment[attach - 1], pt );
	else if( ent->index == ( gp_cl->playernum + 1 ))
	{
		vec3_t simorg;
		gEngfuncs.GetPredictedOrigin( simorg );
		VectorCopy( simorg, pt );
	}
		VectorCopy( gp_cl->simorg, pt );
	else VectorCopy( ent->origin, pt );

	return true;
diff --git a/ref/soft/r_studio.c b/ref/soft/r_studio.c
index 6ca2b707..7b70c663 100644
--- a/ref/soft/r_studio.c
+++ b/ref/soft/r_studio.c
@@ -3373,7 +3373,7 @@ void R_RunViewmodelEvents( void )

	R_StudioSetupTimings();

	gEngfuncs.GetPredictedOrigin( simorg );
	VectorCopy( gp_cl->simorg, simorg );
	for( i = 0; i < 4; i++ )
		VectorCopy( simorg, RI.currententity->attachment[i] );
	RI.currentmodel = RI.currententity->model;
-- 
2.34.1

[PATCH v3 19/19] engine: ref_api: draft RefAPI 6.

Details
Message ID
<20231228191946.3980135-20-a1ba.omarov@gmail.com>
In-Reply-To
<20231228191946.3980135-1-a1ba.omarov@gmail.com> (view parent)
DKIM signature
missing
Download raw message
Patch: +10 -76
Remove timings from ref_globals_t struct

Remove R_UpdateRefState accordingly.

Remove unused PARMs

Remove reduntant functions
---
 engine/client/cl_parse.c    |  3 ---
 engine/client/cl_parse_48.c |  3 ---
 engine/client/cl_render.c   | 10 ----------
 engine/client/ref_common.c  | 36 ------------------------------------
 engine/client/ref_common.h  |  1 -
 engine/ref_api.h            | 33 ++++++++++-----------------------
 6 files changed, 10 insertions(+), 76 deletions(-)

diff --git a/engine/client/cl_parse.c b/engine/client/cl_parse.c
index a82ea741..5d15caee 100644
--- a/engine/client/cl_parse.c
+++ b/engine/client/cl_parse.c
@@ -1642,9 +1642,6 @@ void CL_RegisterResources( sizebuf_t *msg )

			CL_ClearWorld ();

			// update the ref state.
			R_UpdateRefState ();

			// tell rendering system we have a new set of models.
			ref.dllFuncs.R_NewMap ();

diff --git a/engine/client/cl_parse_48.c b/engine/client/cl_parse_48.c
index 253994b7..fe79017c 100644
--- a/engine/client/cl_parse_48.c
+++ b/engine/client/cl_parse_48.c
@@ -660,9 +660,6 @@ void CL_LegacyPrecache_f( void )
	if( clgame.entities )
		clgame.entities->model = cl.worldmodel;

	// update the ref state.
	R_UpdateRefState ();

	// tell rendering system we have a new set of models.
	ref.dllFuncs.R_NewMap ();

diff --git a/engine/client/cl_render.c b/engine/client/cl_render.c
index 3cecabc6..bc9f1787 100644
--- a/engine/client/cl_render.c
+++ b/engine/client/cl_render.c
@@ -187,28 +187,18 @@ intptr_t CL_RenderGetParm( const int parm, const int arg, const qboolean checkRe
			return CL_IsThirdPerson();
		case PARM_QUAKE_COMPATIBLE:
			return Host_IsQuakeCompatible();
		case PARM_PLAYER_INDEX:
			return cl.playernum + 1;
		case PARM_VIEWENT_INDEX:
			return cl.viewentity;
		case PARM_CONNSTATE:
			return (int)cls.state;
		case PARM_PLAYING_DEMO:
			return cls.demoplayback;
		case PARM_WATER_LEVEL:
			return cl.local.waterlevel;
		case PARM_MAX_CLIENTS:
			return cl.maxclients;
		case PARM_LOCAL_HEALTH:
			return cl.local.health;
		case PARM_LOCAL_GAME:
			return Host_IsLocalGame();
		case PARM_NUMENTITIES:
			return pfnNumberOfEntities();
		case PARM_NUMMODELS:
			return cl.nummodels;
		case PARM_WORLD_VERSION:
			return world.version;
		case PARM_GET_CLIENT_PTR:
			return (intptr_t)&cl.time; // with the offset
		case PARM_GET_HOST_PTR:
diff --git a/engine/client/ref_common.c b/engine/client/ref_common.c
index 3ee9915f..f68519eb 100644
--- a/engine/client/ref_common.c
+++ b/engine/client/ref_common.c
@@ -67,18 +67,8 @@ void GAME_EXPORT GL_FreeImage( const char *name )
		 ref.dllFuncs.GL_FreeTexture( texnum );
}

void R_UpdateRefState( void )
{
	refState.time      = cl.time;
	refState.oldtime   = cl.oldtime;
	refState.realtime  = host.realtime;
	refState.frametime = host.frametime;
}

void GL_RenderFrame( const ref_viewpass_t *rvp )
{
	R_UpdateRefState();

	VectorCopy( rvp->vieworigin, refState.vieworg );
	VectorCopy( rvp->viewangles, refState.viewangles );

@@ -90,11 +80,6 @@ static intptr_t pfnEngineGetParm( int parm, int arg )
	return CL_RenderGetParm( parm, arg, false ); // prevent recursion
}

static world_static_t *pfnGetWorld( void )
{
	return &world;
}

static void pfnStudioEvent( const mstudioevent_t *event, const cl_entity_t *e )
{
	clgame.dllFuncs.pfnStudioEvent( event, e );
@@ -124,16 +109,6 @@ static void *pfnMod_Extradata( int type, model_t *m )
	return NULL;
}

static void pfnGetPredictedOrigin( vec3_t v )
{
	VectorCopy( cl.simorg, v );
}

static color24 *pfnCL_GetPaletteColor( void ) // clgame.palette[color]
{
	return clgame.palette;
}

static void pfnCL_GetScreenInfo( int *width, int *height ) // clgame.scrInfo, ptrs may be NULL
{
	if( width ) *width = clgame.scrInfo.iWidth;
@@ -232,11 +207,6 @@ static qboolean R_Init_Video_( const int type )
	return R_Init_Video( type );
}

static model_t **pfnGetModels( void )
{
	return cl.models;
}

static ref_api_t gEngfuncs =
{
	pfnEngineGetParm,
@@ -271,14 +241,12 @@ static ref_api_t gEngfuncs =
	Con_DrawString,
	CL_DrawCenterPrint,

	CL_GetViewModel,
	R_BeamGetEntity,
	CL_GetWaterEntity,
	CL_AddVisibleEntity,

	Mod_SampleSizeForFace,
	Mod_BoxVisible,
	pfnGetWorld,
	Mod_PointInLeaf,
	Mod_CreatePolygonsForHull,

@@ -295,7 +263,6 @@ static ref_api_t gEngfuncs =

	Mod_ForName,
	pfnMod_Extradata,
	pfnGetModels,

	CL_EntitySetRemapColors,
	CL_GetRemapInfoForEntity,
@@ -306,8 +273,6 @@ static ref_api_t gEngfuncs =
	COM_RandomFloat,
	COM_RandomLong,
	pfnRefGetScreenFade,
	pfnGetPredictedOrigin,
	pfnCL_GetPaletteColor,
	pfnCL_GetScreenInfo,
	pfnSetLocalLightLevel,
	Sys_CheckParm,
@@ -357,7 +322,6 @@ static ref_api_t gEngfuncs =
	PM_CL_TraceLine,
	CL_VisTraceLine,
	CL_TraceLine,
	pfnGetMoveVars,

	Image_AddCmdFlags,
	Image_SetForceFlags,
diff --git a/engine/client/ref_common.h b/engine/client/ref_common.h
index 7c7d9387..5b7803ac 100644
--- a/engine/client/ref_common.h
+++ b/engine/client/ref_common.h
@@ -52,7 +52,6 @@ extern convar_t gl_clear;

qboolean R_Init( void );
void R_Shutdown( void );
void R_UpdateRefState( void );

extern triangleapi_t gTriApi;

diff --git a/engine/ref_api.h b/engine/ref_api.h
index 5599584a..11c78a02 100644
--- a/engine/ref_api.h
+++ b/engine/ref_api.h
@@ -39,7 +39,10 @@ GNU General Public License for more details.
//    Removed previously unused calls
//    Simplified remapping calls
//    GetRefAPI is now expected to return REF_API_VERSION
#define REF_API_VERSION 5
// 6. Removed timing from ref_globals_t.
//    Renderers are supposed to migrate to ref_client_t/ref_host_t using PARM_GET_CLIENT_PTR and PARM_GET_HOST_PTR
//    Removed functions to get internal engine structions. Use PARM_GET_*_PTR instead.
#define REF_API_VERSION 6


#define TF_SKY		(TF_SKYSIDE|TF_NOMIPMAP)
@@ -95,11 +98,6 @@ typedef struct ref_globals_s
{
	qboolean developer;

	float time;    // cl.time
	float oldtime; // cl.oldtime
	double realtime; // host.realtime
	double frametime; // host.frametime

	// viewport width and height
	int      width;
	int      height;
@@ -272,23 +270,18 @@ typedef enum
	PARM_DEV_OVERVIEW      = -1,
	PARM_THIRDPERSON       = -2,
	PARM_QUAKE_COMPATIBLE  = -3,
	PARM_PLAYER_INDEX      = -4, // cl.playernum + 1
	PARM_VIEWENT_INDEX     = -5, // cl.viewentity
	PARM_GET_CLIENT_PTR    = -4, // ref_client_t
	PARM_GET_HOST_PTR      = -5, // ref_host_t
	PARM_CONNSTATE         = -6, // cls.state
	PARM_PLAYING_DEMO      = -7, // cls.demoplayback
	PARM_WATER_LEVEL       = -8, // cl.local.water_level
	PARM_MAX_CLIENTS       = -9, // cl.maxclients
	PARM_GET_WORLD_PTR     = -9, // world
	PARM_LOCAL_HEALTH      = -10, // cl.local.health
	PARM_LOCAL_GAME        = -11,
	PARM_NUMENTITIES       = -12, // local game only
	PARM_NUMMODELS         = -13, // cl.nummodels
	PARM_WORLD_VERSION     = -14,
	PARM_GET_CLIENT_PTR    = -15, // ref_client_t
	PARM_GET_HOST_PTR      = -16, // ref_host_t
	PARM_GET_WORLD_PTR     = -17, // world
	PARM_GET_MOVEVARS_PTR  = -18, // clgame.movevars
	PARM_GET_PALETTE_PTR   = -19, // clgame.palette
	PARM_GET_VIEWENT_PTR   = -20, // clgame.viewent
	PARM_GET_MOVEVARS_PTR  = -13, // clgame.movevars
	PARM_GET_PALETTE_PTR   = -14, // clgame.palette
	PARM_GET_VIEWENT_PTR   = -15, // clgame.viewent
} ref_parm_e;

typedef struct ref_api_s
@@ -331,7 +324,6 @@ typedef struct ref_api_s
	void	(*CL_DrawCenterPrint)( void );

	// entity management
	struct cl_entity_s *(*GetViewModel)( void );
	struct cl_entity_s *(*R_BeamGetEntity)( int index );
	struct cl_entity_s *(*CL_GetWaterEntity)( const vec3_t p );
	qboolean (*CL_AddVisibleEntity)( cl_entity_t *ent, int entityType );
@@ -339,7 +331,6 @@ typedef struct ref_api_s
	// brushes
	int (*Mod_SampleSizeForFace)( const struct msurface_s *surf );
	qboolean (*Mod_BoxVisible)( const vec3_t mins, const vec3_t maxs, const byte *visbits );
	struct world_static_s *(*GetWorld)( void ); // returns &world
	mleaf_t *(*Mod_PointInLeaf)( const vec3_t p, mnode_t *node );
	void (*Mod_CreatePolygonsForHull)( int hullnum );

@@ -359,7 +350,6 @@ typedef struct ref_api_s
	// model management
	model_t *(*Mod_ForName)( const char *name, qboolean crash, qboolean trackCRC );
	void *(*Mod_Extradata)( int type, model_t *model );
	struct model_s **(*pfnGetModels)( void );

	// remap
	qboolean (*CL_EntitySetRemapColors)( cl_entity_t *e, model_t *mod, int top, int bottom );
@@ -372,8 +362,6 @@ typedef struct ref_api_s
	float (*COM_RandomFloat)( float rmin, float rmax );
	int   (*COM_RandomLong)( int rmin, int rmax );
	struct screenfade_s *(*GetScreenFade)( void );
	void (*GetPredictedOrigin)( vec3_t v );
	color24 *(*CL_GetPaletteColor)( void ); // clgame.palette[color]
	void (*CL_GetScreenInfo)( int *width, int *height ); // clgame.scrInfo, ptrs may be NULL
	void (*SetLocalLightLevel)( int level ); // cl.local.light_level
	int (*Sys_CheckParm)( const char *flag );
@@ -434,7 +422,6 @@ typedef struct ref_api_s
	struct pmtrace_s *(*PM_TraceLine)( float *start, float *end, int flags, int usehull, int ignore_pe );
	struct pmtrace_s *(*EV_VisTraceLine )( float *start, float *end, int flags );
	struct pmtrace_s (*CL_TraceLine)( vec3_t start, vec3_t end, int flags );
	struct movevars_s *(*pfnGetMoveVars)( void );

	// imagelib
	void (*Image_AddCmdFlags)( uint flags ); // used to check if hardware dxt is supported
-- 
2.34.1
Reply to thread Export thread (mbox)