16 Jul 2009

This commit is contained in:
g-cont 2009-07-16 00:00:00 +04:00 committed by Alibek Omarov
parent 8843e6adaa
commit 3102b03434
49 changed files with 1297 additions and 808 deletions

View File

@ -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

View File

@ -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();

View File

@ -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

View File

@ -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

View File

@ -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 },

View File

@ -6,13 +6,13 @@
--------------------Configuration: engine - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
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
<h3>Output Window</h3>
Performing Custom Build Step on \Xash3D\src_main\temp\engine\!debug\engine.dll
‘ª®¯¨à®¢ ­® ä ©«®¢: 1.

View File

@ -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 );
}
}
}

View File

@ -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" ))

View File

@ -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 );
}

View File

@ -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...

View File

@ -1,64 +0,0 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: launch - Win32 Release--------------------
</h3>
<h3>Command Lines</h3>
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
<h3>Output Window</h3>
Performing Custom Build Step on \Xash3D\src_main\temp\launch\!release\launch.dll
‘ª®¯¨à®¢ ­® ä ©«®¢: 1.
<h3>Results</h3>
launch.dll - 0 error(s), 0 warning(s)
</pre>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 766 B

BIN
launch/xash/xash1.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -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 );
}
}
}

View File

@ -33,5 +33,6 @@ void DebugShowCollision( cmdraw_t callback )
if( cm_debugdraw->integer == 2 )
{
CM_CollisionDrawForEachBrush();
CM_CollisionDrawForEachSurface();
}
}

View File

@ -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

View File

@ -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 ();

View File

@ -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 );

View File

@ -6,6 +6,42 @@
--------------------Configuration: physic - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
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...
<h3>Output Window</h3>
Performing Custom Build Step on \Xash3D\src_main\temp\physic\!debug\physic.dll
‘ª®¯¨à®¢ ­® ä ©«®¢: 1.

177
public/anorms.h Normal file
View File

@ -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},

View File

@ -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

View File

@ -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

View File

@ -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" );
}
}

View File

@ -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

View File

@ -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;
}

View File

@ -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 );

View File

@ -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();
}
}

View File

@ -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 );

View File

@ -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] );
}

View File

@ -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;
}

View File

@ -25,8 +25,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifdef _WIN32
#include <windows.h>
#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"

View File

@ -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 );
}

View File

@ -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 );
}
}

View File

@ -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;

View File

@ -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 )

View File

@ -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 );
}

View File

@ -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 );
}
}

View File

@ -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 );

View File

@ -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 );

View File

@ -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 );

View File

@ -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;
}

View File

@ -6,96 +6,6 @@
--------------------Configuration: render - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
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
<h3>Output Window</h3>
Performing Custom Build Step on \Xash3D\src_main\temp\render\!debug\render.dll
‘ª®¯¨à®¢ ­® ä ©«®¢: 1.

View File

@ -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);

View File

@ -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 )

View File

@ -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 )

View File

@ -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 )
{

View File

@ -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);
}

100
server/server.plg Normal file
View File

@ -0,0 +1,100 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: server - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
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...
<h3>Output Window</h3>
Performing Custom Build Step on \Xash3D\src_main\temp\server\!debug\server.dll
‘ª®¯¨à®¢ ­® ä ©«®¢: 1.
<h3>Results</h3>
server.dll - 0 error(s), 0 warning(s)
</pre>
</body>
</html>

View File

@ -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)