From 3102b034346b2b0800f23874c8126f8b4f3cab08 Mon Sep 17 00:00:00 2001 From: g-cont Date: Thu, 16 Jul 2009 00:00:00 +0400 Subject: [PATCH] 16 Jul 2009 --- common/entity_state.h | 1 + engine/client/cl_frame.c | 24 ++- engine/client/cl_view.c | 2 +- engine/client/client.h | 1 + engine/common/net_msg.c | 3 + engine/engine.plg | 17 +- engine/server/sv_frame.c | 20 +- engine/server/sv_game.c | 2 + engine/server/sv_phys.c | 3 +- engine/server/sv_world.c | 3 +- launch/launch.plg | 64 ------ launch/xash/xash.ico | Bin 12862 -> 766 bytes launch/xash/xash1.ico | Bin 0 -> 12862 bytes physic/cm_collision.c | 19 ++ physic/cm_debug.c | 1 + physic/cm_local.h | 3 +- physic/cm_model.c | 73 +++++-- physic/cm_test.c | 2 +- physic/physic.plg | 36 ++++ public/anorms.h | 177 ++++++++++++++++ public/mathlib.h | 39 ++++ release.bat | 2 +- render/glw_imp.c | 87 +++++--- render/qgl.h | 4 +- render/qgl_win.c | 60 +++--- render/r_alias.c | 4 +- render/r_backend.c | 172 +++++++++------ render/r_backend.h | 2 + render/r_bloom.c | 136 ++++++------ render/r_cull.c | 30 +-- render/r_glimp.h | 12 +- render/r_image.c | 136 ++++++------ render/r_light.c | 32 +-- render/r_local.h | 1 + render/r_main.c | 373 ++++++++++++++++++--------------- render/r_mesh.c | 10 +- render/r_program.c | 138 ++++++------ render/r_register.c | 92 ++++---- render/r_shadow.c | 12 +- render/r_skm.c | 4 +- render/r_sky.c | 12 +- render/render.plg | 90 -------- server/ents/baseinfo.cpp | 68 ++++++ server/ents/basemover.cpp | 18 +- server/global/client.cpp | 7 +- server/global/enginecallback.h | 1 + server/monsters/player.cpp | 8 +- server/server.plg | 100 +++++++++ todo.log | 4 +- 49 files changed, 1297 insertions(+), 808 deletions(-) delete mode 100644 launch/launch.plg create mode 100644 launch/xash/xash1.ico create mode 100644 public/anorms.h create mode 100644 server/server.plg diff --git a/common/entity_state.h b/common/entity_state.h index e56a0f3e..c9290130 100644 --- a/common/entity_state.h +++ b/common/entity_state.h @@ -59,6 +59,7 @@ typedef struct entity_state_s vec3_t maxs; vec3_t velocity; // for predicting & tracing vec3_t avelocity; // for predicting & tracing + vec3_t oldorigin; // portal pvs, lerping state, etc int contents; // for predicting & tracing on client // model state diff --git a/engine/client/cl_frame.c b/engine/client/cl_frame.c index 6c33d25a..2eff9837 100644 --- a/engine/client/cl_frame.c +++ b/engine/client/cl_frame.c @@ -30,11 +30,11 @@ void CL_UpdateEntityFields( edict_t *ent ) ent->v.gaitsequence = ent->pvClientData->current.gaitsequence; ent->v.body = ent->pvClientData->current.body; ent->v.skin = ent->pvClientData->current.skin; + ent->v.effects = ent->pvClientData->current.effects; VectorCopy( ent->pvClientData->current.rendercolor, ent->v.rendercolor ); VectorCopy( ent->pvClientData->current.velocity, ent->v.velocity ); VectorCopy( ent->pvClientData->current.origin, ent->v.origin ); VectorCopy( ent->pvClientData->current.angles, ent->v.angles ); - VectorCopy( ent->pvClientData->prev.origin, ent->v.oldorigin ); VectorCopy( ent->pvClientData->prev.angles, ent->v.oldangles ); VectorCopy( ent->pvClientData->current.mins, ent->v.mins ); VectorCopy( ent->pvClientData->current.maxs, ent->v.maxs ); @@ -52,6 +52,20 @@ void CL_UpdateEntityFields( edict_t *ent ) ent->v.flags = ent->pvClientData->current.flags; if( ent->v.scale == 0.0f ) ent->v.scale = 1.0f; + switch( ent->pvClientData->current.ed_type ) + { + case ED_PORTAL: + case ED_MOVER: + case ED_BSPBRUSH: + ByteToDir( ent->pvClientData->current.skin, ent->v.movedir ); + VectorCopy( ent->pvClientData->current.oldorigin, ent->v.oldorigin ); + break; + default: + VectorCopy( ent->pvClientData->prev.origin, ent->v.oldorigin ); + VectorClear( ent->v.movedir ); + break; + } + for( i = 0; i < MAXSTUDIOBLENDS; i++ ) ent->v.blending[i] = ent->pvClientData->current.blending[i]; for( i = 0; i < MAXSTUDIOCONTROLLERS; i++ ) @@ -421,7 +435,11 @@ void CL_AddPacketEntities( frame_t *frame ) ent = EDICT_NUM( s1->number ); if( ent->free ) continue; - re->AddRefEntity( ent, s1->ed_type, cl.refdef.lerpfrac ); + if( re->AddRefEntity( ent, s1->ed_type, cl.refdef.lerpfrac )) + { + if( s1->ed_type == ED_PORTAL && !VectorCompare( ent->v.origin, ent->v.oldorigin )) + cl.render_flags |= 16; // TEST + } } } @@ -437,6 +455,8 @@ void CL_AddEntities( void ) if( cls.state != ca_active ) return; + cl.render_flags = 0; + CL_AddPacketEntities( &cl.frame ); clgame.dllFuncs.pfnCreateEntities(); diff --git a/engine/client/cl_view.c b/engine/client/cl_view.c index e92663d4..d841a2f7 100644 --- a/engine/client/cl_view.c +++ b/engine/client/cl_view.c @@ -122,7 +122,7 @@ void V_SetupRefDef( void ) cl.refdef.paused = cl_paused->integer; cl.refdef.predicting = cl_predict->integer; cl.refdef.waterlevel = clent->v.waterlevel; - cl.refdef.rdflags = 0; + cl.refdef.rdflags = cl.render_flags | 4; // bloom cl.refdef.nextView = 0; // calculate the origin diff --git a/engine/client/client.h b/engine/client/client.h index e4ccb71c..ef5bac9d 100644 --- a/engine/client/client.h +++ b/engine/client/client.h @@ -110,6 +110,7 @@ typedef struct double time; // this is the time value that the client double oldtime; // cl.oldtime // is rendering at. always <= cls.realtime + int render_flags; // clearing at end of frame ref_params_t refdef; // shared refdef edict_t viewent; // viewmodel client_data_t data; // hud data diff --git a/engine/common/net_msg.c b/engine/common/net_msg.c index 19afd1eb..2cd7c874 100644 --- a/engine/common/net_msg.c +++ b/engine/common/net_msg.c @@ -86,6 +86,9 @@ static net_field_t ent_fields[] = { ES_FIELD(rendercolor[0]), NET_COLOR, false }, // stateflags_t #2 (4 bytes) { ES_FIELD(rendercolor[1]), NET_COLOR, false }, { ES_FIELD(rendercolor[2]), NET_COLOR, false }, +{ ES_FIELD(oldorigin[0]), NET_FLOAT, true }, +{ ES_FIELD(oldorigin[1]), NET_FLOAT, true }, +{ ES_FIELD(oldorigin[2]), NET_FLOAT, true }, { ES_FIELD(rendermode), NET_BYTE, false }, // render mode (legacy stuff) { ES_FIELD(delta_angles[0]), NET_ANGLE, false }, { ES_FIELD(delta_angles[1]), NET_ANGLE, false }, diff --git a/engine/engine.plg b/engine/engine.plg index 3d0f4030..395d4f23 100644 --- a/engine/engine.plg +++ b/engine/engine.plg @@ -6,13 +6,13 @@ --------------------Configuration: engine - Win32 Debug--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP9C5.tmp" with contents +Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP652.tmp" with contents [ /nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "./" /I "common" /I "server" /I "client" /I "../public" /I "../common" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\engine\!debug/" /Fo"..\temp\engine\!debug/" /Fd"..\temp\engine\!debug/" /FD /c -"D:\Xash3D\src_main\engine\server\sv_game.c" +"D:\Xash3D\src_main\engine\client\cl_view.c" ] -Creating command line "cl.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP9C5.tmp" -Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP9C6.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP652.tmp" +Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP653.tmp" with contents [ user32.lib msvcrtd.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"..\temp\engine\!debug/engine.pdb" /debug /machine:I386 /nodefaultlib:"msvcrt.lib" /out:"..\temp\engine\!debug/engine.dll" /implib:"..\temp\engine\!debug/engine.lib" /pdbtype:sept "\Xash3D\src_main\temp\engine\!debug\cinematic.obj" @@ -51,17 +51,16 @@ user32.lib msvcrtd.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:".. "\Xash3D\src_main\temp\engine\!debug\sv_save.obj" "\Xash3D\src_main\temp\engine\!debug\sv_world.obj" ] -Creating command line "link.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP9C6.tmp" -Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP9C7.bat" with contents +Creating command line "link.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP653.tmp" +Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP654.bat" with contents [ @echo off copy \Xash3D\src_main\temp\engine\!debug\engine.dll "D:\Xash3D\bin\engine.dll" ] -Creating command line "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP9C7.bat" +Creating command line "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP654.bat" Compiling... -sv_game.c +cl_view.c Linking... - Creating library ..\temp\engine\!debug/engine.lib and object ..\temp\engine\!debug/engine.exp

Output Window

