diff --git a/common/entity_state.h b/common/entity_state.h
index e56a0f3e..c9290130 100644
--- a/common/entity_state.h
+++ b/common/entity_state.h
@@ -59,6 +59,7 @@ typedef struct entity_state_s
vec3_t maxs;
vec3_t velocity; // for predicting & tracing
vec3_t avelocity; // for predicting & tracing
+ vec3_t oldorigin; // portal pvs, lerping state, etc
int contents; // for predicting & tracing on client
// model state
diff --git a/engine/client/cl_frame.c b/engine/client/cl_frame.c
index 6c33d25a..2eff9837 100644
--- a/engine/client/cl_frame.c
+++ b/engine/client/cl_frame.c
@@ -30,11 +30,11 @@ void CL_UpdateEntityFields( edict_t *ent )
ent->v.gaitsequence = ent->pvClientData->current.gaitsequence;
ent->v.body = ent->pvClientData->current.body;
ent->v.skin = ent->pvClientData->current.skin;
+ ent->v.effects = ent->pvClientData->current.effects;
VectorCopy( ent->pvClientData->current.rendercolor, ent->v.rendercolor );
VectorCopy( ent->pvClientData->current.velocity, ent->v.velocity );
VectorCopy( ent->pvClientData->current.origin, ent->v.origin );
VectorCopy( ent->pvClientData->current.angles, ent->v.angles );
- VectorCopy( ent->pvClientData->prev.origin, ent->v.oldorigin );
VectorCopy( ent->pvClientData->prev.angles, ent->v.oldangles );
VectorCopy( ent->pvClientData->current.mins, ent->v.mins );
VectorCopy( ent->pvClientData->current.maxs, ent->v.maxs );
@@ -52,6 +52,20 @@ void CL_UpdateEntityFields( edict_t *ent )
ent->v.flags = ent->pvClientData->current.flags;
if( ent->v.scale == 0.0f ) ent->v.scale = 1.0f;
+ switch( ent->pvClientData->current.ed_type )
+ {
+ case ED_PORTAL:
+ case ED_MOVER:
+ case ED_BSPBRUSH:
+ ByteToDir( ent->pvClientData->current.skin, ent->v.movedir );
+ VectorCopy( ent->pvClientData->current.oldorigin, ent->v.oldorigin );
+ break;
+ default:
+ VectorCopy( ent->pvClientData->prev.origin, ent->v.oldorigin );
+ VectorClear( ent->v.movedir );
+ break;
+ }
+
for( i = 0; i < MAXSTUDIOBLENDS; i++ )
ent->v.blending[i] = ent->pvClientData->current.blending[i];
for( i = 0; i < MAXSTUDIOCONTROLLERS; i++ )
@@ -421,7 +435,11 @@ void CL_AddPacketEntities( frame_t *frame )
ent = EDICT_NUM( s1->number );
if( ent->free ) continue;
- re->AddRefEntity( ent, s1->ed_type, cl.refdef.lerpfrac );
+ if( re->AddRefEntity( ent, s1->ed_type, cl.refdef.lerpfrac ))
+ {
+ if( s1->ed_type == ED_PORTAL && !VectorCompare( ent->v.origin, ent->v.oldorigin ))
+ cl.render_flags |= 16; // TEST
+ }
}
}
@@ -437,6 +455,8 @@ void CL_AddEntities( void )
if( cls.state != ca_active )
return;
+ cl.render_flags = 0;
+
CL_AddPacketEntities( &cl.frame );
clgame.dllFuncs.pfnCreateEntities();
diff --git a/engine/client/cl_view.c b/engine/client/cl_view.c
index e92663d4..d841a2f7 100644
--- a/engine/client/cl_view.c
+++ b/engine/client/cl_view.c
@@ -122,7 +122,7 @@ void V_SetupRefDef( void )
cl.refdef.paused = cl_paused->integer;
cl.refdef.predicting = cl_predict->integer;
cl.refdef.waterlevel = clent->v.waterlevel;
- cl.refdef.rdflags = 0;
+ cl.refdef.rdflags = cl.render_flags | 4; // bloom
cl.refdef.nextView = 0;
// calculate the origin
diff --git a/engine/client/client.h b/engine/client/client.h
index e4ccb71c..ef5bac9d 100644
--- a/engine/client/client.h
+++ b/engine/client/client.h
@@ -110,6 +110,7 @@ typedef struct
double time; // this is the time value that the client
double oldtime; // cl.oldtime
// is rendering at. always <= cls.realtime
+ int render_flags; // clearing at end of frame
ref_params_t refdef; // shared refdef
edict_t viewent; // viewmodel
client_data_t data; // hud data
diff --git a/engine/common/net_msg.c b/engine/common/net_msg.c
index 19afd1eb..2cd7c874 100644
--- a/engine/common/net_msg.c
+++ b/engine/common/net_msg.c
@@ -86,6 +86,9 @@ static net_field_t ent_fields[] =
{ ES_FIELD(rendercolor[0]), NET_COLOR, false }, // stateflags_t #2 (4 bytes)
{ ES_FIELD(rendercolor[1]), NET_COLOR, false },
{ ES_FIELD(rendercolor[2]), NET_COLOR, false },
+{ ES_FIELD(oldorigin[0]), NET_FLOAT, true },
+{ ES_FIELD(oldorigin[1]), NET_FLOAT, true },
+{ ES_FIELD(oldorigin[2]), NET_FLOAT, true },
{ ES_FIELD(rendermode), NET_BYTE, false }, // render mode (legacy stuff)
{ ES_FIELD(delta_angles[0]), NET_ANGLE, false },
{ ES_FIELD(delta_angles[1]), NET_ANGLE, false },
diff --git a/engine/engine.plg b/engine/engine.plg
index 3d0f4030..395d4f23 100644
--- a/engine/engine.plg
+++ b/engine/engine.plg
@@ -6,13 +6,13 @@
--------------------Configuration: engine - Win32 Debug--------------------
Command Lines
-Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP9C5.tmp" with contents
+Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP652.tmp" with contents
[
/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "./" /I "common" /I "server" /I "client" /I "../public" /I "../common" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\engine\!debug/" /Fo"..\temp\engine\!debug/" /Fd"..\temp\engine\!debug/" /FD /c
-"D:\Xash3D\src_main\engine\server\sv_game.c"
+"D:\Xash3D\src_main\engine\client\cl_view.c"
]
-Creating command line "cl.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP9C5.tmp"
-Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP9C6.tmp" with contents
+Creating command line "cl.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP652.tmp"
+Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP653.tmp" with contents
[
user32.lib msvcrtd.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"..\temp\engine\!debug/engine.pdb" /debug /machine:I386 /nodefaultlib:"msvcrt.lib" /out:"..\temp\engine\!debug/engine.dll" /implib:"..\temp\engine\!debug/engine.lib" /pdbtype:sept
"\Xash3D\src_main\temp\engine\!debug\cinematic.obj"
@@ -51,17 +51,16 @@ user32.lib msvcrtd.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"..
"\Xash3D\src_main\temp\engine\!debug\sv_save.obj"
"\Xash3D\src_main\temp\engine\!debug\sv_world.obj"
]
-Creating command line "link.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP9C6.tmp"
-Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP9C7.bat" with contents
+Creating command line "link.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP653.tmp"
+Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP654.bat" with contents
[
@echo off
copy \Xash3D\src_main\temp\engine\!debug\engine.dll "D:\Xash3D\bin\engine.dll"
]
-Creating command line "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP9C7.bat"
+Creating command line "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP654.bat"
Compiling...
-sv_game.c
+cl_view.c
Linking...
- Creating library ..\temp\engine\!debug/engine.lib and object ..\temp\engine\!debug/engine.exp
Output Window
Performing Custom Build Step on \Xash3D\src_main\temp\engine\!debug\engine.dll
‘ª®¯¨à®¢ ® ä ©«®¢: 1.
diff --git a/engine/server/sv_frame.c b/engine/server/sv_frame.c
index 2b651098..5ad265ad 100644
--- a/engine/server/sv_frame.c
+++ b/engine/server/sv_frame.c
@@ -53,6 +53,15 @@ void SV_UpdateEntityState( edict_t *ent, bool baseline )
ent->pvServerData->s.classname = SV_ClassIndex( STRING( ent->v.classname ));
svgame.dllFuncs.pfnUpdateEntityState( &ent->pvServerData->s, ent, baseline );
+
+ switch( ent->pvServerData->s.ed_type )
+ {
+ case ED_MOVER:
+ case ED_BSPBRUSH:
+ case ED_PORTAL:
+ ent->pvServerData->s.skin = DirToByte( ent->v.movedir );
+ break;
+ }
}
/*
@@ -132,7 +141,8 @@ void SV_EmitPacketEntities( client_frame_t *from, client_frame_t *to, sizebuf_t
// in any bytes being emited if the entity has not changed at all
// note that players are always 'newentities', this updates their oldorigin always
// and prevents warping
- MSG_WriteDeltaEntity( oldent, newent, msg, false, (newent->ed_type == ED_CLIENT));
+ MSG_WriteDeltaEntity( oldent, newent, msg, false,
+ (newent->ed_type == ED_CLIENT) || (newent->ed_type == ED_PORTAL));
oldindex++;
newindex++;
continue;
@@ -238,7 +248,7 @@ static void SV_AddEntitiesToPacket( vec3_t origin, client_frame_t *frame, sv_ent
}
}
- if( svent->s.ed_type == ED_AMBIENT )
+ if( svent->s.ed_type == ED_AMBIENT || svent->s.ed_type == ED_PORTAL )
bitvector = clientphs;
else bitvector = clientpvs;
@@ -291,7 +301,11 @@ static void SV_AddEntitiesToPacket( vec3_t origin, client_frame_t *frame, sv_ent
// if its a portal entity, add everything visible from its camera position
if( svent->s.ed_type == ED_PORTAL || svent->s.ed_type == ED_SKYPORTAL )
- SV_AddEntitiesToPacket( svent->s.origin, frame, ents, true );
+ {
+ // don't merge pvs for mirrors
+ if( !VectorCompare( svent->s.origin, svent->s.oldorigin ))
+ SV_AddEntitiesToPacket( svent->s.oldorigin, frame, ents, true );
+ }
}
}
diff --git a/engine/server/sv_game.c b/engine/server/sv_game.c
index 4ca86838..d4f72d3c 100644
--- a/engine/server/sv_game.c
+++ b/engine/server/sv_game.c
@@ -1065,6 +1065,8 @@ edict_t* pfnFindEntityByString( edict_t *pStartEdict, const char *pszField, cons
f = EOFS( globalname );
else if( !com.strcmp( pszField, "targetname" ))
f = EOFS( targetname );
+ else if( !com.strcmp( pszField, "target" ))
+ f = EOFS( target );
else if( !com.strcmp( pszField, "netname" ))
f = EOFS( netname );
else if( !com.strcmp( pszField, "model" ))
diff --git a/engine/server/sv_phys.c b/engine/server/sv_phys.c
index aaaf2b1d..e31601c3 100644
--- a/engine/server/sv_phys.c
+++ b/engine/server/sv_phys.c
@@ -1746,7 +1746,8 @@ void SV_Physics( void )
ent = EDICT_NUM( i );
if( ent->free ) continue;
- VectorCopy( ent->v.origin, ent->v.oldorigin );
+ if( ent->pvServerData->s.ed_type != ED_PORTAL )
+ VectorCopy( ent->v.origin, ent->v.oldorigin );
if(i <= Host_MaxClients());// SV_Physics_ClientEntity( ent );
else if( !sv_playersonly->integer ) SV_Physics_Entity( ent );
}
diff --git a/engine/server/sv_world.c b/engine/server/sv_world.c
index edf9b31b..71518cd1 100644
--- a/engine/server/sv_world.c
+++ b/engine/server/sv_world.c
@@ -305,7 +305,8 @@ void SV_LinkEdict( edict_t *ent )
}
// if first time, make sure old_origin is valid
- if( !sv_ent->linkcount ) VectorCopy( ent->v.origin, ent->v.oldorigin );
+ if( !sv_ent->linkcount && sv_ent->s.ed_type != ED_PORTAL )
+ VectorCopy( ent->v.origin, ent->v.oldorigin );
ent->pvServerData->linkcount++;
ent->pvServerData->s.ed_flags |= ESF_LINKEDICT; // change edict state on a client too...
diff --git a/launch/launch.plg b/launch/launch.plg
deleted file mode 100644
index 6c190dd0..00000000
--- a/launch/launch.plg
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-Build Log
-
---------------------Configuration: launch - Win32 Release--------------------
-
-Command Lines
-Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAAC.tmp" with contents
-[
-/nologo /MD /W3 /GX /O2 /I "./" /I "imagelib" /I "../public" /I "../common" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fo"..\temp\launch\!release/" /Fd"..\temp\launch\!release/" /FD /c
-"D:\Xash3D\src_main\launch\imagelib\img_utils.c"
-]
-Creating command line "cl.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAAC.tmp"
-Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAAD.tmp" with contents
-[
-zlib.lib png.lib user32.lib gdi32.lib advapi32.lib winmm.lib /nologo /dll /pdb:none /machine:I386 /nodefaultlib:"libc.lib" /out:"..\temp\launch\!release/launch.dll" /implib:"..\temp\launch\!release/launch.lib" /libpath:"./imagelib" /opt:nowin98
-"\Xash3D\src_main\temp\launch\!release\cmd.obj"
-"\Xash3D\src_main\temp\launch\!release\console.obj"
-"\Xash3D\src_main\temp\launch\!release\cpuinfo.obj"
-"\Xash3D\src_main\temp\launch\!release\crclib.obj"
-"\Xash3D\src_main\temp\launch\!release\cvar.obj"
-"\Xash3D\src_main\temp\launch\!release\export.obj"
-"\Xash3D\src_main\temp\launch\!release\filesystem.obj"
-"\Xash3D\src_main\temp\launch\!release\img_bmp.obj"
-"\Xash3D\src_main\temp\launch\!release\img_dds.obj"
-"\Xash3D\src_main\temp\launch\!release\img_jpg.obj"
-"\Xash3D\src_main\temp\launch\!release\img_main.obj"
-"\Xash3D\src_main\temp\launch\!release\img_pcx.obj"
-"\Xash3D\src_main\temp\launch\!release\img_png.obj"
-"\Xash3D\src_main\temp\launch\!release\img_tga.obj"
-"\Xash3D\src_main\temp\launch\!release\img_utils.obj"
-"\Xash3D\src_main\temp\launch\!release\img_vtf.obj"
-"\Xash3D\src_main\temp\launch\!release\img_wad.obj"
-"\Xash3D\src_main\temp\launch\!release\memlib.obj"
-"\Xash3D\src_main\temp\launch\!release\network.obj"
-"\Xash3D\src_main\temp\launch\!release\parselib.obj"
-"\Xash3D\src_main\temp\launch\!release\patch.obj"
-"\Xash3D\src_main\temp\launch\!release\stdlib.obj"
-"\Xash3D\src_main\temp\launch\!release\system.obj"
-"\Xash3D\src_main\temp\launch\!release\utils.obj"
-]
-Creating command line "link.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAAD.tmp"
-Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAAE.bat" with contents
-[
-@echo off
-copy \Xash3D\src_main\temp\launch\!release\launch.dll "D:\Xash3D\bin\launch.dll"
-]
-Creating command line "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAAE.bat"
-Compiling...
-img_utils.c
-Linking...
- Creating library ..\temp\launch\!release/launch.lib and object ..\temp\launch\!release/launch.exp
-Output Window
-Performing Custom Build Step on \Xash3D\src_main\temp\launch\!release\launch.dll
-‘ª®¯¨à®¢ ® ä ©«®¢: 1.
-
-
-
-Results
-launch.dll - 0 error(s), 0 warning(s)
-
-
-
diff --git a/launch/xash/xash.ico b/launch/xash/xash.ico
index ec3a7f52..a7f4f0a3 100644
Binary files a/launch/xash/xash.ico and b/launch/xash/xash.ico differ
diff --git a/launch/xash/xash1.ico b/launch/xash/xash1.ico
new file mode 100644
index 00000000..ec3a7f52
Binary files /dev/null and b/launch/xash/xash1.ico differ
diff --git a/physic/cm_collision.c b/physic/cm_collision.c
index d67ba7fc..1b5d9fa0 100644
--- a/physic/cm_collision.c
+++ b/physic/cm_collision.c
@@ -1733,4 +1733,23 @@ void CM_CollisionDrawForEachBrush( void )
ph.debug_line( color, draw->numpoints, (float *)&draw->points->v[0], (int *)&draw->elements );
}
}
+}
+
+void CM_CollisionDrawForEachSurface( void )
+{
+ csurface_t *draw;
+ int i, j, color;
+
+ for( i = 0; i < cms.numbmodels; i++ )
+ {
+ for( j = 0; j < cms.bmodels[i].numfaces; j++ )
+ {
+ draw = &cm.surfaces[cms.bmodels[i].firstface + j];
+ if( !draw || !draw->numtriangles ) continue;
+
+ if( i == 0 ) color = PackRGBA( 1, 0.7f, 0, 1 ); // world
+ else color = PackRGBA( 1, 0.1f, 0.1f, 1 );
+ ph.debug_line( color, draw->numvertices, (float *)&draw->vertices[0], (int *)&draw->indices );
+ }
+ }
}
\ No newline at end of file
diff --git a/physic/cm_debug.c b/physic/cm_debug.c
index c163b038..513812de 100644
--- a/physic/cm_debug.c
+++ b/physic/cm_debug.c
@@ -33,5 +33,6 @@ void DebugShowCollision( cmdraw_t callback )
if( cm_debugdraw->integer == 2 )
{
CM_CollisionDrawForEachBrush();
+ CM_CollisionDrawForEachSurface();
}
}
\ No newline at end of file
diff --git a/physic/cm_local.h b/physic/cm_local.h
index dd130a6e..862b1fa4 100644
--- a/physic/cm_local.h
+++ b/physic/cm_local.h
@@ -251,7 +251,7 @@ typedef struct clipmap_static_s
collide_info_t touch_info; // global info about two touching objects
bool loaded; // map is loaded?
bool tree_build; // phys tree is created ?
- vfile_t *world_tree; // pre-calcualated collision tree (worldmodel only)
+ file_t *world_tree; // pre-calcualated collision tree (worldmodel only)
trace_t trace; // contains result of last trace
int checkcount;
@@ -388,6 +388,7 @@ void CM_CollisionClipToWorld( trace_t *trace, cmodel_t *model, const vec3_t star
// updates fraction, endpos, plane and surface info if new fraction is shorter
void CM_CollisionCombineTraces( trace_t *cliptrace, const trace_t *trace, edict_t *touch, bool is_bmodel );
void CM_CollisionDrawForEachBrush( void );
+void CM_CollisionDrawForEachSurface( void );
void CM_CollisionInit( void );
#endif//CM_LOCAL_H
\ No newline at end of file
diff --git a/physic/cm_model.c b/physic/cm_model.c
index d7cdd308..c82cd872 100644
--- a/physic/cm_model.c
+++ b/physic/cm_model.c
@@ -417,7 +417,7 @@ void BSP_LoadLeafs( lump_t *l )
out->parent = NULL;
out->plane = NULL;
out->cluster = LittleLong( in->cluster );
- out->area = LittleLong( in->area );
+ out->area = LittleLong( in->area ) + 1;
if( out->cluster >= cm.numclusters )
cm.numclusters = out->cluster + 1;
@@ -662,11 +662,7 @@ void IBSP_LoadSurfaces( lump_t *l )
continue;
}
originalvertex3f = (float *)(cm.vertices + in->firstvert);
-
- // setup a bounding box
- VectorCopy( in->mins, out->mins );
- VectorCopy( in->maxs, out->maxs );
-
+
// convert patch to MST_TRISURF
cxtess = CM_PatchTesselationOnX( patchsize[0], patchsize[1], 3, originalvertex3f, 15.0f );
cytess = CM_PatchTesselationOnY( patchsize[0], patchsize[1], 3, originalvertex3f, 15.0f );
@@ -688,11 +684,15 @@ void IBSP_LoadSurfaces( lump_t *l )
patchtess[patchtesscount].lodgroup[5] = in->maxs[2];
patchtess[patchtesscount].originalvertex3f = originalvertex3f;
patchtesscount++;
+ break;
case MST_FLARE:
// ignore collisions at all
continue;
}
+ // setup a bounding box
+ VectorCopy( in->mins, out->mins );
+ VectorCopy( in->maxs, out->maxs );
out->firstvertex = LittleLong( in->firstvert );
out->numvertices = LittleLong( in->numverts );
}
@@ -810,10 +810,6 @@ void RBSP_LoadSurfaces( lump_t *l )
}
originalvertex3f = (float *)(cm.vertices + in->firstvert);
- // setup a bounding box
- VectorCopy( in->mins, out->mins );
- VectorCopy( in->maxs, out->maxs );
-
// convert patch to MST_TRISURF
cxtess = CM_PatchTesselationOnX( patchsize[0], patchsize[1], 3, originalvertex3f, 15.0f );
cytess = CM_PatchTesselationOnY( patchsize[0], patchsize[1], 3, originalvertex3f, 15.0f );
@@ -840,6 +836,9 @@ void RBSP_LoadSurfaces( lump_t *l )
continue;
}
+ // setup a bounding box
+ VectorCopy( in->mins, out->mins );
+ VectorCopy( in->maxs, out->maxs );
out->firstvertex = LittleLong( in->firstvert );
out->numvertices = LittleLong( in->numverts );
}
@@ -923,9 +922,27 @@ void RBSP_LoadSurfaces( lump_t *l )
BSP_LoadCollision
=================
*/
-void BSP_LoadCollision( lump_t *l )
+void BSP_LoadCollision( void )
{
- cms.world_tree = VFS_Create( cms.base + l->fileofs, l->filelen );
+ string clipfile;
+ int map_checksum;
+
+ com.strncpy( clipfile, cm.name, MAX_STRING );
+ FS_StripExtension( clipfile );
+ FS_DefaultExtension( clipfile, ".cm" );
+
+ cms.world_tree = FS_Open( clipfile, "rb" );
+
+ if( !cms.world_tree ) return;
+ FS_Read( cms.world_tree, &map_checksum, sizeof( int ));
+
+ if( map_checksum != cm.checksum )
+ {
+ // failed checksum, needs to rebuild
+ MsgDev( D_NOTE, "BSP_LoadCollision: map %s changed, rebuild collision tree\n", cm.name );
+ FS_Close( cms.world_tree );
+ cms.world_tree = NULL;
+ }
}
static void BSP_RecursiveFindNumLeafs( cnode_t *node )
@@ -1043,9 +1060,9 @@ void BSP_EndBuildTree( void )
if( app_name == HOST_BSPLIB ) Msg( " done\n" );
}
-static void BSP_LoadTree( vfile_t* handle, void* buffer, size_t size )
+static void BSP_LoadTree( file_t* handle, void* buffer, size_t size )
{
- VFS_Read( handle, buffer, size );
+ FS_Read( handle, buffer, size );
}
void CM_LoadBSP( const void *buffer )
@@ -1060,7 +1077,7 @@ void CM_LoadBSP( const void *buffer )
BSP_LoadShaders( &header.lumps[LUMP_SHADERS] );
IBSP_LoadSurfaces( &header.lumps[LUMP_SURFACES] );
BSP_LoadModels( &header.lumps[LUMP_MODELS] );
- BSP_LoadCollision( &header.lumps[LUMP_COLLISION] );
+ BSP_LoadCollision();
cms.loaded = true;
}
@@ -1078,9 +1095,16 @@ void CM_FreeBSP( void )
}
}
+static void CM_AddCollision( file_t *f, const void* buffer, size_t size )
+{
+ FS_Write( f, buffer, size );
+}
+
void CM_MakeCollisionTree( void )
{
int i, world = 0; // world index
+ string clipfile;
+ file_t *file;
if( !cms.loaded ) Host_Error( "CM_MakeCollisionTree: map not loaded\n" );
if( cms.collision ) return; // already generated
@@ -1094,6 +1118,17 @@ void CM_MakeCollisionTree( void )
else for( i = 0; i < cms.bmodels[world].numfaces; i++ ) BSP_AddCollisionFace( i );
BSP_EndBuildTree();
+
+ com.strncpy( clipfile, cm.name, MAX_STRING );
+ FS_StripExtension( clipfile );
+ FS_DefaultExtension( clipfile, ".cm" );
+
+ file = FS_Open( clipfile, "wb" );
+ if( !file ) return;
+
+ FS_Write( file, &cm.checksum, sizeof( int )); // save current checksum
+ NewtonTreeCollisionSerialize( cms.collision, CM_AddCollision, file );
+ FS_Close( file );
}
void CM_SaveCollisionTree( file_t *f, cmsave_t callback )
@@ -1106,7 +1141,7 @@ void CM_LoadCollisionTree( void )
{
if( !cms.world_tree ) return;
cms.collision = NewtonCreateTreeCollisionFromSerialization( gWorld, NULL, BSP_LoadTree, cms.world_tree );
- VFS_Close( cms.world_tree );
+ FS_Close( cms.world_tree );
}
void CM_LoadWorld( void )
@@ -1232,6 +1267,8 @@ cmodel_t *CM_BeginRegistration( const char *name, bool clientload, uint *checksu
break;
}
+ com.strncpy( cm.name, name, MAX_STRING );
+
// load into heap
BSP_LoadEntityString( &hdr->lumps[LUMP_ENTITIES] );
BSP_LoadShaders( &hdr->lumps[LUMP_SHADERS] );
@@ -1255,7 +1292,7 @@ cmodel_t *CM_BeginRegistration( const char *name, bool clientload, uint *checksu
BSP_LoadNodes( &hdr->lumps[LUMP_NODES] );
BSP_LoadVisibility( &hdr->lumps[LUMP_VISIBILITY] );
BSP_LoadModels( &hdr->lumps[LUMP_MODELS] );
-// BSP_LoadCollision( &hdr->lumps[LUMP_COLLISION] );
+ BSP_LoadCollision();
cms.loaded = true;
BSP_RecursiveFindNumLeafs( cm.nodes );
@@ -1264,8 +1301,6 @@ cmodel_t *CM_BeginRegistration( const char *name, bool clientload, uint *checksu
CM_LoadWorld(); // load physics collision
Mem_Free( buf ); // release map buffer
- com.strncpy( cm.name, name, MAX_STRING );
-
Mem_Set( cm.areaportals, 0, sizeof( cm.areaportals ));
CM_FloodAreaConnections();
CM_CalcPHS ();
diff --git a/physic/cm_test.c b/physic/cm_test.c
index 981a3595..5ab6c5dd 100644
--- a/physic/cm_test.c
+++ b/physic/cm_test.c
@@ -136,7 +136,7 @@ int CM_BoxLeafnums( const vec3_t mins, const vec3_t maxs, int *list, int listsiz
ll.count = 0;
ll.maxcount = listsize;
ll.list = list;
- ll.lastleaf = 0;
+ ll.lastleaf = -1;
ll.overflowed = false;
CM_BoxLeafnums_r( &ll, cm.nodes );
diff --git a/physic/physic.plg b/physic/physic.plg
index 3835ce2a..40da9272 100644
--- a/physic/physic.plg
+++ b/physic/physic.plg
@@ -6,6 +6,42 @@
--------------------Configuration: physic - Win32 Debug--------------------
Command Lines
+Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP551.tmp" with contents
+[
+/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../public" /I "../common" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\physic\!debug/" /Fo"..\temp\physic\!debug/" /Fd"..\temp\physic\!debug/" /FD /GZ /c
+"D:\Xash3D\src_main\physic\cm_portals.c"
+]
+Creating command line "cl.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP551.tmp"
+Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP552.tmp" with contents
+[
+user32.lib msvcrtd.lib newton.lib opengl32.lib /nologo /dll /incremental:yes /pdb:"..\temp\physic\!debug/physic.pdb" /debug /machine:I386 /nodefaultlib:"libc.lib" /out:"..\temp\physic\!debug/physic.dll" /implib:"..\temp\physic\!debug/physic.lib" /pdbtype:sept
+"\Xash3D\src_main\temp\physic\!debug\cm_callback.obj"
+"\Xash3D\src_main\temp\physic\!debug\cm_collision.obj"
+"\Xash3D\src_main\temp\physic\!debug\cm_debug.obj"
+"\Xash3D\src_main\temp\physic\!debug\cm_materials.obj"
+"\Xash3D\src_main\temp\physic\!debug\cm_model.obj"
+"\Xash3D\src_main\temp\physic\!debug\cm_pmove.obj"
+"\Xash3D\src_main\temp\physic\!debug\cm_polygon.obj"
+"\Xash3D\src_main\temp\physic\!debug\cm_portals.obj"
+"\Xash3D\src_main\temp\physic\!debug\cm_rigidbody.obj"
+"\Xash3D\src_main\temp\physic\!debug\cm_test.obj"
+"\Xash3D\src_main\temp\physic\!debug\cm_trace.obj"
+"\Xash3D\src_main\temp\physic\!debug\cm_utils.obj"
+"\Xash3D\src_main\temp\physic\!debug\physic.obj"
+]
+Creating command line "link.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP552.tmp"
+Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP553.bat" with contents
+[
+@echo off
+copy \Xash3D\src_main\temp\physic\!debug\physic.dll "D:\Xash3D\bin\physic.dll"
+]
+Creating command line "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP553.bat"
+Compiling...
+cm_portals.c
+Linking...
+Output Window
+Performing Custom Build Step on \Xash3D\src_main\temp\physic\!debug\physic.dll
+‘ª®¯¨à®¢ ® ä ©«®¢: 1.
diff --git a/public/anorms.h b/public/anorms.h
new file mode 100644
index 00000000..c90f8d6f
--- /dev/null
+++ b/public/anorms.h
@@ -0,0 +1,177 @@
+/***
+*
+* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
+*
+* This product contains software technology licensed from Id
+* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
+* All Rights Reserved.
+*
+* Use, distribution, and modification of this source code and/or resulting
+* object code is restricted to non-commercial enhancements to products from
+* Valve LLC. All other use, distribution, or modification is prohibited
+* without written permission from Valve LLC.
+*
+****/
+
+{-0.525731, 0.000000, 0.850651},
+{-0.442863, 0.238856, 0.864188},
+{-0.295242, 0.000000, 0.955423},
+{-0.309017, 0.500000, 0.809017},
+{-0.162460, 0.262866, 0.951056},
+{0.000000, 0.000000, 1.000000},
+{0.000000, 0.850651, 0.525731},
+{-0.147621, 0.716567, 0.681718},
+{0.147621, 0.716567, 0.681718},
+{0.000000, 0.525731, 0.850651},
+{0.309017, 0.500000, 0.809017},
+{0.525731, 0.000000, 0.850651},
+{0.295242, 0.000000, 0.955423},
+{0.442863, 0.238856, 0.864188},
+{0.162460, 0.262866, 0.951056},
+{-0.681718, 0.147621, 0.716567},
+{-0.809017, 0.309017, 0.500000},
+{-0.587785, 0.425325, 0.688191},
+{-0.850651, 0.525731, 0.000000},
+{-0.864188, 0.442863, 0.238856},
+{-0.716567, 0.681718, 0.147621},
+{-0.688191, 0.587785, 0.425325},
+{-0.500000, 0.809017, 0.309017},
+{-0.238856, 0.864188, 0.442863},
+{-0.425325, 0.688191, 0.587785},
+{-0.716567, 0.681718, -0.147621},
+{-0.500000, 0.809017, -0.309017},
+{-0.525731, 0.850651, 0.000000},
+{0.000000, 0.850651, -0.525731},
+{-0.238856, 0.864188, -0.442863},
+{0.000000, 0.955423, -0.295242},
+{-0.262866, 0.951056, -0.162460},
+{0.000000, 1.000000, 0.000000},
+{0.000000, 0.955423, 0.295242},
+{-0.262866, 0.951056, 0.162460},
+{0.238856, 0.864188, 0.442863},
+{0.262866, 0.951056, 0.162460},
+{0.500000, 0.809017, 0.309017},
+{0.238856, 0.864188, -0.442863},
+{0.262866, 0.951056, -0.162460},
+{0.500000, 0.809017, -0.309017},
+{0.850651, 0.525731, 0.000000},
+{0.716567, 0.681718, 0.147621},
+{0.716567, 0.681718, -0.147621},
+{0.525731, 0.850651, 0.000000},
+{0.425325, 0.688191, 0.587785},
+{0.864188, 0.442863, 0.238856},
+{0.688191, 0.587785, 0.425325},
+{0.809017, 0.309017, 0.500000},
+{0.681718, 0.147621, 0.716567},
+{0.587785, 0.425325, 0.688191},
+{0.955423, 0.295242, 0.000000},
+{1.000000, 0.000000, 0.000000},
+{0.951056, 0.162460, 0.262866},
+{0.850651, -0.525731, 0.000000},
+{0.955423, -0.295242, 0.000000},
+{0.864188, -0.442863, 0.238856},
+{0.951056, -0.162460, 0.262866},
+{0.809017, -0.309017, 0.500000},
+{0.681718, -0.147621, 0.716567},
+{0.850651, 0.000000, 0.525731},
+{0.864188, 0.442863, -0.238856},
+{0.809017, 0.309017, -0.500000},
+{0.951056, 0.162460, -0.262866},
+{0.525731, 0.000000, -0.850651},
+{0.681718, 0.147621, -0.716567},
+{0.681718, -0.147621, -0.716567},
+{0.850651, 0.000000, -0.525731},
+{0.809017, -0.309017, -0.500000},
+{0.864188, -0.442863, -0.238856},
+{0.951056, -0.162460, -0.262866},
+{0.147621, 0.716567, -0.681718},
+{0.309017, 0.500000, -0.809017},
+{0.425325, 0.688191, -0.587785},
+{0.442863, 0.238856, -0.864188},
+{0.587785, 0.425325, -0.688191},
+{0.688191, 0.587785, -0.425325},
+{-0.147621, 0.716567, -0.681718},
+{-0.309017, 0.500000, -0.809017},
+{0.000000, 0.525731, -0.850651},
+{-0.525731, 0.000000, -0.850651},
+{-0.442863, 0.238856, -0.864188},
+{-0.295242, 0.000000, -0.955423},
+{-0.162460, 0.262866, -0.951056},
+{0.000000, 0.000000, -1.000000},
+{0.295242, 0.000000, -0.955423},
+{0.162460, 0.262866, -0.951056},
+{-0.442863, -0.238856, -0.864188},
+{-0.309017, -0.500000, -0.809017},
+{-0.162460, -0.262866, -0.951056},
+{0.000000, -0.850651, -0.525731},
+{-0.147621, -0.716567, -0.681718},
+{0.147621, -0.716567, -0.681718},
+{0.000000, -0.525731, -0.850651},
+{0.309017, -0.500000, -0.809017},
+{0.442863, -0.238856, -0.864188},
+{0.162460, -0.262866, -0.951056},
+{0.238856, -0.864188, -0.442863},
+{0.500000, -0.809017, -0.309017},
+{0.425325, -0.688191, -0.587785},
+{0.716567, -0.681718, -0.147621},
+{0.688191, -0.587785, -0.425325},
+{0.587785, -0.425325, -0.688191},
+{0.000000, -0.955423, -0.295242},
+{0.000000, -1.000000, 0.000000},
+{0.262866, -0.951056, -0.162460},
+{0.000000, -0.850651, 0.525731},
+{0.000000, -0.955423, 0.295242},
+{0.238856, -0.864188, 0.442863},
+{0.262866, -0.951056, 0.162460},
+{0.500000, -0.809017, 0.309017},
+{0.716567, -0.681718, 0.147621},
+{0.525731, -0.850651, 0.000000},
+{-0.238856, -0.864188, -0.442863},
+{-0.500000, -0.809017, -0.309017},
+{-0.262866, -0.951056, -0.162460},
+{-0.850651, -0.525731, 0.000000},
+{-0.716567, -0.681718, -0.147621},
+{-0.716567, -0.681718, 0.147621},
+{-0.525731, -0.850651, 0.000000},
+{-0.500000, -0.809017, 0.309017},
+{-0.238856, -0.864188, 0.442863},
+{-0.262866, -0.951056, 0.162460},
+{-0.864188, -0.442863, 0.238856},
+{-0.809017, -0.309017, 0.500000},
+{-0.688191, -0.587785, 0.425325},
+{-0.681718, -0.147621, 0.716567},
+{-0.442863, -0.238856, 0.864188},
+{-0.587785, -0.425325, 0.688191},
+{-0.309017, -0.500000, 0.809017},
+{-0.147621, -0.716567, 0.681718},
+{-0.425325, -0.688191, 0.587785},
+{-0.162460, -0.262866, 0.951056},
+{0.442863, -0.238856, 0.864188},
+{0.162460, -0.262866, 0.951056},
+{0.309017, -0.500000, 0.809017},
+{0.147621, -0.716567, 0.681718},
+{0.000000, -0.525731, 0.850651},
+{0.425325, -0.688191, 0.587785},
+{0.587785, -0.425325, 0.688191},
+{0.688191, -0.587785, 0.425325},
+{-0.955423, 0.295242, 0.000000},
+{-0.951056, 0.162460, 0.262866},
+{-1.000000, 0.000000, 0.000000},
+{-0.850651, 0.000000, 0.525731},
+{-0.955423, -0.295242, 0.000000},
+{-0.951056, -0.162460, 0.262866},
+{-0.864188, 0.442863, -0.238856},
+{-0.951056, 0.162460, -0.262866},
+{-0.809017, 0.309017, -0.500000},
+{-0.864188, -0.442863, -0.238856},
+{-0.951056, -0.162460, -0.262866},
+{-0.809017, -0.309017, -0.500000},
+{-0.681718, 0.147621, -0.716567},
+{-0.681718, -0.147621, -0.716567},
+{-0.850651, 0.000000, -0.525731},
+{-0.688191, 0.587785, -0.425325},
+{-0.587785, 0.425325, -0.688191},
+{-0.425325, 0.688191, -0.587785},
+{-0.425325, -0.688191, -0.587785},
+{-0.587785, -0.425325, -0.688191},
+{-0.688191, -0.587785, -0.425325},
diff --git a/public/mathlib.h b/public/mathlib.h
index 3ce9977d..312b5e2f 100644
--- a/public/mathlib.h
+++ b/public/mathlib.h
@@ -32,6 +32,7 @@
#define IS_NAN(x) (((*(int *)&x)&nanmask)==nanmask)
#define RANDOM_LONG(MIN, MAX) ((rand() & 32767) * (((MAX)-(MIN)) * (1.0f / 32767.0f)) + (MIN))
#define RANDOM_FLOAT(MIN,MAX) (((float)rand() / RAND_MAX) * ((MAX)-(MIN)) + (MIN))
+#define NUMVERTEXNORMALS 162 // quake avertex normals
#define VectorToPhysic(v) { v[0] = INCH2METER(v[0]), v[1] = INCH2METER(v[1]), v[2] = INCH2METER(v[2]); }
#define VectorToServer(v) { v[0] = METER2INCH(v[0]), v[1] = METER2INCH(v[1]), v[2] = METER2INCH(v[2]); }
@@ -797,5 +798,43 @@ static vec3_t vec3_origin = { 0, 0, 0 };
static vec3_t vec3_angles = { 0, 0, 0 };
static vec4_t vec4_origin = { 0, 0, 0, 0 };
static vec3_t vec3_up = { 0.0f, 1.0f, 0.0f }; // unconverted up vector
+static vec3_t bytedirs[NUMVERTEXNORMALS] =
+{
+#include "anorms.h"
+};
+
+_inline int DirToByte( vec3_t dir )
+{
+ int i, best = 0;
+ float d, bestd = 0;
+ bool normalized;
+
+ if( !dir || VectorCompare( dir, vec3_origin ))
+ return NUMVERTEXNORMALS;
+
+ if( DotProduct( dir, dir ) == 1 )
+ normalized = true;
+ else normalized = false;
+
+ for( i = 0; i < NUMVERTEXNORMALS; i++ )
+ {
+ d = DotProduct( dir, bytedirs[i] );
+ if(( d == 1 ) && normalized )
+ return i;
+ if( d > bestd )
+ {
+ bestd = d;
+ best = i;
+ }
+ }
+ return best;
+}
+
+_inline void ByteToDir( int b, vec3_t dir )
+{
+ if( b < 0 || b >= NUMVERTEXNORMALS )
+ VectorCopy( vec3_origin, dir );
+ else VectorCopy( bytedirs[b], dir );
+}
#endif//BASEMATH_H
\ No newline at end of file
diff --git a/release.bat b/release.bat
index 663a785d..23566bbc 100644
--- a/release.bat
+++ b/release.bat
@@ -71,5 +71,5 @@ if exist xtools\xtools.plg del /f /q xtools\xtools.plg
echo Build succeeded!
echo Please wait. Xash is now loading
cd D:\Xash3D\
-xash.exe -dev 3 -log +map dm_qstyle
+xash.exe -dev 3 -log +map q3dm0
:done
\ No newline at end of file
diff --git a/render/glw_imp.c b/render/glw_imp.c
index 6f432dc6..ac8a2a64 100644
--- a/render/glw_imp.c
+++ b/render/glw_imp.c
@@ -109,7 +109,7 @@ static bool VerifyDriver( void )
{
char buffer[1024];
- com.strncpy( buffer, qglGetString( GL_RENDERER ), sizeof(buffer) );
+ com.strncpy( buffer, pglGetString( GL_RENDERER ), sizeof(buffer) );
com.strlwr( buffer, buffer );
if ( strcmp( buffer, "gdi generic" ) == 0 )
if ( !glw_state.mcd_accelerated )
@@ -396,11 +396,11 @@ int GLimp_SetMode( int mode, bool fullscreen )
*/
void GLimp_Shutdown( void )
{
- if ( qwglMakeCurrent && !qwglMakeCurrent( NULL, NULL ) )
+ if ( pwglMakeCurrent && !pwglMakeCurrent( NULL, NULL ) )
Msg ( "ref_gl::R_Shutdown() - wglMakeCurrent failed\n");
if ( glw_state.hGLRC )
{
- if ( qwglDeleteContext && !qwglDeleteContext( glw_state.hGLRC ) )
+ if ( pwglDeleteContext && !pwglDeleteContext( glw_state.hGLRC ) )
Msg ( "ref_gl::R_Shutdown() - wglDeleteContext failed\n");
glw_state.hGLRC = NULL;
}
@@ -549,17 +549,17 @@ int GLimp_InitGL (void)
if ( glw_state.minidriver )
{
- if ( (pixelformat = qwglChoosePixelFormat( glw_state.hDC, &pfd)) == 0 )
+ if ( (pixelformat = pwglChoosePixelFormat( glw_state.hDC, &pfd)) == 0 )
{
- Msg ( "GLimp_Init() - qwglChoosePixelFormat failed\n");
+ Msg ( "GLimp_Init() - pwglChoosePixelFormat failed\n");
return false;
}
- if ( qwglSetPixelFormat( glw_state.hDC, pixelformat, &pfd) == FALSE )
+ if ( pwglSetPixelFormat( glw_state.hDC, pixelformat, &pfd) == FALSE )
{
- Msg ( "GLimp_Init() - qwglSetPixelFormat failed\n");
+ Msg ( "GLimp_Init() - pwglSetPixelFormat failed\n");
return false;
}
- qwglDescribePixelFormat( glw_state.hDC, pixelformat, sizeof( pfd ), &pfd );
+ pwglDescribePixelFormat( glw_state.hDC, pixelformat, sizeof( pfd ), &pfd );
}
else
{
@@ -604,15 +604,15 @@ int GLimp_InitGL (void)
** startup the OpenGL subsystem by creating a context and making
** it current
*/
- if ( ( glw_state.hGLRC = qwglCreateContext( glw_state.hDC ) ) == 0 )
+ if ( ( glw_state.hGLRC = pwglCreateContext( glw_state.hDC ) ) == 0 )
{
- Msg ( "GLimp_Init() - qwglCreateContext failed\n");
+ Msg ( "GLimp_Init() - pwglCreateContext failed\n");
goto fail;
}
- if ( !qwglMakeCurrent( glw_state.hDC, glw_state.hGLRC ) )
+ if ( !pwglMakeCurrent( glw_state.hDC, glw_state.hGLRC ) )
{
- Msg ( "GLimp_Init() - qwglMakeCurrent failed\n");
+ Msg ( "GLimp_Init() - pwglMakeCurrent failed\n");
goto fail;
}
@@ -632,7 +632,7 @@ int GLimp_InitGL (void)
fail:
if ( glw_state.hGLRC )
{
- qwglDeleteContext( glw_state.hGLRC );
+ pwglDeleteContext( glw_state.hGLRC );
glw_state.hGLRC = NULL;
}
@@ -649,8 +649,8 @@ fail:
*/
bool GLimp_GetGammaRamp( size_t stride, unsigned short *ramp )
{
- if( qwglGetDeviceGammaRamp3DFX ) {
- if( qwglGetDeviceGammaRamp3DFX( glw_state.hDC, ramp ) )
+ if( pwglGetDeviceGammaRamp3DFX ) {
+ if( pwglGetDeviceGammaRamp3DFX( glw_state.hDC, ramp ) )
return true;
}
@@ -665,11 +665,51 @@ bool GLimp_GetGammaRamp( size_t stride, unsigned short *ramp )
*/
void GLimp_SetGammaRamp( size_t stride, unsigned short *ramp )
{
- if( qwglGetDeviceGammaRamp3DFX )
- qwglSetDeviceGammaRamp3DFX( glw_state.hDC, ramp );
+ if( pwglGetDeviceGammaRamp3DFX )
+ pwglSetDeviceGammaRamp3DFX( glw_state.hDC, ramp );
else
SetDeviceGammaRamp( glw_state.hDC, ramp );
}
+/*
+=================
+RB_CheckForErrors
+=================
+*/
+
+void R_CheckForErrors( const char *filename, const int fileline )
+{
+ int err;
+ char *str;
+
+ if((err = pglGetError()) == GL_NO_ERROR )
+ return;
+
+ switch( err )
+ {
+ case GL_STACK_OVERFLOW:
+ str = "GL_STACK_OVERFLOW";
+ break;
+ case GL_STACK_UNDERFLOW:
+ str = "GL_STACK_UNDERFLOW";
+ break;
+ case GL_INVALID_ENUM:
+ str = "GL_INVALID_ENUM";
+ break;
+ case GL_INVALID_VALUE:
+ str = "GL_INVALID_VALUE";
+ break;
+ case GL_INVALID_OPERATION:
+ str = "GL_INVALID_OPERATION";
+ break;
+ case GL_OUT_OF_MEMORY:
+ str = "GL_OUT_OF_MEMORY";
+ break;
+ default:
+ str = "UNKNOWN ERROR";
+ break;
+ }
+ Host_Error( "R_CheckForErrors: %s (called at %s:%i)\n", str, filename, fileline );
+}
/*
** GLimp_BeginFrame
@@ -688,15 +728,15 @@ void GLimp_BeginFrame( void )
if ( glState.cameraSeparation < 0 && glState.stereoEnabled )
{
- qglDrawBuffer( GL_BACK_LEFT );
+ pglDrawBuffer( GL_BACK_LEFT );
}
else if ( glState.cameraSeparation > 0 && glState.stereoEnabled )
{
- qglDrawBuffer( GL_BACK_RIGHT );
+ pglDrawBuffer( GL_BACK_RIGHT );
}
else
{
- qglDrawBuffer( GL_BACK );
+ pglDrawBuffer( GL_BACK );
}
}
@@ -709,14 +749,11 @@ void GLimp_BeginFrame( void )
*/
void GLimp_EndFrame (void)
{
- int err;
-
- err = qglGetError();
- assert( err == GL_NO_ERROR );
+ R_CheckForErrors( __FILE__, __LINE__ );
if ( com.stricmp( gl_drawbuffer->string, "GL_BACK" ) == 0 )
{
- if ( !qwglSwapBuffers( glw_state.hDC ) )
+ if ( !pwglSwapBuffers( glw_state.hDC ) )
Host_Error( "GLimp_EndFrame() - SwapBuffers() failed!\n" );
}
}
diff --git a/render/qgl.h b/render/qgl.h
index 037ed003..beafbd98 100644
--- a/render/qgl.h
+++ b/render/qgl.h
@@ -81,8 +81,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
QGL_EXTERN bool QGL_Init( const char *dllname );
QGL_EXTERN void QGL_Shutdown( void );
-QGL_EXTERN void *qglGetProcAddress( const GLubyte * );
-QGL_EXTERN const char *(*qglGetGLWExtensionsString)( void );
+QGL_EXTERN void *pglGetProcAddress( const GLubyte * );
+QGL_EXTERN const char *(*pglGetGLWExtensionsString)( void );
/*
** extension constants
diff --git a/render/qgl_win.c b/render/qgl_win.c
index fce88365..8ebc9ea2 100644
--- a/render/qgl_win.c
+++ b/render/qgl_win.c
@@ -54,10 +54,10 @@ extern stdlib_api_t com; // engine toolbox
#define QGL_EXTERN
-#define QGL_FUNC(type,name,params) type (APIENTRY * q##name) params;
-#define QGL_EXT(type,name,params) type (APIENTRY * q##name) params;
-#define QGL_WGL(type,name,params) type (APIENTRY * q##name) params;
-#define QGL_WGL_EXT(type,name,params) type (APIENTRY * q##name) params;
+#define QGL_FUNC(type,name,params) type (APIENTRY * p##name) params;
+#define QGL_EXT(type,name,params) type (APIENTRY * p##name) params;
+#define QGL_WGL(type,name,params) type (APIENTRY * p##name) params;
+#define QGL_WGL_EXT(type,name,params) type (APIENTRY * p##name) params;
#define QGL_GLX(type,name,params)
#define QGL_GLX_EXT(type,name,params)
@@ -70,8 +70,8 @@ extern stdlib_api_t com; // engine toolbox
#undef QGL_EXT
#undef QGL_FUNC
-static const char *_qglGetGLWExtensionsString( void );
-static const char *_qglGetGLWExtensionsStringInit( void );
+static const char *_pglGetGLWExtensionsString( void );
+static const char *_pglGetGLWExtensionsStringInit( void );
/*
** QGL_Shutdown
@@ -84,12 +84,12 @@ void QGL_Shutdown( void )
FreeLibrary( glw_state.hinstOpenGL );
glw_state.hinstOpenGL = NULL;
- qglGetGLWExtensionsString = NULL;
+ pglGetGLWExtensionsString = NULL;
-#define QGL_FUNC(type,name,params) (q##name) = NULL;
-#define QGL_EXT(type,name,params) (q##name) = NULL;
-#define QGL_WGL(type,name,params) (q##name) = NULL;
-#define QGL_WGL_EXT(type,name,params) (q##name) = NULL;
+#define QGL_FUNC(type,name,params) (p##name) = NULL;
+#define QGL_EXT(type,name,params) (p##name) = NULL;
+#define QGL_WGL(type,name,params) (p##name) = NULL;
+#define QGL_WGL_EXT(type,name,params) (p##name) = NULL;
#define QGL_GLX(type,name,params)
#define QGL_GLX_EXT(type,name,params)
@@ -108,7 +108,7 @@ void QGL_Shutdown( void )
/*
** QGL_Init
**
-** This is responsible for binding our qgl function pointers to
+** This is responsible for binding our pgl function pointers to
** the appropriate GL stuff. In Windows this means doing a
** LoadLibrary and a bunch of calls to GetProcAddress. On other
** operating systems we need to do the right thing, whatever that
@@ -127,12 +127,12 @@ bool QGL_Init( const char *dllname )
return false;
}
-#define QGL_FUNC(type,name,params) (q##name) = ( void * )GetProcAddress( glw_state.hinstOpenGL, #name ); \
- if( !(q##name) ) { MsgDev( D_ERROR, "QGL_Init: Failed to get address for %s\n", #name ); return false; }
-#define QGL_EXT(type,name,params) (q##name) = NULL;
-#define QGL_WGL(type,name,params) (q##name) = ( void * )GetProcAddress( glw_state.hinstOpenGL, #name ); \
- if( !(q##name) ) { MsgDev( D_ERROR, "QGL_Init: Failed to get address for %s\n", #name ); return false; }
-#define QGL_WGL_EXT(type,name,params) (q##name) = NULL;
+#define QGL_FUNC(type,name,params) (p##name) = ( void * )GetProcAddress( glw_state.hinstOpenGL, #name ); \
+ if( !(p##name) ) { MsgDev( D_ERROR, "QGL_Init: Failed to get address for %s\n", #name ); return false; }
+#define QGL_EXT(type,name,params) (p##name) = NULL;
+#define QGL_WGL(type,name,params) (p##name) = ( void * )GetProcAddress( glw_state.hinstOpenGL, #name ); \
+ if( !(p##name) ) { MsgDev( D_ERROR, "QGL_Init: Failed to get address for %s\n", #name ); return false; }
+#define QGL_WGL_EXT(type,name,params) (p##name) = NULL;
#define QGL_GLX(type,name,params)
#define QGL_GLX_EXT(type,name,params)
@@ -145,31 +145,31 @@ bool QGL_Init( const char *dllname )
#undef QGL_EXT
#undef QGL_FUNC
- qglGetGLWExtensionsString = _qglGetGLWExtensionsStringInit;
+ pglGetGLWExtensionsString = _pglGetGLWExtensionsStringInit;
return true;
}
/*
-** qglGetProcAddress
+** pglGetProcAddress
*/
-void *qglGetProcAddress( const GLubyte *procName ) {
- return (void *)qwglGetProcAddress( (LPCSTR)procName );
+void *pglGetProcAddress( const GLubyte *procName ) {
+ return (void *)pwglGetProcAddress( (LPCSTR)procName );
}
/*
-** qglGetGLWExtensionsString
+** pglGetGLWExtensionsString
*/
-static const char *_qglGetGLWExtensionsStringInit( void )
+static const char *_pglGetGLWExtensionsStringInit( void )
{
- qwglGetExtensionsStringEXT = ( void * )qglGetProcAddress( (const GLubyte *)"wglGetExtensionsStringEXT" );
- qglGetGLWExtensionsString = _qglGetGLWExtensionsString;
- return qglGetGLWExtensionsString ();
+ pwglGetExtensionsStringEXT = ( void * )pglGetProcAddress( (const GLubyte *)"wglGetExtensionsStringEXT" );
+ pglGetGLWExtensionsString = _pglGetGLWExtensionsString;
+ return pglGetGLWExtensionsString ();
}
-static const char *_qglGetGLWExtensionsString( void )
+static const char *_pglGetGLWExtensionsString( void )
{
- if( qwglGetExtensionsStringEXT )
- return qwglGetExtensionsStringEXT ();
+ if( pwglGetExtensionsStringEXT )
+ return pwglGetExtensionsStringEXT ();
return NULL;
}
diff --git a/render/r_alias.c b/render/r_alias.c
index efc4c216..92c68951 100644
--- a/render/r_alias.c
+++ b/render/r_alias.c
@@ -922,7 +922,7 @@ void R_DrawAliasModel( const meshbuffer_t *mb )
// hack the depth range to prevent view model from poking into walls
if( e->flags & RF_WEAPONMODEL )
- qglDepthRange( gldepthmin, gldepthmin + 0.3 * ( gldepthmax - gldepthmin ) );
+ pglDepthRange( gldepthmin, gldepthmin + 0.3 * ( gldepthmax - gldepthmin ) );
// backface culling for left-handed weapons
if( e->flags & RF_CULLHACK )
@@ -934,7 +934,7 @@ void R_DrawAliasModel( const meshbuffer_t *mb )
R_DrawAliasFrameLerp( mb, e->backlerp );
if( e->flags & RF_WEAPONMODEL )
- qglDepthRange( gldepthmin, gldepthmax );
+ pglDepthRange( gldepthmin, gldepthmax );
if( e->flags & RF_CULLHACK )
GL_FrontFace( !glState.frontFace );
diff --git a/render/r_backend.c b/render/r_backend.c
index c95ce6f4..71d6a903 100644
--- a/render/r_backend.c
+++ b/render/r_backend.c
@@ -125,7 +125,7 @@ void R_BackendInit( void )
R_BackendResetPassMask();
- qglEnableClientState( GL_VERTEX_ARRAY );
+ pglEnableClientState( GL_VERTEX_ARRAY );
if( !r_ignorehwgamma->integer )
r_identityLighting = (int)( 255.0f / pow( 2, max( 0, floor( r_overbrightbits->value ) ) ) );
@@ -432,18 +432,18 @@ void R_LockArrays( int numverts )
if( !glConfig.ext.vertex_buffer_object )
{
- qglVertexPointer( 3, GL_FLOAT, 16, vertsArray );
+ pglVertexPointer( 3, GL_FLOAT, 16, vertsArray );
if( r_features & MF_ENABLENORMALS )
{
r_normalsEnabled = true;
- qglEnableClientState( GL_NORMAL_ARRAY );
- qglNormalPointer( GL_FLOAT, 16, normalsArray );
+ pglEnableClientState( GL_NORMAL_ARRAY );
+ pglNormalPointer( GL_FLOAT, 16, normalsArray );
}
}
if( glConfig.ext.compiled_vertex_array )
- qglLockArraysEXT( 0, numverts );
+ pglLockArraysEXT( 0, numverts );
r_arraysLocked = true;
}
@@ -459,12 +459,12 @@ void R_UnlockArrays( void )
return;
if( glConfig.ext.compiled_vertex_array )
- qglUnlockArraysEXT();
+ pglUnlockArraysEXT();
if( r_normalsEnabled )
{
r_normalsEnabled = false;
- qglDisableClientState( GL_NORMAL_ARRAY );
+ pglDisableClientState( GL_NORMAL_ARRAY );
}
r_arraysLocked = false;
}
@@ -503,25 +503,25 @@ void R_FlushArrays( void )
if( r_backacc.numColors == 1 )
{
- qglColor4ubv( colorArray[0] );
+ pglColor4ubv( colorArray[0] );
}
else if( r_backacc.numColors > 1 )
{
- qglEnableClientState( GL_COLOR_ARRAY );
+ pglEnableClientState( GL_COLOR_ARRAY );
if( !glConfig.ext.vertex_buffer_object )
- qglColorPointer( 4, GL_UNSIGNED_BYTE, 0, colorArray );
+ pglColorPointer( 4, GL_UNSIGNED_BYTE, 0, colorArray );
}
if( r_drawelements->integer || glState.in2DMode || RI.refdef.rdflags & RDF_NOWORLDMODEL )
{
if( glConfig.ext.draw_range_elements )
- qglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray );
+ pglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray );
else
- qglDrawElements( GL_TRIANGLES, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray );
+ pglDrawElements( GL_TRIANGLES, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray );
}
if( r_backacc.numColors > 1 )
- qglDisableClientState( GL_COLOR_ARRAY );
+ pglDisableClientState( GL_COLOR_ARRAY );
r_backacc.c_totalTris += r_backacc.numElems / 3;
r_backacc.c_totalFlushes++;
@@ -554,7 +554,7 @@ static void R_CleanUpTextureUnits( int last )
GL_DisableAllTexGens();
GL_SetTexCoordArrayMode( 0 );
- qglDisable( GL_TEXTURE_2D );
+ pglDisable( GL_TEXTURE_2D );
GL_SelectTexture( i - 1 );
}
}
@@ -939,7 +939,7 @@ static bool R_VertexTCBase( const shaderpass_t *pass, int unit, mat4x4_t matrix
if( !glConfig.ext.vertex_buffer_object )
{
- qglTexCoordPointer( 2, GL_FLOAT, 0, coordsArray );
+ pglTexCoordPointer( 2, GL_FLOAT, 0, coordsArray );
return true;
}
break;
@@ -948,7 +948,7 @@ static bool R_VertexTCBase( const shaderpass_t *pass, int unit, mat4x4_t matrix
if( !glConfig.ext.vertex_buffer_object )
{
- qglTexCoordPointer( 2, GL_FLOAT, 0, lightmapCoordsArray[r_lightmapStyleNum[unit]] );
+ pglTexCoordPointer( 2, GL_FLOAT, 0, lightmapCoordsArray[r_lightmapStyleNum[unit]] );
return true;
}
break;
@@ -982,7 +982,7 @@ static bool R_VertexTCBase( const shaderpass_t *pass, int unit, mat4x4_t matrix
if( !glConfig.ext.vertex_buffer_object )
{
- qglTexCoordPointer( 2, GL_FLOAT, 0, tUnitCoordsArray[unit] );
+ pglTexCoordPointer( 2, GL_FLOAT, 0, tUnitCoordsArray[unit] );
return true;
}
break;
@@ -1007,8 +1007,8 @@ static bool R_VertexTCBase( const shaderpass_t *pass, int unit, mat4x4_t matrix
GL_EnableTexGen( GL_T, GL_OBJECT_LINEAR );
GL_EnableTexGen( GL_R, 0 );
GL_EnableTexGen( GL_Q, 0 );
- qglTexGenfv( GL_S, GL_OBJECT_PLANE, genVector[0] );
- qglTexGenfv( GL_T, GL_OBJECT_PLANE, genVector[1] );
+ pglTexGenfv( GL_S, GL_OBJECT_PLANE, genVector[0] );
+ pglTexGenfv( GL_T, GL_OBJECT_PLANE, genVector[1] );
return false;
}
case TC_GEN_PROJECTION:
@@ -1041,10 +1041,10 @@ static bool R_VertexTCBase( const shaderpass_t *pass, int unit, mat4x4_t matrix
GL_EnableTexGen( GL_R, GL_OBJECT_LINEAR );
GL_EnableTexGen( GL_Q, GL_OBJECT_LINEAR );
- qglTexGenfv( GL_S, GL_OBJECT_PLANE, genVector[0] );
- qglTexGenfv( GL_T, GL_OBJECT_PLANE, genVector[1] );
- qglTexGenfv( GL_R, GL_OBJECT_PLANE, genVector[2] );
- qglTexGenfv( GL_Q, GL_OBJECT_PLANE, genVector[3] );
+ pglTexGenfv( GL_S, GL_OBJECT_PLANE, genVector[0] );
+ pglTexGenfv( GL_T, GL_OBJECT_PLANE, genVector[1] );
+ pglTexGenfv( GL_R, GL_OBJECT_PLANE, genVector[2] );
+ pglTexGenfv( GL_Q, GL_OBJECT_PLANE, genVector[3] );
return false;
}
@@ -1148,7 +1148,7 @@ static bool R_VertexTCBase( const shaderpass_t *pass, int unit, mat4x4_t matrix
if( !glConfig.ext.vertex_buffer_object )
{
- qglTexCoordPointer( 2, GL_FLOAT, 0, tUnitCoordsArray[unit] );
+ pglTexCoordPointer( 2, GL_FLOAT, 0, tUnitCoordsArray[unit] );
return false;
}
break;
@@ -1159,7 +1159,7 @@ static bool R_VertexTCBase( const shaderpass_t *pass, int unit, mat4x4_t matrix
if( !glConfig.ext.vertex_buffer_object )
{
- qglTexCoordPointer( 4, GL_FLOAT, 0, sVectorsArray );
+ pglTexCoordPointer( 4, GL_FLOAT, 0, sVectorsArray );
return true;
}
break;
@@ -1272,7 +1272,7 @@ static void R_BindShaderpass( const shaderpass_t *pass, image_t *tex, int unit )
GL_Bind( unit, tex );
if( unit && !pass->program )
- qglEnable( GL_TEXTURE_2D );
+ pglEnable( GL_TEXTURE_2D );
GL_SetTexCoordArrayMode( ( tex->flags & IT_CUBEMAP ? GL_TEXTURE_CUBE_MAP_ARB : GL_TEXTURE_COORD_ARRAY ) );
identityMatrix = R_VertexTCBase( pass, unit, result );
@@ -1842,21 +1842,21 @@ void R_RenderMeshCombined( void )
// this way it can be possible to use GL_DECAL in both texture-units, while still looking good
// normal mutlitexturing would multiply the alpha-channel which looks ugly
GL_TexEnv( GL_COMBINE_ARB );
- qglTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB );
- qglTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_ADD );
+ pglTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB );
+ pglTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_ADD );
- qglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE );
- qglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR );
- qglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE );
- qglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA );
+ pglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE );
+ pglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR );
+ pglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE );
+ pglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA );
- qglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB );
- qglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR );
- qglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PREVIOUS_ARB );
- qglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA );
+ pglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB );
+ pglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR );
+ pglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PREVIOUS_ARB );
+ pglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA );
- qglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_TEXTURE );
- qglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA );
+ pglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_TEXTURE );
+ pglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA );
}
else
{
@@ -2100,7 +2100,7 @@ static void R_RenderMeshGLSL_Material( void )
object = R_GetProgramObject( program );
if( object )
{
- qglUseProgramObjectARB( object );
+ pglUseProgramObjectARB( object );
// update uniforms
R_UpdateProgramUniforms( program, RI.viewOrigin, vec3_origin, lightDir, ambient, diffuse, lightStyle,
@@ -2108,7 +2108,7 @@ static void R_RenderMeshGLSL_Material( void )
R_FlushArrays();
- qglUseProgramObjectARB( 0 );
+ pglUseProgramObjectARB( 0 );
}
if( breakIntoPasses )
@@ -2204,14 +2204,14 @@ static void R_RenderMeshGLSL_Distortion( void )
object = R_GetProgramObject( program );
if( object )
{
- qglUseProgramObjectARB( object );
+ pglUseProgramObjectARB( object );
R_UpdateProgramUniforms( program, RI.viewOrigin, vec3_origin, vec3_origin, NULL, NULL, NULL,
frontPlane, r_portaltexture->upload_width, r_portaltexture->upload_height, 0, 0 );
R_FlushArrays();
- qglUseProgramObjectARB( 0 );
+ pglUseProgramObjectARB( 0 );
}
}
@@ -2246,8 +2246,8 @@ static void R_RenderMeshGLSL_Shadowmap( void )
R_BindShaderpass( pass, r_currentCastGroup->depthTexture, 0 );
- qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB );
- qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL );
+ pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB );
+ pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL );
// calculate the fragment color
R_ModifyColor( pass );
@@ -2256,7 +2256,7 @@ static void R_RenderMeshGLSL_Shadowmap( void )
state = r_currentShaderState | ( pass->flags & r_currentShaderPassMask ) | GLSTATE_BLEND_MTEX;
GL_SetState( state );
- qglUseProgramObjectARB( object );
+ pglUseProgramObjectARB( object );
R_UpdateProgramUniforms( program, RI.viewOrigin, vec3_origin, vec3_origin, NULL, NULL, NULL, true,
r_currentCastGroup->depthTexture->upload_width, r_currentCastGroup->depthTexture->upload_height,
@@ -2264,9 +2264,9 @@ static void R_RenderMeshGLSL_Shadowmap( void )
R_FlushArrays();
- qglUseProgramObjectARB( 0 );
+ pglUseProgramObjectARB( 0 );
- qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_NONE );
+ pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_NONE );
}
}
@@ -2306,14 +2306,14 @@ static void R_RenderMeshGLSL_Outline( void )
state = r_currentShaderState | ( pass->flags & r_currentShaderPassMask ) | GLSTATE_BLEND_MTEX;
GL_SetState( state );
- qglUseProgramObjectARB( object );
+ pglUseProgramObjectARB( object );
R_UpdateProgramUniforms( program, RI.viewOrigin, vec3_origin, vec3_origin, NULL, NULL, NULL, true,
0, 0, RI.currententity->outlineHeight * r_outlines_scale->value, 0 );
R_FlushArrays();
- qglUseProgramObjectARB( 0 );
+ pglUseProgramObjectARB( 0 );
GL_Cull( faceCull );
}
@@ -2710,7 +2710,7 @@ void R_RenderMeshBuffer( const meshbuffer_t *mb )
R_ClearArrays();
- qglMatrixMode( GL_MODELVIEW );
+ pglMatrixMode( GL_MODELVIEW );
}
/*
@@ -2723,7 +2723,7 @@ void R_BackendCleanUpTextureUnits( void )
R_CleanUpTextureUnits( 1 );
GL_LoadIdentityTexMatrix();
- qglMatrixMode( GL_MODELVIEW );
+ pglMatrixMode( GL_MODELVIEW );
GL_DisableAllTexGens();
GL_SetTexCoordArrayMode( 0 );
@@ -2757,12 +2757,12 @@ R_BackendBeginTriangleOutlines
void R_BackendBeginTriangleOutlines( void )
{
r_triangleOutlines = true;
- qglColor4fv( colorWhite );
+ pglColor4fv( colorWhite );
GL_Cull( 0 );
GL_SetState( GLSTATE_NO_DEPTH_TEST );
- qglDisable( GL_TEXTURE_2D );
- qglPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
+ pglDisable( GL_TEXTURE_2D );
+ pglPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
}
/*
@@ -2773,10 +2773,10 @@ R_BackendEndTriangleOutlines
void R_BackendEndTriangleOutlines( void )
{
r_triangleOutlines = false;
- qglColor4fv( colorWhite );
+ pglColor4fv( colorWhite );
GL_SetState( 0 );
- qglEnable( GL_TEXTURE_2D );
- qglPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
+ pglEnable( GL_TEXTURE_2D );
+ pglPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
}
/*
@@ -2792,15 +2792,15 @@ static _inline void R_SetColorForOutlines( void )
{
case MB_MODEL:
if( r_currentMeshBuffer->infokey < 0 )
- qglColor4fv( colorRed );
+ pglColor4fv( colorRed );
else
- qglColor4fv( colorWhite );
+ pglColor4fv( colorWhite );
break;
case MB_SPRITE:
- qglColor4fv( colorBlue );
+ pglColor4fv( colorBlue );
break;
case MB_POLY:
- qglColor4fv( colorGreen );
+ pglColor4fv( colorGreen );
break;
}
}
@@ -2816,9 +2816,9 @@ static void R_DrawTriangles( void )
R_SetColorForOutlines();
if( glConfig.ext.draw_range_elements )
- qglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray );
+ pglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray );
else
- qglDrawElements( GL_TRIANGLES, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray );
+ pglDrawElements( GL_TRIANGLES, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray );
}
/*
@@ -2833,13 +2833,51 @@ static void R_DrawNormals( void )
if( r_shownormals->integer == 2 )
R_SetColorForOutlines();
- qglBegin( GL_LINES );
+ pglBegin( GL_LINES );
for( i = 0; i < r_backacc.numVerts; i++ )
{
- qglVertex3fv( vertsArray[i] );
- qglVertex3f( vertsArray[i][0] + normalsArray[i][0],
+ pglVertex3fv( vertsArray[i] );
+ pglVertex3f( vertsArray[i][0] + normalsArray[i][0],
vertsArray[i][1] + normalsArray[i][1],
vertsArray[i][2] + normalsArray[i][2] );
}
- qglEnd();
+ pglEnd();
}
+
+static void R_DrawLine( int color, int numpoints, const float *points, const int *elements )
+{
+ int i = numpoints - 1;
+ vec3_t p0, p1;
+
+ VectorSet( p0, points[i*3+0], points[i*3+1], points[i*3+2] );
+ if( r_physbdebug->integer == 1 ) ConvertPositionToGame( p0 );
+
+ for( i = 0; i < numpoints; i++ )
+ {
+ VectorSet( p1, points[i*3+0], points[i*3+1], points[i*3+2] );
+ if( r_physbdebug->integer == 1 ) ConvertPositionToGame( p1 );
+
+ pglColor4fv( UnpackRGBA( color ));
+ pglVertex3fv( p0 );
+ pglVertex3fv( p1 );
+
+ VectorCopy( p1, p0 );
+ }
+}
+
+/*
+================
+R_DrawPhysDebug
+================
+*/
+void R_DrawPhysDebug( void )
+{
+ if( r_physbdebug->integer )
+ {
+ // physic debug
+ pglLoadMatrixf( RI.worldviewMatrix );
+ pglBegin( GL_LINES );
+ ri.ShowCollision( R_DrawLine );
+ pglEnd();
+ }
+}
\ No newline at end of file
diff --git a/render/r_backend.h b/render/r_backend.h
index cb4bcf75..e956ea7a 100644
--- a/render/r_backend.h
+++ b/render/r_backend.h
@@ -85,6 +85,8 @@ void R_BackendCleanUpTextureUnits( void );
void R_BackendSetPassMask( int mask );
void R_BackendResetPassMask( void );
+void R_DrawPhysDebug( void );
+
void R_LockArrays( int numverts );
void R_UnlockArrays( void );
void R_UnlockArrays( void );
diff --git a/render/r_bloom.c b/render/r_bloom.c
index c32f7e13..cd8bb1ba 100644
--- a/render/r_bloom.c
+++ b/render/r_bloom.c
@@ -219,16 +219,16 @@ R_Bloom_SamplePass
*/
static _inline void R_Bloom_SamplePass( int xpos, int ypos )
{
- qglBegin( GL_QUADS );
- qglTexCoord2f( 0, sampleText_tch );
- qglVertex2f( xpos, ypos );
- qglTexCoord2f( 0, 0 );
- qglVertex2f( xpos, ypos+sample_height );
- qglTexCoord2f( sampleText_tcw, 0 );
- qglVertex2f( xpos+sample_width, ypos+sample_height );
- qglTexCoord2f( sampleText_tcw, sampleText_tch );
- qglVertex2f( xpos+sample_width, ypos );
- qglEnd();
+ pglBegin( GL_QUADS );
+ pglTexCoord2f( 0, sampleText_tch );
+ pglVertex2f( xpos, ypos );
+ pglTexCoord2f( 0, 0 );
+ pglVertex2f( xpos, ypos+sample_height );
+ pglTexCoord2f( sampleText_tcw, 0 );
+ pglVertex2f( xpos+sample_width, ypos+sample_height );
+ pglTexCoord2f( sampleText_tcw, sampleText_tch );
+ pglVertex2f( xpos+sample_width, ypos );
+ pglEnd();
}
/*
@@ -238,16 +238,16 @@ R_Bloom_Quad
*/
static _inline void R_Bloom_Quad( int x, int y, int w, int h, float texwidth, float texheight )
{
- qglBegin( GL_QUADS );
- qglTexCoord2f( 0, texheight );
- qglVertex2f( x, glState.height-h-y );
- qglTexCoord2f( 0, 0 );
- qglVertex2f( x, glState.height-y );
- qglTexCoord2f( texwidth, 0 );
- qglVertex2f( x+w, glState.height-y );
- qglTexCoord2f( texwidth, texheight );
- qglVertex2f( x+w, glState.height-h );
- qglEnd();
+ pglBegin( GL_QUADS );
+ pglTexCoord2f( 0, texheight );
+ pglVertex2f( x, glState.height-h-y );
+ pglTexCoord2f( 0, 0 );
+ pglVertex2f( x, glState.height-y );
+ pglTexCoord2f( texwidth, 0 );
+ pglVertex2f( x+w, glState.height-y );
+ pglTexCoord2f( texwidth, texheight );
+ pglVertex2f( x+w, glState.height-h );
+ pglEnd();
}
/*
@@ -260,18 +260,18 @@ static void R_Bloom_DrawEffect( void )
GL_Bind( 0, r_bloomeffecttexture );
GL_TexEnv( GL_MODULATE );
GL_SetState( GLSTATE_NO_DEPTH_TEST|GLSTATE_SRCBLEND_ONE|GLSTATE_DSTBLEND_ONE );
- qglColor4f( r_bloom_alpha->value, r_bloom_alpha->value, r_bloom_alpha->value, 1.0f );
+ pglColor4f( r_bloom_alpha->value, r_bloom_alpha->value, r_bloom_alpha->value, 1.0f );
- qglBegin( GL_QUADS );
- qglTexCoord2f( 0, sampleText_tch );
- qglVertex2f( curView_x, curView_y );
- qglTexCoord2f( 0, 0 );
- qglVertex2f( curView_x, curView_y+curView_height );
- qglTexCoord2f( sampleText_tcw, 0 );
- qglVertex2f( curView_x+curView_width, curView_y+curView_height );
- qglTexCoord2f( sampleText_tcw, sampleText_tch );
- qglVertex2f( curView_x+curView_width, curView_y );
- qglEnd();
+ pglBegin( GL_QUADS );
+ pglTexCoord2f( 0, sampleText_tch );
+ pglVertex2f( curView_x, curView_y );
+ pglTexCoord2f( 0, 0 );
+ pglVertex2f( curView_x, curView_y+curView_height );
+ pglTexCoord2f( sampleText_tcw, 0 );
+ pglVertex2f( curView_x+curView_width, curView_y+curView_height );
+ pglTexCoord2f( sampleText_tcw, sampleText_tch );
+ pglVertex2f( curView_x+curView_width, curView_y );
+ pglEnd();
}
/*
@@ -285,20 +285,20 @@ static void R_Bloom_GeneratexDiamonds( void )
float intensity, scale, *diamond;
// set up sample size workspace
- qglScissor( 0, 0, sample_width, sample_height );
- qglViewport( 0, 0, sample_width, sample_height );
- qglMatrixMode( GL_PROJECTION );
- qglLoadIdentity();
- qglOrtho( 0, sample_width, sample_height, 0, -10, 100 );
- qglMatrixMode( GL_MODELVIEW );
- qglLoadIdentity();
+ pglScissor( 0, 0, sample_width, sample_height );
+ pglViewport( 0, 0, sample_width, sample_height );
+ pglMatrixMode( GL_PROJECTION );
+ pglLoadIdentity();
+ pglOrtho( 0, sample_width, sample_height, 0, -10, 100 );
+ pglMatrixMode( GL_MODELVIEW );
+ pglLoadIdentity();
// copy small scene into r_bloomeffecttexture
GL_Bind( 0, r_bloomeffecttexture );
- qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height );
+ pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height );
// start modifying the small scene corner
- qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
+ pglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
// darkening passes
if( r_bloom_darken->integer )
@@ -308,7 +308,7 @@ static void R_Bloom_GeneratexDiamonds( void )
for( i = 0; i < r_bloom_darken->integer; i++ )
R_Bloom_SamplePass( 0, 0 );
- qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height );
+ pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height );
}
// bluring passes
@@ -358,21 +358,21 @@ static void R_Bloom_GeneratexDiamonds( void )
if( intensity < 0.01f )
continue;
- qglColor4f( intensity, intensity, intensity, 1.0 );
+ pglColor4f( intensity, intensity, intensity, 1.0 );
R_Bloom_SamplePass( i - k, j - k );
}
}
- qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height );
+ pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height );
// restore full screen workspace
- qglScissor( 0, 0, glState.width, glState.height );
- qglViewport( 0, 0, glState.width, glState.height );
- qglMatrixMode( GL_PROJECTION );
- qglLoadIdentity();
- qglOrtho( 0, glState.width, glState.height, 0, -10, 100 );
- qglMatrixMode( GL_MODELVIEW );
- qglLoadIdentity();
+ pglScissor( 0, 0, glState.width, glState.height );
+ pglViewport( 0, 0, glState.width, glState.height );
+ pglMatrixMode( GL_PROJECTION );
+ pglLoadIdentity();
+ pglOrtho( 0, glState.width, glState.height, 0, -10, 100 );
+ pglMatrixMode( GL_MODELVIEW );
+ pglLoadIdentity();
}
/*
@@ -382,7 +382,7 @@ R_Bloom_DownsampleView
*/
static void R_Bloom_DownsampleView( void )
{
- qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
+ pglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
if( r_screendownsamplingtexture_size )
{
@@ -392,15 +392,15 @@ static void R_Bloom_DownsampleView( void )
// copy the screen and draw resized
GL_Bind( 0, r_bloomscreentexture );
- qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, curView_x, glState.height - ( curView_y + curView_height ), curView_width, curView_height );
+ pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, curView_x, glState.height - ( curView_y + curView_height ), curView_width, curView_height );
R_Bloom_Quad( 0, 0, midsample_width, midsample_height, screenTex_tcw, screenTex_tch );
// now copy into downsampling (mid-sized) texture
GL_Bind( 0, r_bloomdownsamplingtexture );
- qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, midsample_width, midsample_height );
+ pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, midsample_width, midsample_height );
// now draw again in bloom size
- qglColor4f( 0.5f, 0.5f, 0.5f, 1.0f );
+ pglColor4f( 0.5f, 0.5f, 0.5f, 1.0f );
R_Bloom_Quad( 0, 0, sample_width, sample_height, sampleText_tcw, sampleText_tch );
// now blend the big screen texture into the bloom generation space (hoping it adds some blur)
@@ -408,13 +408,13 @@ static void R_Bloom_DownsampleView( void )
GL_Bind( 0, r_bloomscreentexture );
R_Bloom_Quad( 0, 0, sample_width, sample_height, screenTex_tcw, screenTex_tch );
- qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
+ pglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
}
else
{
// downsample simple
GL_Bind( 0, r_bloomscreentexture );
- qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, curView_x, glState.height - ( curView_y + curView_height ), curView_width, curView_height );
+ pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, curView_x, glState.height - ( curView_y + curView_height ), curView_width, curView_height );
R_Bloom_Quad( 0, 0, sample_width, sample_height, screenTex_tcw, screenTex_tch );
}
}
@@ -436,18 +436,18 @@ void R_BloomBlend( const ref_params_t *fd )
return;
// set up full screen workspace
- qglScissor( 0, 0, glState.width, glState.height );
- qglViewport( 0, 0, glState.width, glState.height );
- qglMatrixMode( GL_PROJECTION );
- qglLoadIdentity();
- qglOrtho( 0, glState.width, glState.height, 0, -10, 100 );
- qglMatrixMode( GL_MODELVIEW );
- qglLoadIdentity();
+ pglScissor( 0, 0, glState.width, glState.height );
+ pglViewport( 0, 0, glState.width, glState.height );
+ pglMatrixMode( GL_PROJECTION );
+ pglLoadIdentity();
+ pglOrtho( 0, glState.width, glState.height, 0, -10, 100 );
+ pglMatrixMode( GL_MODELVIEW );
+ pglLoadIdentity();
GL_Cull( 0 );
GL_SetState( GLSTATE_NO_DEPTH_TEST );
- qglColor4f( 1, 1, 1, 1 );
+ pglColor4f( 1, 1, 1, 1 );
// set up current sizes
curView_x = fd->viewport[0];
@@ -473,7 +473,7 @@ void R_BloomBlend( const ref_params_t *fd )
// copy the screen space we'll use to work into the backup texture
GL_Bind( 0, r_bloombackuptexture );
- qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, r_screenbackuptexture_width, r_screenbackuptexture_height );
+ pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, r_screenbackuptexture_width, r_screenbackuptexture_height );
// create the bloom image
R_Bloom_DownsampleView();
@@ -483,13 +483,13 @@ void R_BloomBlend( const ref_params_t *fd )
GL_SetState( GLSTATE_NO_DEPTH_TEST );
GL_Bind( 0, r_bloombackuptexture );
- qglColor4f( 1, 1, 1, 1 );
+ pglColor4f( 1, 1, 1, 1 );
R_Bloom_Quad( 0, 0, r_screenbackuptexture_width, r_screenbackuptexture_height, 1.0f, 1.0f );
- qglScissor( RI.scissor[0], RI.scissor[1], RI.scissor[2], RI.scissor[3] );
+ pglScissor( RI.scissor[0], RI.scissor[1], RI.scissor[2], RI.scissor[3] );
R_Bloom_DrawEffect();
- qglViewport( RI.viewport[0], RI.viewport[1], RI.viewport[2], RI.viewport[3] );
+ pglViewport( RI.viewport[0], RI.viewport[1], RI.viewport[2], RI.viewport[3] );
}
diff --git a/render/r_cull.c b/render/r_cull.c
index c3d4eafc..dc25eeb8 100644
--- a/render/r_cull.c
+++ b/render/r_cull.c
@@ -310,7 +310,7 @@ void R_InitOcclusionQueries( void )
if( !glConfig.ext.occlusion_query )
return;
- qglGenQueriesARB( MAX_OQ_TOTAL, r_occlusionQueries );
+ pglGenQueriesARB( MAX_OQ_TOTAL, r_occlusionQueries );
meshbuf->sortkey = MB_ENTITY2NUM( r_worldent ) | MB_MODEL;
meshbuf->shaderkey = r_occlusionShader->sortkey;
@@ -335,9 +335,9 @@ void R_BeginOcclusionPass( void )
R_ClearSurfOcclusionQueryKeys();
- qglShadeModel( GL_FLAT );
- qglColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE );
- qglDisable( GL_TEXTURE_2D );
+ pglShadeModel( GL_FLAT );
+ pglColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE );
+ pglDisable( GL_TEXTURE_2D );
}
/*
@@ -358,13 +358,13 @@ void R_EndOcclusionPass( void )
R_BackendResetCounters();
if( r_occlusion_queries_finish->integer )
- qglFinish();
+ pglFinish();
else
- qglFlush();
+ pglFlush();
- qglShadeModel( GL_SMOOTH );
- qglEnable( GL_TEXTURE_2D );
- qglColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
+ pglShadeModel( GL_SMOOTH );
+ pglEnable( GL_TEXTURE_2D );
+ pglColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
}
/*
@@ -471,7 +471,7 @@ int R_IssueOcclusionQuery( int query, ref_entity_t *e, vec3_t mins, vec3_t maxs
mesh.elems = indices;
r_occlusionShader->flags &= ~( SHADER_CULL_BACK | SHADER_CULL_FRONT );
- qglBeginQueryARB( GL_SAMPLES_PASSED_ARB, r_occlusionQueries[query] );
+ pglBeginQueryARB( GL_SAMPLES_PASSED_ARB, r_occlusionQueries[query] );
R_TransformEntityBBox( e, mins, maxs, bbox, false );
for( i = 0; i < 8; i++ )
@@ -482,7 +482,7 @@ int R_IssueOcclusionQuery( int query, ref_entity_t *e, vec3_t mins, vec3_t maxs
R_PushMesh( &mesh, MF_NONBATCHED|MF_NOCULL );
R_RenderMeshBuffer( &r_occluderMB );
- qglEndQueryARB( GL_SAMPLES_PASSED_ARB );
+ pglEndQueryARB( GL_SAMPLES_PASSED_ARB );
return query;
}
@@ -515,21 +515,21 @@ unsigned int R_GetOcclusionQueryResult( int query, bool wait )
query = r_occlusionQueries[query];
- qglGetQueryObjectivARB( query, GL_QUERY_RESULT_AVAILABLE_ARB, &available );
+ pglGetQueryObjectivARB( query, GL_QUERY_RESULT_AVAILABLE_ARB, &available );
if( !available && wait )
{
int n = 0;
do
{
n++;
- qglGetQueryObjectivARB( query, GL_QUERY_RESULT_AVAILABLE_ARB, &available );
+ pglGetQueryObjectivARB( query, GL_QUERY_RESULT_AVAILABLE_ARB, &available );
} while( !available && ( n < 10000 ) );
}
if( !available )
return 0;
- qglGetQueryObjectuivARB( query, GL_QUERY_RESULT_ARB, &sampleCount );
+ pglGetQueryObjectuivARB( query, GL_QUERY_RESULT_ARB, &sampleCount );
return sampleCount;
}
@@ -565,6 +565,6 @@ void R_ShutdownOcclusionQueries( void )
if( !glConfig.ext.occlusion_query )
return;
- qglDeleteQueriesARB( MAX_OQ_TOTAL, r_occlusionQueries );
+ pglDeleteQueriesARB( MAX_OQ_TOTAL, r_occlusionQueries );
r_occludersQueued = false;
}
diff --git a/render/r_glimp.h b/render/r_glimp.h
index 093acde0..ba9d54a7 100644
--- a/render/r_glimp.h
+++ b/render/r_glimp.h
@@ -25,8 +25,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifdef _WIN32
#include
-#define QGL_WGL( type, name, params ) QGL_EXTERN type( APIENTRY * q ## name ) params;
-#define QGL_WGL_EXT( type, name, params ) QGL_EXTERN type( APIENTRY * q ## name ) params;
+#define QGL_WGL( type, name, params ) QGL_EXTERN type( APIENTRY * p ## name ) params;
+#define QGL_WGL_EXT( type, name, params ) QGL_EXTERN type( APIENTRY * p ## name ) params;
#define QGL_GLX( type, name, params )
#define QGL_GLX_EXT( type, name, params )
#endif
@@ -34,8 +34,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#if defined ( __linux__ ) || defined ( __FreeBSD__ )
#define QGL_WGL( type, name, params )
#define QGL_WGL_EXT( type, name, params )
-#define QGL_GLX( type, name, params ) QGL_EXTERN type( APIENTRY * q ## name ) params;
-#define QGL_GLX_EXT( type, name, params ) QGL_EXTERN type( APIENTRY * q ## name ) params;
+#define QGL_GLX( type, name, params ) QGL_EXTERN type( APIENTRY * p ## name ) params;
+#define QGL_GLX_EXT( type, name, params ) QGL_EXTERN type( APIENTRY * p ## name ) params;
#endif
#if defined ( __MACOSX__ )
@@ -45,8 +45,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define QGL_GLX_EXT( type, name, params )
#endif
-#define QGL_FUNC( type, name, params ) QGL_EXTERN type( APIENTRY * q ## name ) params;
-#define QGL_EXT( type, name, params ) QGL_EXTERN type( APIENTRY * q ## name ) params;
+#define QGL_FUNC( type, name, params ) QGL_EXTERN type( APIENTRY * p ## name ) params;
+#define QGL_EXT( type, name, params ) QGL_EXTERN type( APIENTRY * p ## name ) params;
#include "qgl.h"
diff --git a/render/r_image.c b/render/r_image.c
index 253247d2..f165ab5c 100644
--- a/render/r_image.c
+++ b/render/r_image.c
@@ -78,14 +78,14 @@ void GL_SelectTexture( int tmu )
glState.currentTMU = tmu;
- if( qglActiveTextureARB )
+ if( pglActiveTextureARB )
{
- qglActiveTextureARB( tmu + GL_TEXTURE0_ARB );
- qglClientActiveTextureARB( tmu + GL_TEXTURE0_ARB );
+ pglActiveTextureARB( tmu + GL_TEXTURE0_ARB );
+ pglClientActiveTextureARB( tmu + GL_TEXTURE0_ARB );
}
- else if( qglSelectTextureSGIS )
+ else if( pglSelectTextureSGIS )
{
- qglSelectTextureSGIS( tmu + GL_TEXTURE0_SGIS );
+ pglSelectTextureSGIS( tmu + GL_TEXTURE0_SGIS );
}
}
@@ -93,7 +93,7 @@ void GL_TexEnv( GLenum mode )
{
if( mode != ( GLenum )glState.currentEnvModes[glState.currentTMU] )
{
- qglTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode );
+ pglTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode );
glState.currentEnvModes[glState.currentTMU] = ( int )mode;
}
}
@@ -109,17 +109,17 @@ void GL_Bind( int tmu, image_t *tex )
glState.currentTextures[tmu] = tex->texnum;
if( tex->flags & IT_CUBEMAP )
- qglBindTexture( GL_TEXTURE_CUBE_MAP_ARB, tex->texnum );
+ pglBindTexture( GL_TEXTURE_CUBE_MAP_ARB, tex->texnum );
else if( tex->depth != 1 )
- qglBindTexture( GL_TEXTURE_3D, tex->texnum );
+ pglBindTexture( GL_TEXTURE_3D, tex->texnum );
else
- qglBindTexture( GL_TEXTURE_2D, tex->texnum );
+ pglBindTexture( GL_TEXTURE_2D, tex->texnum );
}
void GL_LoadTexMatrix( const mat4x4_t m )
{
- qglMatrixMode( GL_TEXTURE );
- qglLoadMatrixf( m );
+ pglMatrixMode( GL_TEXTURE );
+ pglLoadMatrixf( m );
glState.texIdentityMatrix[glState.currentTMU] = false;
}
@@ -127,8 +127,8 @@ void GL_LoadIdentityTexMatrix( void )
{
if( !glState.texIdentityMatrix[glState.currentTMU] )
{
- qglMatrixMode( GL_TEXTURE );
- qglLoadIdentity();
+ pglMatrixMode( GL_TEXTURE );
+ pglLoadIdentity();
glState.texIdentityMatrix[glState.currentTMU] = true;
}
}
@@ -164,16 +164,16 @@ void GL_EnableTexGen( int coord, int mode )
{
if( !( glState.genSTEnabled[tmu] & bit ) )
{
- qglEnable( gen );
+ pglEnable( gen );
glState.genSTEnabled[tmu] |= bit;
}
- qglTexGeni( coord, GL_TEXTURE_GEN_MODE, mode );
+ pglTexGeni( coord, GL_TEXTURE_GEN_MODE, mode );
}
else
{
if( glState.genSTEnabled[tmu] & bit )
{
- qglDisable( gen );
+ pglDisable( gen );
glState.genSTEnabled[tmu] &= ~bit;
}
}
@@ -194,14 +194,14 @@ void GL_SetTexCoordArrayMode( int mode )
if( cmode != bit )
{
if( cmode == 1 )
- qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
+ pglDisableClientState( GL_TEXTURE_COORD_ARRAY );
else if( cmode == 2 )
- qglDisable( GL_TEXTURE_CUBE_MAP_ARB );
+ pglDisable( GL_TEXTURE_CUBE_MAP_ARB );
if( bit == 1 )
- qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
+ pglEnableClientState( GL_TEXTURE_COORD_ARRAY );
else if( bit == 2 )
- qglEnable( GL_TEXTURE_CUBE_MAP_ARB );
+ pglEnable( GL_TEXTURE_CUBE_MAP_ARB );
glState.texCoordArrayMode[tmu] = bit;
}
@@ -256,18 +256,18 @@ void R_TextureMode( char *string )
if( glt->flags & IT_DEPTH )
{
- qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_depth );
- qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_depth );
+ pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_depth );
+ pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_depth );
}
else if( !( glt->flags & IT_NOMIPMAP ) )
{
- qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min );
- qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
+ pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min );
+ pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
}
else
{
- qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_max );
- qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
+ pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_max );
+ pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
}
}
}
@@ -755,44 +755,44 @@ void R_Upload32( byte **data, int width, int height, int flags, int *upload_widt
if( flags & IT_DEPTH )
{
- qglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_depth );
- qglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_depth );
+ pglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_depth );
+ pglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_depth );
if( glConfig.ext.texture_filter_anisotropic )
- qglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 );
+ pglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 );
}
else if( !( flags & IT_NOMIPMAP ) )
{
- qglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_min );
- qglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_max );
+ pglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_min );
+ pglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_max );
if( glConfig.ext.texture_filter_anisotropic )
- qglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, glConfig.curTextureFilterAnisotropic );
+ pglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, glConfig.curTextureFilterAnisotropic );
}
else
{
- qglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_max );
- qglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_max );
+ pglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_max );
+ pglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_max );
if( glConfig.ext.texture_filter_anisotropic )
- qglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 );
+ pglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 );
}
// clamp if required
if( !( flags & IT_CLAMP ) )
{
- qglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_REPEAT );
- qglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_REPEAT );
+ pglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_REPEAT );
+ pglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_REPEAT );
}
else if( glConfig.ext.texture_edge_clamp )
{
- qglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
- qglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
+ pglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
+ pglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
}
else
{
- qglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_CLAMP );
- qglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_CLAMP );
+ pglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_CLAMP );
+ pglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_CLAMP );
}
if( ( scaledWidth == width ) && ( scaledHeight == height ) && ( flags & IT_NOMIPMAP ) )
@@ -800,12 +800,12 @@ void R_Upload32( byte **data, int width, int height, int flags, int *upload_widt
if( subImage )
{
for( i = 0; i < numTextures; i++, target2++ )
- qglTexSubImage2D( target2, 0, 0, 0, scaledWidth, scaledHeight, format, GL_UNSIGNED_BYTE, data[i] );
+ pglTexSubImage2D( target2, 0, 0, 0, scaledWidth, scaledHeight, format, GL_UNSIGNED_BYTE, data[i] );
}
else
{
for( i = 0; i < numTextures; i++, target2++ )
- qglTexImage2D( target2, 0, comp, scaledWidth, scaledHeight, 0, format, GL_UNSIGNED_BYTE, data[i] );
+ pglTexImage2D( target2, 0, comp, scaledWidth, scaledHeight, 0, format, GL_UNSIGNED_BYTE, data[i] );
}
}
else
@@ -835,12 +835,12 @@ void R_Upload32( byte **data, int width, int height, int flags, int *upload_widt
// automatic mipmaps generation
if( !( flags & IT_NOMIPMAP ) && mip && driverMipmap )
- qglTexParameteri( target2, GL_GENERATE_MIPMAP_SGIS, GL_TRUE );
+ pglTexParameteri( target2, GL_GENERATE_MIPMAP_SGIS, GL_TRUE );
if( subImage )
- qglTexSubImage2D( target2, 0, 0, 0, scaledWidth, scaledHeight, format, GL_UNSIGNED_BYTE, mip );
+ pglTexSubImage2D( target2, 0, 0, 0, scaledWidth, scaledHeight, format, GL_UNSIGNED_BYTE, mip );
else
- qglTexImage2D( target2, 0, comp, scaledWidth, scaledHeight, 0, format, GL_UNSIGNED_BYTE, mip );
+ pglTexImage2D( target2, 0, comp, scaledWidth, scaledHeight, 0, format, GL_UNSIGNED_BYTE, mip );
// mipmaps generation
if( !( flags & IT_NOMIPMAP ) && mip && !driverMipmap )
@@ -863,9 +863,9 @@ void R_Upload32( byte **data, int width, int height, int flags, int *upload_widt
miplevel++;
if( subImage )
- qglTexSubImage2D( target2, miplevel, 0, 0, w, h, format, GL_UNSIGNED_BYTE, mip );
+ pglTexSubImage2D( target2, miplevel, 0, 0, w, h, format, GL_UNSIGNED_BYTE, mip );
else
- qglTexImage2D( target2, miplevel, comp, w, h, 0, format, GL_UNSIGNED_BYTE, mip );
+ pglTexImage2D( target2, miplevel, comp, w, h, 0, format, GL_UNSIGNED_BYTE, mip );
}
}
}
@@ -907,45 +907,45 @@ void R_Upload32_3D_Fast( byte **data, int width, int height, int depth, int flag
if( !( flags & IT_NOMIPMAP ) )
{
- qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, gl_filter_min );
- qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
+ pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, gl_filter_min );
+ pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
if( glConfig.ext.texture_filter_anisotropic )
- qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAX_ANISOTROPY_EXT, glConfig.curTextureFilterAnisotropic );
+ pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAX_ANISOTROPY_EXT, glConfig.curTextureFilterAnisotropic );
}
else
{
- qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, gl_filter_max );
- qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
+ pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, gl_filter_max );
+ pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
if( glConfig.ext.texture_filter_anisotropic )
- qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 );
+ pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 );
}
// clamp if required
if( !( flags & IT_CLAMP ) )
{
- qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT );
- qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT );
- qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT );
+ pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT );
+ pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT );
+ pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT );
}
else if( glConfig.ext.texture_edge_clamp )
{
- qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
- qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
- qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE );
+ pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
+ pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
+ pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE );
}
else
{
- qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP );
- qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP );
- qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP );
+ pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP );
+ pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP );
+ pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP );
}
if( subImage )
- qglTexSubImage3D( GL_TEXTURE_3D, 0, 0, 0, 0, scaledWidth, scaledHeight, scaledDepth, GL_RGBA, GL_UNSIGNED_BYTE, data[0] );
+ pglTexSubImage3D( GL_TEXTURE_3D, 0, 0, 0, 0, scaledWidth, scaledHeight, scaledDepth, GL_RGBA, GL_UNSIGNED_BYTE, data[0] );
else
- qglTexImage3D( GL_TEXTURE_3D, 0, comp, scaledWidth, scaledHeight, scaledDepth, 0, GL_RGBA, GL_UNSIGNED_BYTE, data[0] );
+ pglTexImage3D( GL_TEXTURE_3D, 0, comp, scaledWidth, scaledHeight, scaledDepth, 0, GL_RGBA, GL_UNSIGNED_BYTE, data[0] );
}
/*
@@ -976,7 +976,7 @@ static _inline image_t *R_InitPic( const char *name, byte **pic, int width, int
image->hash_next = images_hash[image_cur_hash];
images_hash[image_cur_hash] = image;
- qglDeleteTextures( 1, &image->texnum );
+ pglDeleteTextures( 1, &image->texnum );
GL_Bind( 0, image );
if( depth == 1 )
@@ -1209,7 +1209,7 @@ bool VID_ScreenShot( const char *filename, bool levelshot )
r_shot->buffer = Mem_Alloc( r_temppool, glState.width * glState.height * 3 );
// get screen frame
- qglReadPixels( 0, 0, glState.width, glState.height, GL_RGB, GL_UNSIGNED_BYTE, r_shot->buffer );
+ pglReadPixels( 0, 0, glState.width, glState.height, GL_RGB, GL_UNSIGNED_BYTE, r_shot->buffer );
if( levelshot ) flags |= IMAGE_RESAMPLE;
// else VID_ImageAdjustGamma( r_shot->buffer, r_shot->width, r_shot->height ); // adjust brightness
@@ -1256,7 +1256,7 @@ bool VID_CubemapShot( const char *base, uint size, bool skyshot )
if( skyshot ) R_DrawCubemapView( r_lastRefdef.vieworg, r_skyBoxAngles[i], size );
else R_DrawCubemapView( r_lastRefdef.vieworg, r_cubeMapAngles[i], size );
- qglReadPixels( 0, glState.height - size, size, size, GL_RGB, GL_UNSIGNED_BYTE, temp );
+ pglReadPixels( 0, glState.height - size, size, size, GL_RGB, GL_UNSIGNED_BYTE, temp );
Mem_Copy( buffer + (size * size * 3 * i), temp, size * size * 3 );
}
diff --git a/render/r_light.c b/render/r_light.c
index 8688e485..45bb4463 100644
--- a/render/r_light.c
+++ b/render/r_light.c
@@ -133,12 +133,12 @@ void R_AddDynamicLights( unsigned int dlightbits, int state )
if( glConfig.ext.texture3D )
{
GL_EnableTexGen( GL_R, GL_OBJECT_LINEAR );
- qglDisable( GL_TEXTURE_2D );
- qglEnable( GL_TEXTURE_3D );
+ pglDisable( GL_TEXTURE_2D );
+ pglEnable( GL_TEXTURE_3D );
}
else
{
- qglEnable( GL_TEXTURE_2D );
+ pglEnable( GL_TEXTURE_2D );
}
for( i = 0, light = r_dlights; i < r_numDlights; i++, light++ )
@@ -188,57 +188,57 @@ void R_AddDynamicLights( unsigned int dlightbits, int state )
GL_Bind( 0, r_dlighttexture );
GL_LoadTexMatrix( m );
- qglColor4f( light->color[0], light->color[1], light->color[2], 255 );
+ pglColor4f( light->color[0], light->color[1], light->color[2], 255 );
xyzFallof[0][0] = inverseIntensity;
xyzFallof[0][3] = -dlorigin[0] * inverseIntensity;
- qglTexGenfv( GL_S, GL_OBJECT_PLANE, xyzFallof[0] );
+ pglTexGenfv( GL_S, GL_OBJECT_PLANE, xyzFallof[0] );
xyzFallof[1][1] = inverseIntensity;
xyzFallof[1][3] = -dlorigin[1] * inverseIntensity;
- qglTexGenfv( GL_T, GL_OBJECT_PLANE, xyzFallof[1] );
+ pglTexGenfv( GL_T, GL_OBJECT_PLANE, xyzFallof[1] );
xyzFallof[2][2] = inverseIntensity;
xyzFallof[2][3] = -dlorigin[2] * inverseIntensity;
if( glConfig.ext.texture3D )
{
- qglTexGenfv( GL_R, GL_OBJECT_PLANE, xyzFallof[2] );
+ pglTexGenfv( GL_R, GL_OBJECT_PLANE, xyzFallof[2] );
}
else
{
GL_Bind( 1, r_dlighttexture );
GL_LoadTexMatrix( m );
- qglTexGenfv( GL_S, GL_OBJECT_PLANE, xyzFallof[2] );
- qglTexGenfv( GL_T, GL_OBJECT_PLANE, xyzFallof[3] );
+ pglTexGenfv( GL_S, GL_OBJECT_PLANE, xyzFallof[2] );
+ pglTexGenfv( GL_T, GL_OBJECT_PLANE, xyzFallof[3] );
}
if( numTempElems )
{
if( glConfig.ext.draw_range_elements )
- qglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, numTempElems, GL_UNSIGNED_INT, tempElemsArray );
+ pglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, numTempElems, GL_UNSIGNED_INT, tempElemsArray );
else
- qglDrawElements( GL_TRIANGLES, numTempElems, GL_UNSIGNED_INT, tempElemsArray );
+ pglDrawElements( GL_TRIANGLES, numTempElems, GL_UNSIGNED_INT, tempElemsArray );
}
else
{
if( glConfig.ext.draw_range_elements )
- qglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray );
+ pglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray );
else
- qglDrawElements( GL_TRIANGLES, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray );
+ pglDrawElements( GL_TRIANGLES, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray );
}
}
if( glConfig.ext.texture3D )
{
GL_EnableTexGen( GL_R, 0 );
- qglDisable( GL_TEXTURE_3D );
- qglEnable( GL_TEXTURE_2D );
+ pglDisable( GL_TEXTURE_3D );
+ pglEnable( GL_TEXTURE_2D );
}
else
{
- qglDisable( GL_TEXTURE_2D );
+ pglDisable( GL_TEXTURE_2D );
GL_SelectTexture( 0 );
}
}
diff --git a/render/r_local.h b/render/r_local.h
index 6cfec4f1..749745c1 100644
--- a/render/r_local.h
+++ b/render/r_local.h
@@ -299,6 +299,7 @@ extern cvar_t *r_ignorehwgamma;
extern cvar_t *r_overbrightbits;
extern cvar_t *r_mapoverbrightbits;
extern cvar_t *r_lefthand;
+extern cvar_t *r_physbdebug;
extern cvar_t *r_flares;
extern cvar_t *r_flaresize;
diff --git a/render/r_main.c b/render/r_main.c
index a7581258..df3c94d4 100644
--- a/render/r_main.c
+++ b/render/r_main.c
@@ -104,14 +104,14 @@ void GL_Cull( int cull )
if( !cull )
{
- qglDisable( GL_CULL_FACE );
+ pglDisable( GL_CULL_FACE );
glState.faceCull = 0;
return;
}
if( !glState.faceCull )
- qglEnable( GL_CULL_FACE );
- qglCullFace( cull );
+ pglEnable( GL_CULL_FACE );
+ pglCullFace( cull );
glState.faceCull = cull;
}
@@ -200,20 +200,20 @@ void GL_SetState( int state )
if( state & GLSTATE_BLEND_MTEX )
{
if( glState.currentEnvModes[glState.currentTMU] != GL_REPLACE )
- qglEnable( GL_BLEND );
+ pglEnable( GL_BLEND );
else
- qglDisable( GL_BLEND );
+ pglDisable( GL_BLEND );
}
else
{
- qglEnable( GL_BLEND );
+ pglEnable( GL_BLEND );
}
- qglBlendFunc( blendsrc, blenddst );
+ pglBlendFunc( blendsrc, blenddst );
}
else
{
- qglDisable( GL_BLEND );
+ pglDisable( GL_BLEND );
}
}
@@ -222,51 +222,51 @@ void GL_SetState( int state )
if( state & GLSTATE_ALPHAFUNC )
{
if( !( glState.flags & GLSTATE_ALPHAFUNC ) )
- qglEnable( GL_ALPHA_TEST );
+ pglEnable( GL_ALPHA_TEST );
if( state & GLSTATE_AFUNC_GT0 )
- qglAlphaFunc( GL_GREATER, 0 );
+ pglAlphaFunc( GL_GREATER, 0 );
else if( state & GLSTATE_AFUNC_LT128 )
- qglAlphaFunc( GL_LESS, 0.5f );
+ pglAlphaFunc( GL_LESS, 0.5f );
else
- qglAlphaFunc( GL_GEQUAL, 0.5f );
+ pglAlphaFunc( GL_GEQUAL, 0.5f );
}
else
{
- qglDisable( GL_ALPHA_TEST );
+ pglDisable( GL_ALPHA_TEST );
}
}
if( diff & GLSTATE_DEPTHFUNC_EQ )
{
if( state & GLSTATE_DEPTHFUNC_EQ )
- qglDepthFunc( GL_EQUAL );
+ pglDepthFunc( GL_EQUAL );
else
- qglDepthFunc( GL_LEQUAL );
+ pglDepthFunc( GL_LEQUAL );
}
if( diff & GLSTATE_DEPTHWRITE )
{
if( state & GLSTATE_DEPTHWRITE )
- qglDepthMask( GL_TRUE );
+ pglDepthMask( GL_TRUE );
else
- qglDepthMask( GL_FALSE );
+ pglDepthMask( GL_FALSE );
}
if( diff & GLSTATE_NO_DEPTH_TEST )
{
if( state & GLSTATE_NO_DEPTH_TEST )
- qglDisable( GL_DEPTH_TEST );
+ pglDisable( GL_DEPTH_TEST );
else
- qglEnable( GL_DEPTH_TEST );
+ pglEnable( GL_DEPTH_TEST );
}
if( diff & GLSTATE_OFFSET_FILL )
{
if( state & GLSTATE_OFFSET_FILL )
- qglEnable( GL_POLYGON_OFFSET_FILL );
+ pglEnable( GL_POLYGON_OFFSET_FILL );
else
- qglDisable( GL_POLYGON_OFFSET_FILL );
+ pglDisable( GL_POLYGON_OFFSET_FILL );
}
glState.flags = state;
@@ -279,7 +279,7 @@ GL_FrontFace
*/
void GL_FrontFace( int front )
{
- qglFrontFace( front ? GL_CW : GL_CCW );
+ pglFrontFace( front ? GL_CW : GL_CCW );
glState.frontFace = front;
}
@@ -324,7 +324,7 @@ void R_LoadIdentity( void )
{
Matrix4_Identity( RI.objectMatrix );
Matrix4_Copy( RI.worldviewMatrix, RI.modelviewMatrix );
- qglLoadMatrixf( RI.modelviewMatrix );
+ pglLoadMatrixf( RI.modelviewMatrix );
}
/*
@@ -374,7 +374,7 @@ void R_RotateForEntity( ref_entity_t *e )
RI.objectMatrix[15] = 1.0;
Matrix4_MultiplyFast( RI.worldviewMatrix, RI.objectMatrix, RI.modelviewMatrix );
- qglLoadMatrixf( RI.modelviewMatrix );
+ pglLoadMatrixf( RI.modelviewMatrix );
}
/*
@@ -397,7 +397,7 @@ void R_TranslateForEntity( ref_entity_t *e )
RI.objectMatrix[14] = e->origin[2];
Matrix4_MultiplyFast( RI.worldviewMatrix, RI.objectMatrix, RI.modelviewMatrix );
- qglLoadMatrixf( RI.modelviewMatrix );
+ pglLoadMatrixf( RI.modelviewMatrix );
}
/*
@@ -631,7 +631,7 @@ static void R_PushFlareSurf( const meshbuffer_t *mb )
if( v[1] < RI.refdef.viewport[1] || v[1] > RI.refdef.viewport[1] + RI.refdef.viewport[3] )
return;
- qglReadPixels( (int)( v[0] /* + 0.5f*/ ), (int)( v[1] /* + 0.5f*/ ), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth );
+ pglReadPixels( (int)( v[0] /* + 0.5f*/ ), (int)( v[1] /* + 0.5f*/ ), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth );
if( depth + 1e-4 < v[2] )
return; // occluded
@@ -848,18 +848,18 @@ void R_Set2DMode( bool enable )
return;
// set 2D virtual screen size
- qglScissor( 0, 0, glState.width, glState.height );
- qglViewport( 0, 0, glState.width, glState.height );
- qglMatrixMode( GL_PROJECTION );
- qglLoadIdentity();
- qglOrtho( 0, glState.width, glState.height, 0, -99999, 99999 );
- qglMatrixMode( GL_MODELVIEW );
- qglLoadIdentity();
+ pglScissor( 0, 0, glState.width, glState.height );
+ pglViewport( 0, 0, glState.width, glState.height );
+ pglMatrixMode( GL_PROJECTION );
+ pglLoadIdentity();
+ pglOrtho( 0, glState.width, glState.height, 0, -99999, 99999 );
+ pglMatrixMode( GL_MODELVIEW );
+ pglLoadIdentity();
GL_Cull( 0 );
GL_SetState( GLSTATE_NO_DEPTH_TEST );
- qglColor4f( 1, 1, 1, 1 );
+ pglColor4f( 1, 1, 1, 1 );
glState.in2DMode = true;
RI.currententity = RI.previousentity = NULL;
@@ -949,16 +949,16 @@ void R_DrawStretchRaw( int x, int y, int w, int h, int cols, int rows, byte *dat
r_cintexture->width = cols;
r_cintexture->height = rows;
- qglBegin( GL_QUADS );
- qglTexCoord2f( 0, 0 );
- qglVertex2f( x, y );
- qglTexCoord2f( 1, 0 );
- qglVertex2f( x + w, y );
- qglTexCoord2f( 1, 1 );
- qglVertex2f( x + w, y + h );
- qglTexCoord2f( 0, 1 );
- qglVertex2f( x, y + h );
- qglEnd();
+ pglBegin( GL_QUADS );
+ pglTexCoord2f( 0, 0 );
+ pglVertex2f( x, y );
+ pglTexCoord2f( 1, 0 );
+ pglVertex2f( x + w, y );
+ pglTexCoord2f( 1, 1 );
+ pglVertex2f( x + w, y + h );
+ pglTexCoord2f( 0, 1 );
+ pglVertex2f( x, y + h );
+ pglEnd();
}
/*
@@ -973,29 +973,29 @@ static void R_PolyBlend( void )
if( RI.refdef.blend[3] < 0.01f )
return;
- qglMatrixMode( GL_PROJECTION );
- qglLoadIdentity();
- qglOrtho( 0, 1, 1, 0, -99999, 99999 );
+ pglMatrixMode( GL_PROJECTION );
+ pglLoadIdentity();
+ pglOrtho( 0, 1, 1, 0, -99999, 99999 );
- qglMatrixMode( GL_MODELVIEW );
- qglLoadIdentity();
+ pglMatrixMode( GL_MODELVIEW );
+ pglLoadIdentity();
GL_Cull( 0 );
GL_SetState( GLSTATE_NO_DEPTH_TEST|GLSTATE_SRCBLEND_SRC_ALPHA|GLSTATE_DSTBLEND_ONE_MINUS_SRC_ALPHA );
- qglDisable( GL_TEXTURE_2D );
+ pglDisable( GL_TEXTURE_2D );
- qglColor4fv( RI.refdef.blend );
+ pglColor4fv( RI.refdef.blend );
- qglBegin( GL_TRIANGLES );
- qglVertex2f( -5, -5 );
- qglVertex2f( 10, -5 );
- qglVertex2f( -5, 10 );
- qglEnd();
+ pglBegin( GL_TRIANGLES );
+ pglVertex2f( -5, -5 );
+ pglVertex2f( 10, -5 );
+ pglVertex2f( -5, 10 );
+ pglEnd();
- qglEnable( GL_TEXTURE_2D );
+ pglEnable( GL_TEXTURE_2D );
- qglColor4f( 1, 1, 1, 1 );
+ pglColor4f( 1, 1, 1, 1 );
}
/*
@@ -1011,17 +1011,17 @@ static void R_ApplySoftwareGamma( void )
if( !r_ignorehwgamma->integer )
return;
- qglMatrixMode( GL_PROJECTION );
- qglLoadIdentity();
- qglOrtho( 0, 1, 1, 0, -99999, 99999 );
+ pglMatrixMode( GL_PROJECTION );
+ pglLoadIdentity();
+ pglOrtho( 0, 1, 1, 0, -99999, 99999 );
- qglMatrixMode( GL_MODELVIEW );
- qglLoadIdentity();
+ pglMatrixMode( GL_MODELVIEW );
+ pglLoadIdentity();
GL_Cull( 0 );
GL_SetState( GLSTATE_NO_DEPTH_TEST | GLSTATE_SRCBLEND_DST_COLOR | GLSTATE_DSTBLEND_ONE );
- qglDisable( GL_TEXTURE_2D );
+ pglDisable( GL_TEXTURE_2D );
if( r_overbrightbits->integer > 0 )
div = 0.5 * (double)( 1 << r_overbrightbits->integer );
@@ -1030,26 +1030,26 @@ static void R_ApplySoftwareGamma( void )
f = div + r_gamma->value;
f = bound( 0.1f, f, 5.0f );
- qglBegin( GL_TRIANGLES );
+ pglBegin( GL_TRIANGLES );
while( f >= 1.01f )
{
if( f >= 2 )
- qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
+ pglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
else
- qglColor4f( f - 1.0f, f - 1.0f, f - 1.0f, 1.0f );
+ pglColor4f( f - 1.0f, f - 1.0f, f - 1.0f, 1.0f );
- qglVertex2f( -5, -5 );
- qglVertex2f( 10, -5 );
- qglVertex2f( -5, 10 );
+ pglVertex2f( -5, -5 );
+ pglVertex2f( 10, -5 );
+ pglVertex2f( -5, 10 );
f *= 0.5;
}
- qglEnd();
+ pglEnd();
- qglEnable( GL_TEXTURE_2D );
+ pglEnable( GL_TEXTURE_2D );
- qglColor4f( 1, 1, 1, 1 );
+ pglColor4f( 1, 1, 1, 1 );
}
//=============================================================================
@@ -1346,20 +1346,20 @@ static void R_Clear( int bitMask )
bits &= bitMask;
if( bits & GL_STENCIL_BUFFER_BIT )
- qglClearStencil( 128 );
+ pglClearStencil( 128 );
if( bits & GL_COLOR_BUFFER_BIT )
{
byte *color = r_worldmodel && !( RI.refdef.rdflags & RDF_NOWORLDMODEL ) && r_worldbrushmodel->globalfog ?
r_worldbrushmodel->globalfog->shader->fog_color : mapConfig.environmentColor;
- qglClearColor( (float)color[0]*( 1.0/255.0 ), (float)color[1]*( 1.0/255.0 ), (float)color[2]*( 1.0/255.0 ), 1 );
+ pglClearColor( (float)color[0]*( 1.0/255.0 ), (float)color[1]*( 1.0/255.0 ), (float)color[2]*( 1.0/255.0 ), 1 );
}
- qglClear( bits );
+ pglClear( bits );
gldepthmin = 0;
gldepthmax = 1;
- qglDepthRange( gldepthmin, gldepthmax );
+ pglDepthRange( gldepthmin, gldepthmax );
}
/*
@@ -1369,14 +1369,14 @@ R_SetupGL
*/
static void R_SetupGL( void )
{
- qglScissor( RI.scissor[0], RI.scissor[1], RI.scissor[2], RI.scissor[3] );
- qglViewport( RI.viewport[0], RI.viewport[1], RI.viewport[2], RI.viewport[3] );
+ pglScissor( RI.scissor[0], RI.scissor[1], RI.scissor[2], RI.scissor[3] );
+ pglViewport( RI.viewport[0], RI.viewport[1], RI.viewport[2], RI.viewport[3] );
- qglMatrixMode( GL_PROJECTION );
- qglLoadMatrixf( RI.projectionMatrix );
+ pglMatrixMode( GL_PROJECTION );
+ pglLoadMatrixf( RI.projectionMatrix );
- qglMatrixMode( GL_MODELVIEW );
- qglLoadMatrixf( RI.worldviewMatrix );
+ pglMatrixMode( GL_MODELVIEW );
+ pglLoadMatrixf( RI.worldviewMatrix );
if( RI.params & RP_CLIPPLANE )
{
@@ -1388,8 +1388,8 @@ static void R_SetupGL( void )
clip[2] = p->normal[2];
clip[3] = -p->dist;
- qglClipPlane( GL_CLIP_PLANE0, clip );
- qglEnable( GL_CLIP_PLANE0 );
+ pglClipPlane( GL_CLIP_PLANE0, clip );
+ pglEnable( GL_CLIP_PLANE0 );
}
if( RI.params & RP_FLIPFRONTFACE )
@@ -1397,11 +1397,11 @@ static void R_SetupGL( void )
if( RI.params & RP_SHADOWMAPVIEW )
{
- qglShadeModel( GL_FLAT );
- qglColorMask( 0, 0, 0, 0 );
- qglPolygonOffset( 1, 4 );
+ pglShadeModel( GL_FLAT );
+ pglColorMask( 0, 0, 0, 0 );
+ pglPolygonOffset( 1, 4 );
if( prevRI.params & RP_CLIPPLANE )
- qglDisable( GL_CLIP_PLANE0 );
+ pglDisable( GL_CLIP_PLANE0 );
}
GL_Cull( GL_FRONT );
@@ -1417,18 +1417,18 @@ static void R_EndGL( void )
{
if( RI.params & RP_SHADOWMAPVIEW )
{
- qglPolygonOffset( -1, -2 );
- qglColorMask( 1, 1, 1, 1 );
- qglShadeModel( GL_SMOOTH );
+ pglPolygonOffset( -1, -2 );
+ pglColorMask( 1, 1, 1, 1 );
+ pglShadeModel( GL_SMOOTH );
if( prevRI.params & RP_CLIPPLANE )
- qglEnable( GL_CLIP_PLANE0 );
+ pglEnable( GL_CLIP_PLANE0 );
}
if( RI.params & RP_FLIPFRONTFACE )
GL_FrontFace( !glState.frontFace );
if( RI.params & RP_CLIPPLANE )
- qglDisable( GL_CLIP_PLANE0 );
+ pglDisable( GL_CLIP_PLANE0 );
}
@@ -1548,27 +1548,27 @@ R_DrawNullModel
*/
static void R_DrawNullModel( void )
{
- qglBegin( GL_LINES );
+ pglBegin( GL_LINES );
- qglColor4f( 1, 0, 0, 0.5 );
- qglVertex3fv( RI.currententity->origin );
- qglVertex3f( RI.currententity->origin[0] + RI.currententity->axis[0][0] * 15,
+ pglColor4f( 1, 0, 0, 0.5 );
+ pglVertex3fv( RI.currententity->origin );
+ pglVertex3f( RI.currententity->origin[0] + RI.currententity->axis[0][0] * 15,
RI.currententity->origin[1] + RI.currententity->axis[0][1] * 15,
RI.currententity->origin[2] + RI.currententity->axis[0][2] * 15 );
- qglColor4f( 0, 1, 0, 0.5 );
- qglVertex3fv( RI.currententity->origin );
- qglVertex3f( RI.currententity->origin[0] - RI.currententity->axis[1][0] * 15,
+ pglColor4f( 0, 1, 0, 0.5 );
+ pglVertex3fv( RI.currententity->origin );
+ pglVertex3f( RI.currententity->origin[0] - RI.currententity->axis[1][0] * 15,
RI.currententity->origin[1] - RI.currententity->axis[1][1] * 15,
RI.currententity->origin[2] - RI.currententity->axis[1][2] * 15 );
- qglColor4f( 0, 0, 1, 0.5 );
- qglVertex3fv( RI.currententity->origin );
- qglVertex3f( RI.currententity->origin[0] + RI.currententity->axis[2][0] * 15,
+ pglColor4f( 0, 0, 1, 0.5 );
+ pglVertex3fv( RI.currententity->origin );
+ pglVertex3f( RI.currententity->origin[0] + RI.currententity->axis[2][0] * 15,
RI.currententity->origin[1] + RI.currententity->axis[2][1] * 15,
RI.currententity->origin[2] + RI.currententity->axis[2][2] * 15 );
- qglEnd();
+ pglEnd();
}
/*
@@ -1661,7 +1661,7 @@ static void R_DrawNullEntities( void )
if( !r_numnullentities )
return;
- qglDisable( GL_TEXTURE_2D );
+ pglDisable( GL_TEXTURE_2D );
GL_SetState( GLSTATE_SRCBLEND_SRC_ALPHA|GLSTATE_DSTBLEND_ONE_MINUS_SRC_ALPHA );
// draw non-transparent first
@@ -1683,7 +1683,7 @@ static void R_DrawNullEntities( void )
R_DrawNullModel();
}
- qglEnable( GL_TEXTURE_2D );
+ pglEnable( GL_TEXTURE_2D );
}
/*
@@ -1862,6 +1862,8 @@ void R_RenderView( const ref_params_t *fd )
R_RenderDebugSurface ();
+ R_DrawPhysDebug ();
+
R_DrawNullEntities();
R_EndGL();
@@ -1882,8 +1884,8 @@ static void R_UpdateSwapInterval( void )
if( !glState.stereoEnabled )
{
- if( qglSwapInterval )
- qglSwapInterval( r_swapinterval->integer );
+ if( pglSwapInterval )
+ pglSwapInterval( r_swapinterval->integer );
}
}
}
@@ -1931,7 +1933,7 @@ void R_BeginFrame( void )
// apply software gamma
// R_ApplySoftwareGamma ();
- qglFinish();
+ pglFinish();
GLimp_EndFrame();
}
@@ -1967,8 +1969,8 @@ void R_BeginFrame( void )
rgba_t color;
Vector4Copy( mapConfig.environmentColor, color );
- qglClearColor( color[0]*( 1.0/255.0 ), color[1]*( 1.0/255.0 ), color[2]*( 1.0/255.0 ), 1 );
- qglClear( GL_COLOR_BUFFER_BIT );
+ pglClearColor( color[0]*( 1.0/255.0 ), color[1]*( 1.0/255.0 ), color[2]*( 1.0/255.0 ), 1 );
+ pglClear( GL_COLOR_BUFFER_BIT );
}
// update gamma
@@ -1992,9 +1994,9 @@ void R_BeginFrame( void )
if( glState.cameraSeparation == 0 || !glState.stereoEnabled )
{
if( com.stricmp( gl_drawbuffer->string, "GL_FRONT" ) == 0 )
- qglDrawBuffer( GL_FRONT );
+ pglDrawBuffer( GL_FRONT );
else
- qglDrawBuffer( GL_BACK );
+ pglDrawBuffer( GL_BACK );
}
}
@@ -2117,7 +2119,7 @@ void R_RenderScene( const ref_params_t *fd )
VectorCopy( fd->vieworg, RI.lodOrigin );
if( gl_finish->integer && !gl_delayfinish->integer && !( fd->rdflags & RDF_NOWORLDMODEL ) )
- qglFinish();
+ pglFinish();
R_ClearShadowmaps();
@@ -2155,7 +2157,7 @@ void R_EndFrame( void )
if( gl_finish->integer && gl_delayfinish->integer )
{
- qglFlush();
+ pglFlush();
return;
}
@@ -2306,61 +2308,25 @@ bool R_AddLightStyle( int stylenum, vec3_t color )
return true;
}
-bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac )
+bool R_AddGenericEntity( edict_t *pRefEntity, ref_entity_t *refent, int ed_type, float lerpfrac )
{
- ref_entity_t *refent;
- int i;
-
- if( !pRefEntity || !pRefEntity->v.modelindex )
- return false; // if set to invisible, skip
- if( r_numEntities >= MAX_ENTITIES ) return false;
-
- refent = &r_entities[r_numEntities];
-
- if( pRefEntity->v.effects & EF_NODRAW )
- return true; // done
-
- // filter ents
- switch( ed_type )
- {
- case ED_MOVER:
- case ED_CLIENT:
- case ED_NORMAL:
- case ED_MONSTER:
- case ED_BSPBRUSH:
- case ED_RIGIDBODY:
- case ED_VIEWMODEL: break;
- default: return false;
- }
-
- // copy state to render
- refent->index = pRefEntity->serialnumber;
- refent->ent_type = ed_type;
- refent->backlerp = 1.0f - lerpfrac;
- refent->rendermode = pRefEntity->v.rendermode;
- refent->body = pRefEntity->v.body;
- refent->scale = pRefEntity->v.scale;
- refent->colormap = pRefEntity->v.colormap;
- refent->effects = pRefEntity->v.effects;
- VectorCopy( pRefEntity->v.rendercolor, refent->rendercolor );
- refent->renderamt = pRefEntity->v.renderamt;
- refent->model = cl_models[pRefEntity->v.modelindex];
- refent->movetype = pRefEntity->v.movetype;
- refent->framerate = pRefEntity->v.framerate;
- refent->prev.sequencetime = refent->animtime - refent->prev.animtime;
+ int i;
// check model
if( !refent->model ) return false;
+
switch( refent->model->type )
{
case mod_brush: break;
case mod_studio:
if( !refent->model->extradata )
return false;
+ refent->rtype = RT_MODEL;
break;
case mod_sprite:
if( !refent->model->extradata )
return false;
+ refent->rtype = RT_SPRITE;
break;
case mod_bad: // let the render drawing null model
break;
@@ -2369,14 +2335,7 @@ bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac )
// setup latchedvars
VectorCopy( pRefEntity->v.oldorigin, refent->prev.origin );
VectorCopy( pRefEntity->v.oldangles, refent->prev.angles );
-
- // interpolate origin
- for( i = 0; i < 3; i++ )
- refent->origin[i] = LerpPoint( pRefEntity->v.oldorigin[i], pRefEntity->v.origin[i], lerpfrac );
- refent->skin = pRefEntity->v.skin;
- refent->renderfx = pRefEntity->v.renderfx;
-
// do animate
if( refent->effects & EF_ANIMATE )
{
@@ -2421,12 +2380,14 @@ bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac )
refent->sequence = pRefEntity->v.sequence;
}
+ refent->prev.sequencetime = refent->animtime - refent->prev.animtime;
refent->weaponmodel = cl_models[pRefEntity->v.weaponmodel];
+
if( refent->ent_type == ED_MOVER || refent->ent_type == ED_BSPBRUSH )
{
- // store conveyor movedir in pev->velocity
- VectorNormalize2( pRefEntity->v.velocity, refent->movedir );
+ VectorNormalize2( pRefEntity->v.movedir, refent->movedir );
}
+ else VectorClear( refent->movedir );
// calculate angles
if( refent->effects & EF_ROTATE )
@@ -2441,7 +2402,11 @@ bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac )
refent->angles[i] = LerpAngle( pRefEntity->v.oldangles[i], pRefEntity->v.angles[i], lerpfrac );
}
+ // interpolate origin
+ for( i = 0; i < 3; i++ )
+ refent->origin[i] = LerpPoint( pRefEntity->v.oldorigin[i], pRefEntity->v.origin[i], lerpfrac );
AngleVectorsFLU( refent->angles, refent->axis[0], refent->axis[1], refent->axis[2] );
+ VectorClear( refent->origin2 );
if(( refent->ent_type == ED_VIEWMODEL ) && ( r_lefthand->integer == 1 ))
VectorNegate( refent->axis[1], refent->axis[1] );
@@ -2479,11 +2444,85 @@ bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac )
// and ignore all other unset ents
}
}
+ return true;
+}
+
+bool R_AddPortalEntity( edict_t *pRefEntity, ref_entity_t *refent, int ed_type, float lerpfrac )
+{
+ refent->rtype = RT_PORTALSURFACE;
+
+ VectorClear( refent->angles );
+ Matrix_Identity( refent->axis );
+ VectorCopy( pRefEntity->v.movedir, refent->movedir );
+ VectorCopy( pRefEntity->v.origin, refent->origin );
+ VectorCopy( pRefEntity->v.oldorigin, refent->origin2 );
+
+ // calculate angles
+ if( refent->effects & EF_ROTATE )
+ Matrix_Rotate( refent->axis, 5 * sin(( 0.25f + RI.refdef.time * 50 * 0.01 ) * M_PI2 ), 1, 0, 0 );
+ return true;
+}
+
+bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac )
+{
+ ref_entity_t *refent;
+ bool result = false;
+
+ if( !pRefEntity || !pRefEntity->v.modelindex )
+ return false; // if set to invisible, skip
+ if( r_numEntities >= MAX_ENTITIES ) return false;
+
+ refent = &r_entities[r_numEntities];
+
+ if( pRefEntity->v.effects & EF_NODRAW )
+ return true; // done
+
+ // filter ents
+ switch( ed_type )
+ {
+ case ED_MOVER:
+ case ED_PORTAL:
+ case ED_CLIENT:
+ case ED_NORMAL:
+ case ED_MONSTER:
+ case ED_BSPBRUSH:
+ case ED_RIGIDBODY:
+ case ED_VIEWMODEL: break;
+ default: return false;
+ }
+
+ // copy state to render
+ refent->index = pRefEntity->serialnumber;
+ refent->ent_type = ed_type;
+ refent->backlerp = 1.0f - lerpfrac;
+ refent->rendermode = pRefEntity->v.rendermode;
+ refent->body = pRefEntity->v.body;
+ refent->skin = pRefEntity->v.skin;
+ refent->scale = pRefEntity->v.scale;
+ refent->colormap = pRefEntity->v.colormap;
+ refent->effects = pRefEntity->v.effects;
+ refent->renderfx = pRefEntity->v.renderfx;
+ VectorCopy( pRefEntity->v.rendercolor, refent->rendercolor );
+ refent->renderamt = pRefEntity->v.renderamt;
+ refent->model = cl_models[pRefEntity->v.modelindex];
+ refent->movetype = pRefEntity->v.movetype;
+ refent->framerate = pRefEntity->v.framerate;
+
+ // setup rtype
+ switch( ed_type )
+ {
+ case ED_PORTAL:
+ result = R_AddPortalEntity( pRefEntity, refent, ed_type, lerpfrac );
+ break;
+ default:
+ result = R_AddGenericEntity( pRefEntity, refent, ed_type, lerpfrac );
+ break;
+ }
// add entity
r_numEntities++;
- return true;
+ return result;
}
bool R_AddDynamicLight( vec3_t org, vec3_t color, float intensity )
diff --git a/render/r_mesh.c b/render/r_mesh.c
index 6d822375..4a19003a 100644
--- a/render/r_mesh.c
+++ b/render/r_mesh.c
@@ -967,11 +967,7 @@ setup_and_render:
NormalVectorToAxis( A[0], A );
// build portal_dest-to-world rotation matrix
-#if 0
- ByteToDir( ent->frame, portal_plane->normal );
-#else
- AngleVectors( vec3_origin, portal_plane->normal, NULL, NULL );
-#endif
+ VectorCopy( ent->movedir, portal_plane->normal );
NormalVectorToAxis( portal_plane->normal, B );
Matrix_Transpose( B, C );
@@ -1049,11 +1045,11 @@ setup_and_render:
{
GL_Cull( 0 );
GL_SetState( GLSTATE_NO_DEPTH_TEST );
- qglColor4f( 1, 1, 1, 1 );
+ pglColor4f( 1, 1, 1, 1 );
// grab the results from framebuffer
GL_Bind( 0, *captureTexture );
- qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, RI.refdef.viewport[0], RI.refdef.viewport[1], ( *captureTexture )->upload_width, ( *captureTexture )->upload_height );
+ pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, RI.refdef.viewport[0], RI.refdef.viewport[1], ( *captureTexture )->upload_width, ( *captureTexture )->upload_height );
RI.params |= ( refraction ? RP_PORTALCAPTURED2 : RP_PORTALCAPTURED );
}
diff --git a/render/r_program.c b/render/r_program.c
index 955972a0..5f9938ef 100644
--- a/render/r_program.c
+++ b/render/r_program.c
@@ -143,20 +143,20 @@ static void R_DeleteGLSLProgram( glsl_program_t *program )
{
if( program->vertexShader )
{
- qglDetachObjectARB( program->object, program->vertexShader );
- qglDeleteObjectARB( program->vertexShader );
+ pglDetachObjectARB( program->object, program->vertexShader );
+ pglDeleteObjectARB( program->vertexShader );
program->vertexShader = 0;
}
if( program->fragmentShader )
{
- qglDetachObjectARB( program->object, program->fragmentShader );
- qglDeleteObjectARB( program->fragmentShader );
+ pglDetachObjectARB( program->object, program->fragmentShader );
+ pglDeleteObjectARB( program->fragmentShader );
program->fragmentShader = 0;
}
if( program->object )
- qglDeleteObjectARB( program->object );
+ pglDeleteObjectARB( program->object );
if( program->name )
Mem_Free( program->name );
@@ -173,30 +173,30 @@ static int R_CompileGLSLShader( int program, const char *programName, const char
{
int shader, compiled;
- shader = qglCreateShaderObjectARB( (GLenum)shaderType );
+ shader = pglCreateShaderObjectARB( (GLenum)shaderType );
if( !shader )
return 0;
// if lengths is NULL, then each string is assumed to be null-terminated
- qglShaderSourceARB( shader, numStrings, strings, NULL );
- qglCompileShaderARB( shader );
- qglGetObjectParameterivARB( shader, GL_OBJECT_COMPILE_STATUS_ARB, &compiled );
+ pglShaderSourceARB( shader, numStrings, strings, NULL );
+ pglCompileShaderARB( shader );
+ pglGetObjectParameterivARB( shader, GL_OBJECT_COMPILE_STATUS_ARB, &compiled );
if( !compiled )
{
char log[4096];
- qglGetInfoLogARB( shader, sizeof( log ) - 1, NULL, log );
+ pglGetInfoLogARB( shader, sizeof( log ) - 1, NULL, log );
log[sizeof( log ) - 1] = 0;
if( log[0] )
MsgDev( D_ERROR, "Failed to compile %s shader for program %s:\n%s\n", shaderName, programName, log );
- qglDeleteObjectARB( shader );
+ pglDeleteObjectARB( shader );
return 0;
}
- qglAttachObjectARB( program, shader );
+ pglAttachObjectARB( program, shader );
return shader;
}
@@ -926,7 +926,7 @@ int R_RegisterGLSLProgram( const char *name, const char *string, unsigned int fe
}
program = r_glslprograms + i;
- program->object = qglCreateProgramObjectARB();
+ program->object = pglCreateProgramObjectARB();
if( !program->object )
{
error = 1;
@@ -969,13 +969,13 @@ int R_RegisterGLSLProgram( const char *name, const char *string, unsigned int fe
}
// link
- qglLinkProgramARB( program->object );
- qglGetObjectParameterivARB( program->object, GL_OBJECT_LINK_STATUS_ARB, &linked );
+ pglLinkProgramARB( program->object );
+ pglGetObjectParameterivARB( program->object, GL_OBJECT_LINK_STATUS_ARB, &linked );
if( !linked )
{
char log[8192];
- qglGetInfoLogARB( program->object, sizeof( log ), NULL, log );
+ pglGetInfoLogARB( program->object, sizeof( log ), NULL, log );
log[sizeof( log ) - 1] = 0;
if( log[0] )
@@ -995,9 +995,9 @@ done:
if( program->object )
{
- qglUseProgramObjectARB( program->object );
+ pglUseProgramObjectARB( program->object );
R_GetProgramUniformLocations( program );
- qglUseProgramObjectARB( 0 );
+ pglUseProgramObjectARB( 0 );
}
return ( program - r_glslprograms ) + 1;
@@ -1069,43 +1069,43 @@ void R_UpdateProgramUniforms( int elem, vec3_t eyeOrigin,
glsl_program_t *program = r_glslprograms + elem - 1;
if( program->locEyeOrigin >= 0 && eyeOrigin )
- qglUniform3fARB( program->locEyeOrigin, eyeOrigin[0], eyeOrigin[1], eyeOrigin[2] );
+ pglUniform3fARB( program->locEyeOrigin, eyeOrigin[0], eyeOrigin[1], eyeOrigin[2] );
if( program->locLightOrigin >= 0 && lightOrigin )
- qglUniform3fARB( program->locLightOrigin, lightOrigin[0], lightOrigin[1], lightOrigin[2] );
+ pglUniform3fARB( program->locLightOrigin, lightOrigin[0], lightOrigin[1], lightOrigin[2] );
if( program->locLightDir >= 0 && lightDir )
- qglUniform3fARB( program->locLightDir, lightDir[0], lightDir[1], lightDir[2] );
+ pglUniform3fARB( program->locLightDir, lightDir[0], lightDir[1], lightDir[2] );
if( program->locLightAmbient >= 0 && ambient )
- qglUniform3fARB( program->locLightAmbient, ambient[0], ambient[1], ambient[2] );
+ pglUniform3fARB( program->locLightAmbient, ambient[0], ambient[1], ambient[2] );
if( program->locLightDiffuse >= 0 && diffuse )
- qglUniform3fARB( program->locLightDiffuse, diffuse[0], diffuse[1], diffuse[2] );
+ pglUniform3fARB( program->locLightDiffuse, diffuse[0], diffuse[1], diffuse[2] );
if( program->locGlossIntensity >= 0 )
- qglUniform1fARB( program->locGlossIntensity, r_lighting_glossintensity->value );
+ pglUniform1fARB( program->locGlossIntensity, r_lighting_glossintensity->value );
if( program->locGlossExponent >= 0 )
- qglUniform1fARB( program->locGlossExponent, r_lighting_glossexponent->value );
+ pglUniform1fARB( program->locGlossExponent, r_lighting_glossexponent->value );
if( program->locOffsetMappingScale >= 0 )
- qglUniform1fARB( program->locOffsetMappingScale, offsetmappingScale );
+ pglUniform1fARB( program->locOffsetMappingScale, offsetmappingScale );
#ifdef HARDWARE_OUTLINES
if( program->locOutlineHeight >= 0 )
- qglUniform1fARB( program->locOutlineHeight, projDistance );
+ pglUniform1fARB( program->locOutlineHeight, projDistance );
if( program->locOutlineCutOff >= 0 )
- qglUniform1fARB( program->locOutlineCutOff, max( 0, r_outlines_cutoff->value ) );
+ pglUniform1fARB( program->locOutlineCutOff, max( 0, r_outlines_cutoff->value ) );
#endif
if( program->locFrontPlane >= 0 )
- qglUniform1fARB( program->locFrontPlane, frontPlane ? 1 : -1 );
+ pglUniform1fARB( program->locFrontPlane, frontPlane ? 1 : -1 );
if( program->locTextureWidth >= 0 )
- qglUniform1fARB( program->locTextureWidth, TexWidth );
+ pglUniform1fARB( program->locTextureWidth, TexWidth );
if( program->locTextureHeight >= 0 )
- qglUniform1fARB( program->locTextureHeight, TexHeight );
+ pglUniform1fARB( program->locTextureHeight, TexHeight );
if( program->locProjDistance >= 0 )
- qglUniform1fARB( program->locProjDistance, projDistance );
+ pglUniform1fARB( program->locProjDistance, projDistance );
if( superLightStyle )
{
@@ -1116,15 +1116,15 @@ void R_UpdateProgramUniforms( int elem, vec3_t eyeOrigin,
vec_t *rgb = r_lightStyles[superLightStyle->lightmapStyles[i]].rgb;
if( program->locDeluxemapOffset[i] >= 0 )
- qglUniform1fARB( program->locDeluxemapOffset[i], superLightStyle->stOffset[i][0] );
+ pglUniform1fARB( program->locDeluxemapOffset[i], superLightStyle->stOffset[i][0] );
if( program->loclsColor[i] >= 0 )
- qglUniform3fARB( program->loclsColor[i], rgb[0], rgb[1], rgb[2] );
+ pglUniform3fARB( program->loclsColor[i], rgb[0], rgb[1], rgb[2] );
}
for( ; i < LM_STYLES; i++ )
{
if( program->loclsColor[i] >= 0 )
- qglUniform3fARB( program->loclsColor[i], 0, 0, 0 );
+ pglUniform3fARB( program->loclsColor[i], 0, 0, 0 );
}
}
}
@@ -1148,76 +1148,76 @@ static void R_GetProgramUniformLocations( glsl_program_t *program )
locShadowmapTexture;
char uniformName[128];
- program->locEyeOrigin = qglGetUniformLocationARB( program->object, "EyeOrigin" );
- program->locLightDir = qglGetUniformLocationARB( program->object, "LightDir" );
- program->locLightOrigin = qglGetUniformLocationARB( program->object, "LightOrigin" );
- program->locLightAmbient = qglGetUniformLocationARB( program->object, "LightAmbient" );
- program->locLightDiffuse = qglGetUniformLocationARB( program->object, "LightDiffuse" );
+ program->locEyeOrigin = pglGetUniformLocationARB( program->object, "EyeOrigin" );
+ program->locLightDir = pglGetUniformLocationARB( program->object, "LightDir" );
+ program->locLightOrigin = pglGetUniformLocationARB( program->object, "LightOrigin" );
+ program->locLightAmbient = pglGetUniformLocationARB( program->object, "LightAmbient" );
+ program->locLightDiffuse = pglGetUniformLocationARB( program->object, "LightDiffuse" );
- locBaseTexture = qglGetUniformLocationARB( program->object, "BaseTexture" );
- locNormalmapTexture = qglGetUniformLocationARB( program->object, "NormalmapTexture" );
- locGlossTexture = qglGetUniformLocationARB( program->object, "GlossTexture" );
- locDecalTexture = qglGetUniformLocationARB( program->object, "DecalTexture" );
+ locBaseTexture = pglGetUniformLocationARB( program->object, "BaseTexture" );
+ locNormalmapTexture = pglGetUniformLocationARB( program->object, "NormalmapTexture" );
+ locGlossTexture = pglGetUniformLocationARB( program->object, "GlossTexture" );
+ locDecalTexture = pglGetUniformLocationARB( program->object, "DecalTexture" );
- locDuDvMapTexture = qglGetUniformLocationARB( program->object, "DuDvMapTexture" );
- locReflectionTexture = qglGetUniformLocationARB( program->object, "ReflectionTexture" );
- locRefractionTexture = qglGetUniformLocationARB( program->object, "RefractionTexture" );
+ locDuDvMapTexture = pglGetUniformLocationARB( program->object, "DuDvMapTexture" );
+ locReflectionTexture = pglGetUniformLocationARB( program->object, "ReflectionTexture" );
+ locRefractionTexture = pglGetUniformLocationARB( program->object, "RefractionTexture" );
- locShadowmapTexture = qglGetUniformLocationARB( program->object, "ShadowmapTexture" );
+ locShadowmapTexture = pglGetUniformLocationARB( program->object, "ShadowmapTexture" );
for( i = 0; i < LM_STYLES; i++ )
{
com.snprintf( uniformName, sizeof( uniformName ), "LightmapTexture%i", i );
- locLightmapTexture[i] = qglGetUniformLocationARB( program->object, uniformName );
+ locLightmapTexture[i] = pglGetUniformLocationARB( program->object, uniformName );
com.snprintf( uniformName, sizeof( uniformName ), "DeluxemapOffset%i", i );
- program->locDeluxemapOffset[i] = qglGetUniformLocationARB( program->object, uniformName );
+ program->locDeluxemapOffset[i] = pglGetUniformLocationARB( program->object, uniformName );
com.snprintf( uniformName, sizeof( uniformName ), "lsColor%i", i );
- program->loclsColor[i] = qglGetUniformLocationARB( program->object, uniformName );
+ program->loclsColor[i] = pglGetUniformLocationARB( program->object, uniformName );
}
- program->locGlossIntensity = qglGetUniformLocationARB( program->object, "GlossIntensity" );
- program->locGlossExponent = qglGetUniformLocationARB( program->object, "GlossExponent" );
+ program->locGlossIntensity = pglGetUniformLocationARB( program->object, "GlossIntensity" );
+ program->locGlossExponent = pglGetUniformLocationARB( program->object, "GlossExponent" );
- program->locOffsetMappingScale = qglGetUniformLocationARB( program->object, "OffsetMappingScale" );
+ program->locOffsetMappingScale = pglGetUniformLocationARB( program->object, "OffsetMappingScale" );
#ifdef HARDWARE_OUTLINES
- program->locOutlineHeight = qglGetUniformLocationARB( program->object, "OutlineHeight" );
- program->locOutlineCutOff = qglGetUniformLocationARB( program->object, "OutlineCutOff" );
+ program->locOutlineHeight = pglGetUniformLocationARB( program->object, "OutlineHeight" );
+ program->locOutlineCutOff = pglGetUniformLocationARB( program->object, "OutlineCutOff" );
#endif
- program->locFrontPlane = qglGetUniformLocationARB( program->object, "FrontPlane" );
+ program->locFrontPlane = pglGetUniformLocationARB( program->object, "FrontPlane" );
- program->locTextureWidth = qglGetUniformLocationARB( program->object, "TextureWidth" );
- program->locTextureHeight = qglGetUniformLocationARB( program->object, "TextureHeight" );
+ program->locTextureWidth = pglGetUniformLocationARB( program->object, "TextureWidth" );
+ program->locTextureHeight = pglGetUniformLocationARB( program->object, "TextureHeight" );
- program->locProjDistance = qglGetUniformLocationARB( program->object, "ProjDistance" );
+ program->locProjDistance = pglGetUniformLocationARB( program->object, "ProjDistance" );
if( locBaseTexture >= 0 )
- qglUniform1iARB( locBaseTexture, 0 );
+ pglUniform1iARB( locBaseTexture, 0 );
if( locDuDvMapTexture >= 0 )
- qglUniform1iARB( locDuDvMapTexture, 0 );
+ pglUniform1iARB( locDuDvMapTexture, 0 );
if( locNormalmapTexture >= 0 )
- qglUniform1iARB( locNormalmapTexture, 1 );
+ pglUniform1iARB( locNormalmapTexture, 1 );
if( locGlossTexture >= 0 )
- qglUniform1iARB( locGlossTexture, 2 );
+ pglUniform1iARB( locGlossTexture, 2 );
if( locDecalTexture >= 0 )
- qglUniform1iARB( locDecalTexture, 3 );
+ pglUniform1iARB( locDecalTexture, 3 );
if( locReflectionTexture >= 0 )
- qglUniform1iARB( locReflectionTexture, 2 );
+ pglUniform1iARB( locReflectionTexture, 2 );
if( locRefractionTexture >= 0 )
- qglUniform1iARB( locRefractionTexture, 3 );
+ pglUniform1iARB( locRefractionTexture, 3 );
if( locShadowmapTexture >= 0 )
- qglUniform1iARB( locShadowmapTexture, 0 );
+ pglUniform1iARB( locShadowmapTexture, 0 );
for( i = 0; i < LM_STYLES; i++ )
{
if( locLightmapTexture[i] >= 0 )
- qglUniform1iARB( locLightmapTexture[i], i+4 );
+ pglUniform1iARB( locLightmapTexture[i], i+4 );
}
}
diff --git a/render/r_register.c b/render/r_register.c
index 4adaa51b..22709e70 100644
--- a/render/r_register.c
+++ b/render/r_register.c
@@ -99,6 +99,7 @@ cvar_t *r_3dlabs_broken;
cvar_t *r_lodbias;
cvar_t *r_lodscale;
cvar_t *r_lefthand;
+cvar_t *r_physbdebug;
cvar_t *r_environment_color;
cvar_t *r_stencilbits;
@@ -156,7 +157,7 @@ typedef struct
static void R_FinalizeGLExtensions( void );
#define GL_EXTENSION_FUNC_EXT(name,func) { name, (void ** const)func }
-#define GL_EXTENSION_FUNC(name) GL_EXTENSION_FUNC_EXT("gl"#name,&(qgl##name))
+#define GL_EXTENSION_FUNC(name) GL_EXTENSION_FUNC_EXT("gl"#name,&(pgl##name))
/* GL_ARB_multitexture */
static const gl_extension_func_t gl_ext_multitexture_ARB_funcs[] =
@@ -196,7 +197,7 @@ static const gl_extension_func_t gl_ext_texture3D_EXT_funcs[] =
static const gl_extension_func_t gl_ext_draw_range_elements_EXT_funcs[] =
{
GL_EXTENSION_FUNC(DrawRangeElementsEXT)
- ,GL_EXTENSION_FUNC_EXT("glDrawRangeElements",&qglDrawRangeElementsEXT)
+ ,GL_EXTENSION_FUNC_EXT("glDrawRangeElements",&pglDrawRangeElementsEXT)
,GL_EXTENSION_FUNC_EXT(NULL,NULL)
};
@@ -272,7 +273,7 @@ static const gl_extension_func_t gl_ext_occlusion_query_ARB_funcs[] =
/* WGL_EXT_swap_interval */
static const gl_extension_func_t wgl_ext_swap_interval_EXT_funcs[] =
{
- GL_EXTENSION_FUNC_EXT("wglSwapIntervalEXT",&qglSwapInterval)
+ GL_EXTENSION_FUNC_EXT("wglSwapIntervalEXT",&pglSwapInterval)
,GL_EXTENSION_FUNC_EXT(NULL,NULL)
};
@@ -283,7 +284,7 @@ static const gl_extension_func_t wgl_ext_swap_interval_EXT_funcs[] =
/* GLX_SGI_occlusion_query */
static const gl_extension_func_t glx_ext_swap_control_SGI_funcs[] =
{
- GL_EXTENSION_FUNC_EXT("glXSwapIntervalSGI",&qglSwapInterval)
+ GL_EXTENSION_FUNC_EXT("glXSwapIntervalSGI",&pglSwapInterval)
,GL_EXTENSION_FUNC_EXT(NULL,NULL)
};
@@ -306,8 +307,8 @@ static const gl_extension_func_t gl_ext_multitexture_SGIS_funcs[] =
/* WGL_3DFX_gamma_control */
static const gl_extension_func_t wgl_ext_gamma_control_3DFX_funcs[] =
{
- GL_EXTENSION_FUNC_EXT("wglGetDeviceGammaRamp3DFX",&qwglGetDeviceGammaRamp3DFX)
- ,GL_EXTENSION_FUNC_EXT("wglSetDeviceGammaRamp3DFX",&qwglSetDeviceGammaRamp3DFX)
+ GL_EXTENSION_FUNC_EXT("wglGetDeviceGammaRamp3DFX",&pwglGetDeviceGammaRamp3DFX)
+ ,GL_EXTENSION_FUNC_EXT("wglSetDeviceGammaRamp3DFX",&pwglSetDeviceGammaRamp3DFX)
,GL_EXTENSION_FUNC_EXT(NULL,NULL)
};
@@ -434,7 +435,7 @@ void R_RegisterGLExtensions( void )
if( func )
{
do {
- *(func->pointer) = ( void * )qglGetProcAddress( (const GLubyte *)func->name );
+ *(func->pointer) = ( void * )pglGetProcAddress( (const GLubyte *)func->name );
if( !*(func->pointer) )
break;
} while( (++func)->name );
@@ -496,7 +497,7 @@ static void R_FinalizeGLExtensions( void )
int flags = 0;
glConfig.maxTextureSize = 0;
- qglGetIntegerv( GL_MAX_TEXTURE_SIZE, &glConfig.maxTextureSize );
+ pglGetIntegerv( GL_MAX_TEXTURE_SIZE, &glConfig.maxTextureSize );
if( glConfig.maxTextureSize <= 0 )
glConfig.maxTextureSize = 256;
@@ -506,21 +507,21 @@ static void R_FinalizeGLExtensions( void )
/* GL_ARB_texture_cube_map */
glConfig.maxTextureCubemapSize = 0;
if( glConfig.ext.texture_cube_map )
- qglGetIntegerv( GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB, &glConfig.maxTextureCubemapSize );
+ pglGetIntegerv( GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB, &glConfig.maxTextureCubemapSize );
if( glConfig.maxTextureCubemapSize <= 1 )
glConfig.ext.texture_cube_map = false;
/* GL_EXT_texture3D */
glConfig.maxTextureSize3D = 0;
if( glConfig.ext.texture3D )
- qglGetIntegerv( GL_MAX_3D_TEXTURE_SIZE, &glConfig.maxTextureSize3D );
+ pglGetIntegerv( GL_MAX_3D_TEXTURE_SIZE, &glConfig.maxTextureSize3D );
if( glConfig.maxTextureSize3D <= 1 )
glConfig.ext.texture3D = false;
/* GL_ARB_multitexture */
glConfig.maxTextureUnits = 1;
if( glConfig.ext.multitexture ) {
- qglGetIntegerv( GL_MAX_TEXTURE_UNITS, &glConfig.maxTextureUnits );
+ pglGetIntegerv( GL_MAX_TEXTURE_UNITS, &glConfig.maxTextureUnits );
glConfig.maxTextureUnits = bound( 1, glConfig.maxTextureUnits, MAX_TEXTURE_UNITS );
}
if( glConfig.maxTextureUnits == 1 )
@@ -529,7 +530,7 @@ static void R_FinalizeGLExtensions( void )
/* GL_EXT_texture_filter_anisotropic */
glConfig.maxTextureFilterAnisotropic = 0;
if( strstr( glConfig.extensionsString, "GL_EXT_texture_filter_anisotropic" ) )
- qglGetIntegerv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &glConfig.maxTextureFilterAnisotropic );
+ pglGetIntegerv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &glConfig.maxTextureFilterAnisotropic );
Cvar_Get( "gl_ext_texture_filter_anisotropic_max", "0", CVAR_INIT, "textures anisotropic filter" );
Cvar_Set( "gl_ext_texture_filter_anisotropic_max", va( "%i", glConfig.maxTextureFilterAnisotropic ) );
@@ -575,6 +576,7 @@ void R_Register( void )
r_skymip = Cvar_Get( "r_skymip", "0", CVAR_ARCHIVE|CVAR_LATCH_VIDEO, "reduces resolution of skybox textures by powers of 2" );
r_polyblend = Cvar_Get( "r_polyblend", "1", 0, "tints view while underwater, hurt, etc" );
r_lefthand = Cvar_Get( "hand", "0", CVAR_USERINFO | CVAR_ARCHIVE, "viewmodel handedness" );
+ r_physbdebug = Cvar_Get( "cm_debugdraw", "0", CVAR_ARCHIVE, "draw physics hulls" );
r_bloom = Cvar_Get( "r_bloom", "0", CVAR_ARCHIVE, "enable or disable bloom-effect" );
r_bloom_alpha = Cvar_Get( "r_bloom_alpha", "0.2", CVAR_ARCHIVE, "bloom alpha multiplier" );
@@ -794,46 +796,46 @@ static void R_SetGLDefaults( void )
{
int i;
- qglFinish();
+ pglFinish();
- qglClearColor( 1, 0, 0.5, 0.5 );
+ pglClearColor( 1, 0, 0.5, 0.5 );
- qglEnable( GL_DEPTH_TEST );
- qglDisable( GL_CULL_FACE );
- qglEnable( GL_SCISSOR_TEST );
- qglDepthFunc( GL_LEQUAL );
- qglDepthMask( GL_FALSE );
+ pglEnable( GL_DEPTH_TEST );
+ pglDisable( GL_CULL_FACE );
+ pglEnable( GL_SCISSOR_TEST );
+ pglDepthFunc( GL_LEQUAL );
+ pglDepthMask( GL_FALSE );
- qglColor4f( 1, 1, 1, 1 );
+ pglColor4f( 1, 1, 1, 1 );
if( glState.stencilEnabled )
{
- qglDisable( GL_STENCIL_TEST );
- qglStencilMask( ( GLuint ) ~0 );
- qglStencilFunc( GL_EQUAL, 128, 0xFF );
- qglStencilOp( GL_KEEP, GL_KEEP, GL_INCR );
+ pglDisable( GL_STENCIL_TEST );
+ pglStencilMask( ( GLuint ) ~0 );
+ pglStencilFunc( GL_EQUAL, 128, 0xFF );
+ pglStencilOp( GL_KEEP, GL_KEEP, GL_INCR );
}
// enable gouraud shading
- qglShadeModel( GL_SMOOTH );
+ pglShadeModel( GL_SMOOTH );
- qglPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
- qglPolygonOffset( -1, -2 );
+ pglPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
+ pglPolygonOffset( -1, -2 );
// properly disable multitexturing at startup
for( i = glConfig.maxTextureUnits-1; i > 0; i-- )
{
GL_SelectTexture( i );
GL_TexEnv( GL_MODULATE );
- qglDisable( GL_BLEND );
- qglDisable( GL_TEXTURE_2D );
+ pglDisable( GL_BLEND );
+ pglDisable( GL_TEXTURE_2D );
}
GL_SelectTexture( 0 );
- qglDisable( GL_BLEND );
- qglDisable( GL_ALPHA_TEST );
- qglDisable( GL_POLYGON_OFFSET_FILL );
- qglEnable( GL_TEXTURE_2D );
+ pglDisable( GL_BLEND );
+ pglDisable( GL_ALPHA_TEST );
+ pglDisable( GL_POLYGON_OFFSET_FILL );
+ pglEnable( GL_TEXTURE_2D );
GL_Cull( 0 );
GL_FrontFace( 0 );
@@ -843,11 +845,11 @@ static void R_SetGLDefaults( void )
R_TextureMode( r_texturemode->string );
- qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min );
- qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
+ pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min );
+ pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
- qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
- qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
+ pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
+ pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
}
/*
@@ -910,7 +912,7 @@ int R_InitRender( void *hinstance, void *hWnd, bool verbose )
driver = gl_driver->string;
// initialize our QGL dynamic bindings
-init_qgl:
+init_pgl:
if( !QGL_Init( gl_driver->string ) )
{
QGL_Shutdown();
@@ -919,7 +921,7 @@ init_qgl:
if( com.strcmp( gl_driver->string, "opengl32.dll" ))
{
Cvar_Set( gl_driver->name, "opengl32.dll" );
- goto init_qgl;
+ goto init_pgl;
}
return false;
@@ -943,11 +945,11 @@ init_qgl:
/*
** get our various GL strings
*/
- glConfig.vendorString = (const char *)qglGetString( GL_VENDOR );
- glConfig.rendererString = (const char *)qglGetString( GL_RENDERER );
- glConfig.versionString = (const char *)qglGetString( GL_VERSION );
- glConfig.extensionsString = (const char *)qglGetString( GL_EXTENSIONS );
- glConfig.glwExtensionsString = (const char *)qglGetGLWExtensionsString ();
+ glConfig.vendorString = (const char *)pglGetString( GL_VENDOR );
+ glConfig.rendererString = (const char *)pglGetString( GL_RENDERER );
+ glConfig.versionString = (const char *)pglGetString( GL_VERSION );
+ glConfig.extensionsString = (const char *)pglGetString( GL_EXTENSIONS );
+ glConfig.glwExtensionsString = (const char *)pglGetGLWExtensionsString ();
if( !glConfig.vendorString ) glConfig.vendorString = "";
if( !glConfig.rendererString ) glConfig.rendererString = "";
@@ -1013,7 +1015,7 @@ init_qgl:
R_ClearScene();
- err = qglGetError();
+ err = pglGetError();
if( err != GL_NO_ERROR )
Msg( "glGetError() = 0x%x\n", err );
diff --git a/render/r_shadow.c b/render/r_shadow.c
index 04a94870..5566fe37 100644
--- a/render/r_shadow.c
+++ b/render/r_shadow.c
@@ -166,17 +166,17 @@ void R_PlanarShadowPass( int state )
GL_SetTexCoordArrayMode( 0 );
GL_SetState( state );
- qglColor4f( 0, 0, 0, bound( 0.0f, r_shadows_alpha->value, 1.0f ) );
+ pglColor4f( 0, 0, 0, bound( 0.0f, r_shadows_alpha->value, 1.0f ) );
- qglDisable( GL_TEXTURE_2D );
+ pglDisable( GL_TEXTURE_2D );
if( glState.stencilEnabled )
- qglEnable( GL_STENCIL_TEST );
+ pglEnable( GL_STENCIL_TEST );
R_FlushArrays();
if( glState.stencilEnabled )
- qglDisable( GL_STENCIL_TEST );
- qglEnable( GL_TEXTURE_2D );
+ pglDisable( GL_STENCIL_TEST );
+ pglEnable( GL_TEXTURE_2D );
}
/*
@@ -477,7 +477,7 @@ void R_DrawShadowmaps( void )
{ // capture results from framebuffer into depth texture
prevRI.shadowBits |= group->bit;
GL_Bind( 0, group->depthTexture );
- qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, RI.refdef.viewport[0], RI.refdef.viewport[1], textureWidth, textureHeight );
+ pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, RI.refdef.viewport[0], RI.refdef.viewport[1], textureWidth, textureHeight );
}
Matrix4_Copy( RI.worldviewProjectionMatrix, group->worldviewProjectionMatrix );
diff --git a/render/r_skm.c b/render/r_skm.c
index c7d8e070..682ff517 100644
--- a/render/r_skm.c
+++ b/render/r_skm.c
@@ -1267,7 +1267,7 @@ void R_DrawSkeletalModel( const meshbuffer_t *mb )
// hack the depth range to prevent view model from poking into walls
if( e->flags & RF_WEAPONMODEL )
- qglDepthRange( gldepthmin, gldepthmin + 0.3 * ( gldepthmax - gldepthmin ) );
+ pglDepthRange( gldepthmin, gldepthmin + 0.3 * ( gldepthmax - gldepthmin ) );
// backface culling for left-handed weapons
if( e->flags & RF_CULLHACK )
@@ -1279,7 +1279,7 @@ void R_DrawSkeletalModel( const meshbuffer_t *mb )
R_DrawBonesFrameLerp( mb, e->backlerp );
if( e->flags & RF_WEAPONMODEL )
- qglDepthRange( gldepthmin, gldepthmax );
+ pglDepthRange( gldepthmin, gldepthmax );
if( e->flags & RF_CULLHACK )
GL_FrontFace( !glState.frontFace );
diff --git a/render/r_sky.c b/render/r_sky.c
index 9c1bf4fb..ae450d60 100644
--- a/render/r_sky.c
+++ b/render/r_sky.c
@@ -346,14 +346,14 @@ void R_DrawSky( ref_shader_t *shader )
m[13] = 0;
m[14] = 0;
m[15] = 1.0;
- qglLoadMatrixf( m );
+ pglLoadMatrixf( m );
gldepthmin = 1;
gldepthmax = 1;
- qglDepthRange( gldepthmin, gldepthmax );
+ pglDepthRange( gldepthmin, gldepthmax );
if( RI.params & RP_CLIPPLANE )
- qglDisable( GL_CLIP_PLANE0 );
+ pglDisable( GL_CLIP_PLANE0 );
// it can happen that sky surfaces have no fog hull specified
// yet there's a global fog hull (see wvwq3dm7)
@@ -396,14 +396,14 @@ void R_DrawSky( ref_shader_t *shader )
R_DrawSkyBox( skydome, skydome->nearboxShaders );
if( RI.params & RP_CLIPPLANE )
- qglEnable( GL_CLIP_PLANE0 );
+ pglEnable( GL_CLIP_PLANE0 );
Matrix4_Copy( oldm, RI.modelviewMatrix );
- qglLoadMatrixf( RI.worldviewMatrix );
+ pglLoadMatrixf( RI.worldviewMatrix );
gldepthmin = 0;
gldepthmax = 1;
- qglDepthRange( gldepthmin, gldepthmax );
+ pglDepthRange( gldepthmin, gldepthmax );
r_skyfog = NULL;
}
diff --git a/render/render.plg b/render/render.plg
index 4ec5f77c..c5158a88 100644
--- a/render/render.plg
+++ b/render/render.plg
@@ -6,96 +6,6 @@
--------------------Configuration: render - Win32 Debug--------------------
Command Lines
-Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAB2.tmp" with contents
-[
-/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../public" /I "../common" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\render\!debug/" /Fo"..\temp\render\!debug/" /Fd"..\temp\render\!debug/" /FD /c
-"D:\Xash3D\src_main\render\cin.c"
-"D:\Xash3D\src_main\render\r_alias.c"
-"D:\Xash3D\src_main\render\r_backend.c"
-"D:\Xash3D\src_main\render\r_bloom.c"
-"D:\Xash3D\src_main\render\r_cin.c"
-"D:\Xash3D\src_main\render\r_cull.c"
-"D:\Xash3D\src_main\render\r_image.c"
-"D:\Xash3D\src_main\render\r_light.c"
-"D:\Xash3D\src_main\render\r_main.c"
-"D:\Xash3D\src_main\render\r_math.c"
-"D:\Xash3D\src_main\render\r_mesh.c"
-"D:\Xash3D\src_main\render\r_model.c"
-"D:\Xash3D\src_main\render\r_poly.c"
-"D:\Xash3D\src_main\render\r_program.c"
-"D:\Xash3D\src_main\render\r_register.c"
-"D:\Xash3D\src_main\render\r_shader.c"
-"D:\Xash3D\src_main\render\r_shadow.c"
-"D:\Xash3D\src_main\render\r_skin.c"
-"D:\Xash3D\src_main\render\r_skm.c"
-"D:\Xash3D\src_main\render\r_sky.c"
-"D:\Xash3D\src_main\render\r_surf.c"
-]
-Creating command line "cl.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAB2.tmp"
-Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAB3.tmp" with contents
-[
-msvcrtd.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"..\temp\render\!debug/render.pdb" /debug /machine:I386 /nodefaultlib:"msvcrt.lib" /out:"..\temp\render\!debug/render.dll" /implib:"..\temp\render\!debug/render.lib" /pdbtype:sept
-"\Xash3D\src_main\temp\render\!debug\cin.obj"
-"\Xash3D\src_main\temp\render\!debug\glw_imp.obj"
-"\Xash3D\src_main\temp\render\!debug\qgl_win.obj"
-"\Xash3D\src_main\temp\render\!debug\r_alias.obj"
-"\Xash3D\src_main\temp\render\!debug\r_backend.obj"
-"\Xash3D\src_main\temp\render\!debug\r_bloom.obj"
-"\Xash3D\src_main\temp\render\!debug\r_cin.obj"
-"\Xash3D\src_main\temp\render\!debug\r_cull.obj"
-"\Xash3D\src_main\temp\render\!debug\r_image.obj"
-"\Xash3D\src_main\temp\render\!debug\r_light.obj"
-"\Xash3D\src_main\temp\render\!debug\r_main.obj"
-"\Xash3D\src_main\temp\render\!debug\r_math.obj"
-"\Xash3D\src_main\temp\render\!debug\r_mesh.obj"
-"\Xash3D\src_main\temp\render\!debug\r_model.obj"
-"\Xash3D\src_main\temp\render\!debug\r_poly.obj"
-"\Xash3D\src_main\temp\render\!debug\r_program.obj"
-"\Xash3D\src_main\temp\render\!debug\r_register.obj"
-"\Xash3D\src_main\temp\render\!debug\r_shader.obj"
-"\Xash3D\src_main\temp\render\!debug\r_shadow.obj"
-"\Xash3D\src_main\temp\render\!debug\r_skin.obj"
-"\Xash3D\src_main\temp\render\!debug\r_skm.obj"
-"\Xash3D\src_main\temp\render\!debug\r_sky.obj"
-"\Xash3D\src_main\temp\render\!debug\r_surf.obj"
-]
-Creating command line "link.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAB3.tmp"
-Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAB4.bat" with contents
-[
-@echo off
-copy \Xash3D\src_main\temp\render\!debug\render.dll "D:\Xash3D\bin\render.dll"
-]
-Creating command line "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAB4.bat"
-Compiling...
-cin.c
-r_alias.c
-r_backend.c
-r_bloom.c
-r_cin.c
-r_cull.c
-r_image.c
-r_light.c
-r_main.c
-r_math.c
-r_mesh.c
-r_model.c
-r_poly.c
-r_program.c
-r_register.c
-r_shader.c
-r_shadow.c
-r_skin.c
-r_skm.c
-r_sky.c
-Generating Code...
-Compiling...
-r_surf.c
-Generating Code...
-Linking...
- Creating library ..\temp\render\!debug/render.lib and object ..\temp\render\!debug/render.exp
-Output Window
-Performing Custom Build Step on \Xash3D\src_main\temp\render\!debug\render.dll
-‘ª®¯¨à®¢ ® ä ©«®¢: 1.
diff --git a/server/ents/baseinfo.cpp b/server/ents/baseinfo.cpp
index 194decae..778d8cb8 100644
--- a/server/ents/baseinfo.cpp
+++ b/server/ents/baseinfo.cpp
@@ -142,6 +142,71 @@ void CInfoIntermission::Think ( void )
}
}
+//=========================================================
+// portal surfaces
+//=========================================================
+class CPortalSurface : public CPointEntity
+{
+ void Spawn( void );
+ void Think( void );
+ void PostActivate( void );
+};
+
+void CPortalSurface :: Spawn( void )
+{
+ pev->solid = SOLID_NOT;
+ pev->movetype = MOVETYPE_NOCLIP;
+
+ SetObjectClass( ED_PORTAL );
+ UTIL_SetOrigin( this, pev->origin );
+ pev->modelindex = 1; // world
+
+ SetNextThink( 1 );// let targets spawn!
+}
+
+void CPortalSurface :: Think( void )
+{
+ if( FNullEnt( pev->owner ))
+ pev->oldorigin = pev->origin;
+ else pev->oldorigin = pev->owner->v.origin;
+
+ SetNextThink( 0.1f );
+}
+
+void CPortalSurface :: PostActivate( void )
+{
+ Vector dir;
+ CBaseEntity *pTarget, *pOwner;
+
+ SetNextThink( 0 );
+
+ if( FStringNull( pev->target ))
+ return; // mirror
+
+ pOwner = UTIL_FindEntityByTargetname( NULL, STRING( pev->target ));
+ if( !pOwner )
+ {
+ ALERT( at_warning, "Couldn't find target for %s\n", STRING( pev->classname ));
+ UTIL_Remove( this );
+ return;
+ }
+
+ pev->owner = pOwner->edict();
+ // pev->effects |= EF_ROTATE;
+
+ // see if the portal_camera has a target
+ if( !FStringNull( pOwner->pev->target ))
+ pTarget = UTIL_FindEntityByTargetname( NULL, STRING( pOwner->pev->target ));
+ else pTarget = NULL;
+
+ if( pTarget )
+ {
+ pev->movedir = pTarget->pev->origin - pOwner->pev->origin;
+ pev->movedir.Normalize();
+ }
+ else UTIL_LinearVector( pOwner );
+}
+
//====================================================================
// multisource
//====================================================================
@@ -236,11 +301,14 @@ void CMultiSource::Register(void)
LINK_ENTITY_TO_CLASS( infodecal, CDecal );
LINK_ENTITY_TO_CLASS( info_target, CInfoTarget );
+LINK_ENTITY_TO_CLASS( target_position, CPointEntity );
LINK_ENTITY_TO_CLASS( info_teleport_destination, CPointEntity );
+LINK_ENTITY_TO_CLASS( misc_portal_surface, CPortalSurface );
LINK_ENTITY_TO_CLASS( info_null, CNullEntity);
LINK_ENTITY_TO_CLASS( info_texlights, CNullEntity);
LINK_ENTITY_TO_CLASS( info_compile_parameters, CNullEntity);
LINK_ENTITY_TO_CLASS( info_intermission, CInfoIntermission );
LINK_ENTITY_TO_CLASS( info_player_deathmatch, CBaseDMStart);
LINK_ENTITY_TO_CLASS( info_player_start, CPointEntity);
+LINK_ENTITY_TO_CLASS( misc_portal_camera, CPointEntity);
LINK_ENTITY_TO_CLASS( info_landmark, CPointEntity);
\ No newline at end of file
diff --git a/server/ents/basemover.cpp b/server/ents/basemover.cpp
index 743e0973..0e08f454 100644
--- a/server/ents/basemover.cpp
+++ b/server/ents/basemover.cpp
@@ -327,7 +327,7 @@ void CBaseMover :: ComplexMoveDoneNow( void )
void CBaseDoor::Spawn( )
{
Precache();
- if(!IsRotatingDoor())UTIL_LinearVector( this );
+ if(!IsRotatingDoor()) UTIL_LinearVector( this );
CBaseBrush::Spawn();
//make illusionary door
@@ -364,7 +364,7 @@ void CBaseDoor::Spawn( )
if (pev->speed == 0) pev->speed = 100;//default speed
m_iState = STATE_OFF;
- if ( IsRotatingDoor() && FBitSet (pev->spawnflags, SF_DOOR_START_OPEN))
+ if( IsRotatingDoor() && FBitSet (pev->spawnflags, SF_DOOR_START_OPEN))
{
pev->angles = m_vecAngle2;
Vector vecSav = m_vecAngle1;
@@ -376,16 +376,18 @@ void CBaseDoor::Spawn( )
void CBaseDoor :: PostSpawn( void )
{
- if (m_pParent) m_vecPosition1 = pev->origin - m_pParent->pev->origin;
+ if( m_pParent ) m_vecPosition1 = pev->origin - m_pParent->pev->origin;
else m_vecPosition1 = pev->origin;
// Subtract 2 from size because the engine expands bboxes by 1 in all directions
m_vecPosition2 = m_vecPosition1 + (pev->movedir * (fabs( pev->movedir.x * (pev->size.x-2) ) + fabs( pev->movedir.y * (pev->size.y-2) ) + fabs( pev->movedir.z * (pev->size.z-2) ) - m_flLip));
- ASSERTSZ(m_vecPosition1 != m_vecPosition2, "door start/end positions are equal");
- if ( FBitSet (pev->spawnflags, SF_DOOR_START_OPEN) )
+ ASSERTSZ( m_vecPosition1 != m_vecPosition2, "door start/end positions are equal" );
+ if( FBitSet( pev->spawnflags, SF_DOOR_START_OPEN ))
{
- if (m_pParent)
+ SET_AREAPORTAL( edict(), TRUE );
+
+ if( m_pParent )
{
m_vecSpawnOffset = m_vecSpawnOffset + (m_vecPosition2 + m_pParent->pev->origin) - pev->origin;
UTIL_AssignOrigin(this, m_vecPosition2 + m_pParent->pev->origin);
@@ -524,6 +526,8 @@ void CBaseDoor::DoorGoUp( void )
SetTouch( NULL );
UTIL_FireTargets( pev->target, m_hActivator, this, USE_ON );
+ SET_AREAPORTAL( edict(), TRUE );
+
if(IsRotatingDoor())
{
int sign = 1;
@@ -590,6 +594,8 @@ void CBaseDoor::DoorHitBottom( void )
if (!(pev->spawnflags & SF_DOOR_START_OPEN))
UTIL_FireTargets( pev->netname, m_hActivator, this, USE_TOGGLE );
UTIL_FireTargets( pev->target, m_hActivator, this, USE_TOGGLE );
+
+ SET_AREAPORTAL( edict(), FALSE );
}
void CBaseDoor::Blocked( CBaseEntity *pOther )
diff --git a/server/global/client.cpp b/server/global/client.cpp
index 2770b637..28bf8b45 100644
--- a/server/global/client.cpp
+++ b/server/global/client.cpp
@@ -996,6 +996,7 @@ void UpdateEntityState( entity_state_t *to, edict_t *from, int baseline )
to->framerate = pNet->pev->framerate;
to->flags = pNet->pev->flags;
to->rendercolor = pNet->pev->rendercolor;
+ to->oldorigin = pNet->pev->oldorigin;
// studio model sequence
if( pNet->pev->sequence != -1 ) to->sequence = pNet->pev->sequence;
@@ -1006,12 +1007,6 @@ void UpdateEntityState( entity_state_t *to, edict_t *from, int baseline )
to->blending[i] = pNet->pev->blending[i];
to->controller[i] = pNet->pev->controller[i];
}
-
- if( to->ed_type == ED_MOVER || to->ed_type == ED_BSPBRUSH )
- {
- // these needs to right calculate direction of scroll texture
- to->velocity = pNet->pev->movedir;
- }
if( to->ed_type == ED_CLIENT )
{
if( pNet->pev->fixangle )
diff --git a/server/global/enginecallback.h b/server/global/enginecallback.h
index 9231308f..555cc559 100644
--- a/server/global/enginecallback.h
+++ b/server/global/enginecallback.h
@@ -67,6 +67,7 @@ extern enginefuncs_t g_engfuncs;
#define RANDOM_LONG (*g_engfuncs.pfnRandomLong)
#define RANDOM_FLOAT (*g_engfuncs.pfnRandomFloat)
#define CLASSIFY_EDICT (*g_engfuncs.pfnClassifyEdict)
+#define SET_AREAPORTAL (*g_engfuncs.pfnAreaPortal)
inline void MESSAGE_BEGIN( int msg_dest, int msg_type, const float *pOrigin = NULL, edict_t *ed = NULL )
{
diff --git a/server/monsters/player.cpp b/server/monsters/player.cpp
index 78abd190..dc59c6d2 100644
--- a/server/monsters/player.cpp
+++ b/server/monsters/player.cpp
@@ -3213,6 +3213,12 @@ edict_t *EntSelectSpawnPoint( CBaseEntity *pPlayer )
pSpot = UTIL_FindEntityByClassname(NULL, "info_player_start");
if ( !FNullEnt(pSpot) )
goto ReturnSpot;
+
+ // q3a maps doesn't contain info_player_start
+ // TEST for q3dm0
+ pSpot = UTIL_FindEntityByClassname(NULL, "info_player_deathmatch");
+ if ( !FNullEnt(pSpot) )
+ goto ReturnSpot;
}
else
{
@@ -3224,7 +3230,7 @@ edict_t *EntSelectSpawnPoint( CBaseEntity *pPlayer )
ReturnSpot:
if ( FNullEnt( pSpot ) )
{
- ALERT(at_error, "PutClientInServer: no info_player_start on level");
+ ALERT( at_error, "PutClientInServer: no info_player_start on level\n" );
return INDEXENT(0);
}
diff --git a/server/server.plg b/server/server.plg
new file mode 100644
index 00000000..7bea66a9
--- /dev/null
+++ b/server/server.plg
@@ -0,0 +1,100 @@
+
+
+
+Build Log
+
+--------------------Configuration: server - Win32 Debug--------------------
+
+Command Lines
+Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP603.tmp" with contents
+[
+/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "./" /I "ents" /I "game" /I "global" /I "monsters" /I "../common" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\server\!debug/" /Fo"..\temp\server\!debug/" /Fd"..\temp\server\!debug/" /FD /c
+"D:\Xash3D\src_main\server\monsters\player.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP603.tmp"
+Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP604.tmp" with contents
+[
+msvcrtd.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"..\temp\server\!debug/server.pdb" /debug /machine:I386 /nodefaultlib:"libc.lib" /def:".\server.def" /out:"..\temp\server\!debug/server.dll" /implib:"..\temp\server\!debug/server.lib" /pdbtype:sept
+"\Xash3D\src_main\temp\server\!debug\ai_sound.obj"
+"\Xash3D\src_main\temp\server\!debug\animating.obj"
+"\Xash3D\src_main\temp\server\!debug\animation.obj"
+"\Xash3D\src_main\temp\server\!debug\apache.obj"
+"\Xash3D\src_main\temp\server\!debug\barnacle.obj"
+"\Xash3D\src_main\temp\server\!debug\barney.obj"
+"\Xash3D\src_main\temp\server\!debug\basebrush.obj"
+"\Xash3D\src_main\temp\server\!debug\baseentity.obj"
+"\Xash3D\src_main\temp\server\!debug\basefunc.obj"
+"\Xash3D\src_main\temp\server\!debug\basefx.obj"
+"\Xash3D\src_main\temp\server\!debug\baseinfo.obj"
+"\Xash3D\src_main\temp\server\!debug\baseitem.obj"
+"\Xash3D\src_main\temp\server\!debug\baselogic.obj"
+"\Xash3D\src_main\temp\server\!debug\basemonster.obj"
+"\Xash3D\src_main\temp\server\!debug\basemover.obj"
+"\Xash3D\src_main\temp\server\!debug\baseother.obj"
+"\Xash3D\src_main\temp\server\!debug\basepath.obj"
+"\Xash3D\src_main\temp\server\!debug\basephys.obj"
+"\Xash3D\src_main\temp\server\!debug\baserockets.obj"
+"\Xash3D\src_main\temp\server\!debug\basetank.obj"
+"\Xash3D\src_main\temp\server\!debug\basetrigger.obj"
+"\Xash3D\src_main\temp\server\!debug\baseutil.obj"
+"\Xash3D\src_main\temp\server\!debug\baseweapon.obj"
+"\Xash3D\src_main\temp\server\!debug\baseworld.obj"
+"\Xash3D\src_main\temp\server\!debug\client.obj"
+"\Xash3D\src_main\temp\server\!debug\combat.obj"
+"\Xash3D\src_main\temp\server\!debug\decals.obj"
+"\Xash3D\src_main\temp\server\!debug\defaultai.obj"
+"\Xash3D\src_main\temp\server\!debug\dll_int.obj"
+"\Xash3D\src_main\temp\server\!debug\flyingmonster.obj"
+"\Xash3D\src_main\temp\server\!debug\game.obj"
+"\Xash3D\src_main\temp\server\!debug\gamerules.obj"
+"\Xash3D\src_main\temp\server\!debug\generic.obj"
+"\Xash3D\src_main\temp\server\!debug\globals.obj"
+"\Xash3D\src_main\temp\server\!debug\gman.obj"
+"\Xash3D\src_main\temp\server\!debug\hassassin.obj"
+"\Xash3D\src_main\temp\server\!debug\headcrab.obj"
+"\Xash3D\src_main\temp\server\!debug\hgrunt.obj"
+"\Xash3D\src_main\temp\server\!debug\leech.obj"
+"\Xash3D\src_main\temp\server\!debug\legacy.obj"
+"\Xash3D\src_main\temp\server\!debug\lights.obj"
+"\Xash3D\src_main\temp\server\!debug\multiplay_gamerules.obj"
+"\Xash3D\src_main\temp\server\!debug\nodes.obj"
+"\Xash3D\src_main\temp\server\!debug\osprey.obj"
+"\Xash3D\src_main\temp\server\!debug\parent.obj"
+"\Xash3D\src_main\temp\server\!debug\player.obj"
+"\Xash3D\src_main\temp\server\!debug\rat.obj"
+"\Xash3D\src_main\temp\server\!debug\roach.obj"
+"\Xash3D\src_main\temp\server\!debug\saverestore.obj"
+"\Xash3D\src_main\temp\server\!debug\scientist.obj"
+"\Xash3D\src_main\temp\server\!debug\scripted.obj"
+"\Xash3D\src_main\temp\server\!debug\sfx.obj"
+"\Xash3D\src_main\temp\server\!debug\singleplay_gamerules.obj"
+"\Xash3D\src_main\temp\server\!debug\sound.obj"
+"\Xash3D\src_main\temp\server\!debug\squadmonster.obj"
+"\Xash3D\src_main\temp\server\!debug\talkmonster.obj"
+"\Xash3D\src_main\temp\server\!debug\teamplay_gamerules.obj"
+"\Xash3D\src_main\temp\server\!debug\turret.obj"
+"\Xash3D\src_main\temp\server\!debug\utils.obj"
+"\Xash3D\src_main\temp\server\!debug\weapon_generic.obj"
+"\Xash3D\src_main\temp\server\!debug\zombie.obj"
+]
+Creating command line "link.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP604.tmp"
+Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP605.bat" with contents
+[
+@echo off
+copy \Xash3D\src_main\temp\server\!debug\server.dll "D:\Xash3D\bin\server.dll"
+]
+Creating command line "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP605.bat"
+Compiling...
+player.cpp
+Linking...
+Output Window
+Performing Custom Build Step on \Xash3D\src_main\temp\server\!debug\server.dll
+‘ª®¯¨à®¢ ® ä ©«®¢: 1.
+
+
+
+Results
+server.dll - 0 error(s), 0 warning(s)
+
+
+
diff --git a/todo.log b/todo.log
index 9978e177..458a5222 100644
--- a/todo.log
+++ b/todo.log
@@ -84,11 +84,13 @@ Beta 13.12.08
53. finish RenderMode for shaders OK
54. q3/rbsp bsp format OK
55. dedicated conolse hanging commands
-56. renderer areabits bug
+56. renderer areabits bug OK
57. shutdown crash OK
58. physic.dll finish collisions OK
59. raven bsp supports OK
60. fixup render times OK
+61. fixup portal rendering OK
+62. return old-xash renderer initialization
Ñïèñîê äîñòóïíûõ ðåíäåðåðîâ: ×òî â íèõ èíòåðåñíîãî
0. Q3Fusion (Mirrors, Portals)