16 Jul 2009
This commit is contained in:
parent
8843e6adaa
commit
3102b03434
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 },
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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" ))
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
|
|
@ -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...
|
||||
|
|
|
@ -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 |
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
|
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
|
@ -33,5 +33,6 @@ void DebugShowCollision( cmdraw_t callback )
|
|||
if( cm_debugdraw->integer == 2 )
|
||||
{
|
||||
CM_CollisionDrawForEachBrush();
|
||||
CM_CollisionDrawForEachSurface();
|
||||
}
|
||||
}
|
|
@ -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
|
|
@ -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 ();
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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},
|
|
@ -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
|
|
@ -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
|
|
@ -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" );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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 );
|
||||
|
|
136
render/r_bloom.c
136
render/r_bloom.c
|
@ -219,16 +219,16 @@ R_Bloom_SamplePass
|
|||
*/
|
||||
static _inline void R_Bloom_SamplePass( int xpos, int ypos )
|
||||
{
|
||||
qglBegin( GL_QUADS );
|
||||
qglTexCoord2f( 0, sampleText_tch );
|
||||
qglVertex2f( xpos, ypos );
|
||||
qglTexCoord2f( 0, 0 );
|
||||
qglVertex2f( xpos, ypos+sample_height );
|
||||
qglTexCoord2f( sampleText_tcw, 0 );
|
||||
qglVertex2f( xpos+sample_width, ypos+sample_height );
|
||||
qglTexCoord2f( sampleText_tcw, sampleText_tch );
|
||||
qglVertex2f( xpos+sample_width, ypos );
|
||||
qglEnd();
|
||||
pglBegin( GL_QUADS );
|
||||
pglTexCoord2f( 0, sampleText_tch );
|
||||
pglVertex2f( xpos, ypos );
|
||||
pglTexCoord2f( 0, 0 );
|
||||
pglVertex2f( xpos, ypos+sample_height );
|
||||
pglTexCoord2f( sampleText_tcw, 0 );
|
||||
pglVertex2f( xpos+sample_width, ypos+sample_height );
|
||||
pglTexCoord2f( sampleText_tcw, sampleText_tch );
|
||||
pglVertex2f( xpos+sample_width, ypos );
|
||||
pglEnd();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -238,16 +238,16 @@ R_Bloom_Quad
|
|||
*/
|
||||
static _inline void R_Bloom_Quad( int x, int y, int w, int h, float texwidth, float texheight )
|
||||
{
|
||||
qglBegin( GL_QUADS );
|
||||
qglTexCoord2f( 0, texheight );
|
||||
qglVertex2f( x, glState.height-h-y );
|
||||
qglTexCoord2f( 0, 0 );
|
||||
qglVertex2f( x, glState.height-y );
|
||||
qglTexCoord2f( texwidth, 0 );
|
||||
qglVertex2f( x+w, glState.height-y );
|
||||
qglTexCoord2f( texwidth, texheight );
|
||||
qglVertex2f( x+w, glState.height-h );
|
||||
qglEnd();
|
||||
pglBegin( GL_QUADS );
|
||||
pglTexCoord2f( 0, texheight );
|
||||
pglVertex2f( x, glState.height-h-y );
|
||||
pglTexCoord2f( 0, 0 );
|
||||
pglVertex2f( x, glState.height-y );
|
||||
pglTexCoord2f( texwidth, 0 );
|
||||
pglVertex2f( x+w, glState.height-y );
|
||||
pglTexCoord2f( texwidth, texheight );
|
||||
pglVertex2f( x+w, glState.height-h );
|
||||
pglEnd();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -260,18 +260,18 @@ static void R_Bloom_DrawEffect( void )
|
|||
GL_Bind( 0, r_bloomeffecttexture );
|
||||
GL_TexEnv( GL_MODULATE );
|
||||
GL_SetState( GLSTATE_NO_DEPTH_TEST|GLSTATE_SRCBLEND_ONE|GLSTATE_DSTBLEND_ONE );
|
||||
qglColor4f( r_bloom_alpha->value, r_bloom_alpha->value, r_bloom_alpha->value, 1.0f );
|
||||
pglColor4f( r_bloom_alpha->value, r_bloom_alpha->value, r_bloom_alpha->value, 1.0f );
|
||||
|
||||
qglBegin( GL_QUADS );
|
||||
qglTexCoord2f( 0, sampleText_tch );
|
||||
qglVertex2f( curView_x, curView_y );
|
||||
qglTexCoord2f( 0, 0 );
|
||||
qglVertex2f( curView_x, curView_y+curView_height );
|
||||
qglTexCoord2f( sampleText_tcw, 0 );
|
||||
qglVertex2f( curView_x+curView_width, curView_y+curView_height );
|
||||
qglTexCoord2f( sampleText_tcw, sampleText_tch );
|
||||
qglVertex2f( curView_x+curView_width, curView_y );
|
||||
qglEnd();
|
||||
pglBegin( GL_QUADS );
|
||||
pglTexCoord2f( 0, sampleText_tch );
|
||||
pglVertex2f( curView_x, curView_y );
|
||||
pglTexCoord2f( 0, 0 );
|
||||
pglVertex2f( curView_x, curView_y+curView_height );
|
||||
pglTexCoord2f( sampleText_tcw, 0 );
|
||||
pglVertex2f( curView_x+curView_width, curView_y+curView_height );
|
||||
pglTexCoord2f( sampleText_tcw, sampleText_tch );
|
||||
pglVertex2f( curView_x+curView_width, curView_y );
|
||||
pglEnd();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -285,20 +285,20 @@ static void R_Bloom_GeneratexDiamonds( void )
|
|||
float intensity, scale, *diamond;
|
||||
|
||||
// set up sample size workspace
|
||||
qglScissor( 0, 0, sample_width, sample_height );
|
||||
qglViewport( 0, 0, sample_width, sample_height );
|
||||
qglMatrixMode( GL_PROJECTION );
|
||||
qglLoadIdentity();
|
||||
qglOrtho( 0, sample_width, sample_height, 0, -10, 100 );
|
||||
qglMatrixMode( GL_MODELVIEW );
|
||||
qglLoadIdentity();
|
||||
pglScissor( 0, 0, sample_width, sample_height );
|
||||
pglViewport( 0, 0, sample_width, sample_height );
|
||||
pglMatrixMode( GL_PROJECTION );
|
||||
pglLoadIdentity();
|
||||
pglOrtho( 0, sample_width, sample_height, 0, -10, 100 );
|
||||
pglMatrixMode( GL_MODELVIEW );
|
||||
pglLoadIdentity();
|
||||
|
||||
// copy small scene into r_bloomeffecttexture
|
||||
GL_Bind( 0, r_bloomeffecttexture );
|
||||
qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height );
|
||||
pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height );
|
||||
|
||||
// start modifying the small scene corner
|
||||
qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
|
||||
pglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
|
||||
|
||||
// darkening passes
|
||||
if( r_bloom_darken->integer )
|
||||
|
@ -308,7 +308,7 @@ static void R_Bloom_GeneratexDiamonds( void )
|
|||
|
||||
for( i = 0; i < r_bloom_darken->integer; i++ )
|
||||
R_Bloom_SamplePass( 0, 0 );
|
||||
qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height );
|
||||
pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height );
|
||||
}
|
||||
|
||||
// bluring passes
|
||||
|
@ -358,21 +358,21 @@ static void R_Bloom_GeneratexDiamonds( void )
|
|||
if( intensity < 0.01f )
|
||||
continue;
|
||||
|
||||
qglColor4f( intensity, intensity, intensity, 1.0 );
|
||||
pglColor4f( intensity, intensity, intensity, 1.0 );
|
||||
R_Bloom_SamplePass( i - k, j - k );
|
||||
}
|
||||
}
|
||||
|
||||
qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height );
|
||||
pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height );
|
||||
|
||||
// restore full screen workspace
|
||||
qglScissor( 0, 0, glState.width, glState.height );
|
||||
qglViewport( 0, 0, glState.width, glState.height );
|
||||
qglMatrixMode( GL_PROJECTION );
|
||||
qglLoadIdentity();
|
||||
qglOrtho( 0, glState.width, glState.height, 0, -10, 100 );
|
||||
qglMatrixMode( GL_MODELVIEW );
|
||||
qglLoadIdentity();
|
||||
pglScissor( 0, 0, glState.width, glState.height );
|
||||
pglViewport( 0, 0, glState.width, glState.height );
|
||||
pglMatrixMode( GL_PROJECTION );
|
||||
pglLoadIdentity();
|
||||
pglOrtho( 0, glState.width, glState.height, 0, -10, 100 );
|
||||
pglMatrixMode( GL_MODELVIEW );
|
||||
pglLoadIdentity();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -382,7 +382,7 @@ R_Bloom_DownsampleView
|
|||
*/
|
||||
static void R_Bloom_DownsampleView( void )
|
||||
{
|
||||
qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
|
||||
pglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
|
||||
|
||||
if( r_screendownsamplingtexture_size )
|
||||
{
|
||||
|
@ -392,15 +392,15 @@ static void R_Bloom_DownsampleView( void )
|
|||
|
||||
// copy the screen and draw resized
|
||||
GL_Bind( 0, r_bloomscreentexture );
|
||||
qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, curView_x, glState.height - ( curView_y + curView_height ), curView_width, curView_height );
|
||||
pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, curView_x, glState.height - ( curView_y + curView_height ), curView_width, curView_height );
|
||||
R_Bloom_Quad( 0, 0, midsample_width, midsample_height, screenTex_tcw, screenTex_tch );
|
||||
|
||||
// now copy into downsampling (mid-sized) texture
|
||||
GL_Bind( 0, r_bloomdownsamplingtexture );
|
||||
qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, midsample_width, midsample_height );
|
||||
pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, midsample_width, midsample_height );
|
||||
|
||||
// now draw again in bloom size
|
||||
qglColor4f( 0.5f, 0.5f, 0.5f, 1.0f );
|
||||
pglColor4f( 0.5f, 0.5f, 0.5f, 1.0f );
|
||||
R_Bloom_Quad( 0, 0, sample_width, sample_height, sampleText_tcw, sampleText_tch );
|
||||
|
||||
// now blend the big screen texture into the bloom generation space (hoping it adds some blur)
|
||||
|
@ -408,13 +408,13 @@ static void R_Bloom_DownsampleView( void )
|
|||
|
||||
GL_Bind( 0, r_bloomscreentexture );
|
||||
R_Bloom_Quad( 0, 0, sample_width, sample_height, screenTex_tcw, screenTex_tch );
|
||||
qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
|
||||
pglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
|
||||
}
|
||||
else
|
||||
{
|
||||
// downsample simple
|
||||
GL_Bind( 0, r_bloomscreentexture );
|
||||
qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, curView_x, glState.height - ( curView_y + curView_height ), curView_width, curView_height );
|
||||
pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, curView_x, glState.height - ( curView_y + curView_height ), curView_width, curView_height );
|
||||
R_Bloom_Quad( 0, 0, sample_width, sample_height, screenTex_tcw, screenTex_tch );
|
||||
}
|
||||
}
|
||||
|
@ -436,18 +436,18 @@ void R_BloomBlend( const ref_params_t *fd )
|
|||
return;
|
||||
|
||||
// set up full screen workspace
|
||||
qglScissor( 0, 0, glState.width, glState.height );
|
||||
qglViewport( 0, 0, glState.width, glState.height );
|
||||
qglMatrixMode( GL_PROJECTION );
|
||||
qglLoadIdentity();
|
||||
qglOrtho( 0, glState.width, glState.height, 0, -10, 100 );
|
||||
qglMatrixMode( GL_MODELVIEW );
|
||||
qglLoadIdentity();
|
||||
pglScissor( 0, 0, glState.width, glState.height );
|
||||
pglViewport( 0, 0, glState.width, glState.height );
|
||||
pglMatrixMode( GL_PROJECTION );
|
||||
pglLoadIdentity();
|
||||
pglOrtho( 0, glState.width, glState.height, 0, -10, 100 );
|
||||
pglMatrixMode( GL_MODELVIEW );
|
||||
pglLoadIdentity();
|
||||
|
||||
GL_Cull( 0 );
|
||||
GL_SetState( GLSTATE_NO_DEPTH_TEST );
|
||||
|
||||
qglColor4f( 1, 1, 1, 1 );
|
||||
pglColor4f( 1, 1, 1, 1 );
|
||||
|
||||
// set up current sizes
|
||||
curView_x = fd->viewport[0];
|
||||
|
@ -473,7 +473,7 @@ void R_BloomBlend( const ref_params_t *fd )
|
|||
|
||||
// copy the screen space we'll use to work into the backup texture
|
||||
GL_Bind( 0, r_bloombackuptexture );
|
||||
qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, r_screenbackuptexture_width, r_screenbackuptexture_height );
|
||||
pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, r_screenbackuptexture_width, r_screenbackuptexture_height );
|
||||
|
||||
// create the bloom image
|
||||
R_Bloom_DownsampleView();
|
||||
|
@ -483,13 +483,13 @@ void R_BloomBlend( const ref_params_t *fd )
|
|||
GL_SetState( GLSTATE_NO_DEPTH_TEST );
|
||||
GL_Bind( 0, r_bloombackuptexture );
|
||||
|
||||
qglColor4f( 1, 1, 1, 1 );
|
||||
pglColor4f( 1, 1, 1, 1 );
|
||||
|
||||
R_Bloom_Quad( 0, 0, r_screenbackuptexture_width, r_screenbackuptexture_height, 1.0f, 1.0f );
|
||||
|
||||
qglScissor( RI.scissor[0], RI.scissor[1], RI.scissor[2], RI.scissor[3] );
|
||||
pglScissor( RI.scissor[0], RI.scissor[1], RI.scissor[2], RI.scissor[3] );
|
||||
|
||||
R_Bloom_DrawEffect();
|
||||
|
||||
qglViewport( RI.viewport[0], RI.viewport[1], RI.viewport[2], RI.viewport[3] );
|
||||
pglViewport( RI.viewport[0], RI.viewport[1], RI.viewport[2], RI.viewport[3] );
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
136
render/r_image.c
136
render/r_image.c
|
@ -78,14 +78,14 @@ void GL_SelectTexture( int tmu )
|
|||
|
||||
glState.currentTMU = tmu;
|
||||
|
||||
if( qglActiveTextureARB )
|
||||
if( pglActiveTextureARB )
|
||||
{
|
||||
qglActiveTextureARB( tmu + GL_TEXTURE0_ARB );
|
||||
qglClientActiveTextureARB( tmu + GL_TEXTURE0_ARB );
|
||||
pglActiveTextureARB( tmu + GL_TEXTURE0_ARB );
|
||||
pglClientActiveTextureARB( tmu + GL_TEXTURE0_ARB );
|
||||
}
|
||||
else if( qglSelectTextureSGIS )
|
||||
else if( pglSelectTextureSGIS )
|
||||
{
|
||||
qglSelectTextureSGIS( tmu + GL_TEXTURE0_SGIS );
|
||||
pglSelectTextureSGIS( tmu + GL_TEXTURE0_SGIS );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -93,7 +93,7 @@ void GL_TexEnv( GLenum mode )
|
|||
{
|
||||
if( mode != ( GLenum )glState.currentEnvModes[glState.currentTMU] )
|
||||
{
|
||||
qglTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode );
|
||||
pglTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode );
|
||||
glState.currentEnvModes[glState.currentTMU] = ( int )mode;
|
||||
}
|
||||
}
|
||||
|
@ -109,17 +109,17 @@ void GL_Bind( int tmu, image_t *tex )
|
|||
|
||||
glState.currentTextures[tmu] = tex->texnum;
|
||||
if( tex->flags & IT_CUBEMAP )
|
||||
qglBindTexture( GL_TEXTURE_CUBE_MAP_ARB, tex->texnum );
|
||||
pglBindTexture( GL_TEXTURE_CUBE_MAP_ARB, tex->texnum );
|
||||
else if( tex->depth != 1 )
|
||||
qglBindTexture( GL_TEXTURE_3D, tex->texnum );
|
||||
pglBindTexture( GL_TEXTURE_3D, tex->texnum );
|
||||
else
|
||||
qglBindTexture( GL_TEXTURE_2D, tex->texnum );
|
||||
pglBindTexture( GL_TEXTURE_2D, tex->texnum );
|
||||
}
|
||||
|
||||
void GL_LoadTexMatrix( const mat4x4_t m )
|
||||
{
|
||||
qglMatrixMode( GL_TEXTURE );
|
||||
qglLoadMatrixf( m );
|
||||
pglMatrixMode( GL_TEXTURE );
|
||||
pglLoadMatrixf( m );
|
||||
glState.texIdentityMatrix[glState.currentTMU] = false;
|
||||
}
|
||||
|
||||
|
@ -127,8 +127,8 @@ void GL_LoadIdentityTexMatrix( void )
|
|||
{
|
||||
if( !glState.texIdentityMatrix[glState.currentTMU] )
|
||||
{
|
||||
qglMatrixMode( GL_TEXTURE );
|
||||
qglLoadIdentity();
|
||||
pglMatrixMode( GL_TEXTURE );
|
||||
pglLoadIdentity();
|
||||
glState.texIdentityMatrix[glState.currentTMU] = true;
|
||||
}
|
||||
}
|
||||
|
@ -164,16 +164,16 @@ void GL_EnableTexGen( int coord, int mode )
|
|||
{
|
||||
if( !( glState.genSTEnabled[tmu] & bit ) )
|
||||
{
|
||||
qglEnable( gen );
|
||||
pglEnable( gen );
|
||||
glState.genSTEnabled[tmu] |= bit;
|
||||
}
|
||||
qglTexGeni( coord, GL_TEXTURE_GEN_MODE, mode );
|
||||
pglTexGeni( coord, GL_TEXTURE_GEN_MODE, mode );
|
||||
}
|
||||
else
|
||||
{
|
||||
if( glState.genSTEnabled[tmu] & bit )
|
||||
{
|
||||
qglDisable( gen );
|
||||
pglDisable( gen );
|
||||
glState.genSTEnabled[tmu] &= ~bit;
|
||||
}
|
||||
}
|
||||
|
@ -194,14 +194,14 @@ void GL_SetTexCoordArrayMode( int mode )
|
|||
if( cmode != bit )
|
||||
{
|
||||
if( cmode == 1 )
|
||||
qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
|
||||
pglDisableClientState( GL_TEXTURE_COORD_ARRAY );
|
||||
else if( cmode == 2 )
|
||||
qglDisable( GL_TEXTURE_CUBE_MAP_ARB );
|
||||
pglDisable( GL_TEXTURE_CUBE_MAP_ARB );
|
||||
|
||||
if( bit == 1 )
|
||||
qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
|
||||
pglEnableClientState( GL_TEXTURE_COORD_ARRAY );
|
||||
else if( bit == 2 )
|
||||
qglEnable( GL_TEXTURE_CUBE_MAP_ARB );
|
||||
pglEnable( GL_TEXTURE_CUBE_MAP_ARB );
|
||||
|
||||
glState.texCoordArrayMode[tmu] = bit;
|
||||
}
|
||||
|
@ -256,18 +256,18 @@ void R_TextureMode( char *string )
|
|||
|
||||
if( glt->flags & IT_DEPTH )
|
||||
{
|
||||
qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_depth );
|
||||
qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_depth );
|
||||
pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_depth );
|
||||
pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_depth );
|
||||
}
|
||||
else if( !( glt->flags & IT_NOMIPMAP ) )
|
||||
{
|
||||
qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min );
|
||||
qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
|
||||
pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min );
|
||||
pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
|
||||
}
|
||||
else
|
||||
{
|
||||
qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_max );
|
||||
qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
|
||||
pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_max );
|
||||
pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -755,44 +755,44 @@ void R_Upload32( byte **data, int width, int height, int flags, int *upload_widt
|
|||
|
||||
if( flags & IT_DEPTH )
|
||||
{
|
||||
qglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_depth );
|
||||
qglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_depth );
|
||||
pglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_depth );
|
||||
pglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_depth );
|
||||
|
||||
if( glConfig.ext.texture_filter_anisotropic )
|
||||
qglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 );
|
||||
pglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 );
|
||||
}
|
||||
else if( !( flags & IT_NOMIPMAP ) )
|
||||
{
|
||||
qglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_min );
|
||||
qglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_max );
|
||||
pglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_min );
|
||||
pglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_max );
|
||||
|
||||
if( glConfig.ext.texture_filter_anisotropic )
|
||||
qglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, glConfig.curTextureFilterAnisotropic );
|
||||
pglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, glConfig.curTextureFilterAnisotropic );
|
||||
}
|
||||
else
|
||||
{
|
||||
qglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_max );
|
||||
qglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_max );
|
||||
pglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_max );
|
||||
pglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_max );
|
||||
|
||||
if( glConfig.ext.texture_filter_anisotropic )
|
||||
qglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 );
|
||||
pglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 );
|
||||
}
|
||||
|
||||
// clamp if required
|
||||
if( !( flags & IT_CLAMP ) )
|
||||
{
|
||||
qglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_REPEAT );
|
||||
qglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_REPEAT );
|
||||
pglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_REPEAT );
|
||||
pglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_REPEAT );
|
||||
}
|
||||
else if( glConfig.ext.texture_edge_clamp )
|
||||
{
|
||||
qglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
|
||||
qglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
|
||||
pglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
|
||||
pglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
|
||||
}
|
||||
else
|
||||
{
|
||||
qglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_CLAMP );
|
||||
qglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_CLAMP );
|
||||
pglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_CLAMP );
|
||||
pglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_CLAMP );
|
||||
}
|
||||
|
||||
if( ( scaledWidth == width ) && ( scaledHeight == height ) && ( flags & IT_NOMIPMAP ) )
|
||||
|
@ -800,12 +800,12 @@ void R_Upload32( byte **data, int width, int height, int flags, int *upload_widt
|
|||
if( subImage )
|
||||
{
|
||||
for( i = 0; i < numTextures; i++, target2++ )
|
||||
qglTexSubImage2D( target2, 0, 0, 0, scaledWidth, scaledHeight, format, GL_UNSIGNED_BYTE, data[i] );
|
||||
pglTexSubImage2D( target2, 0, 0, 0, scaledWidth, scaledHeight, format, GL_UNSIGNED_BYTE, data[i] );
|
||||
}
|
||||
else
|
||||
{
|
||||
for( i = 0; i < numTextures; i++, target2++ )
|
||||
qglTexImage2D( target2, 0, comp, scaledWidth, scaledHeight, 0, format, GL_UNSIGNED_BYTE, data[i] );
|
||||
pglTexImage2D( target2, 0, comp, scaledWidth, scaledHeight, 0, format, GL_UNSIGNED_BYTE, data[i] );
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -835,12 +835,12 @@ void R_Upload32( byte **data, int width, int height, int flags, int *upload_widt
|
|||
|
||||
// automatic mipmaps generation
|
||||
if( !( flags & IT_NOMIPMAP ) && mip && driverMipmap )
|
||||
qglTexParameteri( target2, GL_GENERATE_MIPMAP_SGIS, GL_TRUE );
|
||||
pglTexParameteri( target2, GL_GENERATE_MIPMAP_SGIS, GL_TRUE );
|
||||
|
||||
if( subImage )
|
||||
qglTexSubImage2D( target2, 0, 0, 0, scaledWidth, scaledHeight, format, GL_UNSIGNED_BYTE, mip );
|
||||
pglTexSubImage2D( target2, 0, 0, 0, scaledWidth, scaledHeight, format, GL_UNSIGNED_BYTE, mip );
|
||||
else
|
||||
qglTexImage2D( target2, 0, comp, scaledWidth, scaledHeight, 0, format, GL_UNSIGNED_BYTE, mip );
|
||||
pglTexImage2D( target2, 0, comp, scaledWidth, scaledHeight, 0, format, GL_UNSIGNED_BYTE, mip );
|
||||
|
||||
// mipmaps generation
|
||||
if( !( flags & IT_NOMIPMAP ) && mip && !driverMipmap )
|
||||
|
@ -863,9 +863,9 @@ void R_Upload32( byte **data, int width, int height, int flags, int *upload_widt
|
|||
miplevel++;
|
||||
|
||||
if( subImage )
|
||||
qglTexSubImage2D( target2, miplevel, 0, 0, w, h, format, GL_UNSIGNED_BYTE, mip );
|
||||
pglTexSubImage2D( target2, miplevel, 0, 0, w, h, format, GL_UNSIGNED_BYTE, mip );
|
||||
else
|
||||
qglTexImage2D( target2, miplevel, comp, w, h, 0, format, GL_UNSIGNED_BYTE, mip );
|
||||
pglTexImage2D( target2, miplevel, comp, w, h, 0, format, GL_UNSIGNED_BYTE, mip );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -907,45 +907,45 @@ void R_Upload32_3D_Fast( byte **data, int width, int height, int depth, int flag
|
|||
|
||||
if( !( flags & IT_NOMIPMAP ) )
|
||||
{
|
||||
qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, gl_filter_min );
|
||||
qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
|
||||
pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, gl_filter_min );
|
||||
pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
|
||||
|
||||
if( glConfig.ext.texture_filter_anisotropic )
|
||||
qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAX_ANISOTROPY_EXT, glConfig.curTextureFilterAnisotropic );
|
||||
pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAX_ANISOTROPY_EXT, glConfig.curTextureFilterAnisotropic );
|
||||
}
|
||||
else
|
||||
{
|
||||
qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, gl_filter_max );
|
||||
qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
|
||||
pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, gl_filter_max );
|
||||
pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, gl_filter_max );
|
||||
|
||||
if( glConfig.ext.texture_filter_anisotropic )
|
||||
qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 );
|
||||
pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 );
|
||||
}
|
||||
|
||||
// clamp if required
|
||||
if( !( flags & IT_CLAMP ) )
|
||||
{
|
||||
qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT );
|
||||
qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT );
|
||||
qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT );
|
||||
pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT );
|
||||
pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT );
|
||||
pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT );
|
||||
}
|
||||
else if( glConfig.ext.texture_edge_clamp )
|
||||
{
|
||||
qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
|
||||
qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
|
||||
qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE );
|
||||
pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
|
||||
pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
|
||||
pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE );
|
||||
}
|
||||
else
|
||||
{
|
||||
qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP );
|
||||
qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP );
|
||||
qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP );
|
||||
pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP );
|
||||
pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP );
|
||||
pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP );
|
||||
}
|
||||
|
||||
if( subImage )
|
||||
qglTexSubImage3D( GL_TEXTURE_3D, 0, 0, 0, 0, scaledWidth, scaledHeight, scaledDepth, GL_RGBA, GL_UNSIGNED_BYTE, data[0] );
|
||||
pglTexSubImage3D( GL_TEXTURE_3D, 0, 0, 0, 0, scaledWidth, scaledHeight, scaledDepth, GL_RGBA, GL_UNSIGNED_BYTE, data[0] );
|
||||
else
|
||||
qglTexImage3D( GL_TEXTURE_3D, 0, comp, scaledWidth, scaledHeight, scaledDepth, 0, GL_RGBA, GL_UNSIGNED_BYTE, data[0] );
|
||||
pglTexImage3D( GL_TEXTURE_3D, 0, comp, scaledWidth, scaledHeight, scaledDepth, 0, GL_RGBA, GL_UNSIGNED_BYTE, data[0] );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -976,7 +976,7 @@ static _inline image_t *R_InitPic( const char *name, byte **pic, int width, int
|
|||
image->hash_next = images_hash[image_cur_hash];
|
||||
images_hash[image_cur_hash] = image;
|
||||
|
||||
qglDeleteTextures( 1, &image->texnum );
|
||||
pglDeleteTextures( 1, &image->texnum );
|
||||
GL_Bind( 0, image );
|
||||
|
||||
if( depth == 1 )
|
||||
|
@ -1209,7 +1209,7 @@ bool VID_ScreenShot( const char *filename, bool levelshot )
|
|||
r_shot->buffer = Mem_Alloc( r_temppool, glState.width * glState.height * 3 );
|
||||
|
||||
// get screen frame
|
||||
qglReadPixels( 0, 0, glState.width, glState.height, GL_RGB, GL_UNSIGNED_BYTE, r_shot->buffer );
|
||||
pglReadPixels( 0, 0, glState.width, glState.height, GL_RGB, GL_UNSIGNED_BYTE, r_shot->buffer );
|
||||
|
||||
if( levelshot ) flags |= IMAGE_RESAMPLE;
|
||||
// else VID_ImageAdjustGamma( r_shot->buffer, r_shot->width, r_shot->height ); // adjust brightness
|
||||
|
@ -1256,7 +1256,7 @@ bool VID_CubemapShot( const char *base, uint size, bool skyshot )
|
|||
if( skyshot ) R_DrawCubemapView( r_lastRefdef.vieworg, r_skyBoxAngles[i], size );
|
||||
else R_DrawCubemapView( r_lastRefdef.vieworg, r_cubeMapAngles[i], size );
|
||||
|
||||
qglReadPixels( 0, glState.height - size, size, size, GL_RGB, GL_UNSIGNED_BYTE, temp );
|
||||
pglReadPixels( 0, glState.height - size, size, size, GL_RGB, GL_UNSIGNED_BYTE, temp );
|
||||
Mem_Copy( buffer + (size * size * 3 * i), temp, size * size * 3 );
|
||||
}
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
373
render/r_main.c
373
render/r_main.c
|
@ -104,14 +104,14 @@ void GL_Cull( int cull )
|
|||
|
||||
if( !cull )
|
||||
{
|
||||
qglDisable( GL_CULL_FACE );
|
||||
pglDisable( GL_CULL_FACE );
|
||||
glState.faceCull = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if( !glState.faceCull )
|
||||
qglEnable( GL_CULL_FACE );
|
||||
qglCullFace( cull );
|
||||
pglEnable( GL_CULL_FACE );
|
||||
pglCullFace( cull );
|
||||
glState.faceCull = cull;
|
||||
}
|
||||
|
||||
|
@ -200,20 +200,20 @@ void GL_SetState( int state )
|
|||
if( state & GLSTATE_BLEND_MTEX )
|
||||
{
|
||||
if( glState.currentEnvModes[glState.currentTMU] != GL_REPLACE )
|
||||
qglEnable( GL_BLEND );
|
||||
pglEnable( GL_BLEND );
|
||||
else
|
||||
qglDisable( GL_BLEND );
|
||||
pglDisable( GL_BLEND );
|
||||
}
|
||||
else
|
||||
{
|
||||
qglEnable( GL_BLEND );
|
||||
pglEnable( GL_BLEND );
|
||||
}
|
||||
|
||||
qglBlendFunc( blendsrc, blenddst );
|
||||
pglBlendFunc( blendsrc, blenddst );
|
||||
}
|
||||
else
|
||||
{
|
||||
qglDisable( GL_BLEND );
|
||||
pglDisable( GL_BLEND );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -222,51 +222,51 @@ void GL_SetState( int state )
|
|||
if( state & GLSTATE_ALPHAFUNC )
|
||||
{
|
||||
if( !( glState.flags & GLSTATE_ALPHAFUNC ) )
|
||||
qglEnable( GL_ALPHA_TEST );
|
||||
pglEnable( GL_ALPHA_TEST );
|
||||
|
||||
if( state & GLSTATE_AFUNC_GT0 )
|
||||
qglAlphaFunc( GL_GREATER, 0 );
|
||||
pglAlphaFunc( GL_GREATER, 0 );
|
||||
else if( state & GLSTATE_AFUNC_LT128 )
|
||||
qglAlphaFunc( GL_LESS, 0.5f );
|
||||
pglAlphaFunc( GL_LESS, 0.5f );
|
||||
else
|
||||
qglAlphaFunc( GL_GEQUAL, 0.5f );
|
||||
pglAlphaFunc( GL_GEQUAL, 0.5f );
|
||||
}
|
||||
else
|
||||
{
|
||||
qglDisable( GL_ALPHA_TEST );
|
||||
pglDisable( GL_ALPHA_TEST );
|
||||
}
|
||||
}
|
||||
|
||||
if( diff & GLSTATE_DEPTHFUNC_EQ )
|
||||
{
|
||||
if( state & GLSTATE_DEPTHFUNC_EQ )
|
||||
qglDepthFunc( GL_EQUAL );
|
||||
pglDepthFunc( GL_EQUAL );
|
||||
else
|
||||
qglDepthFunc( GL_LEQUAL );
|
||||
pglDepthFunc( GL_LEQUAL );
|
||||
}
|
||||
|
||||
if( diff & GLSTATE_DEPTHWRITE )
|
||||
{
|
||||
if( state & GLSTATE_DEPTHWRITE )
|
||||
qglDepthMask( GL_TRUE );
|
||||
pglDepthMask( GL_TRUE );
|
||||
else
|
||||
qglDepthMask( GL_FALSE );
|
||||
pglDepthMask( GL_FALSE );
|
||||
}
|
||||
|
||||
if( diff & GLSTATE_NO_DEPTH_TEST )
|
||||
{
|
||||
if( state & GLSTATE_NO_DEPTH_TEST )
|
||||
qglDisable( GL_DEPTH_TEST );
|
||||
pglDisable( GL_DEPTH_TEST );
|
||||
else
|
||||
qglEnable( GL_DEPTH_TEST );
|
||||
pglEnable( GL_DEPTH_TEST );
|
||||
}
|
||||
|
||||
if( diff & GLSTATE_OFFSET_FILL )
|
||||
{
|
||||
if( state & GLSTATE_OFFSET_FILL )
|
||||
qglEnable( GL_POLYGON_OFFSET_FILL );
|
||||
pglEnable( GL_POLYGON_OFFSET_FILL );
|
||||
else
|
||||
qglDisable( GL_POLYGON_OFFSET_FILL );
|
||||
pglDisable( GL_POLYGON_OFFSET_FILL );
|
||||
}
|
||||
|
||||
glState.flags = state;
|
||||
|
@ -279,7 +279,7 @@ GL_FrontFace
|
|||
*/
|
||||
void GL_FrontFace( int front )
|
||||
{
|
||||
qglFrontFace( front ? GL_CW : GL_CCW );
|
||||
pglFrontFace( front ? GL_CW : GL_CCW );
|
||||
glState.frontFace = front;
|
||||
}
|
||||
|
||||
|
@ -324,7 +324,7 @@ void R_LoadIdentity( void )
|
|||
{
|
||||
Matrix4_Identity( RI.objectMatrix );
|
||||
Matrix4_Copy( RI.worldviewMatrix, RI.modelviewMatrix );
|
||||
qglLoadMatrixf( RI.modelviewMatrix );
|
||||
pglLoadMatrixf( RI.modelviewMatrix );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -374,7 +374,7 @@ void R_RotateForEntity( ref_entity_t *e )
|
|||
RI.objectMatrix[15] = 1.0;
|
||||
|
||||
Matrix4_MultiplyFast( RI.worldviewMatrix, RI.objectMatrix, RI.modelviewMatrix );
|
||||
qglLoadMatrixf( RI.modelviewMatrix );
|
||||
pglLoadMatrixf( RI.modelviewMatrix );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -397,7 +397,7 @@ void R_TranslateForEntity( ref_entity_t *e )
|
|||
RI.objectMatrix[14] = e->origin[2];
|
||||
|
||||
Matrix4_MultiplyFast( RI.worldviewMatrix, RI.objectMatrix, RI.modelviewMatrix );
|
||||
qglLoadMatrixf( RI.modelviewMatrix );
|
||||
pglLoadMatrixf( RI.modelviewMatrix );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -631,7 +631,7 @@ static void R_PushFlareSurf( const meshbuffer_t *mb )
|
|||
if( v[1] < RI.refdef.viewport[1] || v[1] > RI.refdef.viewport[1] + RI.refdef.viewport[3] )
|
||||
return;
|
||||
|
||||
qglReadPixels( (int)( v[0] /* + 0.5f*/ ), (int)( v[1] /* + 0.5f*/ ), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth );
|
||||
pglReadPixels( (int)( v[0] /* + 0.5f*/ ), (int)( v[1] /* + 0.5f*/ ), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth );
|
||||
if( depth + 1e-4 < v[2] )
|
||||
return; // occluded
|
||||
|
||||
|
@ -848,18 +848,18 @@ void R_Set2DMode( bool enable )
|
|||
return;
|
||||
|
||||
// set 2D virtual screen size
|
||||
qglScissor( 0, 0, glState.width, glState.height );
|
||||
qglViewport( 0, 0, glState.width, glState.height );
|
||||
qglMatrixMode( GL_PROJECTION );
|
||||
qglLoadIdentity();
|
||||
qglOrtho( 0, glState.width, glState.height, 0, -99999, 99999 );
|
||||
qglMatrixMode( GL_MODELVIEW );
|
||||
qglLoadIdentity();
|
||||
pglScissor( 0, 0, glState.width, glState.height );
|
||||
pglViewport( 0, 0, glState.width, glState.height );
|
||||
pglMatrixMode( GL_PROJECTION );
|
||||
pglLoadIdentity();
|
||||
pglOrtho( 0, glState.width, glState.height, 0, -99999, 99999 );
|
||||
pglMatrixMode( GL_MODELVIEW );
|
||||
pglLoadIdentity();
|
||||
|
||||
GL_Cull( 0 );
|
||||
GL_SetState( GLSTATE_NO_DEPTH_TEST );
|
||||
|
||||
qglColor4f( 1, 1, 1, 1 );
|
||||
pglColor4f( 1, 1, 1, 1 );
|
||||
|
||||
glState.in2DMode = true;
|
||||
RI.currententity = RI.previousentity = NULL;
|
||||
|
@ -949,16 +949,16 @@ void R_DrawStretchRaw( int x, int y, int w, int h, int cols, int rows, byte *dat
|
|||
r_cintexture->width = cols;
|
||||
r_cintexture->height = rows;
|
||||
|
||||
qglBegin( GL_QUADS );
|
||||
qglTexCoord2f( 0, 0 );
|
||||
qglVertex2f( x, y );
|
||||
qglTexCoord2f( 1, 0 );
|
||||
qglVertex2f( x + w, y );
|
||||
qglTexCoord2f( 1, 1 );
|
||||
qglVertex2f( x + w, y + h );
|
||||
qglTexCoord2f( 0, 1 );
|
||||
qglVertex2f( x, y + h );
|
||||
qglEnd();
|
||||
pglBegin( GL_QUADS );
|
||||
pglTexCoord2f( 0, 0 );
|
||||
pglVertex2f( x, y );
|
||||
pglTexCoord2f( 1, 0 );
|
||||
pglVertex2f( x + w, y );
|
||||
pglTexCoord2f( 1, 1 );
|
||||
pglVertex2f( x + w, y + h );
|
||||
pglTexCoord2f( 0, 1 );
|
||||
pglVertex2f( x, y + h );
|
||||
pglEnd();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -973,29 +973,29 @@ static void R_PolyBlend( void )
|
|||
if( RI.refdef.blend[3] < 0.01f )
|
||||
return;
|
||||
|
||||
qglMatrixMode( GL_PROJECTION );
|
||||
qglLoadIdentity();
|
||||
qglOrtho( 0, 1, 1, 0, -99999, 99999 );
|
||||
pglMatrixMode( GL_PROJECTION );
|
||||
pglLoadIdentity();
|
||||
pglOrtho( 0, 1, 1, 0, -99999, 99999 );
|
||||
|
||||
qglMatrixMode( GL_MODELVIEW );
|
||||
qglLoadIdentity();
|
||||
pglMatrixMode( GL_MODELVIEW );
|
||||
pglLoadIdentity();
|
||||
|
||||
GL_Cull( 0 );
|
||||
GL_SetState( GLSTATE_NO_DEPTH_TEST|GLSTATE_SRCBLEND_SRC_ALPHA|GLSTATE_DSTBLEND_ONE_MINUS_SRC_ALPHA );
|
||||
|
||||
qglDisable( GL_TEXTURE_2D );
|
||||
pglDisable( GL_TEXTURE_2D );
|
||||
|
||||
qglColor4fv( RI.refdef.blend );
|
||||
pglColor4fv( RI.refdef.blend );
|
||||
|
||||
qglBegin( GL_TRIANGLES );
|
||||
qglVertex2f( -5, -5 );
|
||||
qglVertex2f( 10, -5 );
|
||||
qglVertex2f( -5, 10 );
|
||||
qglEnd();
|
||||
pglBegin( GL_TRIANGLES );
|
||||
pglVertex2f( -5, -5 );
|
||||
pglVertex2f( 10, -5 );
|
||||
pglVertex2f( -5, 10 );
|
||||
pglEnd();
|
||||
|
||||
qglEnable( GL_TEXTURE_2D );
|
||||
pglEnable( GL_TEXTURE_2D );
|
||||
|
||||
qglColor4f( 1, 1, 1, 1 );
|
||||
pglColor4f( 1, 1, 1, 1 );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1011,17 +1011,17 @@ static void R_ApplySoftwareGamma( void )
|
|||
if( !r_ignorehwgamma->integer )
|
||||
return;
|
||||
|
||||
qglMatrixMode( GL_PROJECTION );
|
||||
qglLoadIdentity();
|
||||
qglOrtho( 0, 1, 1, 0, -99999, 99999 );
|
||||
pglMatrixMode( GL_PROJECTION );
|
||||
pglLoadIdentity();
|
||||
pglOrtho( 0, 1, 1, 0, -99999, 99999 );
|
||||
|
||||
qglMatrixMode( GL_MODELVIEW );
|
||||
qglLoadIdentity();
|
||||
pglMatrixMode( GL_MODELVIEW );
|
||||
pglLoadIdentity();
|
||||
|
||||
GL_Cull( 0 );
|
||||
GL_SetState( GLSTATE_NO_DEPTH_TEST | GLSTATE_SRCBLEND_DST_COLOR | GLSTATE_DSTBLEND_ONE );
|
||||
|
||||
qglDisable( GL_TEXTURE_2D );
|
||||
pglDisable( GL_TEXTURE_2D );
|
||||
|
||||
if( r_overbrightbits->integer > 0 )
|
||||
div = 0.5 * (double)( 1 << r_overbrightbits->integer );
|
||||
|
@ -1030,26 +1030,26 @@ static void R_ApplySoftwareGamma( void )
|
|||
f = div + r_gamma->value;
|
||||
f = bound( 0.1f, f, 5.0f );
|
||||
|
||||
qglBegin( GL_TRIANGLES );
|
||||
pglBegin( GL_TRIANGLES );
|
||||
|
||||
while( f >= 1.01f )
|
||||
{
|
||||
if( f >= 2 )
|
||||
qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
|
||||
pglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
|
||||
else
|
||||
qglColor4f( f - 1.0f, f - 1.0f, f - 1.0f, 1.0f );
|
||||
pglColor4f( f - 1.0f, f - 1.0f, f - 1.0f, 1.0f );
|
||||
|
||||
qglVertex2f( -5, -5 );
|
||||
qglVertex2f( 10, -5 );
|
||||
qglVertex2f( -5, 10 );
|
||||
pglVertex2f( -5, -5 );
|
||||
pglVertex2f( 10, -5 );
|
||||
pglVertex2f( -5, 10 );
|
||||
f *= 0.5;
|
||||
}
|
||||
|
||||
qglEnd();
|
||||
pglEnd();
|
||||
|
||||
qglEnable( GL_TEXTURE_2D );
|
||||
pglEnable( GL_TEXTURE_2D );
|
||||
|
||||
qglColor4f( 1, 1, 1, 1 );
|
||||
pglColor4f( 1, 1, 1, 1 );
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
|
@ -1346,20 +1346,20 @@ static void R_Clear( int bitMask )
|
|||
bits &= bitMask;
|
||||
|
||||
if( bits & GL_STENCIL_BUFFER_BIT )
|
||||
qglClearStencil( 128 );
|
||||
pglClearStencil( 128 );
|
||||
|
||||
if( bits & GL_COLOR_BUFFER_BIT )
|
||||
{
|
||||
byte *color = r_worldmodel && !( RI.refdef.rdflags & RDF_NOWORLDMODEL ) && r_worldbrushmodel->globalfog ?
|
||||
r_worldbrushmodel->globalfog->shader->fog_color : mapConfig.environmentColor;
|
||||
qglClearColor( (float)color[0]*( 1.0/255.0 ), (float)color[1]*( 1.0/255.0 ), (float)color[2]*( 1.0/255.0 ), 1 );
|
||||
pglClearColor( (float)color[0]*( 1.0/255.0 ), (float)color[1]*( 1.0/255.0 ), (float)color[2]*( 1.0/255.0 ), 1 );
|
||||
}
|
||||
|
||||
qglClear( bits );
|
||||
pglClear( bits );
|
||||
|
||||
gldepthmin = 0;
|
||||
gldepthmax = 1;
|
||||
qglDepthRange( gldepthmin, gldepthmax );
|
||||
pglDepthRange( gldepthmin, gldepthmax );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1369,14 +1369,14 @@ R_SetupGL
|
|||
*/
|
||||
static void R_SetupGL( void )
|
||||
{
|
||||
qglScissor( RI.scissor[0], RI.scissor[1], RI.scissor[2], RI.scissor[3] );
|
||||
qglViewport( RI.viewport[0], RI.viewport[1], RI.viewport[2], RI.viewport[3] );
|
||||
pglScissor( RI.scissor[0], RI.scissor[1], RI.scissor[2], RI.scissor[3] );
|
||||
pglViewport( RI.viewport[0], RI.viewport[1], RI.viewport[2], RI.viewport[3] );
|
||||
|
||||
qglMatrixMode( GL_PROJECTION );
|
||||
qglLoadMatrixf( RI.projectionMatrix );
|
||||
pglMatrixMode( GL_PROJECTION );
|
||||
pglLoadMatrixf( RI.projectionMatrix );
|
||||
|
||||
qglMatrixMode( GL_MODELVIEW );
|
||||
qglLoadMatrixf( RI.worldviewMatrix );
|
||||
pglMatrixMode( GL_MODELVIEW );
|
||||
pglLoadMatrixf( RI.worldviewMatrix );
|
||||
|
||||
if( RI.params & RP_CLIPPLANE )
|
||||
{
|
||||
|
@ -1388,8 +1388,8 @@ static void R_SetupGL( void )
|
|||
clip[2] = p->normal[2];
|
||||
clip[3] = -p->dist;
|
||||
|
||||
qglClipPlane( GL_CLIP_PLANE0, clip );
|
||||
qglEnable( GL_CLIP_PLANE0 );
|
||||
pglClipPlane( GL_CLIP_PLANE0, clip );
|
||||
pglEnable( GL_CLIP_PLANE0 );
|
||||
}
|
||||
|
||||
if( RI.params & RP_FLIPFRONTFACE )
|
||||
|
@ -1397,11 +1397,11 @@ static void R_SetupGL( void )
|
|||
|
||||
if( RI.params & RP_SHADOWMAPVIEW )
|
||||
{
|
||||
qglShadeModel( GL_FLAT );
|
||||
qglColorMask( 0, 0, 0, 0 );
|
||||
qglPolygonOffset( 1, 4 );
|
||||
pglShadeModel( GL_FLAT );
|
||||
pglColorMask( 0, 0, 0, 0 );
|
||||
pglPolygonOffset( 1, 4 );
|
||||
if( prevRI.params & RP_CLIPPLANE )
|
||||
qglDisable( GL_CLIP_PLANE0 );
|
||||
pglDisable( GL_CLIP_PLANE0 );
|
||||
}
|
||||
|
||||
GL_Cull( GL_FRONT );
|
||||
|
@ -1417,18 +1417,18 @@ static void R_EndGL( void )
|
|||
{
|
||||
if( RI.params & RP_SHADOWMAPVIEW )
|
||||
{
|
||||
qglPolygonOffset( -1, -2 );
|
||||
qglColorMask( 1, 1, 1, 1 );
|
||||
qglShadeModel( GL_SMOOTH );
|
||||
pglPolygonOffset( -1, -2 );
|
||||
pglColorMask( 1, 1, 1, 1 );
|
||||
pglShadeModel( GL_SMOOTH );
|
||||
if( prevRI.params & RP_CLIPPLANE )
|
||||
qglEnable( GL_CLIP_PLANE0 );
|
||||
pglEnable( GL_CLIP_PLANE0 );
|
||||
}
|
||||
|
||||
if( RI.params & RP_FLIPFRONTFACE )
|
||||
GL_FrontFace( !glState.frontFace );
|
||||
|
||||
if( RI.params & RP_CLIPPLANE )
|
||||
qglDisable( GL_CLIP_PLANE0 );
|
||||
pglDisable( GL_CLIP_PLANE0 );
|
||||
}
|
||||
|
||||
|
||||
|
@ -1548,27 +1548,27 @@ R_DrawNullModel
|
|||
*/
|
||||
static void R_DrawNullModel( void )
|
||||
{
|
||||
qglBegin( GL_LINES );
|
||||
pglBegin( GL_LINES );
|
||||
|
||||
qglColor4f( 1, 0, 0, 0.5 );
|
||||
qglVertex3fv( RI.currententity->origin );
|
||||
qglVertex3f( RI.currententity->origin[0] + RI.currententity->axis[0][0] * 15,
|
||||
pglColor4f( 1, 0, 0, 0.5 );
|
||||
pglVertex3fv( RI.currententity->origin );
|
||||
pglVertex3f( RI.currententity->origin[0] + RI.currententity->axis[0][0] * 15,
|
||||
RI.currententity->origin[1] + RI.currententity->axis[0][1] * 15,
|
||||
RI.currententity->origin[2] + RI.currententity->axis[0][2] * 15 );
|
||||
|
||||
qglColor4f( 0, 1, 0, 0.5 );
|
||||
qglVertex3fv( RI.currententity->origin );
|
||||
qglVertex3f( RI.currententity->origin[0] - RI.currententity->axis[1][0] * 15,
|
||||
pglColor4f( 0, 1, 0, 0.5 );
|
||||
pglVertex3fv( RI.currententity->origin );
|
||||
pglVertex3f( RI.currententity->origin[0] - RI.currententity->axis[1][0] * 15,
|
||||
RI.currententity->origin[1] - RI.currententity->axis[1][1] * 15,
|
||||
RI.currententity->origin[2] - RI.currententity->axis[1][2] * 15 );
|
||||
|
||||
qglColor4f( 0, 0, 1, 0.5 );
|
||||
qglVertex3fv( RI.currententity->origin );
|
||||
qglVertex3f( RI.currententity->origin[0] + RI.currententity->axis[2][0] * 15,
|
||||
pglColor4f( 0, 0, 1, 0.5 );
|
||||
pglVertex3fv( RI.currententity->origin );
|
||||
pglVertex3f( RI.currententity->origin[0] + RI.currententity->axis[2][0] * 15,
|
||||
RI.currententity->origin[1] + RI.currententity->axis[2][1] * 15,
|
||||
RI.currententity->origin[2] + RI.currententity->axis[2][2] * 15 );
|
||||
|
||||
qglEnd();
|
||||
pglEnd();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1661,7 +1661,7 @@ static void R_DrawNullEntities( void )
|
|||
if( !r_numnullentities )
|
||||
return;
|
||||
|
||||
qglDisable( GL_TEXTURE_2D );
|
||||
pglDisable( GL_TEXTURE_2D );
|
||||
GL_SetState( GLSTATE_SRCBLEND_SRC_ALPHA|GLSTATE_DSTBLEND_ONE_MINUS_SRC_ALPHA );
|
||||
|
||||
// draw non-transparent first
|
||||
|
@ -1683,7 +1683,7 @@ static void R_DrawNullEntities( void )
|
|||
R_DrawNullModel();
|
||||
}
|
||||
|
||||
qglEnable( GL_TEXTURE_2D );
|
||||
pglEnable( GL_TEXTURE_2D );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1862,6 +1862,8 @@ void R_RenderView( const ref_params_t *fd )
|
|||
|
||||
R_RenderDebugSurface ();
|
||||
|
||||
R_DrawPhysDebug ();
|
||||
|
||||
R_DrawNullEntities();
|
||||
|
||||
R_EndGL();
|
||||
|
@ -1882,8 +1884,8 @@ static void R_UpdateSwapInterval( void )
|
|||
|
||||
if( !glState.stereoEnabled )
|
||||
{
|
||||
if( qglSwapInterval )
|
||||
qglSwapInterval( r_swapinterval->integer );
|
||||
if( pglSwapInterval )
|
||||
pglSwapInterval( r_swapinterval->integer );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1931,7 +1933,7 @@ void R_BeginFrame( void )
|
|||
// apply software gamma
|
||||
// R_ApplySoftwareGamma ();
|
||||
|
||||
qglFinish();
|
||||
pglFinish();
|
||||
|
||||
GLimp_EndFrame();
|
||||
}
|
||||
|
@ -1967,8 +1969,8 @@ void R_BeginFrame( void )
|
|||
rgba_t color;
|
||||
|
||||
Vector4Copy( mapConfig.environmentColor, color );
|
||||
qglClearColor( color[0]*( 1.0/255.0 ), color[1]*( 1.0/255.0 ), color[2]*( 1.0/255.0 ), 1 );
|
||||
qglClear( GL_COLOR_BUFFER_BIT );
|
||||
pglClearColor( color[0]*( 1.0/255.0 ), color[1]*( 1.0/255.0 ), color[2]*( 1.0/255.0 ), 1 );
|
||||
pglClear( GL_COLOR_BUFFER_BIT );
|
||||
}
|
||||
|
||||
// update gamma
|
||||
|
@ -1992,9 +1994,9 @@ void R_BeginFrame( void )
|
|||
if( glState.cameraSeparation == 0 || !glState.stereoEnabled )
|
||||
{
|
||||
if( com.stricmp( gl_drawbuffer->string, "GL_FRONT" ) == 0 )
|
||||
qglDrawBuffer( GL_FRONT );
|
||||
pglDrawBuffer( GL_FRONT );
|
||||
else
|
||||
qglDrawBuffer( GL_BACK );
|
||||
pglDrawBuffer( GL_BACK );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2117,7 +2119,7 @@ void R_RenderScene( const ref_params_t *fd )
|
|||
VectorCopy( fd->vieworg, RI.lodOrigin );
|
||||
|
||||
if( gl_finish->integer && !gl_delayfinish->integer && !( fd->rdflags & RDF_NOWORLDMODEL ) )
|
||||
qglFinish();
|
||||
pglFinish();
|
||||
|
||||
R_ClearShadowmaps();
|
||||
|
||||
|
@ -2155,7 +2157,7 @@ void R_EndFrame( void )
|
|||
|
||||
if( gl_finish->integer && gl_delayfinish->integer )
|
||||
{
|
||||
qglFlush();
|
||||
pglFlush();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2306,61 +2308,25 @@ bool R_AddLightStyle( int stylenum, vec3_t color )
|
|||
return true;
|
||||
}
|
||||
|
||||
bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac )
|
||||
bool R_AddGenericEntity( edict_t *pRefEntity, ref_entity_t *refent, int ed_type, float lerpfrac )
|
||||
{
|
||||
ref_entity_t *refent;
|
||||
int i;
|
||||
|
||||
if( !pRefEntity || !pRefEntity->v.modelindex )
|
||||
return false; // if set to invisible, skip
|
||||
if( r_numEntities >= MAX_ENTITIES ) return false;
|
||||
|
||||
refent = &r_entities[r_numEntities];
|
||||
|
||||
if( pRefEntity->v.effects & EF_NODRAW )
|
||||
return true; // done
|
||||
|
||||
// filter ents
|
||||
switch( ed_type )
|
||||
{
|
||||
case ED_MOVER:
|
||||
case ED_CLIENT:
|
||||
case ED_NORMAL:
|
||||
case ED_MONSTER:
|
||||
case ED_BSPBRUSH:
|
||||
case ED_RIGIDBODY:
|
||||
case ED_VIEWMODEL: break;
|
||||
default: return false;
|
||||
}
|
||||
|
||||
// copy state to render
|
||||
refent->index = pRefEntity->serialnumber;
|
||||
refent->ent_type = ed_type;
|
||||
refent->backlerp = 1.0f - lerpfrac;
|
||||
refent->rendermode = pRefEntity->v.rendermode;
|
||||
refent->body = pRefEntity->v.body;
|
||||
refent->scale = pRefEntity->v.scale;
|
||||
refent->colormap = pRefEntity->v.colormap;
|
||||
refent->effects = pRefEntity->v.effects;
|
||||
VectorCopy( pRefEntity->v.rendercolor, refent->rendercolor );
|
||||
refent->renderamt = pRefEntity->v.renderamt;
|
||||
refent->model = cl_models[pRefEntity->v.modelindex];
|
||||
refent->movetype = pRefEntity->v.movetype;
|
||||
refent->framerate = pRefEntity->v.framerate;
|
||||
refent->prev.sequencetime = refent->animtime - refent->prev.animtime;
|
||||
int i;
|
||||
|
||||
// check model
|
||||
if( !refent->model ) return false;
|
||||
|
||||
switch( refent->model->type )
|
||||
{
|
||||
case mod_brush: break;
|
||||
case mod_studio:
|
||||
if( !refent->model->extradata )
|
||||
return false;
|
||||
refent->rtype = RT_MODEL;
|
||||
break;
|
||||
case mod_sprite:
|
||||
if( !refent->model->extradata )
|
||||
return false;
|
||||
refent->rtype = RT_SPRITE;
|
||||
break;
|
||||
case mod_bad: // let the render drawing null model
|
||||
break;
|
||||
|
@ -2369,14 +2335,7 @@ bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac )
|
|||
// setup latchedvars
|
||||
VectorCopy( pRefEntity->v.oldorigin, refent->prev.origin );
|
||||
VectorCopy( pRefEntity->v.oldangles, refent->prev.angles );
|
||||
|
||||
// interpolate origin
|
||||
for( i = 0; i < 3; i++ )
|
||||
refent->origin[i] = LerpPoint( pRefEntity->v.oldorigin[i], pRefEntity->v.origin[i], lerpfrac );
|
||||
|
||||
refent->skin = pRefEntity->v.skin;
|
||||
refent->renderfx = pRefEntity->v.renderfx;
|
||||
|
||||
// do animate
|
||||
if( refent->effects & EF_ANIMATE )
|
||||
{
|
||||
|
@ -2421,12 +2380,14 @@ bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac )
|
|||
refent->sequence = pRefEntity->v.sequence;
|
||||
}
|
||||
|
||||
refent->prev.sequencetime = refent->animtime - refent->prev.animtime;
|
||||
refent->weaponmodel = cl_models[pRefEntity->v.weaponmodel];
|
||||
|
||||
if( refent->ent_type == ED_MOVER || refent->ent_type == ED_BSPBRUSH )
|
||||
{
|
||||
// store conveyor movedir in pev->velocity
|
||||
VectorNormalize2( pRefEntity->v.velocity, refent->movedir );
|
||||
VectorNormalize2( pRefEntity->v.movedir, refent->movedir );
|
||||
}
|
||||
else VectorClear( refent->movedir );
|
||||
|
||||
// calculate angles
|
||||
if( refent->effects & EF_ROTATE )
|
||||
|
@ -2441,7 +2402,11 @@ bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac )
|
|||
refent->angles[i] = LerpAngle( pRefEntity->v.oldangles[i], pRefEntity->v.angles[i], lerpfrac );
|
||||
}
|
||||
|
||||
// interpolate origin
|
||||
for( i = 0; i < 3; i++ )
|
||||
refent->origin[i] = LerpPoint( pRefEntity->v.oldorigin[i], pRefEntity->v.origin[i], lerpfrac );
|
||||
AngleVectorsFLU( refent->angles, refent->axis[0], refent->axis[1], refent->axis[2] );
|
||||
VectorClear( refent->origin2 );
|
||||
|
||||
if(( refent->ent_type == ED_VIEWMODEL ) && ( r_lefthand->integer == 1 ))
|
||||
VectorNegate( refent->axis[1], refent->axis[1] );
|
||||
|
@ -2479,11 +2444,85 @@ bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac )
|
|||
// and ignore all other unset ents
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool R_AddPortalEntity( edict_t *pRefEntity, ref_entity_t *refent, int ed_type, float lerpfrac )
|
||||
{
|
||||
refent->rtype = RT_PORTALSURFACE;
|
||||
|
||||
VectorClear( refent->angles );
|
||||
Matrix_Identity( refent->axis );
|
||||
VectorCopy( pRefEntity->v.movedir, refent->movedir );
|
||||
VectorCopy( pRefEntity->v.origin, refent->origin );
|
||||
VectorCopy( pRefEntity->v.oldorigin, refent->origin2 );
|
||||
|
||||
// calculate angles
|
||||
if( refent->effects & EF_ROTATE )
|
||||
Matrix_Rotate( refent->axis, 5 * sin(( 0.25f + RI.refdef.time * 50 * 0.01 ) * M_PI2 ), 1, 0, 0 );
|
||||
return true;
|
||||
}
|
||||
|
||||
bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac )
|
||||
{
|
||||
ref_entity_t *refent;
|
||||
bool result = false;
|
||||
|
||||
if( !pRefEntity || !pRefEntity->v.modelindex )
|
||||
return false; // if set to invisible, skip
|
||||
if( r_numEntities >= MAX_ENTITIES ) return false;
|
||||
|
||||
refent = &r_entities[r_numEntities];
|
||||
|
||||
if( pRefEntity->v.effects & EF_NODRAW )
|
||||
return true; // done
|
||||
|
||||
// filter ents
|
||||
switch( ed_type )
|
||||
{
|
||||
case ED_MOVER:
|
||||
case ED_PORTAL:
|
||||
case ED_CLIENT:
|
||||
case ED_NORMAL:
|
||||
case ED_MONSTER:
|
||||
case ED_BSPBRUSH:
|
||||
case ED_RIGIDBODY:
|
||||
case ED_VIEWMODEL: break;
|
||||
default: return false;
|
||||
}
|
||||
|
||||
// copy state to render
|
||||
refent->index = pRefEntity->serialnumber;
|
||||
refent->ent_type = ed_type;
|
||||
refent->backlerp = 1.0f - lerpfrac;
|
||||
refent->rendermode = pRefEntity->v.rendermode;
|
||||
refent->body = pRefEntity->v.body;
|
||||
refent->skin = pRefEntity->v.skin;
|
||||
refent->scale = pRefEntity->v.scale;
|
||||
refent->colormap = pRefEntity->v.colormap;
|
||||
refent->effects = pRefEntity->v.effects;
|
||||
refent->renderfx = pRefEntity->v.renderfx;
|
||||
VectorCopy( pRefEntity->v.rendercolor, refent->rendercolor );
|
||||
refent->renderamt = pRefEntity->v.renderamt;
|
||||
refent->model = cl_models[pRefEntity->v.modelindex];
|
||||
refent->movetype = pRefEntity->v.movetype;
|
||||
refent->framerate = pRefEntity->v.framerate;
|
||||
|
||||
// setup rtype
|
||||
switch( ed_type )
|
||||
{
|
||||
case ED_PORTAL:
|
||||
result = R_AddPortalEntity( pRefEntity, refent, ed_type, lerpfrac );
|
||||
break;
|
||||
default:
|
||||
result = R_AddGenericEntity( pRefEntity, refent, ed_type, lerpfrac );
|
||||
break;
|
||||
}
|
||||
|
||||
// add entity
|
||||
r_numEntities++;
|
||||
|
||||
return true;
|
||||
return result;
|
||||
}
|
||||
|
||||
bool R_AddDynamicLight( vec3_t org, vec3_t color, float intensity )
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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 );
|
||||
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
|
@ -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 )
|
||||
|
|
|
@ -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 )
|
||||
|
|
|
@ -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 )
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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>
|
4
todo.log
4
todo.log
|
@ -84,11 +84,13 @@ Beta 13.12.08
|
|||
53. finish RenderMode for shaders OK
|
||||
54. q3/rbsp bsp format OK
|
||||
55. dedicated conolse hanging commands
|
||||
56. renderer areabits bug
|
||||
56. renderer areabits bug OK
|
||||
57. shutdown crash OK
|
||||
58. physic.dll finish collisions OK
|
||||
59. raven bsp supports OK
|
||||
60. fixup render times OK
|
||||
61. fixup portal rendering OK
|
||||
62. return old-xash renderer initialization
|
||||
|
||||
Ñïèñîê äîñòóïíûõ ðåíäåðåðîâ: ×òî â íèõ èíòåðåñíîãî
|
||||
0. Q3Fusion (Mirrors, Portals)
|
||||
|
|
Reference in New Issue