Performing Custom Build Step on \Xash3D\src_main\temp\engine\!debug\engine.dll ‘ª®¯¨à®¢ ­® ä ©«®¢: 1. diff --git a/engine/server/sv_frame.c b/engine/server/sv_frame.c index 2b651098..5ad265ad 100644 --- a/engine/server/sv_frame.c +++ b/engine/server/sv_frame.c @@ -53,6 +53,15 @@ void SV_UpdateEntityState( edict_t *ent, bool baseline ) ent->pvServerData->s.classname = SV_ClassIndex( STRING( ent->v.classname )); svgame.dllFuncs.pfnUpdateEntityState( &ent->pvServerData->s, ent, baseline ); + + switch( ent->pvServerData->s.ed_type ) + { + case ED_MOVER: + case ED_BSPBRUSH: + case ED_PORTAL: + ent->pvServerData->s.skin = DirToByte( ent->v.movedir ); + break; + } } /* @@ -132,7 +141,8 @@ void SV_EmitPacketEntities( client_frame_t *from, client_frame_t *to, sizebuf_t // in any bytes being emited if the entity has not changed at all // note that players are always 'newentities', this updates their oldorigin always // and prevents warping - MSG_WriteDeltaEntity( oldent, newent, msg, false, (newent->ed_type == ED_CLIENT)); + MSG_WriteDeltaEntity( oldent, newent, msg, false, + (newent->ed_type == ED_CLIENT) || (newent->ed_type == ED_PORTAL)); oldindex++; newindex++; continue; @@ -238,7 +248,7 @@ static void SV_AddEntitiesToPacket( vec3_t origin, client_frame_t *frame, sv_ent } } - if( svent->s.ed_type == ED_AMBIENT ) + if( svent->s.ed_type == ED_AMBIENT || svent->s.ed_type == ED_PORTAL ) bitvector = clientphs; else bitvector = clientpvs; @@ -291,7 +301,11 @@ static void SV_AddEntitiesToPacket( vec3_t origin, client_frame_t *frame, sv_ent // if its a portal entity, add everything visible from its camera position if( svent->s.ed_type == ED_PORTAL || svent->s.ed_type == ED_SKYPORTAL ) - SV_AddEntitiesToPacket( svent->s.origin, frame, ents, true ); + { + // don't merge pvs for mirrors + if( !VectorCompare( svent->s.origin, svent->s.oldorigin )) + SV_AddEntitiesToPacket( svent->s.oldorigin, frame, ents, true ); + } } } diff --git a/engine/server/sv_game.c b/engine/server/sv_game.c index 4ca86838..d4f72d3c 100644 --- a/engine/server/sv_game.c +++ b/engine/server/sv_game.c @@ -1065,6 +1065,8 @@ edict_t* pfnFindEntityByString( edict_t *pStartEdict, const char *pszField, cons f = EOFS( globalname ); else if( !com.strcmp( pszField, "targetname" )) f = EOFS( targetname ); + else if( !com.strcmp( pszField, "target" )) + f = EOFS( target ); else if( !com.strcmp( pszField, "netname" )) f = EOFS( netname ); else if( !com.strcmp( pszField, "model" )) diff --git a/engine/server/sv_phys.c b/engine/server/sv_phys.c index aaaf2b1d..e31601c3 100644 --- a/engine/server/sv_phys.c +++ b/engine/server/sv_phys.c @@ -1746,7 +1746,8 @@ void SV_Physics( void ) ent = EDICT_NUM( i ); if( ent->free ) continue; - VectorCopy( ent->v.origin, ent->v.oldorigin ); + if( ent->pvServerData->s.ed_type != ED_PORTAL ) + VectorCopy( ent->v.origin, ent->v.oldorigin ); if(i <= Host_MaxClients());// SV_Physics_ClientEntity( ent ); else if( !sv_playersonly->integer ) SV_Physics_Entity( ent ); } diff --git a/engine/server/sv_world.c b/engine/server/sv_world.c index edf9b31b..71518cd1 100644 --- a/engine/server/sv_world.c +++ b/engine/server/sv_world.c @@ -305,7 +305,8 @@ void SV_LinkEdict( edict_t *ent ) } // if first time, make sure old_origin is valid - if( !sv_ent->linkcount ) VectorCopy( ent->v.origin, ent->v.oldorigin ); + if( !sv_ent->linkcount && sv_ent->s.ed_type != ED_PORTAL ) + VectorCopy( ent->v.origin, ent->v.oldorigin ); ent->pvServerData->linkcount++; ent->pvServerData->s.ed_flags |= ESF_LINKEDICT; // change edict state on a client too... diff --git a/launch/launch.plg b/launch/launch.plg deleted file mode 100644 index 6c190dd0..00000000 --- a/launch/launch.plg +++ /dev/null @@ -1,64 +0,0 @@ - - -
-

Build Log

-

---------------------Configuration: launch - Win32 Release-------------------- -

-

Command Lines

-Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAAC.tmp" with contents -[ -/nologo /MD /W3 /GX /O2 /I "./" /I "imagelib" /I "../public" /I "../common" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fo"..\temp\launch\!release/" /Fd"..\temp\launch\!release/" /FD /c -"D:\Xash3D\src_main\launch\imagelib\img_utils.c" -] -Creating command line "cl.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAAC.tmp" -Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAAD.tmp" with contents -[ -zlib.lib png.lib user32.lib gdi32.lib advapi32.lib winmm.lib /nologo /dll /pdb:none /machine:I386 /nodefaultlib:"libc.lib" /out:"..\temp\launch\!release/launch.dll" /implib:"..\temp\launch\!release/launch.lib" /libpath:"./imagelib" /opt:nowin98 -"\Xash3D\src_main\temp\launch\!release\cmd.obj" -"\Xash3D\src_main\temp\launch\!release\console.obj" -"\Xash3D\src_main\temp\launch\!release\cpuinfo.obj" -"\Xash3D\src_main\temp\launch\!release\crclib.obj" -"\Xash3D\src_main\temp\launch\!release\cvar.obj" -"\Xash3D\src_main\temp\launch\!release\export.obj" -"\Xash3D\src_main\temp\launch\!release\filesystem.obj" -"\Xash3D\src_main\temp\launch\!release\img_bmp.obj" -"\Xash3D\src_main\temp\launch\!release\img_dds.obj" -"\Xash3D\src_main\temp\launch\!release\img_jpg.obj" -"\Xash3D\src_main\temp\launch\!release\img_main.obj" -"\Xash3D\src_main\temp\launch\!release\img_pcx.obj" -"\Xash3D\src_main\temp\launch\!release\img_png.obj" -"\Xash3D\src_main\temp\launch\!release\img_tga.obj" -"\Xash3D\src_main\temp\launch\!release\img_utils.obj" -"\Xash3D\src_main\temp\launch\!release\img_vtf.obj" -"\Xash3D\src_main\temp\launch\!release\img_wad.obj" -"\Xash3D\src_main\temp\launch\!release\memlib.obj" -"\Xash3D\src_main\temp\launch\!release\network.obj" -"\Xash3D\src_main\temp\launch\!release\parselib.obj" -"\Xash3D\src_main\temp\launch\!release\patch.obj" -"\Xash3D\src_main\temp\launch\!release\stdlib.obj" -"\Xash3D\src_main\temp\launch\!release\system.obj" -"\Xash3D\src_main\temp\launch\!release\utils.obj" -] -Creating command line "link.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAAD.tmp" -Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAAE.bat" with contents -[ -@echo off -copy \Xash3D\src_main\temp\launch\!release\launch.dll "D:\Xash3D\bin\launch.dll" -] -Creating command line "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAAE.bat" -Compiling... -img_utils.c -Linking... - Creating library ..\temp\launch\!release/launch.lib and object ..\temp\launch\!release/launch.exp -

Output Window

-Performing Custom Build Step on \Xash3D\src_main\temp\launch\!release\launch.dll -‘ª®¯¨à®¢ ­® ä ©«®¢: 1. - - - -

Results

-launch.dll - 0 error(s), 0 warning(s) -
- - diff --git a/launch/xash/xash.ico b/launch/xash/xash.ico index ec3a7f521c5bd972ccc144232ab9cb6c65d3b360..a7f4f0a384fa6a6a0f12a716c75f4c6b28b7a8cd 100644 GIT binary patch literal 766 zcmcgqF>b>!3?$twnrbcqw0Z0^{DVHBPmz(Ot2}DTQ|hl29on(T)&doCv>YQgjAkfM zN=NcYnxX^~F;>&;$mF9U+QU8o4bTEiB}d3@OGkuFT~`b=T%e<27?99$ld5?DmW51h z3)jo|iZj=Xf?Hg;mg|OV?pJxwvA?eO?k}7rxtL^{KoSHTViBKGFXEzzdF1->VlLY8 z?4v7V6iyVUhu|?!U?ni=`I1vv`Pe!wp6mZPtIJ7q)!%Sv^|Na4 dhpN4M&f)bXho55(U++1*&HXNYx2y&=IRmLrm3jaG literal 12862 zcmeI2XUvvG7KT5R1tc~|zztRq5E24{f<}qKmY7Hv6i^8!ND)F&u|*@IV2_0+>JN1# zbO}FLz!m`m0i|pRS)>?>Z7rZKy2`5T#dj}v&dxmV`@P@FPlqs^ndg-IoafA$dFG|6 zst$j;b*rjwZ8}v|HHB)!-){V!$lp3uf2ODLtk$hgojQ^+!7$Q|8a3+QzyGXRvp)Rr z!^4LU|MuH&^lFi2M#CR|_yNx6pMSnZix$#jZ6=H|pYfyeMATeL39#qQo0otz&j0#w z^q-uKC;RvBU$kh^Ip>^H%0v>Y@|g3dQLSkLe)rvX@7%dFLJ}SON*u9)Ku?oFjyvu4eqLx)P~)I3qz zx^?RX7hGT@g__GxBCe{4&KP#ntUH1Xu=0BJG(keDuUogSycY)!9Jv1a>nl+XPof|2 zEY(u_LC#vPP_x+*6AVv1_0*+HmpVRQr#KgaXP&G!q#6n9EacQv_OcBd zHrSlKFku(qmq?;5PLdCV*Rl=;Gvs;m=FJn?@-kt0X?)!Vw9V#kln)*p#SAAMA4fBp5>YWPPw z=;6bMn@vh;RAqjMQp~xk%4;?zR z5JRD!TrG>V6lXH;AvwH${d!pkya@1o@WBU0VrE%v+_>?!ZQFkS`R9L!Mxhq?1XYE@ z#6&46vBe%vT%f>$1@OQSD2NFYCKT#<_~C~E|F7!y(@#I~Fa5M>(-P(iA=Or@P%X9M z^UpsA#*aV#C~SBEksmPNJb3URhjV%n-+%x8>eZ_g7^Q}V*2T=CqZ*eIta1LzE3f=# zbpsn-(9_s55{u6~^9;3%1)~1zufL`UP<1&H(5}AvYV?SfMTsX$3?|M~iYW-}q?{Zm z0{LbgnXLiB^JB-31rNYzprXg2K7IO_`RudL{_L~QcvGKz^2xq^`}XeLOCQf&ssrjP zDPq=)%PM{9rQyvt-(&~8@WKntX2O^?;~_^T5PtgUr~jyKUw-)|MIIh8aP;ETx?{(V zk3RZn`}XauVwU;IC!efZ8Ua8P0qO}=E-_&Yk$B;S7ZP!~ph;fMUvkMM z00SfrTD>URuizoQw5Y4o9 z?b=zY3^8NI3}XJb>PCbKH6PLNUw--J@4ox)JMX;1Yo#q)wrs(I1t*?(qExYKM~kLO zj54C>lAojUcYr=EK9$tRz9;)(X{+ecZdUt(0&%b!9y0~n;mi8h7ELl{(A3th-Pq6U&h zFTVKVtFOLFz~6Y|jnhv*oo(xZ2OhZZzWZ3kx8HvIh!Gzcl!Ao$+;h*3Gm*CSI0@aiZ{N|QM~@#ro`6%kIIl8u?X}llbImnu zQmo}O&pa~`VTd-e1w000Uvw@_%&|vAW=U02wF*sp5-V-mwCUHcA93bX#=Zvru3fu! z>C%N4!2)OK%3~=L$$At*@;Tp9=g*(dSG6T}Xe9am86@oz<*avqv6zM8RZp$j|C%V1XELLTIS%K(@G%NFvV=4LlWtv5Ckh zHFJdf=1bnX zkVVxBbW-#*BkGL(Z6iD+>u1DPRb%HzNH-g^WysuEFr^ptc`8kgGaByRjzDT5zXUSA{+Lom|-j|&V* zV=Ni~${l&0(&UBQjBNHou-!|X9l<#xg0rFs2^Qk7K2aWFi&>{^#5AQI*fgb&UI7U0 zKAOGh7`X_7>9->QNpIH(2+YaTIE0g|^UHPotsyc;n*3qq)~i>K#Y=;x5iapaoG(hR zERYMlY~f}p6Q1Y$1!iI^oe^YI73ZNHKxRN>@+HcT{W(geVGLE~M}I1A|!JxWvw ziL-8v5-SWTDTXS9vFDMpBI1vDM56>ZeHLOe$8Ra(JaOVgSz*Iv$o@qkYTC3Zhfn5( zN0*H-0G=7SkmKh-YrxSF(LP@C2F0eFS28=L^~i4-D-pkq;sTBBb;^_}5+SN2Kj#Pb zG8ZKt`3Ma^YUKjkRy2WHp3=KsNoVYVVe70T^u(v8Nzun2f83m?EyOPdUenW0KP_3J z$0VPh@jIQ16!Oa2AhabR0svePY%}Bw*)PI7vY9I+5)+bQlHgx-(M9q6#-sDjJMaGc z?;Jrj8mD8obqk&NO?Aen8|DZvGI6rfk zf%&A9PJ-t9<>s4jW}e?`Zn)tFmP4VQ2*V8c#oIA>y<7@@WUdu$%~6UvdE<>Y0+sI< zmMQ_~`$Y`cV#vMd9e3Qpr_Go#WB8#>j|x>qwb1zz@XAd%Yc-@)!fyZFM`~hv{@$%g?kejmCOE~8IB4>8<2dzbIyG2 zwb$m(olC-4C+_e?&-DqP_ODbo)dWK|ArXd}0VP8wXTK>W43@pA?Y!f8&j9n8E+dYVon%6Y8<3VSYP@fwN5 z9Q=G9f_BA<6w@HaN`Sc%a$$NAM)jx=%G4sM@swq(FPmtBsUWNI4T6s9)Vg%CNWVs zEYHks4=}h}R^#$^_wL;>_)#b4AFj}8xo3XU=RrBG{mj;%72`IHOhnpm$`* z8{~p67iUI-u`gt+aFQKLza9zzJ=ST|lTsS&f*1%gzgp7xy^o(PkrhqP8HrmLu|+A< zCQ8}L=Pkl3rcPopn&v7G82n&SXcuh~k3EyPp!7x+8e-#amSdic=6Gr~V?9(hmK)|| zQ9Z~ZnD^1q{54w9wJN1# zbO}FLz!m`m0i|pRS)>?>Z7rZKy2`5T#dj}v&dxmV`@P@FPlqs^ndg-IoafA$dFG|6 zst$j;b*rjwZ8}v|HHB)!-){V!$lp3uf2ODLtk$hgojQ^+!7$Q|8a3+QzyGXRvp)Rr z!^4LU|MuH&^lFi2M#CR|_yNx6pMSnZix$#jZ6=H|pYfyeMATeL39#qQo0otz&j0#w z^q-uKC;RvBU$kh^Ip>^H%0v>Y@|g3dQLSkLe)rvX@7%dFLJ}SON*u9)Ku?oFjyvu4eqLx)P~)I3qz zx^?RX7hGT@g__GxBCe{4&KP#ntUH1Xu=0BJG(keDuUogSycY)!9Jv1a>nl+XPof|2 zEY(u_LC#vPP_x+*6AVv1_0*+HmpVRQr#KgaXP&G!q#6n9EacQv_OcBd zHrSlKFku(qmq?;5PLdCV*Rl=;Gvs;m=FJn?@-kt0X?)!Vw9V#kln)*p#SAAMA4fBp5>YWPPw z=;6bMn@vh;RAqjMQp~xk%4;?zR z5JRD!TrG>V6lXH;AvwH${d!pkya@1o@WBU0VrE%v+_>?!ZQFkS`R9L!Mxhq?1XYE@ z#6&46vBe%vT%f>$1@OQSD2NFYCKT#<_~C~E|F7!y(@#I~Fa5M>(-P(iA=Or@P%X9M z^UpsA#*aV#C~SBEksmPNJb3URhjV%n-+%x8>eZ_g7^Q}V*2T=CqZ*eIta1LzE3f=# zbpsn-(9_s55{u6~^9;3%1)~1zufL`UP<1&H(5}AvYV?SfMTsX$3?|M~iYW-}q?{Zm z0{LbgnXLiB^JB-31rNYzprXg2K7IO_`RudL{_L~QcvGKz^2xq^`}XeLOCQf&ssrjP zDPq=)%PM{9rQyvt-(&~8@WKntX2O^?;~_^T5PtgUr~jyKUw-)|MIIh8aP;ETx?{(V zk3RZn`}XauVwU;IC!efZ8Ua8P0qO}=E-_&Yk$B;S7ZP!~ph;fMUvkMM z00SfrTD>URuizoQw5Y4o9 z?b=zY3^8NI3}XJb>PCbKH6PLNUw--J@4ox)JMX;1Yo#q)wrs(I1t*?(qExYKM~kLO zj54C>lAojUcYr=EK9$tRz9;)(X{+ecZdUt(0&%b!9y0~n;mi8h7ELl{(A3th-Pq6U&h zFTVKVtFOLFz~6Y|jnhv*oo(xZ2OhZZzWZ3kx8HvIh!Gzcl!Ao$+;h*3Gm*CSI0@aiZ{N|QM~@#ro`6%kIIl8u?X}llbImnu zQmo}O&pa~`VTd-e1w000Uvw@_%&|vAW=U02wF*sp5-V-mwCUHcA93bX#=Zvru3fu! z>C%N4!2)OK%3~=L$$At*@;Tp9=g*(dSG6T}Xe9am86@oz<*avqv6zM8RZp$j|C%V1XELLTIS%K(@G%NFvV=4LlWtv5Ckh zHFJdf=1bnX zkVVxBbW-#*BkGL(Z6iD+>u1DPRb%HzNH-g^WysuEFr^ptc`8kgGaByRjzDT5zXUSA{+Lom|-j|&V* zV=Ni~${l&0(&UBQjBNHou-!|X9l<#xg0rFs2^Qk7K2aWFi&>{^#5AQI*fgb&UI7U0 zKAOGh7`X_7>9->QNpIH(2+YaTIE0g|^UHPotsyc;n*3qq)~i>K#Y=;x5iapaoG(hR zERYMlY~f}p6Q1Y$1!iI^oe^YI73ZNHKxRN>@+HcT{W(geVGLE~M}I1A|!JxWvw ziL-8v5-SWTDTXS9vFDMpBI1vDM56>ZeHLOe$8Ra(JaOVgSz*Iv$o@qkYTC3Zhfn5( zN0*H-0G=7SkmKh-YrxSF(LP@C2F0eFS28=L^~i4-D-pkq;sTBBb;^_}5+SN2Kj#Pb zG8ZKt`3Ma^YUKjkRy2WHp3=KsNoVYVVe70T^u(v8Nzun2f83m?EyOPdUenW0KP_3J z$0VPh@jIQ16!Oa2AhabR0svePY%}Bw*)PI7vY9I+5)+bQlHgx-(M9q6#-sDjJMaGc z?;Jrj8mD8obqk&NO?Aen8|DZvGI6rfk zf%&A9PJ-t9<>s4jW}e?`Zn)tFmP4VQ2*V8c#oIA>y<7@@WUdu$%~6UvdE<>Y0+sI< zmMQ_~`$Y`cV#vMd9e3Qpr_Go#WB8#>j|x>qwb1zz@XAd%Yc-@)!fyZFM`~hv{@$%g?kejmCOE~8IB4>8<2dzbIyG2 zwb$m(olC-4C+_e?&-DqP_ODbo)dWK|ArXd}0VP8wXTK>W43@pA?Y!f8&j9n8E+dYVon%6Y8<3VSYP@fwN5 z9Q=G9f_BA<6w@HaN`Sc%a$$NAM)jx=%G4sM@swq(FPmtBsUWNI4T6s9)Vg%CNWVs zEYHks4=}h}R^#$^_wL;>_)#b4AFj}8xo3XU=RrBG{mj;%72`IHOhnpm$`* z8{~p67iUI-u`gt+aFQKLza9zzJ=ST|lTsS&f*1%gzgp7xy^o(PkrhqP8HrmLu|+A< zCQ8}L=Pkl3rcPopn&v7G82n&SXcuh~k3EyPp!7x+8e-#amSdic=6Gr~V?9(hmK)|| zQ9Z~ZnD^1q{54w9wnumpoints, (float *)&draw->points->v[0], (int *)&draw->elements ); } } +} + +void CM_CollisionDrawForEachSurface( void ) +{ + csurface_t *draw; + int i, j, color; + + for( i = 0; i < cms.numbmodels; i++ ) + { + for( j = 0; j < cms.bmodels[i].numfaces; j++ ) + { + draw = &cm.surfaces[cms.bmodels[i].firstface + j]; + if( !draw || !draw->numtriangles ) continue; + + if( i == 0 ) color = PackRGBA( 1, 0.7f, 0, 1 ); // world + else color = PackRGBA( 1, 0.1f, 0.1f, 1 ); + ph.debug_line( color, draw->numvertices, (float *)&draw->vertices[0], (int *)&draw->indices ); + } + } } \ No newline at end of file diff --git a/physic/cm_debug.c b/physic/cm_debug.c index c163b038..513812de 100644 --- a/physic/cm_debug.c +++ b/physic/cm_debug.c @@ -33,5 +33,6 @@ void DebugShowCollision( cmdraw_t callback ) if( cm_debugdraw->integer == 2 ) { CM_CollisionDrawForEachBrush(); + CM_CollisionDrawForEachSurface(); } } \ No newline at end of file diff --git a/physic/cm_local.h b/physic/cm_local.h index dd130a6e..862b1fa4 100644 --- a/physic/cm_local.h +++ b/physic/cm_local.h @@ -251,7 +251,7 @@ typedef struct clipmap_static_s collide_info_t touch_info; // global info about two touching objects bool loaded; // map is loaded? bool tree_build; // phys tree is created ? - vfile_t *world_tree; // pre-calcualated collision tree (worldmodel only) + file_t *world_tree; // pre-calcualated collision tree (worldmodel only) trace_t trace; // contains result of last trace int checkcount; @@ -388,6 +388,7 @@ void CM_CollisionClipToWorld( trace_t *trace, cmodel_t *model, const vec3_t star // updates fraction, endpos, plane and surface info if new fraction is shorter void CM_CollisionCombineTraces( trace_t *cliptrace, const trace_t *trace, edict_t *touch, bool is_bmodel ); void CM_CollisionDrawForEachBrush( void ); +void CM_CollisionDrawForEachSurface( void ); void CM_CollisionInit( void ); #endif//CM_LOCAL_H \ No newline at end of file diff --git a/physic/cm_model.c b/physic/cm_model.c index d7cdd308..c82cd872 100644 --- a/physic/cm_model.c +++ b/physic/cm_model.c @@ -417,7 +417,7 @@ void BSP_LoadLeafs( lump_t *l ) out->parent = NULL; out->plane = NULL; out->cluster = LittleLong( in->cluster ); - out->area = LittleLong( in->area ); + out->area = LittleLong( in->area ) + 1; if( out->cluster >= cm.numclusters ) cm.numclusters = out->cluster + 1; @@ -662,11 +662,7 @@ void IBSP_LoadSurfaces( lump_t *l ) continue; } originalvertex3f = (float *)(cm.vertices + in->firstvert); - - // setup a bounding box - VectorCopy( in->mins, out->mins ); - VectorCopy( in->maxs, out->maxs ); - + // convert patch to MST_TRISURF cxtess = CM_PatchTesselationOnX( patchsize[0], patchsize[1], 3, originalvertex3f, 15.0f ); cytess = CM_PatchTesselationOnY( patchsize[0], patchsize[1], 3, originalvertex3f, 15.0f ); @@ -688,11 +684,15 @@ void IBSP_LoadSurfaces( lump_t *l ) patchtess[patchtesscount].lodgroup[5] = in->maxs[2]; patchtess[patchtesscount].originalvertex3f = originalvertex3f; patchtesscount++; + break; case MST_FLARE: // ignore collisions at all continue; } + // setup a bounding box + VectorCopy( in->mins, out->mins ); + VectorCopy( in->maxs, out->maxs ); out->firstvertex = LittleLong( in->firstvert ); out->numvertices = LittleLong( in->numverts ); } @@ -810,10 +810,6 @@ void RBSP_LoadSurfaces( lump_t *l ) } originalvertex3f = (float *)(cm.vertices + in->firstvert); - // setup a bounding box - VectorCopy( in->mins, out->mins ); - VectorCopy( in->maxs, out->maxs ); - // convert patch to MST_TRISURF cxtess = CM_PatchTesselationOnX( patchsize[0], patchsize[1], 3, originalvertex3f, 15.0f ); cytess = CM_PatchTesselationOnY( patchsize[0], patchsize[1], 3, originalvertex3f, 15.0f ); @@ -840,6 +836,9 @@ void RBSP_LoadSurfaces( lump_t *l ) continue; } + // setup a bounding box + VectorCopy( in->mins, out->mins ); + VectorCopy( in->maxs, out->maxs ); out->firstvertex = LittleLong( in->firstvert ); out->numvertices = LittleLong( in->numverts ); } @@ -923,9 +922,27 @@ void RBSP_LoadSurfaces( lump_t *l ) BSP_LoadCollision ================= */ -void BSP_LoadCollision( lump_t *l ) +void BSP_LoadCollision( void ) { - cms.world_tree = VFS_Create( cms.base + l->fileofs, l->filelen ); + string clipfile; + int map_checksum; + + com.strncpy( clipfile, cm.name, MAX_STRING ); + FS_StripExtension( clipfile ); + FS_DefaultExtension( clipfile, ".cm" ); + + cms.world_tree = FS_Open( clipfile, "rb" ); + + if( !cms.world_tree ) return; + FS_Read( cms.world_tree, &map_checksum, sizeof( int )); + + if( map_checksum != cm.checksum ) + { + // failed checksum, needs to rebuild + MsgDev( D_NOTE, "BSP_LoadCollision: map %s changed, rebuild collision tree\n", cm.name ); + FS_Close( cms.world_tree ); + cms.world_tree = NULL; + } } static void BSP_RecursiveFindNumLeafs( cnode_t *node ) @@ -1043,9 +1060,9 @@ void BSP_EndBuildTree( void ) if( app_name == HOST_BSPLIB ) Msg( " done\n" ); } -static void BSP_LoadTree( vfile_t* handle, void* buffer, size_t size ) +static void BSP_LoadTree( file_t* handle, void* buffer, size_t size ) { - VFS_Read( handle, buffer, size ); + FS_Read( handle, buffer, size ); } void CM_LoadBSP( const void *buffer ) @@ -1060,7 +1077,7 @@ void CM_LoadBSP( const void *buffer ) BSP_LoadShaders( &header.lumps[LUMP_SHADERS] ); IBSP_LoadSurfaces( &header.lumps[LUMP_SURFACES] ); BSP_LoadModels( &header.lumps[LUMP_MODELS] ); - BSP_LoadCollision( &header.lumps[LUMP_COLLISION] ); + BSP_LoadCollision(); cms.loaded = true; } @@ -1078,9 +1095,16 @@ void CM_FreeBSP( void ) } } +static void CM_AddCollision( file_t *f, const void* buffer, size_t size ) +{ + FS_Write( f, buffer, size ); +} + void CM_MakeCollisionTree( void ) { int i, world = 0; // world index + string clipfile; + file_t *file; if( !cms.loaded ) Host_Error( "CM_MakeCollisionTree: map not loaded\n" ); if( cms.collision ) return; // already generated @@ -1094,6 +1118,17 @@ void CM_MakeCollisionTree( void ) else for( i = 0; i < cms.bmodels[world].numfaces; i++ ) BSP_AddCollisionFace( i ); BSP_EndBuildTree(); + + com.strncpy( clipfile, cm.name, MAX_STRING ); + FS_StripExtension( clipfile ); + FS_DefaultExtension( clipfile, ".cm" ); + + file = FS_Open( clipfile, "wb" ); + if( !file ) return; + + FS_Write( file, &cm.checksum, sizeof( int )); // save current checksum + NewtonTreeCollisionSerialize( cms.collision, CM_AddCollision, file ); + FS_Close( file ); } void CM_SaveCollisionTree( file_t *f, cmsave_t callback ) @@ -1106,7 +1141,7 @@ void CM_LoadCollisionTree( void ) { if( !cms.world_tree ) return; cms.collision = NewtonCreateTreeCollisionFromSerialization( gWorld, NULL, BSP_LoadTree, cms.world_tree ); - VFS_Close( cms.world_tree ); + FS_Close( cms.world_tree ); } void CM_LoadWorld( void ) @@ -1232,6 +1267,8 @@ cmodel_t *CM_BeginRegistration( const char *name, bool clientload, uint *checksu break; } + com.strncpy( cm.name, name, MAX_STRING ); + // load into heap BSP_LoadEntityString( &hdr->lumps[LUMP_ENTITIES] ); BSP_LoadShaders( &hdr->lumps[LUMP_SHADERS] ); @@ -1255,7 +1292,7 @@ cmodel_t *CM_BeginRegistration( const char *name, bool clientload, uint *checksu BSP_LoadNodes( &hdr->lumps[LUMP_NODES] ); BSP_LoadVisibility( &hdr->lumps[LUMP_VISIBILITY] ); BSP_LoadModels( &hdr->lumps[LUMP_MODELS] ); -// BSP_LoadCollision( &hdr->lumps[LUMP_COLLISION] ); + BSP_LoadCollision(); cms.loaded = true; BSP_RecursiveFindNumLeafs( cm.nodes ); @@ -1264,8 +1301,6 @@ cmodel_t *CM_BeginRegistration( const char *name, bool clientload, uint *checksu CM_LoadWorld(); // load physics collision Mem_Free( buf ); // release map buffer - com.strncpy( cm.name, name, MAX_STRING ); - Mem_Set( cm.areaportals, 0, sizeof( cm.areaportals )); CM_FloodAreaConnections(); CM_CalcPHS (); diff --git a/physic/cm_test.c b/physic/cm_test.c index 981a3595..5ab6c5dd 100644 --- a/physic/cm_test.c +++ b/physic/cm_test.c @@ -136,7 +136,7 @@ int CM_BoxLeafnums( const vec3_t mins, const vec3_t maxs, int *list, int listsiz ll.count = 0; ll.maxcount = listsize; ll.list = list; - ll.lastleaf = 0; + ll.lastleaf = -1; ll.overflowed = false; CM_BoxLeafnums_r( &ll, cm.nodes ); diff --git a/physic/physic.plg b/physic/physic.plg index 3835ce2a..40da9272 100644 --- a/physic/physic.plg +++ b/physic/physic.plg @@ -6,6 +6,42 @@ --------------------Configuration: physic - Win32 Debug--------------------

Command Lines

+Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP551.tmp" with contents +[ +/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../public" /I "../common" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\physic\!debug/" /Fo"..\temp\physic\!debug/" /Fd"..\temp\physic\!debug/" /FD /GZ /c +"D:\Xash3D\src_main\physic\cm_portals.c" +] +Creating command line "cl.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP551.tmp" +Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP552.tmp" with contents +[ +user32.lib msvcrtd.lib newton.lib opengl32.lib /nologo /dll /incremental:yes /pdb:"..\temp\physic\!debug/physic.pdb" /debug /machine:I386 /nodefaultlib:"libc.lib" /out:"..\temp\physic\!debug/physic.dll" /implib:"..\temp\physic\!debug/physic.lib" /pdbtype:sept +"\Xash3D\src_main\temp\physic\!debug\cm_callback.obj" +"\Xash3D\src_main\temp\physic\!debug\cm_collision.obj" +"\Xash3D\src_main\temp\physic\!debug\cm_debug.obj" +"\Xash3D\src_main\temp\physic\!debug\cm_materials.obj" +"\Xash3D\src_main\temp\physic\!debug\cm_model.obj" +"\Xash3D\src_main\temp\physic\!debug\cm_pmove.obj" +"\Xash3D\src_main\temp\physic\!debug\cm_polygon.obj" +"\Xash3D\src_main\temp\physic\!debug\cm_portals.obj" +"\Xash3D\src_main\temp\physic\!debug\cm_rigidbody.obj" +"\Xash3D\src_main\temp\physic\!debug\cm_test.obj" +"\Xash3D\src_main\temp\physic\!debug\cm_trace.obj" +"\Xash3D\src_main\temp\physic\!debug\cm_utils.obj" +"\Xash3D\src_main\temp\physic\!debug\physic.obj" +] +Creating command line "link.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP552.tmp" +Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP553.bat" with contents +[ +@echo off +copy \Xash3D\src_main\temp\physic\!debug\physic.dll "D:\Xash3D\bin\physic.dll" +] +Creating command line "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP553.bat" +Compiling... +cm_portals.c +Linking... +

Output Window

+Performing Custom Build Step on \Xash3D\src_main\temp\physic\!debug\physic.dll +‘ª®¯¨à®¢ ­® ä ©«®¢: 1. diff --git a/public/anorms.h b/public/anorms.h new file mode 100644 index 00000000..c90f8d6f --- /dev/null +++ b/public/anorms.h @@ -0,0 +1,177 @@ +/*** +* +* Copyright (c) 1996-2002, Valve LLC. All rights reserved. +* +* This product contains software technology licensed from Id +* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc. +* All Rights Reserved. +* +* Use, distribution, and modification of this source code and/or resulting +* object code is restricted to non-commercial enhancements to products from +* Valve LLC. All other use, distribution, or modification is prohibited +* without written permission from Valve LLC. +* +****/ + +{-0.525731, 0.000000, 0.850651}, +{-0.442863, 0.238856, 0.864188}, +{-0.295242, 0.000000, 0.955423}, +{-0.309017, 0.500000, 0.809017}, +{-0.162460, 0.262866, 0.951056}, +{0.000000, 0.000000, 1.000000}, +{0.000000, 0.850651, 0.525731}, +{-0.147621, 0.716567, 0.681718}, +{0.147621, 0.716567, 0.681718}, +{0.000000, 0.525731, 0.850651}, +{0.309017, 0.500000, 0.809017}, +{0.525731, 0.000000, 0.850651}, +{0.295242, 0.000000, 0.955423}, +{0.442863, 0.238856, 0.864188}, +{0.162460, 0.262866, 0.951056}, +{-0.681718, 0.147621, 0.716567}, +{-0.809017, 0.309017, 0.500000}, +{-0.587785, 0.425325, 0.688191}, +{-0.850651, 0.525731, 0.000000}, +{-0.864188, 0.442863, 0.238856}, +{-0.716567, 0.681718, 0.147621}, +{-0.688191, 0.587785, 0.425325}, +{-0.500000, 0.809017, 0.309017}, +{-0.238856, 0.864188, 0.442863}, +{-0.425325, 0.688191, 0.587785}, +{-0.716567, 0.681718, -0.147621}, +{-0.500000, 0.809017, -0.309017}, +{-0.525731, 0.850651, 0.000000}, +{0.000000, 0.850651, -0.525731}, +{-0.238856, 0.864188, -0.442863}, +{0.000000, 0.955423, -0.295242}, +{-0.262866, 0.951056, -0.162460}, +{0.000000, 1.000000, 0.000000}, +{0.000000, 0.955423, 0.295242}, +{-0.262866, 0.951056, 0.162460}, +{0.238856, 0.864188, 0.442863}, +{0.262866, 0.951056, 0.162460}, +{0.500000, 0.809017, 0.309017}, +{0.238856, 0.864188, -0.442863}, +{0.262866, 0.951056, -0.162460}, +{0.500000, 0.809017, -0.309017}, +{0.850651, 0.525731, 0.000000}, +{0.716567, 0.681718, 0.147621}, +{0.716567, 0.681718, -0.147621}, +{0.525731, 0.850651, 0.000000}, +{0.425325, 0.688191, 0.587785}, +{0.864188, 0.442863, 0.238856}, +{0.688191, 0.587785, 0.425325}, +{0.809017, 0.309017, 0.500000}, +{0.681718, 0.147621, 0.716567}, +{0.587785, 0.425325, 0.688191}, +{0.955423, 0.295242, 0.000000}, +{1.000000, 0.000000, 0.000000}, +{0.951056, 0.162460, 0.262866}, +{0.850651, -0.525731, 0.000000}, +{0.955423, -0.295242, 0.000000}, +{0.864188, -0.442863, 0.238856}, +{0.951056, -0.162460, 0.262866}, +{0.809017, -0.309017, 0.500000}, +{0.681718, -0.147621, 0.716567}, +{0.850651, 0.000000, 0.525731}, +{0.864188, 0.442863, -0.238856}, +{0.809017, 0.309017, -0.500000}, +{0.951056, 0.162460, -0.262866}, +{0.525731, 0.000000, -0.850651}, +{0.681718, 0.147621, -0.716567}, +{0.681718, -0.147621, -0.716567}, +{0.850651, 0.000000, -0.525731}, +{0.809017, -0.309017, -0.500000}, +{0.864188, -0.442863, -0.238856}, +{0.951056, -0.162460, -0.262866}, +{0.147621, 0.716567, -0.681718}, +{0.309017, 0.500000, -0.809017}, +{0.425325, 0.688191, -0.587785}, +{0.442863, 0.238856, -0.864188}, +{0.587785, 0.425325, -0.688191}, +{0.688191, 0.587785, -0.425325}, +{-0.147621, 0.716567, -0.681718}, +{-0.309017, 0.500000, -0.809017}, +{0.000000, 0.525731, -0.850651}, +{-0.525731, 0.000000, -0.850651}, +{-0.442863, 0.238856, -0.864188}, +{-0.295242, 0.000000, -0.955423}, +{-0.162460, 0.262866, -0.951056}, +{0.000000, 0.000000, -1.000000}, +{0.295242, 0.000000, -0.955423}, +{0.162460, 0.262866, -0.951056}, +{-0.442863, -0.238856, -0.864188}, +{-0.309017, -0.500000, -0.809017}, +{-0.162460, -0.262866, -0.951056}, +{0.000000, -0.850651, -0.525731}, +{-0.147621, -0.716567, -0.681718}, +{0.147621, -0.716567, -0.681718}, +{0.000000, -0.525731, -0.850651}, +{0.309017, -0.500000, -0.809017}, +{0.442863, -0.238856, -0.864188}, +{0.162460, -0.262866, -0.951056}, +{0.238856, -0.864188, -0.442863}, +{0.500000, -0.809017, -0.309017}, +{0.425325, -0.688191, -0.587785}, +{0.716567, -0.681718, -0.147621}, +{0.688191, -0.587785, -0.425325}, +{0.587785, -0.425325, -0.688191}, +{0.000000, -0.955423, -0.295242}, +{0.000000, -1.000000, 0.000000}, +{0.262866, -0.951056, -0.162460}, +{0.000000, -0.850651, 0.525731}, +{0.000000, -0.955423, 0.295242}, +{0.238856, -0.864188, 0.442863}, +{0.262866, -0.951056, 0.162460}, +{0.500000, -0.809017, 0.309017}, +{0.716567, -0.681718, 0.147621}, +{0.525731, -0.850651, 0.000000}, +{-0.238856, -0.864188, -0.442863}, +{-0.500000, -0.809017, -0.309017}, +{-0.262866, -0.951056, -0.162460}, +{-0.850651, -0.525731, 0.000000}, +{-0.716567, -0.681718, -0.147621}, +{-0.716567, -0.681718, 0.147621}, +{-0.525731, -0.850651, 0.000000}, +{-0.500000, -0.809017, 0.309017}, +{-0.238856, -0.864188, 0.442863}, +{-0.262866, -0.951056, 0.162460}, +{-0.864188, -0.442863, 0.238856}, +{-0.809017, -0.309017, 0.500000}, +{-0.688191, -0.587785, 0.425325}, +{-0.681718, -0.147621, 0.716567}, +{-0.442863, -0.238856, 0.864188}, +{-0.587785, -0.425325, 0.688191}, +{-0.309017, -0.500000, 0.809017}, +{-0.147621, -0.716567, 0.681718}, +{-0.425325, -0.688191, 0.587785}, +{-0.162460, -0.262866, 0.951056}, +{0.442863, -0.238856, 0.864188}, +{0.162460, -0.262866, 0.951056}, +{0.309017, -0.500000, 0.809017}, +{0.147621, -0.716567, 0.681718}, +{0.000000, -0.525731, 0.850651}, +{0.425325, -0.688191, 0.587785}, +{0.587785, -0.425325, 0.688191}, +{0.688191, -0.587785, 0.425325}, +{-0.955423, 0.295242, 0.000000}, +{-0.951056, 0.162460, 0.262866}, +{-1.000000, 0.000000, 0.000000}, +{-0.850651, 0.000000, 0.525731}, +{-0.955423, -0.295242, 0.000000}, +{-0.951056, -0.162460, 0.262866}, +{-0.864188, 0.442863, -0.238856}, +{-0.951056, 0.162460, -0.262866}, +{-0.809017, 0.309017, -0.500000}, +{-0.864188, -0.442863, -0.238856}, +{-0.951056, -0.162460, -0.262866}, +{-0.809017, -0.309017, -0.500000}, +{-0.681718, 0.147621, -0.716567}, +{-0.681718, -0.147621, -0.716567}, +{-0.850651, 0.000000, -0.525731}, +{-0.688191, 0.587785, -0.425325}, +{-0.587785, 0.425325, -0.688191}, +{-0.425325, 0.688191, -0.587785}, +{-0.425325, -0.688191, -0.587785}, +{-0.587785, -0.425325, -0.688191}, +{-0.688191, -0.587785, -0.425325}, diff --git a/public/mathlib.h b/public/mathlib.h index 3ce9977d..312b5e2f 100644 --- a/public/mathlib.h +++ b/public/mathlib.h @@ -32,6 +32,7 @@ #define IS_NAN(x) (((*(int *)&x)&nanmask)==nanmask) #define RANDOM_LONG(MIN, MAX) ((rand() & 32767) * (((MAX)-(MIN)) * (1.0f / 32767.0f)) + (MIN)) #define RANDOM_FLOAT(MIN,MAX) (((float)rand() / RAND_MAX) * ((MAX)-(MIN)) + (MIN)) +#define NUMVERTEXNORMALS 162 // quake avertex normals #define VectorToPhysic(v) { v[0] = INCH2METER(v[0]), v[1] = INCH2METER(v[1]), v[2] = INCH2METER(v[2]); } #define VectorToServer(v) { v[0] = METER2INCH(v[0]), v[1] = METER2INCH(v[1]), v[2] = METER2INCH(v[2]); } @@ -797,5 +798,43 @@ static vec3_t vec3_origin = { 0, 0, 0 }; static vec3_t vec3_angles = { 0, 0, 0 }; static vec4_t vec4_origin = { 0, 0, 0, 0 }; static vec3_t vec3_up = { 0.0f, 1.0f, 0.0f }; // unconverted up vector +static vec3_t bytedirs[NUMVERTEXNORMALS] = +{ +#include "anorms.h" +}; + +_inline int DirToByte( vec3_t dir ) +{ + int i, best = 0; + float d, bestd = 0; + bool normalized; + + if( !dir || VectorCompare( dir, vec3_origin )) + return NUMVERTEXNORMALS; + + if( DotProduct( dir, dir ) == 1 ) + normalized = true; + else normalized = false; + + for( i = 0; i < NUMVERTEXNORMALS; i++ ) + { + d = DotProduct( dir, bytedirs[i] ); + if(( d == 1 ) && normalized ) + return i; + if( d > bestd ) + { + bestd = d; + best = i; + } + } + return best; +} + +_inline void ByteToDir( int b, vec3_t dir ) +{ + if( b < 0 || b >= NUMVERTEXNORMALS ) + VectorCopy( vec3_origin, dir ); + else VectorCopy( bytedirs[b], dir ); +} #endif//BASEMATH_H \ No newline at end of file diff --git a/release.bat b/release.bat index 663a785d..23566bbc 100644 --- a/release.bat +++ b/release.bat @@ -71,5 +71,5 @@ if exist xtools\xtools.plg del /f /q xtools\xtools.plg echo Build succeeded! echo Please wait. Xash is now loading cd D:\Xash3D\ -xash.exe -dev 3 -log +map dm_qstyle +xash.exe -dev 3 -log +map q3dm0 :done \ No newline at end of file diff --git a/render/glw_imp.c b/render/glw_imp.c index 6f432dc6..ac8a2a64 100644 --- a/render/glw_imp.c +++ b/render/glw_imp.c @@ -109,7 +109,7 @@ static bool VerifyDriver( void ) { char buffer[1024]; - com.strncpy( buffer, qglGetString( GL_RENDERER ), sizeof(buffer) ); + com.strncpy( buffer, pglGetString( GL_RENDERER ), sizeof(buffer) ); com.strlwr( buffer, buffer ); if ( strcmp( buffer, "gdi generic" ) == 0 ) if ( !glw_state.mcd_accelerated ) @@ -396,11 +396,11 @@ int GLimp_SetMode( int mode, bool fullscreen ) */ void GLimp_Shutdown( void ) { - if ( qwglMakeCurrent && !qwglMakeCurrent( NULL, NULL ) ) + if ( pwglMakeCurrent && !pwglMakeCurrent( NULL, NULL ) ) Msg ( "ref_gl::R_Shutdown() - wglMakeCurrent failed\n"); if ( glw_state.hGLRC ) { - if ( qwglDeleteContext && !qwglDeleteContext( glw_state.hGLRC ) ) + if ( pwglDeleteContext && !pwglDeleteContext( glw_state.hGLRC ) ) Msg ( "ref_gl::R_Shutdown() - wglDeleteContext failed\n"); glw_state.hGLRC = NULL; } @@ -549,17 +549,17 @@ int GLimp_InitGL (void) if ( glw_state.minidriver ) { - if ( (pixelformat = qwglChoosePixelFormat( glw_state.hDC, &pfd)) == 0 ) + if ( (pixelformat = pwglChoosePixelFormat( glw_state.hDC, &pfd)) == 0 ) { - Msg ( "GLimp_Init() - qwglChoosePixelFormat failed\n"); + Msg ( "GLimp_Init() - pwglChoosePixelFormat failed\n"); return false; } - if ( qwglSetPixelFormat( glw_state.hDC, pixelformat, &pfd) == FALSE ) + if ( pwglSetPixelFormat( glw_state.hDC, pixelformat, &pfd) == FALSE ) { - Msg ( "GLimp_Init() - qwglSetPixelFormat failed\n"); + Msg ( "GLimp_Init() - pwglSetPixelFormat failed\n"); return false; } - qwglDescribePixelFormat( glw_state.hDC, pixelformat, sizeof( pfd ), &pfd ); + pwglDescribePixelFormat( glw_state.hDC, pixelformat, sizeof( pfd ), &pfd ); } else { @@ -604,15 +604,15 @@ int GLimp_InitGL (void) ** startup the OpenGL subsystem by creating a context and making ** it current */ - if ( ( glw_state.hGLRC = qwglCreateContext( glw_state.hDC ) ) == 0 ) + if ( ( glw_state.hGLRC = pwglCreateContext( glw_state.hDC ) ) == 0 ) { - Msg ( "GLimp_Init() - qwglCreateContext failed\n"); + Msg ( "GLimp_Init() - pwglCreateContext failed\n"); goto fail; } - if ( !qwglMakeCurrent( glw_state.hDC, glw_state.hGLRC ) ) + if ( !pwglMakeCurrent( glw_state.hDC, glw_state.hGLRC ) ) { - Msg ( "GLimp_Init() - qwglMakeCurrent failed\n"); + Msg ( "GLimp_Init() - pwglMakeCurrent failed\n"); goto fail; } @@ -632,7 +632,7 @@ int GLimp_InitGL (void) fail: if ( glw_state.hGLRC ) { - qwglDeleteContext( glw_state.hGLRC ); + pwglDeleteContext( glw_state.hGLRC ); glw_state.hGLRC = NULL; } @@ -649,8 +649,8 @@ fail: */ bool GLimp_GetGammaRamp( size_t stride, unsigned short *ramp ) { - if( qwglGetDeviceGammaRamp3DFX ) { - if( qwglGetDeviceGammaRamp3DFX( glw_state.hDC, ramp ) ) + if( pwglGetDeviceGammaRamp3DFX ) { + if( pwglGetDeviceGammaRamp3DFX( glw_state.hDC, ramp ) ) return true; } @@ -665,11 +665,51 @@ bool GLimp_GetGammaRamp( size_t stride, unsigned short *ramp ) */ void GLimp_SetGammaRamp( size_t stride, unsigned short *ramp ) { - if( qwglGetDeviceGammaRamp3DFX ) - qwglSetDeviceGammaRamp3DFX( glw_state.hDC, ramp ); + if( pwglGetDeviceGammaRamp3DFX ) + pwglSetDeviceGammaRamp3DFX( glw_state.hDC, ramp ); else SetDeviceGammaRamp( glw_state.hDC, ramp ); } +/* +================= +RB_CheckForErrors +================= +*/ + +void R_CheckForErrors( const char *filename, const int fileline ) +{ + int err; + char *str; + + if((err = pglGetError()) == GL_NO_ERROR ) + return; + + switch( err ) + { + case GL_STACK_OVERFLOW: + str = "GL_STACK_OVERFLOW"; + break; + case GL_STACK_UNDERFLOW: + str = "GL_STACK_UNDERFLOW"; + break; + case GL_INVALID_ENUM: + str = "GL_INVALID_ENUM"; + break; + case GL_INVALID_VALUE: + str = "GL_INVALID_VALUE"; + break; + case GL_INVALID_OPERATION: + str = "GL_INVALID_OPERATION"; + break; + case GL_OUT_OF_MEMORY: + str = "GL_OUT_OF_MEMORY"; + break; + default: + str = "UNKNOWN ERROR"; + break; + } + Host_Error( "R_CheckForErrors: %s (called at %s:%i)\n", str, filename, fileline ); +} /* ** GLimp_BeginFrame @@ -688,15 +728,15 @@ void GLimp_BeginFrame( void ) if ( glState.cameraSeparation < 0 && glState.stereoEnabled ) { - qglDrawBuffer( GL_BACK_LEFT ); + pglDrawBuffer( GL_BACK_LEFT ); } else if ( glState.cameraSeparation > 0 && glState.stereoEnabled ) { - qglDrawBuffer( GL_BACK_RIGHT ); + pglDrawBuffer( GL_BACK_RIGHT ); } else { - qglDrawBuffer( GL_BACK ); + pglDrawBuffer( GL_BACK ); } } @@ -709,14 +749,11 @@ void GLimp_BeginFrame( void ) */ void GLimp_EndFrame (void) { - int err; - - err = qglGetError(); - assert( err == GL_NO_ERROR ); + R_CheckForErrors( __FILE__, __LINE__ ); if ( com.stricmp( gl_drawbuffer->string, "GL_BACK" ) == 0 ) { - if ( !qwglSwapBuffers( glw_state.hDC ) ) + if ( !pwglSwapBuffers( glw_state.hDC ) ) Host_Error( "GLimp_EndFrame() - SwapBuffers() failed!\n" ); } } diff --git a/render/qgl.h b/render/qgl.h index 037ed003..beafbd98 100644 --- a/render/qgl.h +++ b/render/qgl.h @@ -81,8 +81,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. QGL_EXTERN bool QGL_Init( const char *dllname ); QGL_EXTERN void QGL_Shutdown( void ); -QGL_EXTERN void *qglGetProcAddress( const GLubyte * ); -QGL_EXTERN const char *(*qglGetGLWExtensionsString)( void ); +QGL_EXTERN void *pglGetProcAddress( const GLubyte * ); +QGL_EXTERN const char *(*pglGetGLWExtensionsString)( void ); /* ** extension constants diff --git a/render/qgl_win.c b/render/qgl_win.c index fce88365..8ebc9ea2 100644 --- a/render/qgl_win.c +++ b/render/qgl_win.c @@ -54,10 +54,10 @@ extern stdlib_api_t com; // engine toolbox #define QGL_EXTERN -#define QGL_FUNC(type,name,params) type (APIENTRY * q##name) params; -#define QGL_EXT(type,name,params) type (APIENTRY * q##name) params; -#define QGL_WGL(type,name,params) type (APIENTRY * q##name) params; -#define QGL_WGL_EXT(type,name,params) type (APIENTRY * q##name) params; +#define QGL_FUNC(type,name,params) type (APIENTRY * p##name) params; +#define QGL_EXT(type,name,params) type (APIENTRY * p##name) params; +#define QGL_WGL(type,name,params) type (APIENTRY * p##name) params; +#define QGL_WGL_EXT(type,name,params) type (APIENTRY * p##name) params; #define QGL_GLX(type,name,params) #define QGL_GLX_EXT(type,name,params) @@ -70,8 +70,8 @@ extern stdlib_api_t com; // engine toolbox #undef QGL_EXT #undef QGL_FUNC -static const char *_qglGetGLWExtensionsString( void ); -static const char *_qglGetGLWExtensionsStringInit( void ); +static const char *_pglGetGLWExtensionsString( void ); +static const char *_pglGetGLWExtensionsStringInit( void ); /* ** QGL_Shutdown @@ -84,12 +84,12 @@ void QGL_Shutdown( void ) FreeLibrary( glw_state.hinstOpenGL ); glw_state.hinstOpenGL = NULL; - qglGetGLWExtensionsString = NULL; + pglGetGLWExtensionsString = NULL; -#define QGL_FUNC(type,name,params) (q##name) = NULL; -#define QGL_EXT(type,name,params) (q##name) = NULL; -#define QGL_WGL(type,name,params) (q##name) = NULL; -#define QGL_WGL_EXT(type,name,params) (q##name) = NULL; +#define QGL_FUNC(type,name,params) (p##name) = NULL; +#define QGL_EXT(type,name,params) (p##name) = NULL; +#define QGL_WGL(type,name,params) (p##name) = NULL; +#define QGL_WGL_EXT(type,name,params) (p##name) = NULL; #define QGL_GLX(type,name,params) #define QGL_GLX_EXT(type,name,params) @@ -108,7 +108,7 @@ void QGL_Shutdown( void ) /* ** QGL_Init ** -** This is responsible for binding our qgl function pointers to +** This is responsible for binding our pgl function pointers to ** the appropriate GL stuff. In Windows this means doing a ** LoadLibrary and a bunch of calls to GetProcAddress. On other ** operating systems we need to do the right thing, whatever that @@ -127,12 +127,12 @@ bool QGL_Init( const char *dllname ) return false; } -#define QGL_FUNC(type,name,params) (q##name) = ( void * )GetProcAddress( glw_state.hinstOpenGL, #name ); \ - if( !(q##name) ) { MsgDev( D_ERROR, "QGL_Init: Failed to get address for %s\n", #name ); return false; } -#define QGL_EXT(type,name,params) (q##name) = NULL; -#define QGL_WGL(type,name,params) (q##name) = ( void * )GetProcAddress( glw_state.hinstOpenGL, #name ); \ - if( !(q##name) ) { MsgDev( D_ERROR, "QGL_Init: Failed to get address for %s\n", #name ); return false; } -#define QGL_WGL_EXT(type,name,params) (q##name) = NULL; +#define QGL_FUNC(type,name,params) (p##name) = ( void * )GetProcAddress( glw_state.hinstOpenGL, #name ); \ + if( !(p##name) ) { MsgDev( D_ERROR, "QGL_Init: Failed to get address for %s\n", #name ); return false; } +#define QGL_EXT(type,name,params) (p##name) = NULL; +#define QGL_WGL(type,name,params) (p##name) = ( void * )GetProcAddress( glw_state.hinstOpenGL, #name ); \ + if( !(p##name) ) { MsgDev( D_ERROR, "QGL_Init: Failed to get address for %s\n", #name ); return false; } +#define QGL_WGL_EXT(type,name,params) (p##name) = NULL; #define QGL_GLX(type,name,params) #define QGL_GLX_EXT(type,name,params) @@ -145,31 +145,31 @@ bool QGL_Init( const char *dllname ) #undef QGL_EXT #undef QGL_FUNC - qglGetGLWExtensionsString = _qglGetGLWExtensionsStringInit; + pglGetGLWExtensionsString = _pglGetGLWExtensionsStringInit; return true; } /* -** qglGetProcAddress +** pglGetProcAddress */ -void *qglGetProcAddress( const GLubyte *procName ) { - return (void *)qwglGetProcAddress( (LPCSTR)procName ); +void *pglGetProcAddress( const GLubyte *procName ) { + return (void *)pwglGetProcAddress( (LPCSTR)procName ); } /* -** qglGetGLWExtensionsString +** pglGetGLWExtensionsString */ -static const char *_qglGetGLWExtensionsStringInit( void ) +static const char *_pglGetGLWExtensionsStringInit( void ) { - qwglGetExtensionsStringEXT = ( void * )qglGetProcAddress( (const GLubyte *)"wglGetExtensionsStringEXT" ); - qglGetGLWExtensionsString = _qglGetGLWExtensionsString; - return qglGetGLWExtensionsString (); + pwglGetExtensionsStringEXT = ( void * )pglGetProcAddress( (const GLubyte *)"wglGetExtensionsStringEXT" ); + pglGetGLWExtensionsString = _pglGetGLWExtensionsString; + return pglGetGLWExtensionsString (); } -static const char *_qglGetGLWExtensionsString( void ) +static const char *_pglGetGLWExtensionsString( void ) { - if( qwglGetExtensionsStringEXT ) - return qwglGetExtensionsStringEXT (); + if( pwglGetExtensionsStringEXT ) + return pwglGetExtensionsStringEXT (); return NULL; } diff --git a/render/r_alias.c b/render/r_alias.c index efc4c216..92c68951 100644 --- a/render/r_alias.c +++ b/render/r_alias.c @@ -922,7 +922,7 @@ void R_DrawAliasModel( const meshbuffer_t *mb ) // hack the depth range to prevent view model from poking into walls if( e->flags & RF_WEAPONMODEL ) - qglDepthRange( gldepthmin, gldepthmin + 0.3 * ( gldepthmax - gldepthmin ) ); + pglDepthRange( gldepthmin, gldepthmin + 0.3 * ( gldepthmax - gldepthmin ) ); // backface culling for left-handed weapons if( e->flags & RF_CULLHACK ) @@ -934,7 +934,7 @@ void R_DrawAliasModel( const meshbuffer_t *mb ) R_DrawAliasFrameLerp( mb, e->backlerp ); if( e->flags & RF_WEAPONMODEL ) - qglDepthRange( gldepthmin, gldepthmax ); + pglDepthRange( gldepthmin, gldepthmax ); if( e->flags & RF_CULLHACK ) GL_FrontFace( !glState.frontFace ); diff --git a/render/r_backend.c b/render/r_backend.c index c95ce6f4..71d6a903 100644 --- a/render/r_backend.c +++ b/render/r_backend.c @@ -125,7 +125,7 @@ void R_BackendInit( void ) R_BackendResetPassMask(); - qglEnableClientState( GL_VERTEX_ARRAY ); + pglEnableClientState( GL_VERTEX_ARRAY ); if( !r_ignorehwgamma->integer ) r_identityLighting = (int)( 255.0f / pow( 2, max( 0, floor( r_overbrightbits->value ) ) ) ); @@ -432,18 +432,18 @@ void R_LockArrays( int numverts ) if( !glConfig.ext.vertex_buffer_object ) { - qglVertexPointer( 3, GL_FLOAT, 16, vertsArray ); + pglVertexPointer( 3, GL_FLOAT, 16, vertsArray ); if( r_features & MF_ENABLENORMALS ) { r_normalsEnabled = true; - qglEnableClientState( GL_NORMAL_ARRAY ); - qglNormalPointer( GL_FLOAT, 16, normalsArray ); + pglEnableClientState( GL_NORMAL_ARRAY ); + pglNormalPointer( GL_FLOAT, 16, normalsArray ); } } if( glConfig.ext.compiled_vertex_array ) - qglLockArraysEXT( 0, numverts ); + pglLockArraysEXT( 0, numverts ); r_arraysLocked = true; } @@ -459,12 +459,12 @@ void R_UnlockArrays( void ) return; if( glConfig.ext.compiled_vertex_array ) - qglUnlockArraysEXT(); + pglUnlockArraysEXT(); if( r_normalsEnabled ) { r_normalsEnabled = false; - qglDisableClientState( GL_NORMAL_ARRAY ); + pglDisableClientState( GL_NORMAL_ARRAY ); } r_arraysLocked = false; } @@ -503,25 +503,25 @@ void R_FlushArrays( void ) if( r_backacc.numColors == 1 ) { - qglColor4ubv( colorArray[0] ); + pglColor4ubv( colorArray[0] ); } else if( r_backacc.numColors > 1 ) { - qglEnableClientState( GL_COLOR_ARRAY ); + pglEnableClientState( GL_COLOR_ARRAY ); if( !glConfig.ext.vertex_buffer_object ) - qglColorPointer( 4, GL_UNSIGNED_BYTE, 0, colorArray ); + pglColorPointer( 4, GL_UNSIGNED_BYTE, 0, colorArray ); } if( r_drawelements->integer || glState.in2DMode || RI.refdef.rdflags & RDF_NOWORLDMODEL ) { if( glConfig.ext.draw_range_elements ) - qglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray ); + pglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray ); else - qglDrawElements( GL_TRIANGLES, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray ); + pglDrawElements( GL_TRIANGLES, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray ); } if( r_backacc.numColors > 1 ) - qglDisableClientState( GL_COLOR_ARRAY ); + pglDisableClientState( GL_COLOR_ARRAY ); r_backacc.c_totalTris += r_backacc.numElems / 3; r_backacc.c_totalFlushes++; @@ -554,7 +554,7 @@ static void R_CleanUpTextureUnits( int last ) GL_DisableAllTexGens(); GL_SetTexCoordArrayMode( 0 ); - qglDisable( GL_TEXTURE_2D ); + pglDisable( GL_TEXTURE_2D ); GL_SelectTexture( i - 1 ); } } @@ -939,7 +939,7 @@ static bool R_VertexTCBase( const shaderpass_t *pass, int unit, mat4x4_t matrix if( !glConfig.ext.vertex_buffer_object ) { - qglTexCoordPointer( 2, GL_FLOAT, 0, coordsArray ); + pglTexCoordPointer( 2, GL_FLOAT, 0, coordsArray ); return true; } break; @@ -948,7 +948,7 @@ static bool R_VertexTCBase( const shaderpass_t *pass, int unit, mat4x4_t matrix if( !glConfig.ext.vertex_buffer_object ) { - qglTexCoordPointer( 2, GL_FLOAT, 0, lightmapCoordsArray[r_lightmapStyleNum[unit]] ); + pglTexCoordPointer( 2, GL_FLOAT, 0, lightmapCoordsArray[r_lightmapStyleNum[unit]] ); return true; } break; @@ -982,7 +982,7 @@ static bool R_VertexTCBase( const shaderpass_t *pass, int unit, mat4x4_t matrix if( !glConfig.ext.vertex_buffer_object ) { - qglTexCoordPointer( 2, GL_FLOAT, 0, tUnitCoordsArray[unit] ); + pglTexCoordPointer( 2, GL_FLOAT, 0, tUnitCoordsArray[unit] ); return true; } break; @@ -1007,8 +1007,8 @@ static bool R_VertexTCBase( const shaderpass_t *pass, int unit, mat4x4_t matrix GL_EnableTexGen( GL_T, GL_OBJECT_LINEAR ); GL_EnableTexGen( GL_R, 0 ); GL_EnableTexGen( GL_Q, 0 ); - qglTexGenfv( GL_S, GL_OBJECT_PLANE, genVector[0] ); - qglTexGenfv( GL_T, GL_OBJECT_PLANE, genVector[1] ); + pglTexGenfv( GL_S, GL_OBJECT_PLANE, genVector[0] ); + pglTexGenfv( GL_T, GL_OBJECT_PLANE, genVector[1] ); return false; } case TC_GEN_PROJECTION: @@ -1041,10 +1041,10 @@ static bool R_VertexTCBase( const shaderpass_t *pass, int unit, mat4x4_t matrix GL_EnableTexGen( GL_R, GL_OBJECT_LINEAR ); GL_EnableTexGen( GL_Q, GL_OBJECT_LINEAR ); - qglTexGenfv( GL_S, GL_OBJECT_PLANE, genVector[0] ); - qglTexGenfv( GL_T, GL_OBJECT_PLANE, genVector[1] ); - qglTexGenfv( GL_R, GL_OBJECT_PLANE, genVector[2] ); - qglTexGenfv( GL_Q, GL_OBJECT_PLANE, genVector[3] ); + pglTexGenfv( GL_S, GL_OBJECT_PLANE, genVector[0] ); + pglTexGenfv( GL_T, GL_OBJECT_PLANE, genVector[1] ); + pglTexGenfv( GL_R, GL_OBJECT_PLANE, genVector[2] ); + pglTexGenfv( GL_Q, GL_OBJECT_PLANE, genVector[3] ); return false; } @@ -1148,7 +1148,7 @@ static bool R_VertexTCBase( const shaderpass_t *pass, int unit, mat4x4_t matrix if( !glConfig.ext.vertex_buffer_object ) { - qglTexCoordPointer( 2, GL_FLOAT, 0, tUnitCoordsArray[unit] ); + pglTexCoordPointer( 2, GL_FLOAT, 0, tUnitCoordsArray[unit] ); return false; } break; @@ -1159,7 +1159,7 @@ static bool R_VertexTCBase( const shaderpass_t *pass, int unit, mat4x4_t matrix if( !glConfig.ext.vertex_buffer_object ) { - qglTexCoordPointer( 4, GL_FLOAT, 0, sVectorsArray ); + pglTexCoordPointer( 4, GL_FLOAT, 0, sVectorsArray ); return true; } break; @@ -1272,7 +1272,7 @@ static void R_BindShaderpass( const shaderpass_t *pass, image_t *tex, int unit ) GL_Bind( unit, tex ); if( unit && !pass->program ) - qglEnable( GL_TEXTURE_2D ); + pglEnable( GL_TEXTURE_2D ); GL_SetTexCoordArrayMode( ( tex->flags & IT_CUBEMAP ? GL_TEXTURE_CUBE_MAP_ARB : GL_TEXTURE_COORD_ARRAY ) ); identityMatrix = R_VertexTCBase( pass, unit, result ); @@ -1842,21 +1842,21 @@ void R_RenderMeshCombined( void ) // this way it can be possible to use GL_DECAL in both texture-units, while still looking good // normal mutlitexturing would multiply the alpha-channel which looks ugly GL_TexEnv( GL_COMBINE_ARB ); - qglTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB ); - qglTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_ADD ); + pglTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB ); + pglTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_ADD ); - qglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE ); - qglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR ); - qglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE ); - qglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA ); + pglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE ); + pglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR ); + pglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE ); + pglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA ); - qglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB ); - qglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR ); - qglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PREVIOUS_ARB ); - qglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA ); + pglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PREVIOUS_ARB ); + pglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR ); + pglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PREVIOUS_ARB ); + pglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA ); - qglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_TEXTURE ); - qglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA ); + pglTexEnvi( GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_TEXTURE ); + pglTexEnvi( GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA ); } else { @@ -2100,7 +2100,7 @@ static void R_RenderMeshGLSL_Material( void ) object = R_GetProgramObject( program ); if( object ) { - qglUseProgramObjectARB( object ); + pglUseProgramObjectARB( object ); // update uniforms R_UpdateProgramUniforms( program, RI.viewOrigin, vec3_origin, lightDir, ambient, diffuse, lightStyle, @@ -2108,7 +2108,7 @@ static void R_RenderMeshGLSL_Material( void ) R_FlushArrays(); - qglUseProgramObjectARB( 0 ); + pglUseProgramObjectARB( 0 ); } if( breakIntoPasses ) @@ -2204,14 +2204,14 @@ static void R_RenderMeshGLSL_Distortion( void ) object = R_GetProgramObject( program ); if( object ) { - qglUseProgramObjectARB( object ); + pglUseProgramObjectARB( object ); R_UpdateProgramUniforms( program, RI.viewOrigin, vec3_origin, vec3_origin, NULL, NULL, NULL, frontPlane, r_portaltexture->upload_width, r_portaltexture->upload_height, 0, 0 ); R_FlushArrays(); - qglUseProgramObjectARB( 0 ); + pglUseProgramObjectARB( 0 ); } } @@ -2246,8 +2246,8 @@ static void R_RenderMeshGLSL_Shadowmap( void ) R_BindShaderpass( pass, r_currentCastGroup->depthTexture, 0 ); - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB ); - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL ); + pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB ); + pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL ); // calculate the fragment color R_ModifyColor( pass ); @@ -2256,7 +2256,7 @@ static void R_RenderMeshGLSL_Shadowmap( void ) state = r_currentShaderState | ( pass->flags & r_currentShaderPassMask ) | GLSTATE_BLEND_MTEX; GL_SetState( state ); - qglUseProgramObjectARB( object ); + pglUseProgramObjectARB( object ); R_UpdateProgramUniforms( program, RI.viewOrigin, vec3_origin, vec3_origin, NULL, NULL, NULL, true, r_currentCastGroup->depthTexture->upload_width, r_currentCastGroup->depthTexture->upload_height, @@ -2264,9 +2264,9 @@ static void R_RenderMeshGLSL_Shadowmap( void ) R_FlushArrays(); - qglUseProgramObjectARB( 0 ); + pglUseProgramObjectARB( 0 ); - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_NONE ); + pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_NONE ); } } @@ -2306,14 +2306,14 @@ static void R_RenderMeshGLSL_Outline( void ) state = r_currentShaderState | ( pass->flags & r_currentShaderPassMask ) | GLSTATE_BLEND_MTEX; GL_SetState( state ); - qglUseProgramObjectARB( object ); + pglUseProgramObjectARB( object ); R_UpdateProgramUniforms( program, RI.viewOrigin, vec3_origin, vec3_origin, NULL, NULL, NULL, true, 0, 0, RI.currententity->outlineHeight * r_outlines_scale->value, 0 ); R_FlushArrays(); - qglUseProgramObjectARB( 0 ); + pglUseProgramObjectARB( 0 ); GL_Cull( faceCull ); } @@ -2710,7 +2710,7 @@ void R_RenderMeshBuffer( const meshbuffer_t *mb ) R_ClearArrays(); - qglMatrixMode( GL_MODELVIEW ); + pglMatrixMode( GL_MODELVIEW ); } /* @@ -2723,7 +2723,7 @@ void R_BackendCleanUpTextureUnits( void ) R_CleanUpTextureUnits( 1 ); GL_LoadIdentityTexMatrix(); - qglMatrixMode( GL_MODELVIEW ); + pglMatrixMode( GL_MODELVIEW ); GL_DisableAllTexGens(); GL_SetTexCoordArrayMode( 0 ); @@ -2757,12 +2757,12 @@ R_BackendBeginTriangleOutlines void R_BackendBeginTriangleOutlines( void ) { r_triangleOutlines = true; - qglColor4fv( colorWhite ); + pglColor4fv( colorWhite ); GL_Cull( 0 ); GL_SetState( GLSTATE_NO_DEPTH_TEST ); - qglDisable( GL_TEXTURE_2D ); - qglPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); + pglDisable( GL_TEXTURE_2D ); + pglPolygonMode( GL_FRONT_AND_BACK, GL_LINE ); } /* @@ -2773,10 +2773,10 @@ R_BackendEndTriangleOutlines void R_BackendEndTriangleOutlines( void ) { r_triangleOutlines = false; - qglColor4fv( colorWhite ); + pglColor4fv( colorWhite ); GL_SetState( 0 ); - qglEnable( GL_TEXTURE_2D ); - qglPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); + pglEnable( GL_TEXTURE_2D ); + pglPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); } /* @@ -2792,15 +2792,15 @@ static _inline void R_SetColorForOutlines( void ) { case MB_MODEL: if( r_currentMeshBuffer->infokey < 0 ) - qglColor4fv( colorRed ); + pglColor4fv( colorRed ); else - qglColor4fv( colorWhite ); + pglColor4fv( colorWhite ); break; case MB_SPRITE: - qglColor4fv( colorBlue ); + pglColor4fv( colorBlue ); break; case MB_POLY: - qglColor4fv( colorGreen ); + pglColor4fv( colorGreen ); break; } } @@ -2816,9 +2816,9 @@ static void R_DrawTriangles( void ) R_SetColorForOutlines(); if( glConfig.ext.draw_range_elements ) - qglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray ); + pglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray ); else - qglDrawElements( GL_TRIANGLES, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray ); + pglDrawElements( GL_TRIANGLES, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray ); } /* @@ -2833,13 +2833,51 @@ static void R_DrawNormals( void ) if( r_shownormals->integer == 2 ) R_SetColorForOutlines(); - qglBegin( GL_LINES ); + pglBegin( GL_LINES ); for( i = 0; i < r_backacc.numVerts; i++ ) { - qglVertex3fv( vertsArray[i] ); - qglVertex3f( vertsArray[i][0] + normalsArray[i][0], + pglVertex3fv( vertsArray[i] ); + pglVertex3f( vertsArray[i][0] + normalsArray[i][0], vertsArray[i][1] + normalsArray[i][1], vertsArray[i][2] + normalsArray[i][2] ); } - qglEnd(); + pglEnd(); } + +static void R_DrawLine( int color, int numpoints, const float *points, const int *elements ) +{ + int i = numpoints - 1; + vec3_t p0, p1; + + VectorSet( p0, points[i*3+0], points[i*3+1], points[i*3+2] ); + if( r_physbdebug->integer == 1 ) ConvertPositionToGame( p0 ); + + for( i = 0; i < numpoints; i++ ) + { + VectorSet( p1, points[i*3+0], points[i*3+1], points[i*3+2] ); + if( r_physbdebug->integer == 1 ) ConvertPositionToGame( p1 ); + + pglColor4fv( UnpackRGBA( color )); + pglVertex3fv( p0 ); + pglVertex3fv( p1 ); + + VectorCopy( p1, p0 ); + } +} + +/* +================ +R_DrawPhysDebug +================ +*/ +void R_DrawPhysDebug( void ) +{ + if( r_physbdebug->integer ) + { + // physic debug + pglLoadMatrixf( RI.worldviewMatrix ); + pglBegin( GL_LINES ); + ri.ShowCollision( R_DrawLine ); + pglEnd(); + } +} \ No newline at end of file diff --git a/render/r_backend.h b/render/r_backend.h index cb4bcf75..e956ea7a 100644 --- a/render/r_backend.h +++ b/render/r_backend.h @@ -85,6 +85,8 @@ void R_BackendCleanUpTextureUnits( void ); void R_BackendSetPassMask( int mask ); void R_BackendResetPassMask( void ); +void R_DrawPhysDebug( void ); + void R_LockArrays( int numverts ); void R_UnlockArrays( void ); void R_UnlockArrays( void ); diff --git a/render/r_bloom.c b/render/r_bloom.c index c32f7e13..cd8bb1ba 100644 --- a/render/r_bloom.c +++ b/render/r_bloom.c @@ -219,16 +219,16 @@ R_Bloom_SamplePass */ static _inline void R_Bloom_SamplePass( int xpos, int ypos ) { - qglBegin( GL_QUADS ); - qglTexCoord2f( 0, sampleText_tch ); - qglVertex2f( xpos, ypos ); - qglTexCoord2f( 0, 0 ); - qglVertex2f( xpos, ypos+sample_height ); - qglTexCoord2f( sampleText_tcw, 0 ); - qglVertex2f( xpos+sample_width, ypos+sample_height ); - qglTexCoord2f( sampleText_tcw, sampleText_tch ); - qglVertex2f( xpos+sample_width, ypos ); - qglEnd(); + pglBegin( GL_QUADS ); + pglTexCoord2f( 0, sampleText_tch ); + pglVertex2f( xpos, ypos ); + pglTexCoord2f( 0, 0 ); + pglVertex2f( xpos, ypos+sample_height ); + pglTexCoord2f( sampleText_tcw, 0 ); + pglVertex2f( xpos+sample_width, ypos+sample_height ); + pglTexCoord2f( sampleText_tcw, sampleText_tch ); + pglVertex2f( xpos+sample_width, ypos ); + pglEnd(); } /* @@ -238,16 +238,16 @@ R_Bloom_Quad */ static _inline void R_Bloom_Quad( int x, int y, int w, int h, float texwidth, float texheight ) { - qglBegin( GL_QUADS ); - qglTexCoord2f( 0, texheight ); - qglVertex2f( x, glState.height-h-y ); - qglTexCoord2f( 0, 0 ); - qglVertex2f( x, glState.height-y ); - qglTexCoord2f( texwidth, 0 ); - qglVertex2f( x+w, glState.height-y ); - qglTexCoord2f( texwidth, texheight ); - qglVertex2f( x+w, glState.height-h ); - qglEnd(); + pglBegin( GL_QUADS ); + pglTexCoord2f( 0, texheight ); + pglVertex2f( x, glState.height-h-y ); + pglTexCoord2f( 0, 0 ); + pglVertex2f( x, glState.height-y ); + pglTexCoord2f( texwidth, 0 ); + pglVertex2f( x+w, glState.height-y ); + pglTexCoord2f( texwidth, texheight ); + pglVertex2f( x+w, glState.height-h ); + pglEnd(); } /* @@ -260,18 +260,18 @@ static void R_Bloom_DrawEffect( void ) GL_Bind( 0, r_bloomeffecttexture ); GL_TexEnv( GL_MODULATE ); GL_SetState( GLSTATE_NO_DEPTH_TEST|GLSTATE_SRCBLEND_ONE|GLSTATE_DSTBLEND_ONE ); - qglColor4f( r_bloom_alpha->value, r_bloom_alpha->value, r_bloom_alpha->value, 1.0f ); + pglColor4f( r_bloom_alpha->value, r_bloom_alpha->value, r_bloom_alpha->value, 1.0f ); - qglBegin( GL_QUADS ); - qglTexCoord2f( 0, sampleText_tch ); - qglVertex2f( curView_x, curView_y ); - qglTexCoord2f( 0, 0 ); - qglVertex2f( curView_x, curView_y+curView_height ); - qglTexCoord2f( sampleText_tcw, 0 ); - qglVertex2f( curView_x+curView_width, curView_y+curView_height ); - qglTexCoord2f( sampleText_tcw, sampleText_tch ); - qglVertex2f( curView_x+curView_width, curView_y ); - qglEnd(); + pglBegin( GL_QUADS ); + pglTexCoord2f( 0, sampleText_tch ); + pglVertex2f( curView_x, curView_y ); + pglTexCoord2f( 0, 0 ); + pglVertex2f( curView_x, curView_y+curView_height ); + pglTexCoord2f( sampleText_tcw, 0 ); + pglVertex2f( curView_x+curView_width, curView_y+curView_height ); + pglTexCoord2f( sampleText_tcw, sampleText_tch ); + pglVertex2f( curView_x+curView_width, curView_y ); + pglEnd(); } /* @@ -285,20 +285,20 @@ static void R_Bloom_GeneratexDiamonds( void ) float intensity, scale, *diamond; // set up sample size workspace - qglScissor( 0, 0, sample_width, sample_height ); - qglViewport( 0, 0, sample_width, sample_height ); - qglMatrixMode( GL_PROJECTION ); - qglLoadIdentity(); - qglOrtho( 0, sample_width, sample_height, 0, -10, 100 ); - qglMatrixMode( GL_MODELVIEW ); - qglLoadIdentity(); + pglScissor( 0, 0, sample_width, sample_height ); + pglViewport( 0, 0, sample_width, sample_height ); + pglMatrixMode( GL_PROJECTION ); + pglLoadIdentity(); + pglOrtho( 0, sample_width, sample_height, 0, -10, 100 ); + pglMatrixMode( GL_MODELVIEW ); + pglLoadIdentity(); // copy small scene into r_bloomeffecttexture GL_Bind( 0, r_bloomeffecttexture ); - qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height ); + pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height ); // start modifying the small scene corner - qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); + pglColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); // darkening passes if( r_bloom_darken->integer ) @@ -308,7 +308,7 @@ static void R_Bloom_GeneratexDiamonds( void ) for( i = 0; i < r_bloom_darken->integer; i++ ) R_Bloom_SamplePass( 0, 0 ); - qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height ); + pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height ); } // bluring passes @@ -358,21 +358,21 @@ static void R_Bloom_GeneratexDiamonds( void ) if( intensity < 0.01f ) continue; - qglColor4f( intensity, intensity, intensity, 1.0 ); + pglColor4f( intensity, intensity, intensity, 1.0 ); R_Bloom_SamplePass( i - k, j - k ); } } - qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height ); + pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, sample_width, sample_height ); // restore full screen workspace - qglScissor( 0, 0, glState.width, glState.height ); - qglViewport( 0, 0, glState.width, glState.height ); - qglMatrixMode( GL_PROJECTION ); - qglLoadIdentity(); - qglOrtho( 0, glState.width, glState.height, 0, -10, 100 ); - qglMatrixMode( GL_MODELVIEW ); - qglLoadIdentity(); + pglScissor( 0, 0, glState.width, glState.height ); + pglViewport( 0, 0, glState.width, glState.height ); + pglMatrixMode( GL_PROJECTION ); + pglLoadIdentity(); + pglOrtho( 0, glState.width, glState.height, 0, -10, 100 ); + pglMatrixMode( GL_MODELVIEW ); + pglLoadIdentity(); } /* @@ -382,7 +382,7 @@ R_Bloom_DownsampleView */ static void R_Bloom_DownsampleView( void ) { - qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); + pglColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); if( r_screendownsamplingtexture_size ) { @@ -392,15 +392,15 @@ static void R_Bloom_DownsampleView( void ) // copy the screen and draw resized GL_Bind( 0, r_bloomscreentexture ); - qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, curView_x, glState.height - ( curView_y + curView_height ), curView_width, curView_height ); + pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, curView_x, glState.height - ( curView_y + curView_height ), curView_width, curView_height ); R_Bloom_Quad( 0, 0, midsample_width, midsample_height, screenTex_tcw, screenTex_tch ); // now copy into downsampling (mid-sized) texture GL_Bind( 0, r_bloomdownsamplingtexture ); - qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, midsample_width, midsample_height ); + pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, midsample_width, midsample_height ); // now draw again in bloom size - qglColor4f( 0.5f, 0.5f, 0.5f, 1.0f ); + pglColor4f( 0.5f, 0.5f, 0.5f, 1.0f ); R_Bloom_Quad( 0, 0, sample_width, sample_height, sampleText_tcw, sampleText_tch ); // now blend the big screen texture into the bloom generation space (hoping it adds some blur) @@ -408,13 +408,13 @@ static void R_Bloom_DownsampleView( void ) GL_Bind( 0, r_bloomscreentexture ); R_Bloom_Quad( 0, 0, sample_width, sample_height, screenTex_tcw, screenTex_tch ); - qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); + pglColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); } else { // downsample simple GL_Bind( 0, r_bloomscreentexture ); - qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, curView_x, glState.height - ( curView_y + curView_height ), curView_width, curView_height ); + pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, curView_x, glState.height - ( curView_y + curView_height ), curView_width, curView_height ); R_Bloom_Quad( 0, 0, sample_width, sample_height, screenTex_tcw, screenTex_tch ); } } @@ -436,18 +436,18 @@ void R_BloomBlend( const ref_params_t *fd ) return; // set up full screen workspace - qglScissor( 0, 0, glState.width, glState.height ); - qglViewport( 0, 0, glState.width, glState.height ); - qglMatrixMode( GL_PROJECTION ); - qglLoadIdentity(); - qglOrtho( 0, glState.width, glState.height, 0, -10, 100 ); - qglMatrixMode( GL_MODELVIEW ); - qglLoadIdentity(); + pglScissor( 0, 0, glState.width, glState.height ); + pglViewport( 0, 0, glState.width, glState.height ); + pglMatrixMode( GL_PROJECTION ); + pglLoadIdentity(); + pglOrtho( 0, glState.width, glState.height, 0, -10, 100 ); + pglMatrixMode( GL_MODELVIEW ); + pglLoadIdentity(); GL_Cull( 0 ); GL_SetState( GLSTATE_NO_DEPTH_TEST ); - qglColor4f( 1, 1, 1, 1 ); + pglColor4f( 1, 1, 1, 1 ); // set up current sizes curView_x = fd->viewport[0]; @@ -473,7 +473,7 @@ void R_BloomBlend( const ref_params_t *fd ) // copy the screen space we'll use to work into the backup texture GL_Bind( 0, r_bloombackuptexture ); - qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, r_screenbackuptexture_width, r_screenbackuptexture_height ); + pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, 0, 0, r_screenbackuptexture_width, r_screenbackuptexture_height ); // create the bloom image R_Bloom_DownsampleView(); @@ -483,13 +483,13 @@ void R_BloomBlend( const ref_params_t *fd ) GL_SetState( GLSTATE_NO_DEPTH_TEST ); GL_Bind( 0, r_bloombackuptexture ); - qglColor4f( 1, 1, 1, 1 ); + pglColor4f( 1, 1, 1, 1 ); R_Bloom_Quad( 0, 0, r_screenbackuptexture_width, r_screenbackuptexture_height, 1.0f, 1.0f ); - qglScissor( RI.scissor[0], RI.scissor[1], RI.scissor[2], RI.scissor[3] ); + pglScissor( RI.scissor[0], RI.scissor[1], RI.scissor[2], RI.scissor[3] ); R_Bloom_DrawEffect(); - qglViewport( RI.viewport[0], RI.viewport[1], RI.viewport[2], RI.viewport[3] ); + pglViewport( RI.viewport[0], RI.viewport[1], RI.viewport[2], RI.viewport[3] ); } diff --git a/render/r_cull.c b/render/r_cull.c index c3d4eafc..dc25eeb8 100644 --- a/render/r_cull.c +++ b/render/r_cull.c @@ -310,7 +310,7 @@ void R_InitOcclusionQueries( void ) if( !glConfig.ext.occlusion_query ) return; - qglGenQueriesARB( MAX_OQ_TOTAL, r_occlusionQueries ); + pglGenQueriesARB( MAX_OQ_TOTAL, r_occlusionQueries ); meshbuf->sortkey = MB_ENTITY2NUM( r_worldent ) | MB_MODEL; meshbuf->shaderkey = r_occlusionShader->sortkey; @@ -335,9 +335,9 @@ void R_BeginOcclusionPass( void ) R_ClearSurfOcclusionQueryKeys(); - qglShadeModel( GL_FLAT ); - qglColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE ); - qglDisable( GL_TEXTURE_2D ); + pglShadeModel( GL_FLAT ); + pglColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE ); + pglDisable( GL_TEXTURE_2D ); } /* @@ -358,13 +358,13 @@ void R_EndOcclusionPass( void ) R_BackendResetCounters(); if( r_occlusion_queries_finish->integer ) - qglFinish(); + pglFinish(); else - qglFlush(); + pglFlush(); - qglShadeModel( GL_SMOOTH ); - qglEnable( GL_TEXTURE_2D ); - qglColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); + pglShadeModel( GL_SMOOTH ); + pglEnable( GL_TEXTURE_2D ); + pglColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); } /* @@ -471,7 +471,7 @@ int R_IssueOcclusionQuery( int query, ref_entity_t *e, vec3_t mins, vec3_t maxs mesh.elems = indices; r_occlusionShader->flags &= ~( SHADER_CULL_BACK | SHADER_CULL_FRONT ); - qglBeginQueryARB( GL_SAMPLES_PASSED_ARB, r_occlusionQueries[query] ); + pglBeginQueryARB( GL_SAMPLES_PASSED_ARB, r_occlusionQueries[query] ); R_TransformEntityBBox( e, mins, maxs, bbox, false ); for( i = 0; i < 8; i++ ) @@ -482,7 +482,7 @@ int R_IssueOcclusionQuery( int query, ref_entity_t *e, vec3_t mins, vec3_t maxs R_PushMesh( &mesh, MF_NONBATCHED|MF_NOCULL ); R_RenderMeshBuffer( &r_occluderMB ); - qglEndQueryARB( GL_SAMPLES_PASSED_ARB ); + pglEndQueryARB( GL_SAMPLES_PASSED_ARB ); return query; } @@ -515,21 +515,21 @@ unsigned int R_GetOcclusionQueryResult( int query, bool wait ) query = r_occlusionQueries[query]; - qglGetQueryObjectivARB( query, GL_QUERY_RESULT_AVAILABLE_ARB, &available ); + pglGetQueryObjectivARB( query, GL_QUERY_RESULT_AVAILABLE_ARB, &available ); if( !available && wait ) { int n = 0; do { n++; - qglGetQueryObjectivARB( query, GL_QUERY_RESULT_AVAILABLE_ARB, &available ); + pglGetQueryObjectivARB( query, GL_QUERY_RESULT_AVAILABLE_ARB, &available ); } while( !available && ( n < 10000 ) ); } if( !available ) return 0; - qglGetQueryObjectuivARB( query, GL_QUERY_RESULT_ARB, &sampleCount ); + pglGetQueryObjectuivARB( query, GL_QUERY_RESULT_ARB, &sampleCount ); return sampleCount; } @@ -565,6 +565,6 @@ void R_ShutdownOcclusionQueries( void ) if( !glConfig.ext.occlusion_query ) return; - qglDeleteQueriesARB( MAX_OQ_TOTAL, r_occlusionQueries ); + pglDeleteQueriesARB( MAX_OQ_TOTAL, r_occlusionQueries ); r_occludersQueued = false; } diff --git a/render/r_glimp.h b/render/r_glimp.h index 093acde0..ba9d54a7 100644 --- a/render/r_glimp.h +++ b/render/r_glimp.h @@ -25,8 +25,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifdef _WIN32 #include -#define QGL_WGL( type, name, params ) QGL_EXTERN type( APIENTRY * q ## name ) params; -#define QGL_WGL_EXT( type, name, params ) QGL_EXTERN type( APIENTRY * q ## name ) params; +#define QGL_WGL( type, name, params ) QGL_EXTERN type( APIENTRY * p ## name ) params; +#define QGL_WGL_EXT( type, name, params ) QGL_EXTERN type( APIENTRY * p ## name ) params; #define QGL_GLX( type, name, params ) #define QGL_GLX_EXT( type, name, params ) #endif @@ -34,8 +34,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #if defined ( __linux__ ) || defined ( __FreeBSD__ ) #define QGL_WGL( type, name, params ) #define QGL_WGL_EXT( type, name, params ) -#define QGL_GLX( type, name, params ) QGL_EXTERN type( APIENTRY * q ## name ) params; -#define QGL_GLX_EXT( type, name, params ) QGL_EXTERN type( APIENTRY * q ## name ) params; +#define QGL_GLX( type, name, params ) QGL_EXTERN type( APIENTRY * p ## name ) params; +#define QGL_GLX_EXT( type, name, params ) QGL_EXTERN type( APIENTRY * p ## name ) params; #endif #if defined ( __MACOSX__ ) @@ -45,8 +45,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define QGL_GLX_EXT( type, name, params ) #endif -#define QGL_FUNC( type, name, params ) QGL_EXTERN type( APIENTRY * q ## name ) params; -#define QGL_EXT( type, name, params ) QGL_EXTERN type( APIENTRY * q ## name ) params; +#define QGL_FUNC( type, name, params ) QGL_EXTERN type( APIENTRY * p ## name ) params; +#define QGL_EXT( type, name, params ) QGL_EXTERN type( APIENTRY * p ## name ) params; #include "qgl.h" diff --git a/render/r_image.c b/render/r_image.c index 253247d2..f165ab5c 100644 --- a/render/r_image.c +++ b/render/r_image.c @@ -78,14 +78,14 @@ void GL_SelectTexture( int tmu ) glState.currentTMU = tmu; - if( qglActiveTextureARB ) + if( pglActiveTextureARB ) { - qglActiveTextureARB( tmu + GL_TEXTURE0_ARB ); - qglClientActiveTextureARB( tmu + GL_TEXTURE0_ARB ); + pglActiveTextureARB( tmu + GL_TEXTURE0_ARB ); + pglClientActiveTextureARB( tmu + GL_TEXTURE0_ARB ); } - else if( qglSelectTextureSGIS ) + else if( pglSelectTextureSGIS ) { - qglSelectTextureSGIS( tmu + GL_TEXTURE0_SGIS ); + pglSelectTextureSGIS( tmu + GL_TEXTURE0_SGIS ); } } @@ -93,7 +93,7 @@ void GL_TexEnv( GLenum mode ) { if( mode != ( GLenum )glState.currentEnvModes[glState.currentTMU] ) { - qglTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode ); + pglTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode ); glState.currentEnvModes[glState.currentTMU] = ( int )mode; } } @@ -109,17 +109,17 @@ void GL_Bind( int tmu, image_t *tex ) glState.currentTextures[tmu] = tex->texnum; if( tex->flags & IT_CUBEMAP ) - qglBindTexture( GL_TEXTURE_CUBE_MAP_ARB, tex->texnum ); + pglBindTexture( GL_TEXTURE_CUBE_MAP_ARB, tex->texnum ); else if( tex->depth != 1 ) - qglBindTexture( GL_TEXTURE_3D, tex->texnum ); + pglBindTexture( GL_TEXTURE_3D, tex->texnum ); else - qglBindTexture( GL_TEXTURE_2D, tex->texnum ); + pglBindTexture( GL_TEXTURE_2D, tex->texnum ); } void GL_LoadTexMatrix( const mat4x4_t m ) { - qglMatrixMode( GL_TEXTURE ); - qglLoadMatrixf( m ); + pglMatrixMode( GL_TEXTURE ); + pglLoadMatrixf( m ); glState.texIdentityMatrix[glState.currentTMU] = false; } @@ -127,8 +127,8 @@ void GL_LoadIdentityTexMatrix( void ) { if( !glState.texIdentityMatrix[glState.currentTMU] ) { - qglMatrixMode( GL_TEXTURE ); - qglLoadIdentity(); + pglMatrixMode( GL_TEXTURE ); + pglLoadIdentity(); glState.texIdentityMatrix[glState.currentTMU] = true; } } @@ -164,16 +164,16 @@ void GL_EnableTexGen( int coord, int mode ) { if( !( glState.genSTEnabled[tmu] & bit ) ) { - qglEnable( gen ); + pglEnable( gen ); glState.genSTEnabled[tmu] |= bit; } - qglTexGeni( coord, GL_TEXTURE_GEN_MODE, mode ); + pglTexGeni( coord, GL_TEXTURE_GEN_MODE, mode ); } else { if( glState.genSTEnabled[tmu] & bit ) { - qglDisable( gen ); + pglDisable( gen ); glState.genSTEnabled[tmu] &= ~bit; } } @@ -194,14 +194,14 @@ void GL_SetTexCoordArrayMode( int mode ) if( cmode != bit ) { if( cmode == 1 ) - qglDisableClientState( GL_TEXTURE_COORD_ARRAY ); + pglDisableClientState( GL_TEXTURE_COORD_ARRAY ); else if( cmode == 2 ) - qglDisable( GL_TEXTURE_CUBE_MAP_ARB ); + pglDisable( GL_TEXTURE_CUBE_MAP_ARB ); if( bit == 1 ) - qglEnableClientState( GL_TEXTURE_COORD_ARRAY ); + pglEnableClientState( GL_TEXTURE_COORD_ARRAY ); else if( bit == 2 ) - qglEnable( GL_TEXTURE_CUBE_MAP_ARB ); + pglEnable( GL_TEXTURE_CUBE_MAP_ARB ); glState.texCoordArrayMode[tmu] = bit; } @@ -256,18 +256,18 @@ void R_TextureMode( char *string ) if( glt->flags & IT_DEPTH ) { - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_depth ); - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_depth ); + pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_depth ); + pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_depth ); } else if( !( glt->flags & IT_NOMIPMAP ) ) { - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min ); - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max ); + pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min ); + pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max ); } else { - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_max ); - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max ); + pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_max ); + pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max ); } } } @@ -755,44 +755,44 @@ void R_Upload32( byte **data, int width, int height, int flags, int *upload_widt if( flags & IT_DEPTH ) { - qglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_depth ); - qglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_depth ); + pglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_depth ); + pglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_depth ); if( glConfig.ext.texture_filter_anisotropic ) - qglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 ); + pglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 ); } else if( !( flags & IT_NOMIPMAP ) ) { - qglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_min ); - qglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_max ); + pglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_min ); + pglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_max ); if( glConfig.ext.texture_filter_anisotropic ) - qglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, glConfig.curTextureFilterAnisotropic ); + pglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, glConfig.curTextureFilterAnisotropic ); } else { - qglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_max ); - qglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_max ); + pglTexParameteri( target, GL_TEXTURE_MIN_FILTER, gl_filter_max ); + pglTexParameteri( target, GL_TEXTURE_MAG_FILTER, gl_filter_max ); if( glConfig.ext.texture_filter_anisotropic ) - qglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 ); + pglTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 ); } // clamp if required if( !( flags & IT_CLAMP ) ) { - qglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_REPEAT ); - qglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_REPEAT ); + pglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_REPEAT ); + pglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_REPEAT ); } else if( glConfig.ext.texture_edge_clamp ) { - qglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); - qglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); + pglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); + pglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); } else { - qglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_CLAMP ); - qglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_CLAMP ); + pglTexParameteri( target, GL_TEXTURE_WRAP_S, GL_CLAMP ); + pglTexParameteri( target, GL_TEXTURE_WRAP_T, GL_CLAMP ); } if( ( scaledWidth == width ) && ( scaledHeight == height ) && ( flags & IT_NOMIPMAP ) ) @@ -800,12 +800,12 @@ void R_Upload32( byte **data, int width, int height, int flags, int *upload_widt if( subImage ) { for( i = 0; i < numTextures; i++, target2++ ) - qglTexSubImage2D( target2, 0, 0, 0, scaledWidth, scaledHeight, format, GL_UNSIGNED_BYTE, data[i] ); + pglTexSubImage2D( target2, 0, 0, 0, scaledWidth, scaledHeight, format, GL_UNSIGNED_BYTE, data[i] ); } else { for( i = 0; i < numTextures; i++, target2++ ) - qglTexImage2D( target2, 0, comp, scaledWidth, scaledHeight, 0, format, GL_UNSIGNED_BYTE, data[i] ); + pglTexImage2D( target2, 0, comp, scaledWidth, scaledHeight, 0, format, GL_UNSIGNED_BYTE, data[i] ); } } else @@ -835,12 +835,12 @@ void R_Upload32( byte **data, int width, int height, int flags, int *upload_widt // automatic mipmaps generation if( !( flags & IT_NOMIPMAP ) && mip && driverMipmap ) - qglTexParameteri( target2, GL_GENERATE_MIPMAP_SGIS, GL_TRUE ); + pglTexParameteri( target2, GL_GENERATE_MIPMAP_SGIS, GL_TRUE ); if( subImage ) - qglTexSubImage2D( target2, 0, 0, 0, scaledWidth, scaledHeight, format, GL_UNSIGNED_BYTE, mip ); + pglTexSubImage2D( target2, 0, 0, 0, scaledWidth, scaledHeight, format, GL_UNSIGNED_BYTE, mip ); else - qglTexImage2D( target2, 0, comp, scaledWidth, scaledHeight, 0, format, GL_UNSIGNED_BYTE, mip ); + pglTexImage2D( target2, 0, comp, scaledWidth, scaledHeight, 0, format, GL_UNSIGNED_BYTE, mip ); // mipmaps generation if( !( flags & IT_NOMIPMAP ) && mip && !driverMipmap ) @@ -863,9 +863,9 @@ void R_Upload32( byte **data, int width, int height, int flags, int *upload_widt miplevel++; if( subImage ) - qglTexSubImage2D( target2, miplevel, 0, 0, w, h, format, GL_UNSIGNED_BYTE, mip ); + pglTexSubImage2D( target2, miplevel, 0, 0, w, h, format, GL_UNSIGNED_BYTE, mip ); else - qglTexImage2D( target2, miplevel, comp, w, h, 0, format, GL_UNSIGNED_BYTE, mip ); + pglTexImage2D( target2, miplevel, comp, w, h, 0, format, GL_UNSIGNED_BYTE, mip ); } } } @@ -907,45 +907,45 @@ void R_Upload32_3D_Fast( byte **data, int width, int height, int depth, int flag if( !( flags & IT_NOMIPMAP ) ) { - qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, gl_filter_min ); - qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, gl_filter_max ); + pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, gl_filter_min ); + pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, gl_filter_max ); if( glConfig.ext.texture_filter_anisotropic ) - qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAX_ANISOTROPY_EXT, glConfig.curTextureFilterAnisotropic ); + pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAX_ANISOTROPY_EXT, glConfig.curTextureFilterAnisotropic ); } else { - qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, gl_filter_max ); - qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, gl_filter_max ); + pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, gl_filter_max ); + pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, gl_filter_max ); if( glConfig.ext.texture_filter_anisotropic ) - qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 ); + pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 ); } // clamp if required if( !( flags & IT_CLAMP ) ) { - qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT ); - qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT ); - qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT ); + pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT ); + pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT ); + pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT ); } else if( glConfig.ext.texture_edge_clamp ) { - qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); - qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); - qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE ); + pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); + pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); + pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE ); } else { - qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP ); - qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP ); - qglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP ); + pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP ); + pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP ); + pglTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP ); } if( subImage ) - qglTexSubImage3D( GL_TEXTURE_3D, 0, 0, 0, 0, scaledWidth, scaledHeight, scaledDepth, GL_RGBA, GL_UNSIGNED_BYTE, data[0] ); + pglTexSubImage3D( GL_TEXTURE_3D, 0, 0, 0, 0, scaledWidth, scaledHeight, scaledDepth, GL_RGBA, GL_UNSIGNED_BYTE, data[0] ); else - qglTexImage3D( GL_TEXTURE_3D, 0, comp, scaledWidth, scaledHeight, scaledDepth, 0, GL_RGBA, GL_UNSIGNED_BYTE, data[0] ); + pglTexImage3D( GL_TEXTURE_3D, 0, comp, scaledWidth, scaledHeight, scaledDepth, 0, GL_RGBA, GL_UNSIGNED_BYTE, data[0] ); } /* @@ -976,7 +976,7 @@ static _inline image_t *R_InitPic( const char *name, byte **pic, int width, int image->hash_next = images_hash[image_cur_hash]; images_hash[image_cur_hash] = image; - qglDeleteTextures( 1, &image->texnum ); + pglDeleteTextures( 1, &image->texnum ); GL_Bind( 0, image ); if( depth == 1 ) @@ -1209,7 +1209,7 @@ bool VID_ScreenShot( const char *filename, bool levelshot ) r_shot->buffer = Mem_Alloc( r_temppool, glState.width * glState.height * 3 ); // get screen frame - qglReadPixels( 0, 0, glState.width, glState.height, GL_RGB, GL_UNSIGNED_BYTE, r_shot->buffer ); + pglReadPixels( 0, 0, glState.width, glState.height, GL_RGB, GL_UNSIGNED_BYTE, r_shot->buffer ); if( levelshot ) flags |= IMAGE_RESAMPLE; // else VID_ImageAdjustGamma( r_shot->buffer, r_shot->width, r_shot->height ); // adjust brightness @@ -1256,7 +1256,7 @@ bool VID_CubemapShot( const char *base, uint size, bool skyshot ) if( skyshot ) R_DrawCubemapView( r_lastRefdef.vieworg, r_skyBoxAngles[i], size ); else R_DrawCubemapView( r_lastRefdef.vieworg, r_cubeMapAngles[i], size ); - qglReadPixels( 0, glState.height - size, size, size, GL_RGB, GL_UNSIGNED_BYTE, temp ); + pglReadPixels( 0, glState.height - size, size, size, GL_RGB, GL_UNSIGNED_BYTE, temp ); Mem_Copy( buffer + (size * size * 3 * i), temp, size * size * 3 ); } diff --git a/render/r_light.c b/render/r_light.c index 8688e485..45bb4463 100644 --- a/render/r_light.c +++ b/render/r_light.c @@ -133,12 +133,12 @@ void R_AddDynamicLights( unsigned int dlightbits, int state ) if( glConfig.ext.texture3D ) { GL_EnableTexGen( GL_R, GL_OBJECT_LINEAR ); - qglDisable( GL_TEXTURE_2D ); - qglEnable( GL_TEXTURE_3D ); + pglDisable( GL_TEXTURE_2D ); + pglEnable( GL_TEXTURE_3D ); } else { - qglEnable( GL_TEXTURE_2D ); + pglEnable( GL_TEXTURE_2D ); } for( i = 0, light = r_dlights; i < r_numDlights; i++, light++ ) @@ -188,57 +188,57 @@ void R_AddDynamicLights( unsigned int dlightbits, int state ) GL_Bind( 0, r_dlighttexture ); GL_LoadTexMatrix( m ); - qglColor4f( light->color[0], light->color[1], light->color[2], 255 ); + pglColor4f( light->color[0], light->color[1], light->color[2], 255 ); xyzFallof[0][0] = inverseIntensity; xyzFallof[0][3] = -dlorigin[0] * inverseIntensity; - qglTexGenfv( GL_S, GL_OBJECT_PLANE, xyzFallof[0] ); + pglTexGenfv( GL_S, GL_OBJECT_PLANE, xyzFallof[0] ); xyzFallof[1][1] = inverseIntensity; xyzFallof[1][3] = -dlorigin[1] * inverseIntensity; - qglTexGenfv( GL_T, GL_OBJECT_PLANE, xyzFallof[1] ); + pglTexGenfv( GL_T, GL_OBJECT_PLANE, xyzFallof[1] ); xyzFallof[2][2] = inverseIntensity; xyzFallof[2][3] = -dlorigin[2] * inverseIntensity; if( glConfig.ext.texture3D ) { - qglTexGenfv( GL_R, GL_OBJECT_PLANE, xyzFallof[2] ); + pglTexGenfv( GL_R, GL_OBJECT_PLANE, xyzFallof[2] ); } else { GL_Bind( 1, r_dlighttexture ); GL_LoadTexMatrix( m ); - qglTexGenfv( GL_S, GL_OBJECT_PLANE, xyzFallof[2] ); - qglTexGenfv( GL_T, GL_OBJECT_PLANE, xyzFallof[3] ); + pglTexGenfv( GL_S, GL_OBJECT_PLANE, xyzFallof[2] ); + pglTexGenfv( GL_T, GL_OBJECT_PLANE, xyzFallof[3] ); } if( numTempElems ) { if( glConfig.ext.draw_range_elements ) - qglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, numTempElems, GL_UNSIGNED_INT, tempElemsArray ); + pglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, numTempElems, GL_UNSIGNED_INT, tempElemsArray ); else - qglDrawElements( GL_TRIANGLES, numTempElems, GL_UNSIGNED_INT, tempElemsArray ); + pglDrawElements( GL_TRIANGLES, numTempElems, GL_UNSIGNED_INT, tempElemsArray ); } else { if( glConfig.ext.draw_range_elements ) - qglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray ); + pglDrawRangeElementsEXT( GL_TRIANGLES, 0, r_backacc.numVerts, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray ); else - qglDrawElements( GL_TRIANGLES, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray ); + pglDrawElements( GL_TRIANGLES, r_backacc.numElems, GL_UNSIGNED_INT, elemsArray ); } } if( glConfig.ext.texture3D ) { GL_EnableTexGen( GL_R, 0 ); - qglDisable( GL_TEXTURE_3D ); - qglEnable( GL_TEXTURE_2D ); + pglDisable( GL_TEXTURE_3D ); + pglEnable( GL_TEXTURE_2D ); } else { - qglDisable( GL_TEXTURE_2D ); + pglDisable( GL_TEXTURE_2D ); GL_SelectTexture( 0 ); } } diff --git a/render/r_local.h b/render/r_local.h index 6cfec4f1..749745c1 100644 --- a/render/r_local.h +++ b/render/r_local.h @@ -299,6 +299,7 @@ extern cvar_t *r_ignorehwgamma; extern cvar_t *r_overbrightbits; extern cvar_t *r_mapoverbrightbits; extern cvar_t *r_lefthand; +extern cvar_t *r_physbdebug; extern cvar_t *r_flares; extern cvar_t *r_flaresize; diff --git a/render/r_main.c b/render/r_main.c index a7581258..df3c94d4 100644 --- a/render/r_main.c +++ b/render/r_main.c @@ -104,14 +104,14 @@ void GL_Cull( int cull ) if( !cull ) { - qglDisable( GL_CULL_FACE ); + pglDisable( GL_CULL_FACE ); glState.faceCull = 0; return; } if( !glState.faceCull ) - qglEnable( GL_CULL_FACE ); - qglCullFace( cull ); + pglEnable( GL_CULL_FACE ); + pglCullFace( cull ); glState.faceCull = cull; } @@ -200,20 +200,20 @@ void GL_SetState( int state ) if( state & GLSTATE_BLEND_MTEX ) { if( glState.currentEnvModes[glState.currentTMU] != GL_REPLACE ) - qglEnable( GL_BLEND ); + pglEnable( GL_BLEND ); else - qglDisable( GL_BLEND ); + pglDisable( GL_BLEND ); } else { - qglEnable( GL_BLEND ); + pglEnable( GL_BLEND ); } - qglBlendFunc( blendsrc, blenddst ); + pglBlendFunc( blendsrc, blenddst ); } else { - qglDisable( GL_BLEND ); + pglDisable( GL_BLEND ); } } @@ -222,51 +222,51 @@ void GL_SetState( int state ) if( state & GLSTATE_ALPHAFUNC ) { if( !( glState.flags & GLSTATE_ALPHAFUNC ) ) - qglEnable( GL_ALPHA_TEST ); + pglEnable( GL_ALPHA_TEST ); if( state & GLSTATE_AFUNC_GT0 ) - qglAlphaFunc( GL_GREATER, 0 ); + pglAlphaFunc( GL_GREATER, 0 ); else if( state & GLSTATE_AFUNC_LT128 ) - qglAlphaFunc( GL_LESS, 0.5f ); + pglAlphaFunc( GL_LESS, 0.5f ); else - qglAlphaFunc( GL_GEQUAL, 0.5f ); + pglAlphaFunc( GL_GEQUAL, 0.5f ); } else { - qglDisable( GL_ALPHA_TEST ); + pglDisable( GL_ALPHA_TEST ); } } if( diff & GLSTATE_DEPTHFUNC_EQ ) { if( state & GLSTATE_DEPTHFUNC_EQ ) - qglDepthFunc( GL_EQUAL ); + pglDepthFunc( GL_EQUAL ); else - qglDepthFunc( GL_LEQUAL ); + pglDepthFunc( GL_LEQUAL ); } if( diff & GLSTATE_DEPTHWRITE ) { if( state & GLSTATE_DEPTHWRITE ) - qglDepthMask( GL_TRUE ); + pglDepthMask( GL_TRUE ); else - qglDepthMask( GL_FALSE ); + pglDepthMask( GL_FALSE ); } if( diff & GLSTATE_NO_DEPTH_TEST ) { if( state & GLSTATE_NO_DEPTH_TEST ) - qglDisable( GL_DEPTH_TEST ); + pglDisable( GL_DEPTH_TEST ); else - qglEnable( GL_DEPTH_TEST ); + pglEnable( GL_DEPTH_TEST ); } if( diff & GLSTATE_OFFSET_FILL ) { if( state & GLSTATE_OFFSET_FILL ) - qglEnable( GL_POLYGON_OFFSET_FILL ); + pglEnable( GL_POLYGON_OFFSET_FILL ); else - qglDisable( GL_POLYGON_OFFSET_FILL ); + pglDisable( GL_POLYGON_OFFSET_FILL ); } glState.flags = state; @@ -279,7 +279,7 @@ GL_FrontFace */ void GL_FrontFace( int front ) { - qglFrontFace( front ? GL_CW : GL_CCW ); + pglFrontFace( front ? GL_CW : GL_CCW ); glState.frontFace = front; } @@ -324,7 +324,7 @@ void R_LoadIdentity( void ) { Matrix4_Identity( RI.objectMatrix ); Matrix4_Copy( RI.worldviewMatrix, RI.modelviewMatrix ); - qglLoadMatrixf( RI.modelviewMatrix ); + pglLoadMatrixf( RI.modelviewMatrix ); } /* @@ -374,7 +374,7 @@ void R_RotateForEntity( ref_entity_t *e ) RI.objectMatrix[15] = 1.0; Matrix4_MultiplyFast( RI.worldviewMatrix, RI.objectMatrix, RI.modelviewMatrix ); - qglLoadMatrixf( RI.modelviewMatrix ); + pglLoadMatrixf( RI.modelviewMatrix ); } /* @@ -397,7 +397,7 @@ void R_TranslateForEntity( ref_entity_t *e ) RI.objectMatrix[14] = e->origin[2]; Matrix4_MultiplyFast( RI.worldviewMatrix, RI.objectMatrix, RI.modelviewMatrix ); - qglLoadMatrixf( RI.modelviewMatrix ); + pglLoadMatrixf( RI.modelviewMatrix ); } /* @@ -631,7 +631,7 @@ static void R_PushFlareSurf( const meshbuffer_t *mb ) if( v[1] < RI.refdef.viewport[1] || v[1] > RI.refdef.viewport[1] + RI.refdef.viewport[3] ) return; - qglReadPixels( (int)( v[0] /* + 0.5f*/ ), (int)( v[1] /* + 0.5f*/ ), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth ); + pglReadPixels( (int)( v[0] /* + 0.5f*/ ), (int)( v[1] /* + 0.5f*/ ), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth ); if( depth + 1e-4 < v[2] ) return; // occluded @@ -848,18 +848,18 @@ void R_Set2DMode( bool enable ) return; // set 2D virtual screen size - qglScissor( 0, 0, glState.width, glState.height ); - qglViewport( 0, 0, glState.width, glState.height ); - qglMatrixMode( GL_PROJECTION ); - qglLoadIdentity(); - qglOrtho( 0, glState.width, glState.height, 0, -99999, 99999 ); - qglMatrixMode( GL_MODELVIEW ); - qglLoadIdentity(); + pglScissor( 0, 0, glState.width, glState.height ); + pglViewport( 0, 0, glState.width, glState.height ); + pglMatrixMode( GL_PROJECTION ); + pglLoadIdentity(); + pglOrtho( 0, glState.width, glState.height, 0, -99999, 99999 ); + pglMatrixMode( GL_MODELVIEW ); + pglLoadIdentity(); GL_Cull( 0 ); GL_SetState( GLSTATE_NO_DEPTH_TEST ); - qglColor4f( 1, 1, 1, 1 ); + pglColor4f( 1, 1, 1, 1 ); glState.in2DMode = true; RI.currententity = RI.previousentity = NULL; @@ -949,16 +949,16 @@ void R_DrawStretchRaw( int x, int y, int w, int h, int cols, int rows, byte *dat r_cintexture->width = cols; r_cintexture->height = rows; - qglBegin( GL_QUADS ); - qglTexCoord2f( 0, 0 ); - qglVertex2f( x, y ); - qglTexCoord2f( 1, 0 ); - qglVertex2f( x + w, y ); - qglTexCoord2f( 1, 1 ); - qglVertex2f( x + w, y + h ); - qglTexCoord2f( 0, 1 ); - qglVertex2f( x, y + h ); - qglEnd(); + pglBegin( GL_QUADS ); + pglTexCoord2f( 0, 0 ); + pglVertex2f( x, y ); + pglTexCoord2f( 1, 0 ); + pglVertex2f( x + w, y ); + pglTexCoord2f( 1, 1 ); + pglVertex2f( x + w, y + h ); + pglTexCoord2f( 0, 1 ); + pglVertex2f( x, y + h ); + pglEnd(); } /* @@ -973,29 +973,29 @@ static void R_PolyBlend( void ) if( RI.refdef.blend[3] < 0.01f ) return; - qglMatrixMode( GL_PROJECTION ); - qglLoadIdentity(); - qglOrtho( 0, 1, 1, 0, -99999, 99999 ); + pglMatrixMode( GL_PROJECTION ); + pglLoadIdentity(); + pglOrtho( 0, 1, 1, 0, -99999, 99999 ); - qglMatrixMode( GL_MODELVIEW ); - qglLoadIdentity(); + pglMatrixMode( GL_MODELVIEW ); + pglLoadIdentity(); GL_Cull( 0 ); GL_SetState( GLSTATE_NO_DEPTH_TEST|GLSTATE_SRCBLEND_SRC_ALPHA|GLSTATE_DSTBLEND_ONE_MINUS_SRC_ALPHA ); - qglDisable( GL_TEXTURE_2D ); + pglDisable( GL_TEXTURE_2D ); - qglColor4fv( RI.refdef.blend ); + pglColor4fv( RI.refdef.blend ); - qglBegin( GL_TRIANGLES ); - qglVertex2f( -5, -5 ); - qglVertex2f( 10, -5 ); - qglVertex2f( -5, 10 ); - qglEnd(); + pglBegin( GL_TRIANGLES ); + pglVertex2f( -5, -5 ); + pglVertex2f( 10, -5 ); + pglVertex2f( -5, 10 ); + pglEnd(); - qglEnable( GL_TEXTURE_2D ); + pglEnable( GL_TEXTURE_2D ); - qglColor4f( 1, 1, 1, 1 ); + pglColor4f( 1, 1, 1, 1 ); } /* @@ -1011,17 +1011,17 @@ static void R_ApplySoftwareGamma( void ) if( !r_ignorehwgamma->integer ) return; - qglMatrixMode( GL_PROJECTION ); - qglLoadIdentity(); - qglOrtho( 0, 1, 1, 0, -99999, 99999 ); + pglMatrixMode( GL_PROJECTION ); + pglLoadIdentity(); + pglOrtho( 0, 1, 1, 0, -99999, 99999 ); - qglMatrixMode( GL_MODELVIEW ); - qglLoadIdentity(); + pglMatrixMode( GL_MODELVIEW ); + pglLoadIdentity(); GL_Cull( 0 ); GL_SetState( GLSTATE_NO_DEPTH_TEST | GLSTATE_SRCBLEND_DST_COLOR | GLSTATE_DSTBLEND_ONE ); - qglDisable( GL_TEXTURE_2D ); + pglDisable( GL_TEXTURE_2D ); if( r_overbrightbits->integer > 0 ) div = 0.5 * (double)( 1 << r_overbrightbits->integer ); @@ -1030,26 +1030,26 @@ static void R_ApplySoftwareGamma( void ) f = div + r_gamma->value; f = bound( 0.1f, f, 5.0f ); - qglBegin( GL_TRIANGLES ); + pglBegin( GL_TRIANGLES ); while( f >= 1.01f ) { if( f >= 2 ) - qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); + pglColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); else - qglColor4f( f - 1.0f, f - 1.0f, f - 1.0f, 1.0f ); + pglColor4f( f - 1.0f, f - 1.0f, f - 1.0f, 1.0f ); - qglVertex2f( -5, -5 ); - qglVertex2f( 10, -5 ); - qglVertex2f( -5, 10 ); + pglVertex2f( -5, -5 ); + pglVertex2f( 10, -5 ); + pglVertex2f( -5, 10 ); f *= 0.5; } - qglEnd(); + pglEnd(); - qglEnable( GL_TEXTURE_2D ); + pglEnable( GL_TEXTURE_2D ); - qglColor4f( 1, 1, 1, 1 ); + pglColor4f( 1, 1, 1, 1 ); } //============================================================================= @@ -1346,20 +1346,20 @@ static void R_Clear( int bitMask ) bits &= bitMask; if( bits & GL_STENCIL_BUFFER_BIT ) - qglClearStencil( 128 ); + pglClearStencil( 128 ); if( bits & GL_COLOR_BUFFER_BIT ) { byte *color = r_worldmodel && !( RI.refdef.rdflags & RDF_NOWORLDMODEL ) && r_worldbrushmodel->globalfog ? r_worldbrushmodel->globalfog->shader->fog_color : mapConfig.environmentColor; - qglClearColor( (float)color[0]*( 1.0/255.0 ), (float)color[1]*( 1.0/255.0 ), (float)color[2]*( 1.0/255.0 ), 1 ); + pglClearColor( (float)color[0]*( 1.0/255.0 ), (float)color[1]*( 1.0/255.0 ), (float)color[2]*( 1.0/255.0 ), 1 ); } - qglClear( bits ); + pglClear( bits ); gldepthmin = 0; gldepthmax = 1; - qglDepthRange( gldepthmin, gldepthmax ); + pglDepthRange( gldepthmin, gldepthmax ); } /* @@ -1369,14 +1369,14 @@ R_SetupGL */ static void R_SetupGL( void ) { - qglScissor( RI.scissor[0], RI.scissor[1], RI.scissor[2], RI.scissor[3] ); - qglViewport( RI.viewport[0], RI.viewport[1], RI.viewport[2], RI.viewport[3] ); + pglScissor( RI.scissor[0], RI.scissor[1], RI.scissor[2], RI.scissor[3] ); + pglViewport( RI.viewport[0], RI.viewport[1], RI.viewport[2], RI.viewport[3] ); - qglMatrixMode( GL_PROJECTION ); - qglLoadMatrixf( RI.projectionMatrix ); + pglMatrixMode( GL_PROJECTION ); + pglLoadMatrixf( RI.projectionMatrix ); - qglMatrixMode( GL_MODELVIEW ); - qglLoadMatrixf( RI.worldviewMatrix ); + pglMatrixMode( GL_MODELVIEW ); + pglLoadMatrixf( RI.worldviewMatrix ); if( RI.params & RP_CLIPPLANE ) { @@ -1388,8 +1388,8 @@ static void R_SetupGL( void ) clip[2] = p->normal[2]; clip[3] = -p->dist; - qglClipPlane( GL_CLIP_PLANE0, clip ); - qglEnable( GL_CLIP_PLANE0 ); + pglClipPlane( GL_CLIP_PLANE0, clip ); + pglEnable( GL_CLIP_PLANE0 ); } if( RI.params & RP_FLIPFRONTFACE ) @@ -1397,11 +1397,11 @@ static void R_SetupGL( void ) if( RI.params & RP_SHADOWMAPVIEW ) { - qglShadeModel( GL_FLAT ); - qglColorMask( 0, 0, 0, 0 ); - qglPolygonOffset( 1, 4 ); + pglShadeModel( GL_FLAT ); + pglColorMask( 0, 0, 0, 0 ); + pglPolygonOffset( 1, 4 ); if( prevRI.params & RP_CLIPPLANE ) - qglDisable( GL_CLIP_PLANE0 ); + pglDisable( GL_CLIP_PLANE0 ); } GL_Cull( GL_FRONT ); @@ -1417,18 +1417,18 @@ static void R_EndGL( void ) { if( RI.params & RP_SHADOWMAPVIEW ) { - qglPolygonOffset( -1, -2 ); - qglColorMask( 1, 1, 1, 1 ); - qglShadeModel( GL_SMOOTH ); + pglPolygonOffset( -1, -2 ); + pglColorMask( 1, 1, 1, 1 ); + pglShadeModel( GL_SMOOTH ); if( prevRI.params & RP_CLIPPLANE ) - qglEnable( GL_CLIP_PLANE0 ); + pglEnable( GL_CLIP_PLANE0 ); } if( RI.params & RP_FLIPFRONTFACE ) GL_FrontFace( !glState.frontFace ); if( RI.params & RP_CLIPPLANE ) - qglDisable( GL_CLIP_PLANE0 ); + pglDisable( GL_CLIP_PLANE0 ); } @@ -1548,27 +1548,27 @@ R_DrawNullModel */ static void R_DrawNullModel( void ) { - qglBegin( GL_LINES ); + pglBegin( GL_LINES ); - qglColor4f( 1, 0, 0, 0.5 ); - qglVertex3fv( RI.currententity->origin ); - qglVertex3f( RI.currententity->origin[0] + RI.currententity->axis[0][0] * 15, + pglColor4f( 1, 0, 0, 0.5 ); + pglVertex3fv( RI.currententity->origin ); + pglVertex3f( RI.currententity->origin[0] + RI.currententity->axis[0][0] * 15, RI.currententity->origin[1] + RI.currententity->axis[0][1] * 15, RI.currententity->origin[2] + RI.currententity->axis[0][2] * 15 ); - qglColor4f( 0, 1, 0, 0.5 ); - qglVertex3fv( RI.currententity->origin ); - qglVertex3f( RI.currententity->origin[0] - RI.currententity->axis[1][0] * 15, + pglColor4f( 0, 1, 0, 0.5 ); + pglVertex3fv( RI.currententity->origin ); + pglVertex3f( RI.currententity->origin[0] - RI.currententity->axis[1][0] * 15, RI.currententity->origin[1] - RI.currententity->axis[1][1] * 15, RI.currententity->origin[2] - RI.currententity->axis[1][2] * 15 ); - qglColor4f( 0, 0, 1, 0.5 ); - qglVertex3fv( RI.currententity->origin ); - qglVertex3f( RI.currententity->origin[0] + RI.currententity->axis[2][0] * 15, + pglColor4f( 0, 0, 1, 0.5 ); + pglVertex3fv( RI.currententity->origin ); + pglVertex3f( RI.currententity->origin[0] + RI.currententity->axis[2][0] * 15, RI.currententity->origin[1] + RI.currententity->axis[2][1] * 15, RI.currententity->origin[2] + RI.currententity->axis[2][2] * 15 ); - qglEnd(); + pglEnd(); } /* @@ -1661,7 +1661,7 @@ static void R_DrawNullEntities( void ) if( !r_numnullentities ) return; - qglDisable( GL_TEXTURE_2D ); + pglDisable( GL_TEXTURE_2D ); GL_SetState( GLSTATE_SRCBLEND_SRC_ALPHA|GLSTATE_DSTBLEND_ONE_MINUS_SRC_ALPHA ); // draw non-transparent first @@ -1683,7 +1683,7 @@ static void R_DrawNullEntities( void ) R_DrawNullModel(); } - qglEnable( GL_TEXTURE_2D ); + pglEnable( GL_TEXTURE_2D ); } /* @@ -1862,6 +1862,8 @@ void R_RenderView( const ref_params_t *fd ) R_RenderDebugSurface (); + R_DrawPhysDebug (); + R_DrawNullEntities(); R_EndGL(); @@ -1882,8 +1884,8 @@ static void R_UpdateSwapInterval( void ) if( !glState.stereoEnabled ) { - if( qglSwapInterval ) - qglSwapInterval( r_swapinterval->integer ); + if( pglSwapInterval ) + pglSwapInterval( r_swapinterval->integer ); } } } @@ -1931,7 +1933,7 @@ void R_BeginFrame( void ) // apply software gamma // R_ApplySoftwareGamma (); - qglFinish(); + pglFinish(); GLimp_EndFrame(); } @@ -1967,8 +1969,8 @@ void R_BeginFrame( void ) rgba_t color; Vector4Copy( mapConfig.environmentColor, color ); - qglClearColor( color[0]*( 1.0/255.0 ), color[1]*( 1.0/255.0 ), color[2]*( 1.0/255.0 ), 1 ); - qglClear( GL_COLOR_BUFFER_BIT ); + pglClearColor( color[0]*( 1.0/255.0 ), color[1]*( 1.0/255.0 ), color[2]*( 1.0/255.0 ), 1 ); + pglClear( GL_COLOR_BUFFER_BIT ); } // update gamma @@ -1992,9 +1994,9 @@ void R_BeginFrame( void ) if( glState.cameraSeparation == 0 || !glState.stereoEnabled ) { if( com.stricmp( gl_drawbuffer->string, "GL_FRONT" ) == 0 ) - qglDrawBuffer( GL_FRONT ); + pglDrawBuffer( GL_FRONT ); else - qglDrawBuffer( GL_BACK ); + pglDrawBuffer( GL_BACK ); } } @@ -2117,7 +2119,7 @@ void R_RenderScene( const ref_params_t *fd ) VectorCopy( fd->vieworg, RI.lodOrigin ); if( gl_finish->integer && !gl_delayfinish->integer && !( fd->rdflags & RDF_NOWORLDMODEL ) ) - qglFinish(); + pglFinish(); R_ClearShadowmaps(); @@ -2155,7 +2157,7 @@ void R_EndFrame( void ) if( gl_finish->integer && gl_delayfinish->integer ) { - qglFlush(); + pglFlush(); return; } @@ -2306,61 +2308,25 @@ bool R_AddLightStyle( int stylenum, vec3_t color ) return true; } -bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac ) +bool R_AddGenericEntity( edict_t *pRefEntity, ref_entity_t *refent, int ed_type, float lerpfrac ) { - ref_entity_t *refent; - int i; - - if( !pRefEntity || !pRefEntity->v.modelindex ) - return false; // if set to invisible, skip - if( r_numEntities >= MAX_ENTITIES ) return false; - - refent = &r_entities[r_numEntities]; - - if( pRefEntity->v.effects & EF_NODRAW ) - return true; // done - - // filter ents - switch( ed_type ) - { - case ED_MOVER: - case ED_CLIENT: - case ED_NORMAL: - case ED_MONSTER: - case ED_BSPBRUSH: - case ED_RIGIDBODY: - case ED_VIEWMODEL: break; - default: return false; - } - - // copy state to render - refent->index = pRefEntity->serialnumber; - refent->ent_type = ed_type; - refent->backlerp = 1.0f - lerpfrac; - refent->rendermode = pRefEntity->v.rendermode; - refent->body = pRefEntity->v.body; - refent->scale = pRefEntity->v.scale; - refent->colormap = pRefEntity->v.colormap; - refent->effects = pRefEntity->v.effects; - VectorCopy( pRefEntity->v.rendercolor, refent->rendercolor ); - refent->renderamt = pRefEntity->v.renderamt; - refent->model = cl_models[pRefEntity->v.modelindex]; - refent->movetype = pRefEntity->v.movetype; - refent->framerate = pRefEntity->v.framerate; - refent->prev.sequencetime = refent->animtime - refent->prev.animtime; + int i; // check model if( !refent->model ) return false; + switch( refent->model->type ) { case mod_brush: break; case mod_studio: if( !refent->model->extradata ) return false; + refent->rtype = RT_MODEL; break; case mod_sprite: if( !refent->model->extradata ) return false; + refent->rtype = RT_SPRITE; break; case mod_bad: // let the render drawing null model break; @@ -2369,14 +2335,7 @@ bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac ) // setup latchedvars VectorCopy( pRefEntity->v.oldorigin, refent->prev.origin ); VectorCopy( pRefEntity->v.oldangles, refent->prev.angles ); - - // interpolate origin - for( i = 0; i < 3; i++ ) - refent->origin[i] = LerpPoint( pRefEntity->v.oldorigin[i], pRefEntity->v.origin[i], lerpfrac ); - refent->skin = pRefEntity->v.skin; - refent->renderfx = pRefEntity->v.renderfx; - // do animate if( refent->effects & EF_ANIMATE ) { @@ -2421,12 +2380,14 @@ bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac ) refent->sequence = pRefEntity->v.sequence; } + refent->prev.sequencetime = refent->animtime - refent->prev.animtime; refent->weaponmodel = cl_models[pRefEntity->v.weaponmodel]; + if( refent->ent_type == ED_MOVER || refent->ent_type == ED_BSPBRUSH ) { - // store conveyor movedir in pev->velocity - VectorNormalize2( pRefEntity->v.velocity, refent->movedir ); + VectorNormalize2( pRefEntity->v.movedir, refent->movedir ); } + else VectorClear( refent->movedir ); // calculate angles if( refent->effects & EF_ROTATE ) @@ -2441,7 +2402,11 @@ bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac ) refent->angles[i] = LerpAngle( pRefEntity->v.oldangles[i], pRefEntity->v.angles[i], lerpfrac ); } + // interpolate origin + for( i = 0; i < 3; i++ ) + refent->origin[i] = LerpPoint( pRefEntity->v.oldorigin[i], pRefEntity->v.origin[i], lerpfrac ); AngleVectorsFLU( refent->angles, refent->axis[0], refent->axis[1], refent->axis[2] ); + VectorClear( refent->origin2 ); if(( refent->ent_type == ED_VIEWMODEL ) && ( r_lefthand->integer == 1 )) VectorNegate( refent->axis[1], refent->axis[1] ); @@ -2479,11 +2444,85 @@ bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac ) // and ignore all other unset ents } } + return true; +} + +bool R_AddPortalEntity( edict_t *pRefEntity, ref_entity_t *refent, int ed_type, float lerpfrac ) +{ + refent->rtype = RT_PORTALSURFACE; + + VectorClear( refent->angles ); + Matrix_Identity( refent->axis ); + VectorCopy( pRefEntity->v.movedir, refent->movedir ); + VectorCopy( pRefEntity->v.origin, refent->origin ); + VectorCopy( pRefEntity->v.oldorigin, refent->origin2 ); + + // calculate angles + if( refent->effects & EF_ROTATE ) + Matrix_Rotate( refent->axis, 5 * sin(( 0.25f + RI.refdef.time * 50 * 0.01 ) * M_PI2 ), 1, 0, 0 ); + return true; +} + +bool R_AddEntityToScene( edict_t *pRefEntity, int ed_type, float lerpfrac ) +{ + ref_entity_t *refent; + bool result = false; + + if( !pRefEntity || !pRefEntity->v.modelindex ) + return false; // if set to invisible, skip + if( r_numEntities >= MAX_ENTITIES ) return false; + + refent = &r_entities[r_numEntities]; + + if( pRefEntity->v.effects & EF_NODRAW ) + return true; // done + + // filter ents + switch( ed_type ) + { + case ED_MOVER: + case ED_PORTAL: + case ED_CLIENT: + case ED_NORMAL: + case ED_MONSTER: + case ED_BSPBRUSH: + case ED_RIGIDBODY: + case ED_VIEWMODEL: break; + default: return false; + } + + // copy state to render + refent->index = pRefEntity->serialnumber; + refent->ent_type = ed_type; + refent->backlerp = 1.0f - lerpfrac; + refent->rendermode = pRefEntity->v.rendermode; + refent->body = pRefEntity->v.body; + refent->skin = pRefEntity->v.skin; + refent->scale = pRefEntity->v.scale; + refent->colormap = pRefEntity->v.colormap; + refent->effects = pRefEntity->v.effects; + refent->renderfx = pRefEntity->v.renderfx; + VectorCopy( pRefEntity->v.rendercolor, refent->rendercolor ); + refent->renderamt = pRefEntity->v.renderamt; + refent->model = cl_models[pRefEntity->v.modelindex]; + refent->movetype = pRefEntity->v.movetype; + refent->framerate = pRefEntity->v.framerate; + + // setup rtype + switch( ed_type ) + { + case ED_PORTAL: + result = R_AddPortalEntity( pRefEntity, refent, ed_type, lerpfrac ); + break; + default: + result = R_AddGenericEntity( pRefEntity, refent, ed_type, lerpfrac ); + break; + } // add entity r_numEntities++; - return true; + return result; } bool R_AddDynamicLight( vec3_t org, vec3_t color, float intensity ) diff --git a/render/r_mesh.c b/render/r_mesh.c index 6d822375..4a19003a 100644 --- a/render/r_mesh.c +++ b/render/r_mesh.c @@ -967,11 +967,7 @@ setup_and_render: NormalVectorToAxis( A[0], A ); // build portal_dest-to-world rotation matrix -#if 0 - ByteToDir( ent->frame, portal_plane->normal ); -#else - AngleVectors( vec3_origin, portal_plane->normal, NULL, NULL ); -#endif + VectorCopy( ent->movedir, portal_plane->normal ); NormalVectorToAxis( portal_plane->normal, B ); Matrix_Transpose( B, C ); @@ -1049,11 +1045,11 @@ setup_and_render: { GL_Cull( 0 ); GL_SetState( GLSTATE_NO_DEPTH_TEST ); - qglColor4f( 1, 1, 1, 1 ); + pglColor4f( 1, 1, 1, 1 ); // grab the results from framebuffer GL_Bind( 0, *captureTexture ); - qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, RI.refdef.viewport[0], RI.refdef.viewport[1], ( *captureTexture )->upload_width, ( *captureTexture )->upload_height ); + pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, RI.refdef.viewport[0], RI.refdef.viewport[1], ( *captureTexture )->upload_width, ( *captureTexture )->upload_height ); RI.params |= ( refraction ? RP_PORTALCAPTURED2 : RP_PORTALCAPTURED ); } diff --git a/render/r_program.c b/render/r_program.c index 955972a0..5f9938ef 100644 --- a/render/r_program.c +++ b/render/r_program.c @@ -143,20 +143,20 @@ static void R_DeleteGLSLProgram( glsl_program_t *program ) { if( program->vertexShader ) { - qglDetachObjectARB( program->object, program->vertexShader ); - qglDeleteObjectARB( program->vertexShader ); + pglDetachObjectARB( program->object, program->vertexShader ); + pglDeleteObjectARB( program->vertexShader ); program->vertexShader = 0; } if( program->fragmentShader ) { - qglDetachObjectARB( program->object, program->fragmentShader ); - qglDeleteObjectARB( program->fragmentShader ); + pglDetachObjectARB( program->object, program->fragmentShader ); + pglDeleteObjectARB( program->fragmentShader ); program->fragmentShader = 0; } if( program->object ) - qglDeleteObjectARB( program->object ); + pglDeleteObjectARB( program->object ); if( program->name ) Mem_Free( program->name ); @@ -173,30 +173,30 @@ static int R_CompileGLSLShader( int program, const char *programName, const char { int shader, compiled; - shader = qglCreateShaderObjectARB( (GLenum)shaderType ); + shader = pglCreateShaderObjectARB( (GLenum)shaderType ); if( !shader ) return 0; // if lengths is NULL, then each string is assumed to be null-terminated - qglShaderSourceARB( shader, numStrings, strings, NULL ); - qglCompileShaderARB( shader ); - qglGetObjectParameterivARB( shader, GL_OBJECT_COMPILE_STATUS_ARB, &compiled ); + pglShaderSourceARB( shader, numStrings, strings, NULL ); + pglCompileShaderARB( shader ); + pglGetObjectParameterivARB( shader, GL_OBJECT_COMPILE_STATUS_ARB, &compiled ); if( !compiled ) { char log[4096]; - qglGetInfoLogARB( shader, sizeof( log ) - 1, NULL, log ); + pglGetInfoLogARB( shader, sizeof( log ) - 1, NULL, log ); log[sizeof( log ) - 1] = 0; if( log[0] ) MsgDev( D_ERROR, "Failed to compile %s shader for program %s:\n%s\n", shaderName, programName, log ); - qglDeleteObjectARB( shader ); + pglDeleteObjectARB( shader ); return 0; } - qglAttachObjectARB( program, shader ); + pglAttachObjectARB( program, shader ); return shader; } @@ -926,7 +926,7 @@ int R_RegisterGLSLProgram( const char *name, const char *string, unsigned int fe } program = r_glslprograms + i; - program->object = qglCreateProgramObjectARB(); + program->object = pglCreateProgramObjectARB(); if( !program->object ) { error = 1; @@ -969,13 +969,13 @@ int R_RegisterGLSLProgram( const char *name, const char *string, unsigned int fe } // link - qglLinkProgramARB( program->object ); - qglGetObjectParameterivARB( program->object, GL_OBJECT_LINK_STATUS_ARB, &linked ); + pglLinkProgramARB( program->object ); + pglGetObjectParameterivARB( program->object, GL_OBJECT_LINK_STATUS_ARB, &linked ); if( !linked ) { char log[8192]; - qglGetInfoLogARB( program->object, sizeof( log ), NULL, log ); + pglGetInfoLogARB( program->object, sizeof( log ), NULL, log ); log[sizeof( log ) - 1] = 0; if( log[0] ) @@ -995,9 +995,9 @@ done: if( program->object ) { - qglUseProgramObjectARB( program->object ); + pglUseProgramObjectARB( program->object ); R_GetProgramUniformLocations( program ); - qglUseProgramObjectARB( 0 ); + pglUseProgramObjectARB( 0 ); } return ( program - r_glslprograms ) + 1; @@ -1069,43 +1069,43 @@ void R_UpdateProgramUniforms( int elem, vec3_t eyeOrigin, glsl_program_t *program = r_glslprograms + elem - 1; if( program->locEyeOrigin >= 0 && eyeOrigin ) - qglUniform3fARB( program->locEyeOrigin, eyeOrigin[0], eyeOrigin[1], eyeOrigin[2] ); + pglUniform3fARB( program->locEyeOrigin, eyeOrigin[0], eyeOrigin[1], eyeOrigin[2] ); if( program->locLightOrigin >= 0 && lightOrigin ) - qglUniform3fARB( program->locLightOrigin, lightOrigin[0], lightOrigin[1], lightOrigin[2] ); + pglUniform3fARB( program->locLightOrigin, lightOrigin[0], lightOrigin[1], lightOrigin[2] ); if( program->locLightDir >= 0 && lightDir ) - qglUniform3fARB( program->locLightDir, lightDir[0], lightDir[1], lightDir[2] ); + pglUniform3fARB( program->locLightDir, lightDir[0], lightDir[1], lightDir[2] ); if( program->locLightAmbient >= 0 && ambient ) - qglUniform3fARB( program->locLightAmbient, ambient[0], ambient[1], ambient[2] ); + pglUniform3fARB( program->locLightAmbient, ambient[0], ambient[1], ambient[2] ); if( program->locLightDiffuse >= 0 && diffuse ) - qglUniform3fARB( program->locLightDiffuse, diffuse[0], diffuse[1], diffuse[2] ); + pglUniform3fARB( program->locLightDiffuse, diffuse[0], diffuse[1], diffuse[2] ); if( program->locGlossIntensity >= 0 ) - qglUniform1fARB( program->locGlossIntensity, r_lighting_glossintensity->value ); + pglUniform1fARB( program->locGlossIntensity, r_lighting_glossintensity->value ); if( program->locGlossExponent >= 0 ) - qglUniform1fARB( program->locGlossExponent, r_lighting_glossexponent->value ); + pglUniform1fARB( program->locGlossExponent, r_lighting_glossexponent->value ); if( program->locOffsetMappingScale >= 0 ) - qglUniform1fARB( program->locOffsetMappingScale, offsetmappingScale ); + pglUniform1fARB( program->locOffsetMappingScale, offsetmappingScale ); #ifdef HARDWARE_OUTLINES if( program->locOutlineHeight >= 0 ) - qglUniform1fARB( program->locOutlineHeight, projDistance ); + pglUniform1fARB( program->locOutlineHeight, projDistance ); if( program->locOutlineCutOff >= 0 ) - qglUniform1fARB( program->locOutlineCutOff, max( 0, r_outlines_cutoff->value ) ); + pglUniform1fARB( program->locOutlineCutOff, max( 0, r_outlines_cutoff->value ) ); #endif if( program->locFrontPlane >= 0 ) - qglUniform1fARB( program->locFrontPlane, frontPlane ? 1 : -1 ); + pglUniform1fARB( program->locFrontPlane, frontPlane ? 1 : -1 ); if( program->locTextureWidth >= 0 ) - qglUniform1fARB( program->locTextureWidth, TexWidth ); + pglUniform1fARB( program->locTextureWidth, TexWidth ); if( program->locTextureHeight >= 0 ) - qglUniform1fARB( program->locTextureHeight, TexHeight ); + pglUniform1fARB( program->locTextureHeight, TexHeight ); if( program->locProjDistance >= 0 ) - qglUniform1fARB( program->locProjDistance, projDistance ); + pglUniform1fARB( program->locProjDistance, projDistance ); if( superLightStyle ) { @@ -1116,15 +1116,15 @@ void R_UpdateProgramUniforms( int elem, vec3_t eyeOrigin, vec_t *rgb = r_lightStyles[superLightStyle->lightmapStyles[i]].rgb; if( program->locDeluxemapOffset[i] >= 0 ) - qglUniform1fARB( program->locDeluxemapOffset[i], superLightStyle->stOffset[i][0] ); + pglUniform1fARB( program->locDeluxemapOffset[i], superLightStyle->stOffset[i][0] ); if( program->loclsColor[i] >= 0 ) - qglUniform3fARB( program->loclsColor[i], rgb[0], rgb[1], rgb[2] ); + pglUniform3fARB( program->loclsColor[i], rgb[0], rgb[1], rgb[2] ); } for( ; i < LM_STYLES; i++ ) { if( program->loclsColor[i] >= 0 ) - qglUniform3fARB( program->loclsColor[i], 0, 0, 0 ); + pglUniform3fARB( program->loclsColor[i], 0, 0, 0 ); } } } @@ -1148,76 +1148,76 @@ static void R_GetProgramUniformLocations( glsl_program_t *program ) locShadowmapTexture; char uniformName[128]; - program->locEyeOrigin = qglGetUniformLocationARB( program->object, "EyeOrigin" ); - program->locLightDir = qglGetUniformLocationARB( program->object, "LightDir" ); - program->locLightOrigin = qglGetUniformLocationARB( program->object, "LightOrigin" ); - program->locLightAmbient = qglGetUniformLocationARB( program->object, "LightAmbient" ); - program->locLightDiffuse = qglGetUniformLocationARB( program->object, "LightDiffuse" ); + program->locEyeOrigin = pglGetUniformLocationARB( program->object, "EyeOrigin" ); + program->locLightDir = pglGetUniformLocationARB( program->object, "LightDir" ); + program->locLightOrigin = pglGetUniformLocationARB( program->object, "LightOrigin" ); + program->locLightAmbient = pglGetUniformLocationARB( program->object, "LightAmbient" ); + program->locLightDiffuse = pglGetUniformLocationARB( program->object, "LightDiffuse" ); - locBaseTexture = qglGetUniformLocationARB( program->object, "BaseTexture" ); - locNormalmapTexture = qglGetUniformLocationARB( program->object, "NormalmapTexture" ); - locGlossTexture = qglGetUniformLocationARB( program->object, "GlossTexture" ); - locDecalTexture = qglGetUniformLocationARB( program->object, "DecalTexture" ); + locBaseTexture = pglGetUniformLocationARB( program->object, "BaseTexture" ); + locNormalmapTexture = pglGetUniformLocationARB( program->object, "NormalmapTexture" ); + locGlossTexture = pglGetUniformLocationARB( program->object, "GlossTexture" ); + locDecalTexture = pglGetUniformLocationARB( program->object, "DecalTexture" ); - locDuDvMapTexture = qglGetUniformLocationARB( program->object, "DuDvMapTexture" ); - locReflectionTexture = qglGetUniformLocationARB( program->object, "ReflectionTexture" ); - locRefractionTexture = qglGetUniformLocationARB( program->object, "RefractionTexture" ); + locDuDvMapTexture = pglGetUniformLocationARB( program->object, "DuDvMapTexture" ); + locReflectionTexture = pglGetUniformLocationARB( program->object, "ReflectionTexture" ); + locRefractionTexture = pglGetUniformLocationARB( program->object, "RefractionTexture" ); - locShadowmapTexture = qglGetUniformLocationARB( program->object, "ShadowmapTexture" ); + locShadowmapTexture = pglGetUniformLocationARB( program->object, "ShadowmapTexture" ); for( i = 0; i < LM_STYLES; i++ ) { com.snprintf( uniformName, sizeof( uniformName ), "LightmapTexture%i", i ); - locLightmapTexture[i] = qglGetUniformLocationARB( program->object, uniformName ); + locLightmapTexture[i] = pglGetUniformLocationARB( program->object, uniformName ); com.snprintf( uniformName, sizeof( uniformName ), "DeluxemapOffset%i", i ); - program->locDeluxemapOffset[i] = qglGetUniformLocationARB( program->object, uniformName ); + program->locDeluxemapOffset[i] = pglGetUniformLocationARB( program->object, uniformName ); com.snprintf( uniformName, sizeof( uniformName ), "lsColor%i", i ); - program->loclsColor[i] = qglGetUniformLocationARB( program->object, uniformName ); + program->loclsColor[i] = pglGetUniformLocationARB( program->object, uniformName ); } - program->locGlossIntensity = qglGetUniformLocationARB( program->object, "GlossIntensity" ); - program->locGlossExponent = qglGetUniformLocationARB( program->object, "GlossExponent" ); + program->locGlossIntensity = pglGetUniformLocationARB( program->object, "GlossIntensity" ); + program->locGlossExponent = pglGetUniformLocationARB( program->object, "GlossExponent" ); - program->locOffsetMappingScale = qglGetUniformLocationARB( program->object, "OffsetMappingScale" ); + program->locOffsetMappingScale = pglGetUniformLocationARB( program->object, "OffsetMappingScale" ); #ifdef HARDWARE_OUTLINES - program->locOutlineHeight = qglGetUniformLocationARB( program->object, "OutlineHeight" ); - program->locOutlineCutOff = qglGetUniformLocationARB( program->object, "OutlineCutOff" ); + program->locOutlineHeight = pglGetUniformLocationARB( program->object, "OutlineHeight" ); + program->locOutlineCutOff = pglGetUniformLocationARB( program->object, "OutlineCutOff" ); #endif - program->locFrontPlane = qglGetUniformLocationARB( program->object, "FrontPlane" ); + program->locFrontPlane = pglGetUniformLocationARB( program->object, "FrontPlane" ); - program->locTextureWidth = qglGetUniformLocationARB( program->object, "TextureWidth" ); - program->locTextureHeight = qglGetUniformLocationARB( program->object, "TextureHeight" ); + program->locTextureWidth = pglGetUniformLocationARB( program->object, "TextureWidth" ); + program->locTextureHeight = pglGetUniformLocationARB( program->object, "TextureHeight" ); - program->locProjDistance = qglGetUniformLocationARB( program->object, "ProjDistance" ); + program->locProjDistance = pglGetUniformLocationARB( program->object, "ProjDistance" ); if( locBaseTexture >= 0 ) - qglUniform1iARB( locBaseTexture, 0 ); + pglUniform1iARB( locBaseTexture, 0 ); if( locDuDvMapTexture >= 0 ) - qglUniform1iARB( locDuDvMapTexture, 0 ); + pglUniform1iARB( locDuDvMapTexture, 0 ); if( locNormalmapTexture >= 0 ) - qglUniform1iARB( locNormalmapTexture, 1 ); + pglUniform1iARB( locNormalmapTexture, 1 ); if( locGlossTexture >= 0 ) - qglUniform1iARB( locGlossTexture, 2 ); + pglUniform1iARB( locGlossTexture, 2 ); if( locDecalTexture >= 0 ) - qglUniform1iARB( locDecalTexture, 3 ); + pglUniform1iARB( locDecalTexture, 3 ); if( locReflectionTexture >= 0 ) - qglUniform1iARB( locReflectionTexture, 2 ); + pglUniform1iARB( locReflectionTexture, 2 ); if( locRefractionTexture >= 0 ) - qglUniform1iARB( locRefractionTexture, 3 ); + pglUniform1iARB( locRefractionTexture, 3 ); if( locShadowmapTexture >= 0 ) - qglUniform1iARB( locShadowmapTexture, 0 ); + pglUniform1iARB( locShadowmapTexture, 0 ); for( i = 0; i < LM_STYLES; i++ ) { if( locLightmapTexture[i] >= 0 ) - qglUniform1iARB( locLightmapTexture[i], i+4 ); + pglUniform1iARB( locLightmapTexture[i], i+4 ); } } diff --git a/render/r_register.c b/render/r_register.c index 4adaa51b..22709e70 100644 --- a/render/r_register.c +++ b/render/r_register.c @@ -99,6 +99,7 @@ cvar_t *r_3dlabs_broken; cvar_t *r_lodbias; cvar_t *r_lodscale; cvar_t *r_lefthand; +cvar_t *r_physbdebug; cvar_t *r_environment_color; cvar_t *r_stencilbits; @@ -156,7 +157,7 @@ typedef struct static void R_FinalizeGLExtensions( void ); #define GL_EXTENSION_FUNC_EXT(name,func) { name, (void ** const)func } -#define GL_EXTENSION_FUNC(name) GL_EXTENSION_FUNC_EXT("gl"#name,&(qgl##name)) +#define GL_EXTENSION_FUNC(name) GL_EXTENSION_FUNC_EXT("gl"#name,&(pgl##name)) /* GL_ARB_multitexture */ static const gl_extension_func_t gl_ext_multitexture_ARB_funcs[] = @@ -196,7 +197,7 @@ static const gl_extension_func_t gl_ext_texture3D_EXT_funcs[] = static const gl_extension_func_t gl_ext_draw_range_elements_EXT_funcs[] = { GL_EXTENSION_FUNC(DrawRangeElementsEXT) - ,GL_EXTENSION_FUNC_EXT("glDrawRangeElements",&qglDrawRangeElementsEXT) + ,GL_EXTENSION_FUNC_EXT("glDrawRangeElements",&pglDrawRangeElementsEXT) ,GL_EXTENSION_FUNC_EXT(NULL,NULL) }; @@ -272,7 +273,7 @@ static const gl_extension_func_t gl_ext_occlusion_query_ARB_funcs[] = /* WGL_EXT_swap_interval */ static const gl_extension_func_t wgl_ext_swap_interval_EXT_funcs[] = { - GL_EXTENSION_FUNC_EXT("wglSwapIntervalEXT",&qglSwapInterval) + GL_EXTENSION_FUNC_EXT("wglSwapIntervalEXT",&pglSwapInterval) ,GL_EXTENSION_FUNC_EXT(NULL,NULL) }; @@ -283,7 +284,7 @@ static const gl_extension_func_t wgl_ext_swap_interval_EXT_funcs[] = /* GLX_SGI_occlusion_query */ static const gl_extension_func_t glx_ext_swap_control_SGI_funcs[] = { - GL_EXTENSION_FUNC_EXT("glXSwapIntervalSGI",&qglSwapInterval) + GL_EXTENSION_FUNC_EXT("glXSwapIntervalSGI",&pglSwapInterval) ,GL_EXTENSION_FUNC_EXT(NULL,NULL) }; @@ -306,8 +307,8 @@ static const gl_extension_func_t gl_ext_multitexture_SGIS_funcs[] = /* WGL_3DFX_gamma_control */ static const gl_extension_func_t wgl_ext_gamma_control_3DFX_funcs[] = { - GL_EXTENSION_FUNC_EXT("wglGetDeviceGammaRamp3DFX",&qwglGetDeviceGammaRamp3DFX) - ,GL_EXTENSION_FUNC_EXT("wglSetDeviceGammaRamp3DFX",&qwglSetDeviceGammaRamp3DFX) + GL_EXTENSION_FUNC_EXT("wglGetDeviceGammaRamp3DFX",&pwglGetDeviceGammaRamp3DFX) + ,GL_EXTENSION_FUNC_EXT("wglSetDeviceGammaRamp3DFX",&pwglSetDeviceGammaRamp3DFX) ,GL_EXTENSION_FUNC_EXT(NULL,NULL) }; @@ -434,7 +435,7 @@ void R_RegisterGLExtensions( void ) if( func ) { do { - *(func->pointer) = ( void * )qglGetProcAddress( (const GLubyte *)func->name ); + *(func->pointer) = ( void * )pglGetProcAddress( (const GLubyte *)func->name ); if( !*(func->pointer) ) break; } while( (++func)->name ); @@ -496,7 +497,7 @@ static void R_FinalizeGLExtensions( void ) int flags = 0; glConfig.maxTextureSize = 0; - qglGetIntegerv( GL_MAX_TEXTURE_SIZE, &glConfig.maxTextureSize ); + pglGetIntegerv( GL_MAX_TEXTURE_SIZE, &glConfig.maxTextureSize ); if( glConfig.maxTextureSize <= 0 ) glConfig.maxTextureSize = 256; @@ -506,21 +507,21 @@ static void R_FinalizeGLExtensions( void ) /* GL_ARB_texture_cube_map */ glConfig.maxTextureCubemapSize = 0; if( glConfig.ext.texture_cube_map ) - qglGetIntegerv( GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB, &glConfig.maxTextureCubemapSize ); + pglGetIntegerv( GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB, &glConfig.maxTextureCubemapSize ); if( glConfig.maxTextureCubemapSize <= 1 ) glConfig.ext.texture_cube_map = false; /* GL_EXT_texture3D */ glConfig.maxTextureSize3D = 0; if( glConfig.ext.texture3D ) - qglGetIntegerv( GL_MAX_3D_TEXTURE_SIZE, &glConfig.maxTextureSize3D ); + pglGetIntegerv( GL_MAX_3D_TEXTURE_SIZE, &glConfig.maxTextureSize3D ); if( glConfig.maxTextureSize3D <= 1 ) glConfig.ext.texture3D = false; /* GL_ARB_multitexture */ glConfig.maxTextureUnits = 1; if( glConfig.ext.multitexture ) { - qglGetIntegerv( GL_MAX_TEXTURE_UNITS, &glConfig.maxTextureUnits ); + pglGetIntegerv( GL_MAX_TEXTURE_UNITS, &glConfig.maxTextureUnits ); glConfig.maxTextureUnits = bound( 1, glConfig.maxTextureUnits, MAX_TEXTURE_UNITS ); } if( glConfig.maxTextureUnits == 1 ) @@ -529,7 +530,7 @@ static void R_FinalizeGLExtensions( void ) /* GL_EXT_texture_filter_anisotropic */ glConfig.maxTextureFilterAnisotropic = 0; if( strstr( glConfig.extensionsString, "GL_EXT_texture_filter_anisotropic" ) ) - qglGetIntegerv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &glConfig.maxTextureFilterAnisotropic ); + pglGetIntegerv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &glConfig.maxTextureFilterAnisotropic ); Cvar_Get( "gl_ext_texture_filter_anisotropic_max", "0", CVAR_INIT, "textures anisotropic filter" ); Cvar_Set( "gl_ext_texture_filter_anisotropic_max", va( "%i", glConfig.maxTextureFilterAnisotropic ) ); @@ -575,6 +576,7 @@ void R_Register( void ) r_skymip = Cvar_Get( "r_skymip", "0", CVAR_ARCHIVE|CVAR_LATCH_VIDEO, "reduces resolution of skybox textures by powers of 2" ); r_polyblend = Cvar_Get( "r_polyblend", "1", 0, "tints view while underwater, hurt, etc" ); r_lefthand = Cvar_Get( "hand", "0", CVAR_USERINFO | CVAR_ARCHIVE, "viewmodel handedness" ); + r_physbdebug = Cvar_Get( "cm_debugdraw", "0", CVAR_ARCHIVE, "draw physics hulls" ); r_bloom = Cvar_Get( "r_bloom", "0", CVAR_ARCHIVE, "enable or disable bloom-effect" ); r_bloom_alpha = Cvar_Get( "r_bloom_alpha", "0.2", CVAR_ARCHIVE, "bloom alpha multiplier" ); @@ -794,46 +796,46 @@ static void R_SetGLDefaults( void ) { int i; - qglFinish(); + pglFinish(); - qglClearColor( 1, 0, 0.5, 0.5 ); + pglClearColor( 1, 0, 0.5, 0.5 ); - qglEnable( GL_DEPTH_TEST ); - qglDisable( GL_CULL_FACE ); - qglEnable( GL_SCISSOR_TEST ); - qglDepthFunc( GL_LEQUAL ); - qglDepthMask( GL_FALSE ); + pglEnable( GL_DEPTH_TEST ); + pglDisable( GL_CULL_FACE ); + pglEnable( GL_SCISSOR_TEST ); + pglDepthFunc( GL_LEQUAL ); + pglDepthMask( GL_FALSE ); - qglColor4f( 1, 1, 1, 1 ); + pglColor4f( 1, 1, 1, 1 ); if( glState.stencilEnabled ) { - qglDisable( GL_STENCIL_TEST ); - qglStencilMask( ( GLuint ) ~0 ); - qglStencilFunc( GL_EQUAL, 128, 0xFF ); - qglStencilOp( GL_KEEP, GL_KEEP, GL_INCR ); + pglDisable( GL_STENCIL_TEST ); + pglStencilMask( ( GLuint ) ~0 ); + pglStencilFunc( GL_EQUAL, 128, 0xFF ); + pglStencilOp( GL_KEEP, GL_KEEP, GL_INCR ); } // enable gouraud shading - qglShadeModel( GL_SMOOTH ); + pglShadeModel( GL_SMOOTH ); - qglPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); - qglPolygonOffset( -1, -2 ); + pglPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); + pglPolygonOffset( -1, -2 ); // properly disable multitexturing at startup for( i = glConfig.maxTextureUnits-1; i > 0; i-- ) { GL_SelectTexture( i ); GL_TexEnv( GL_MODULATE ); - qglDisable( GL_BLEND ); - qglDisable( GL_TEXTURE_2D ); + pglDisable( GL_BLEND ); + pglDisable( GL_TEXTURE_2D ); } GL_SelectTexture( 0 ); - qglDisable( GL_BLEND ); - qglDisable( GL_ALPHA_TEST ); - qglDisable( GL_POLYGON_OFFSET_FILL ); - qglEnable( GL_TEXTURE_2D ); + pglDisable( GL_BLEND ); + pglDisable( GL_ALPHA_TEST ); + pglDisable( GL_POLYGON_OFFSET_FILL ); + pglEnable( GL_TEXTURE_2D ); GL_Cull( 0 ); GL_FrontFace( 0 ); @@ -843,11 +845,11 @@ static void R_SetGLDefaults( void ) R_TextureMode( r_texturemode->string ); - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min ); - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max ); + pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min ); + pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max ); - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); + pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); + pglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); } /* @@ -910,7 +912,7 @@ int R_InitRender( void *hinstance, void *hWnd, bool verbose ) driver = gl_driver->string; // initialize our QGL dynamic bindings -init_qgl: +init_pgl: if( !QGL_Init( gl_driver->string ) ) { QGL_Shutdown(); @@ -919,7 +921,7 @@ init_qgl: if( com.strcmp( gl_driver->string, "opengl32.dll" )) { Cvar_Set( gl_driver->name, "opengl32.dll" ); - goto init_qgl; + goto init_pgl; } return false; @@ -943,11 +945,11 @@ init_qgl: /* ** get our various GL strings */ - glConfig.vendorString = (const char *)qglGetString( GL_VENDOR ); - glConfig.rendererString = (const char *)qglGetString( GL_RENDERER ); - glConfig.versionString = (const char *)qglGetString( GL_VERSION ); - glConfig.extensionsString = (const char *)qglGetString( GL_EXTENSIONS ); - glConfig.glwExtensionsString = (const char *)qglGetGLWExtensionsString (); + glConfig.vendorString = (const char *)pglGetString( GL_VENDOR ); + glConfig.rendererString = (const char *)pglGetString( GL_RENDERER ); + glConfig.versionString = (const char *)pglGetString( GL_VERSION ); + glConfig.extensionsString = (const char *)pglGetString( GL_EXTENSIONS ); + glConfig.glwExtensionsString = (const char *)pglGetGLWExtensionsString (); if( !glConfig.vendorString ) glConfig.vendorString = ""; if( !glConfig.rendererString ) glConfig.rendererString = ""; @@ -1013,7 +1015,7 @@ init_qgl: R_ClearScene(); - err = qglGetError(); + err = pglGetError(); if( err != GL_NO_ERROR ) Msg( "glGetError() = 0x%x\n", err ); diff --git a/render/r_shadow.c b/render/r_shadow.c index 04a94870..5566fe37 100644 --- a/render/r_shadow.c +++ b/render/r_shadow.c @@ -166,17 +166,17 @@ void R_PlanarShadowPass( int state ) GL_SetTexCoordArrayMode( 0 ); GL_SetState( state ); - qglColor4f( 0, 0, 0, bound( 0.0f, r_shadows_alpha->value, 1.0f ) ); + pglColor4f( 0, 0, 0, bound( 0.0f, r_shadows_alpha->value, 1.0f ) ); - qglDisable( GL_TEXTURE_2D ); + pglDisable( GL_TEXTURE_2D ); if( glState.stencilEnabled ) - qglEnable( GL_STENCIL_TEST ); + pglEnable( GL_STENCIL_TEST ); R_FlushArrays(); if( glState.stencilEnabled ) - qglDisable( GL_STENCIL_TEST ); - qglEnable( GL_TEXTURE_2D ); + pglDisable( GL_STENCIL_TEST ); + pglEnable( GL_TEXTURE_2D ); } /* @@ -477,7 +477,7 @@ void R_DrawShadowmaps( void ) { // capture results from framebuffer into depth texture prevRI.shadowBits |= group->bit; GL_Bind( 0, group->depthTexture ); - qglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, RI.refdef.viewport[0], RI.refdef.viewport[1], textureWidth, textureHeight ); + pglCopyTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, RI.refdef.viewport[0], RI.refdef.viewport[1], textureWidth, textureHeight ); } Matrix4_Copy( RI.worldviewProjectionMatrix, group->worldviewProjectionMatrix ); diff --git a/render/r_skm.c b/render/r_skm.c index c7d8e070..682ff517 100644 --- a/render/r_skm.c +++ b/render/r_skm.c @@ -1267,7 +1267,7 @@ void R_DrawSkeletalModel( const meshbuffer_t *mb ) // hack the depth range to prevent view model from poking into walls if( e->flags & RF_WEAPONMODEL ) - qglDepthRange( gldepthmin, gldepthmin + 0.3 * ( gldepthmax - gldepthmin ) ); + pglDepthRange( gldepthmin, gldepthmin + 0.3 * ( gldepthmax - gldepthmin ) ); // backface culling for left-handed weapons if( e->flags & RF_CULLHACK ) @@ -1279,7 +1279,7 @@ void R_DrawSkeletalModel( const meshbuffer_t *mb ) R_DrawBonesFrameLerp( mb, e->backlerp ); if( e->flags & RF_WEAPONMODEL ) - qglDepthRange( gldepthmin, gldepthmax ); + pglDepthRange( gldepthmin, gldepthmax ); if( e->flags & RF_CULLHACK ) GL_FrontFace( !glState.frontFace ); diff --git a/render/r_sky.c b/render/r_sky.c index 9c1bf4fb..ae450d60 100644 --- a/render/r_sky.c +++ b/render/r_sky.c @@ -346,14 +346,14 @@ void R_DrawSky( ref_shader_t *shader ) m[13] = 0; m[14] = 0; m[15] = 1.0; - qglLoadMatrixf( m ); + pglLoadMatrixf( m ); gldepthmin = 1; gldepthmax = 1; - qglDepthRange( gldepthmin, gldepthmax ); + pglDepthRange( gldepthmin, gldepthmax ); if( RI.params & RP_CLIPPLANE ) - qglDisable( GL_CLIP_PLANE0 ); + pglDisable( GL_CLIP_PLANE0 ); // it can happen that sky surfaces have no fog hull specified // yet there's a global fog hull (see wvwq3dm7) @@ -396,14 +396,14 @@ void R_DrawSky( ref_shader_t *shader ) R_DrawSkyBox( skydome, skydome->nearboxShaders ); if( RI.params & RP_CLIPPLANE ) - qglEnable( GL_CLIP_PLANE0 ); + pglEnable( GL_CLIP_PLANE0 ); Matrix4_Copy( oldm, RI.modelviewMatrix ); - qglLoadMatrixf( RI.worldviewMatrix ); + pglLoadMatrixf( RI.worldviewMatrix ); gldepthmin = 0; gldepthmax = 1; - qglDepthRange( gldepthmin, gldepthmax ); + pglDepthRange( gldepthmin, gldepthmax ); r_skyfog = NULL; } diff --git a/render/render.plg b/render/render.plg index 4ec5f77c..c5158a88 100644 --- a/render/render.plg +++ b/render/render.plg @@ -6,96 +6,6 @@ --------------------Configuration: render - Win32 Debug--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAB2.tmp" with contents -[ -/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../public" /I "../common" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\render\!debug/" /Fo"..\temp\render\!debug/" /Fd"..\temp\render\!debug/" /FD /c -"D:\Xash3D\src_main\render\cin.c" -"D:\Xash3D\src_main\render\r_alias.c" -"D:\Xash3D\src_main\render\r_backend.c" -"D:\Xash3D\src_main\render\r_bloom.c" -"D:\Xash3D\src_main\render\r_cin.c" -"D:\Xash3D\src_main\render\r_cull.c" -"D:\Xash3D\src_main\render\r_image.c" -"D:\Xash3D\src_main\render\r_light.c" -"D:\Xash3D\src_main\render\r_main.c" -"D:\Xash3D\src_main\render\r_math.c" -"D:\Xash3D\src_main\render\r_mesh.c" -"D:\Xash3D\src_main\render\r_model.c" -"D:\Xash3D\src_main\render\r_poly.c" -"D:\Xash3D\src_main\render\r_program.c" -"D:\Xash3D\src_main\render\r_register.c" -"D:\Xash3D\src_main\render\r_shader.c" -"D:\Xash3D\src_main\render\r_shadow.c" -"D:\Xash3D\src_main\render\r_skin.c" -"D:\Xash3D\src_main\render\r_skm.c" -"D:\Xash3D\src_main\render\r_sky.c" -"D:\Xash3D\src_main\render\r_surf.c" -] -Creating command line "cl.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAB2.tmp" -Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAB3.tmp" with contents -[ -msvcrtd.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"..\temp\render\!debug/render.pdb" /debug /machine:I386 /nodefaultlib:"msvcrt.lib" /out:"..\temp\render\!debug/render.dll" /implib:"..\temp\render\!debug/render.lib" /pdbtype:sept -"\Xash3D\src_main\temp\render\!debug\cin.obj" -"\Xash3D\src_main\temp\render\!debug\glw_imp.obj" -"\Xash3D\src_main\temp\render\!debug\qgl_win.obj" -"\Xash3D\src_main\temp\render\!debug\r_alias.obj" -"\Xash3D\src_main\temp\render\!debug\r_backend.obj" -"\Xash3D\src_main\temp\render\!debug\r_bloom.obj" -"\Xash3D\src_main\temp\render\!debug\r_cin.obj" -"\Xash3D\src_main\temp\render\!debug\r_cull.obj" -"\Xash3D\src_main\temp\render\!debug\r_image.obj" -"\Xash3D\src_main\temp\render\!debug\r_light.obj" -"\Xash3D\src_main\temp\render\!debug\r_main.obj" -"\Xash3D\src_main\temp\render\!debug\r_math.obj" -"\Xash3D\src_main\temp\render\!debug\r_mesh.obj" -"\Xash3D\src_main\temp\render\!debug\r_model.obj" -"\Xash3D\src_main\temp\render\!debug\r_poly.obj" -"\Xash3D\src_main\temp\render\!debug\r_program.obj" -"\Xash3D\src_main\temp\render\!debug\r_register.obj" -"\Xash3D\src_main\temp\render\!debug\r_shader.obj" -"\Xash3D\src_main\temp\render\!debug\r_shadow.obj" -"\Xash3D\src_main\temp\render\!debug\r_skin.obj" -"\Xash3D\src_main\temp\render\!debug\r_skm.obj" -"\Xash3D\src_main\temp\render\!debug\r_sky.obj" -"\Xash3D\src_main\temp\render\!debug\r_surf.obj" -] -Creating command line "link.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAB3.tmp" -Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAB4.bat" with contents -[ -@echo off -copy \Xash3D\src_main\temp\render\!debug\render.dll "D:\Xash3D\bin\render.dll" -] -Creating command line "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSPAB4.bat" -Compiling... -cin.c -r_alias.c -r_backend.c -r_bloom.c -r_cin.c -r_cull.c -r_image.c -r_light.c -r_main.c -r_math.c -r_mesh.c -r_model.c -r_poly.c -r_program.c -r_register.c -r_shader.c -r_shadow.c -r_skin.c -r_skm.c -r_sky.c -Generating Code... -Compiling... -r_surf.c -Generating Code... -Linking... - Creating library ..\temp\render\!debug/render.lib and object ..\temp\render\!debug/render.exp -

Output Window

-Performing Custom Build Step on \Xash3D\src_main\temp\render\!debug\render.dll -‘ª®¯¨à®¢ ­® ä ©«®¢: 1. diff --git a/server/ents/baseinfo.cpp b/server/ents/baseinfo.cpp index 194decae..778d8cb8 100644 --- a/server/ents/baseinfo.cpp +++ b/server/ents/baseinfo.cpp @@ -142,6 +142,71 @@ void CInfoIntermission::Think ( void ) } } +//========================================================= +// portal surfaces +//========================================================= +class CPortalSurface : public CPointEntity +{ + void Spawn( void ); + void Think( void ); + void PostActivate( void ); +}; + +void CPortalSurface :: Spawn( void ) +{ + pev->solid = SOLID_NOT; + pev->movetype = MOVETYPE_NOCLIP; + + SetObjectClass( ED_PORTAL ); + UTIL_SetOrigin( this, pev->origin ); + pev->modelindex = 1; // world + + SetNextThink( 1 );// let targets spawn! +} + +void CPortalSurface :: Think( void ) +{ + if( FNullEnt( pev->owner )) + pev->oldorigin = pev->origin; + else pev->oldorigin = pev->owner->v.origin; + + SetNextThink( 0.1f ); +} + +void CPortalSurface :: PostActivate( void ) +{ + Vector dir; + CBaseEntity *pTarget, *pOwner; + + SetNextThink( 0 ); + + if( FStringNull( pev->target )) + return; // mirror + + pOwner = UTIL_FindEntityByTargetname( NULL, STRING( pev->target )); + if( !pOwner ) + { + ALERT( at_warning, "Couldn't find target for %s\n", STRING( pev->classname )); + UTIL_Remove( this ); + return; + } + + pev->owner = pOwner->edict(); + // pev->effects |= EF_ROTATE; + + // see if the portal_camera has a target + if( !FStringNull( pOwner->pev->target )) + pTarget = UTIL_FindEntityByTargetname( NULL, STRING( pOwner->pev->target )); + else pTarget = NULL; + + if( pTarget ) + { + pev->movedir = pTarget->pev->origin - pOwner->pev->origin; + pev->movedir.Normalize(); + } + else UTIL_LinearVector( pOwner ); +} + //==================================================================== // multisource //==================================================================== @@ -236,11 +301,14 @@ void CMultiSource::Register(void) LINK_ENTITY_TO_CLASS( infodecal, CDecal ); LINK_ENTITY_TO_CLASS( info_target, CInfoTarget ); +LINK_ENTITY_TO_CLASS( target_position, CPointEntity ); LINK_ENTITY_TO_CLASS( info_teleport_destination, CPointEntity ); +LINK_ENTITY_TO_CLASS( misc_portal_surface, CPortalSurface ); LINK_ENTITY_TO_CLASS( info_null, CNullEntity); LINK_ENTITY_TO_CLASS( info_texlights, CNullEntity); LINK_ENTITY_TO_CLASS( info_compile_parameters, CNullEntity); LINK_ENTITY_TO_CLASS( info_intermission, CInfoIntermission ); LINK_ENTITY_TO_CLASS( info_player_deathmatch, CBaseDMStart); LINK_ENTITY_TO_CLASS( info_player_start, CPointEntity); +LINK_ENTITY_TO_CLASS( misc_portal_camera, CPointEntity); LINK_ENTITY_TO_CLASS( info_landmark, CPointEntity); \ No newline at end of file diff --git a/server/ents/basemover.cpp b/server/ents/basemover.cpp index 743e0973..0e08f454 100644 --- a/server/ents/basemover.cpp +++ b/server/ents/basemover.cpp @@ -327,7 +327,7 @@ void CBaseMover :: ComplexMoveDoneNow( void ) void CBaseDoor::Spawn( ) { Precache(); - if(!IsRotatingDoor())UTIL_LinearVector( this ); + if(!IsRotatingDoor()) UTIL_LinearVector( this ); CBaseBrush::Spawn(); //make illusionary door @@ -364,7 +364,7 @@ void CBaseDoor::Spawn( ) if (pev->speed == 0) pev->speed = 100;//default speed m_iState = STATE_OFF; - if ( IsRotatingDoor() && FBitSet (pev->spawnflags, SF_DOOR_START_OPEN)) + if( IsRotatingDoor() && FBitSet (pev->spawnflags, SF_DOOR_START_OPEN)) { pev->angles = m_vecAngle2; Vector vecSav = m_vecAngle1; @@ -376,16 +376,18 @@ void CBaseDoor::Spawn( ) void CBaseDoor :: PostSpawn( void ) { - if (m_pParent) m_vecPosition1 = pev->origin - m_pParent->pev->origin; + if( m_pParent ) m_vecPosition1 = pev->origin - m_pParent->pev->origin; else m_vecPosition1 = pev->origin; // Subtract 2 from size because the engine expands bboxes by 1 in all directions m_vecPosition2 = m_vecPosition1 + (pev->movedir * (fabs( pev->movedir.x * (pev->size.x-2) ) + fabs( pev->movedir.y * (pev->size.y-2) ) + fabs( pev->movedir.z * (pev->size.z-2) ) - m_flLip)); - ASSERTSZ(m_vecPosition1 != m_vecPosition2, "door start/end positions are equal"); - if ( FBitSet (pev->spawnflags, SF_DOOR_START_OPEN) ) + ASSERTSZ( m_vecPosition1 != m_vecPosition2, "door start/end positions are equal" ); + if( FBitSet( pev->spawnflags, SF_DOOR_START_OPEN )) { - if (m_pParent) + SET_AREAPORTAL( edict(), TRUE ); + + if( m_pParent ) { m_vecSpawnOffset = m_vecSpawnOffset + (m_vecPosition2 + m_pParent->pev->origin) - pev->origin; UTIL_AssignOrigin(this, m_vecPosition2 + m_pParent->pev->origin); @@ -524,6 +526,8 @@ void CBaseDoor::DoorGoUp( void ) SetTouch( NULL ); UTIL_FireTargets( pev->target, m_hActivator, this, USE_ON ); + SET_AREAPORTAL( edict(), TRUE ); + if(IsRotatingDoor()) { int sign = 1; @@ -590,6 +594,8 @@ void CBaseDoor::DoorHitBottom( void ) if (!(pev->spawnflags & SF_DOOR_START_OPEN)) UTIL_FireTargets( pev->netname, m_hActivator, this, USE_TOGGLE ); UTIL_FireTargets( pev->target, m_hActivator, this, USE_TOGGLE ); + + SET_AREAPORTAL( edict(), FALSE ); } void CBaseDoor::Blocked( CBaseEntity *pOther ) diff --git a/server/global/client.cpp b/server/global/client.cpp index 2770b637..28bf8b45 100644 --- a/server/global/client.cpp +++ b/server/global/client.cpp @@ -996,6 +996,7 @@ void UpdateEntityState( entity_state_t *to, edict_t *from, int baseline ) to->framerate = pNet->pev->framerate; to->flags = pNet->pev->flags; to->rendercolor = pNet->pev->rendercolor; + to->oldorigin = pNet->pev->oldorigin; // studio model sequence if( pNet->pev->sequence != -1 ) to->sequence = pNet->pev->sequence; @@ -1006,12 +1007,6 @@ void UpdateEntityState( entity_state_t *to, edict_t *from, int baseline ) to->blending[i] = pNet->pev->blending[i]; to->controller[i] = pNet->pev->controller[i]; } - - if( to->ed_type == ED_MOVER || to->ed_type == ED_BSPBRUSH ) - { - // these needs to right calculate direction of scroll texture - to->velocity = pNet->pev->movedir; - } if( to->ed_type == ED_CLIENT ) { if( pNet->pev->fixangle ) diff --git a/server/global/enginecallback.h b/server/global/enginecallback.h index 9231308f..555cc559 100644 --- a/server/global/enginecallback.h +++ b/server/global/enginecallback.h @@ -67,6 +67,7 @@ extern enginefuncs_t g_engfuncs; #define RANDOM_LONG (*g_engfuncs.pfnRandomLong) #define RANDOM_FLOAT (*g_engfuncs.pfnRandomFloat) #define CLASSIFY_EDICT (*g_engfuncs.pfnClassifyEdict) +#define SET_AREAPORTAL (*g_engfuncs.pfnAreaPortal) inline void MESSAGE_BEGIN( int msg_dest, int msg_type, const float *pOrigin = NULL, edict_t *ed = NULL ) { diff --git a/server/monsters/player.cpp b/server/monsters/player.cpp index 78abd190..dc59c6d2 100644 --- a/server/monsters/player.cpp +++ b/server/monsters/player.cpp @@ -3213,6 +3213,12 @@ edict_t *EntSelectSpawnPoint( CBaseEntity *pPlayer ) pSpot = UTIL_FindEntityByClassname(NULL, "info_player_start"); if ( !FNullEnt(pSpot) ) goto ReturnSpot; + + // q3a maps doesn't contain info_player_start + // TEST for q3dm0 + pSpot = UTIL_FindEntityByClassname(NULL, "info_player_deathmatch"); + if ( !FNullEnt(pSpot) ) + goto ReturnSpot; } else { @@ -3224,7 +3230,7 @@ edict_t *EntSelectSpawnPoint( CBaseEntity *pPlayer ) ReturnSpot: if ( FNullEnt( pSpot ) ) { - ALERT(at_error, "PutClientInServer: no info_player_start on level"); + ALERT( at_error, "PutClientInServer: no info_player_start on level\n" ); return INDEXENT(0); } diff --git a/server/server.plg b/server/server.plg new file mode 100644 index 00000000..7bea66a9 --- /dev/null +++ b/server/server.plg @@ -0,0 +1,100 @@ + + +
+

Build Log

+

+--------------------Configuration: server - Win32 Debug-------------------- +

+

Command Lines

+Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP603.tmp" with contents +[ +/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "./" /I "ents" /I "game" /I "global" /I "monsters" /I "../common" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\server\!debug/" /Fo"..\temp\server\!debug/" /Fd"..\temp\server\!debug/" /FD /c +"D:\Xash3D\src_main\server\monsters\player.cpp" +] +Creating command line "cl.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP603.tmp" +Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP604.tmp" with contents +[ +msvcrtd.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"..\temp\server\!debug/server.pdb" /debug /machine:I386 /nodefaultlib:"libc.lib" /def:".\server.def" /out:"..\temp\server\!debug/server.dll" /implib:"..\temp\server\!debug/server.lib" /pdbtype:sept +"\Xash3D\src_main\temp\server\!debug\ai_sound.obj" +"\Xash3D\src_main\temp\server\!debug\animating.obj" +"\Xash3D\src_main\temp\server\!debug\animation.obj" +"\Xash3D\src_main\temp\server\!debug\apache.obj" +"\Xash3D\src_main\temp\server\!debug\barnacle.obj" +"\Xash3D\src_main\temp\server\!debug\barney.obj" +"\Xash3D\src_main\temp\server\!debug\basebrush.obj" +"\Xash3D\src_main\temp\server\!debug\baseentity.obj" +"\Xash3D\src_main\temp\server\!debug\basefunc.obj" +"\Xash3D\src_main\temp\server\!debug\basefx.obj" +"\Xash3D\src_main\temp\server\!debug\baseinfo.obj" +"\Xash3D\src_main\temp\server\!debug\baseitem.obj" +"\Xash3D\src_main\temp\server\!debug\baselogic.obj" +"\Xash3D\src_main\temp\server\!debug\basemonster.obj" +"\Xash3D\src_main\temp\server\!debug\basemover.obj" +"\Xash3D\src_main\temp\server\!debug\baseother.obj" +"\Xash3D\src_main\temp\server\!debug\basepath.obj" +"\Xash3D\src_main\temp\server\!debug\basephys.obj" +"\Xash3D\src_main\temp\server\!debug\baserockets.obj" +"\Xash3D\src_main\temp\server\!debug\basetank.obj" +"\Xash3D\src_main\temp\server\!debug\basetrigger.obj" +"\Xash3D\src_main\temp\server\!debug\baseutil.obj" +"\Xash3D\src_main\temp\server\!debug\baseweapon.obj" +"\Xash3D\src_main\temp\server\!debug\baseworld.obj" +"\Xash3D\src_main\temp\server\!debug\client.obj" +"\Xash3D\src_main\temp\server\!debug\combat.obj" +"\Xash3D\src_main\temp\server\!debug\decals.obj" +"\Xash3D\src_main\temp\server\!debug\defaultai.obj" +"\Xash3D\src_main\temp\server\!debug\dll_int.obj" +"\Xash3D\src_main\temp\server\!debug\flyingmonster.obj" +"\Xash3D\src_main\temp\server\!debug\game.obj" +"\Xash3D\src_main\temp\server\!debug\gamerules.obj" +"\Xash3D\src_main\temp\server\!debug\generic.obj" +"\Xash3D\src_main\temp\server\!debug\globals.obj" +"\Xash3D\src_main\temp\server\!debug\gman.obj" +"\Xash3D\src_main\temp\server\!debug\hassassin.obj" +"\Xash3D\src_main\temp\server\!debug\headcrab.obj" +"\Xash3D\src_main\temp\server\!debug\hgrunt.obj" +"\Xash3D\src_main\temp\server\!debug\leech.obj" +"\Xash3D\src_main\temp\server\!debug\legacy.obj" +"\Xash3D\src_main\temp\server\!debug\lights.obj" +"\Xash3D\src_main\temp\server\!debug\multiplay_gamerules.obj" +"\Xash3D\src_main\temp\server\!debug\nodes.obj" +"\Xash3D\src_main\temp\server\!debug\osprey.obj" +"\Xash3D\src_main\temp\server\!debug\parent.obj" +"\Xash3D\src_main\temp\server\!debug\player.obj" +"\Xash3D\src_main\temp\server\!debug\rat.obj" +"\Xash3D\src_main\temp\server\!debug\roach.obj" +"\Xash3D\src_main\temp\server\!debug\saverestore.obj" +"\Xash3D\src_main\temp\server\!debug\scientist.obj" +"\Xash3D\src_main\temp\server\!debug\scripted.obj" +"\Xash3D\src_main\temp\server\!debug\sfx.obj" +"\Xash3D\src_main\temp\server\!debug\singleplay_gamerules.obj" +"\Xash3D\src_main\temp\server\!debug\sound.obj" +"\Xash3D\src_main\temp\server\!debug\squadmonster.obj" +"\Xash3D\src_main\temp\server\!debug\talkmonster.obj" +"\Xash3D\src_main\temp\server\!debug\teamplay_gamerules.obj" +"\Xash3D\src_main\temp\server\!debug\turret.obj" +"\Xash3D\src_main\temp\server\!debug\utils.obj" +"\Xash3D\src_main\temp\server\!debug\weapon_generic.obj" +"\Xash3D\src_main\temp\server\!debug\zombie.obj" +] +Creating command line "link.exe @C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP604.tmp" +Creating temporary file "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP605.bat" with contents +[ +@echo off +copy \Xash3D\src_main\temp\server\!debug\server.dll "D:\Xash3D\bin\server.dll" +] +Creating command line "C:\DOCUME~1\MIKE~1.MIK\LOCALS~1\Temp\RSP605.bat" +Compiling... +player.cpp +Linking... +

Output Window

+Performing Custom Build Step on \Xash3D\src_main\temp\server\!debug\server.dll +‘ª®¯¨à®¢ ­® ä ©«®¢: 1. + + + +

Results

+server.dll - 0 error(s), 0 warning(s) +
+ + diff --git a/todo.log b/todo.log index 9978e177..458a5222 100644 --- a/todo.log +++ b/todo.log @@ -84,11 +84,13 @@ Beta 13.12.08 53. finish RenderMode for shaders OK 54. q3/rbsp bsp format OK 55. dedicated conolse hanging commands -56. renderer areabits bug +56. renderer areabits bug OK 57. shutdown crash OK 58. physic.dll finish collisions OK 59. raven bsp supports OK 60. fixup render times OK +61. fixup portal rendering OK +62. return old-xash renderer initialization Ñïèñîê äîñòóïíûõ ðåíäåðåðîâ: ×òî â íèõ èíòåðåñíîãî 0. Q3Fusion (Mirrors, Portals)