d3d now does fullbrights properly and skyboxes.
ogl still has broken skyboxes... git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3653 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
129ba40ef3
commit
9eaa65ccda
14 changed files with 125 additions and 199 deletions
|
@ -2337,9 +2337,11 @@ void CLQ2_ParseServerData (void)
|
|||
{ // playing a cinematic or showing a pic, not a level
|
||||
SCR_EndLoadingPlaque();
|
||||
if (!Media_PlayFilm(str))
|
||||
Con_TPrintf (TLC_NOQ2CINEMATICSSUPPORT, cl.servercount);
|
||||
else
|
||||
CL_MakeActive("Quake2");
|
||||
{
|
||||
CL_SendClientCommand(true, "nextserver %i", cl.servercount);
|
||||
}
|
||||
|
||||
CL_MakeActive("Quake2");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -572,6 +572,9 @@ void VQ3_RenderView(const q3refdef_t *ref)
|
|||
r_refdef.viewangles[0] = -(atan2(ref->viewaxis[0][2], sqrt(ref->viewaxis[0][1]*ref->viewaxis[0][1]+ref->viewaxis[0][0]*ref->viewaxis[0][0])) * 180 / M_PI);
|
||||
r_refdef.viewangles[1] = (atan2(ref->viewaxis[0][1], ref->viewaxis[0][0]) * 180 / M_PI);
|
||||
r_refdef.viewangles[2] = 0;
|
||||
VectorCopy(ref->viewaxis[0], r_refdef.viewaxis[0]);
|
||||
VectorCopy(ref->viewaxis[1], r_refdef.viewaxis[1]);
|
||||
VectorCopy(ref->viewaxis[2], r_refdef.viewaxis[2]);
|
||||
if (ref->rdflags & 1)
|
||||
r_refdef.flags |= Q2RDF_NOWORLDMODEL;
|
||||
else
|
||||
|
|
|
@ -1706,6 +1706,11 @@ qboolean Media_PlayFilm(char *name)
|
|||
if (cin->rewind)
|
||||
cin->rewind(cin);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_UnloadShader(videoshader);
|
||||
videoshader = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// Media_ShutdownCin(fullscreenvid);
|
||||
|
|
|
@ -2056,12 +2056,17 @@ void Surf_DrawWorld (void)
|
|||
qbyte *vis;
|
||||
RSpeedLocals();
|
||||
|
||||
if (r_refdef.flags & Q2RDF_NOWORLDMODEL || !cl.worldmodel)
|
||||
if (r_refdef.flags & Q2RDF_NOWORLDMODEL)
|
||||
{
|
||||
r_refdef.flags |= Q2RDF_NOWORLDMODEL;
|
||||
BE_DrawWorld(NULL);
|
||||
return;
|
||||
}
|
||||
if (!cl.worldmodel || cl.worldmodel->needload)
|
||||
{
|
||||
/*Don't act as a wallhack*/
|
||||
return;
|
||||
}
|
||||
|
||||
Surf_SetupFrame();
|
||||
|
||||
|
|
|
@ -1459,6 +1459,13 @@ void Sbar_DrawInventory (int pnum)
|
|||
}
|
||||
|
||||
// ammo counts
|
||||
if (headsup)
|
||||
{
|
||||
for (i=0 ; i<4 ; i++)
|
||||
{
|
||||
Sbar_DrawSubPic((hudswap) ? 0 : (sbar_rect.width-42), -24 - (4-i)*11, 42, 11, sb_ibar, 3+(i*48), 0, 320, 24);
|
||||
}
|
||||
}
|
||||
for (i=0 ; i<4 ; i++)
|
||||
{
|
||||
snprintf (num, sizeof(num), "%3i",cl.stats[pnum][STAT_SHELLS+i] );
|
||||
|
@ -1468,7 +1475,6 @@ void Sbar_DrawInventory (int pnum)
|
|||
numc[3] = 0;
|
||||
if (headsup)
|
||||
{
|
||||
Sbar_DrawSubPic((hudswap) ? 0 : (sbar_rect.width-42), -24 - (4-i)*11, 42, 11, sb_ibar, 3+(i*48), 0, 320, 24);
|
||||
Sbar_DrawExpandedString((hudswap) ? 3 : (sbar_rect.width-39), -24 - (4-i)*11, numc);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -1626,7 +1626,7 @@ qboolean S_IsPlayingSomewhere(sfx_t *s)
|
|||
int i;
|
||||
for (si = sndcardinfo; si; si=si->next)
|
||||
{
|
||||
for (i = 0; i < MAX_CHANNELS; i++)
|
||||
for (i = 0; i < scard->total_chans; i++)
|
||||
if (si->channel[i].sfx == s)
|
||||
return true;
|
||||
}
|
||||
|
@ -1669,7 +1669,7 @@ void S_RawAudio(int sourceid, qbyte *data, int speed, int samples, int channels,
|
|||
s->inuse = false;
|
||||
|
||||
for (si = sndcardinfo; si; si=si->next)
|
||||
for (i = 0; i < MAX_CHANNELS; i++)
|
||||
for (i = 0; i < si->total_chans; i++)
|
||||
if (si->channel[i].sfx == &s->sfx)
|
||||
{
|
||||
si->channel[i].sfx = NULL;
|
||||
|
|
|
@ -184,7 +184,7 @@ void OpenAL_CvarInit(void);
|
|||
// User-setable variables
|
||||
// ====================================================================
|
||||
|
||||
#define MAX_CHANNELS 256 /*tracked sounds (including statics)*/
|
||||
#define MAX_CHANNELS 1024/*tracked sounds (including statics)*/
|
||||
#define MAX_DYNAMIC_CHANNELS 8 /*playing sounds (identical ones merge)*/
|
||||
|
||||
|
||||
|
|
|
@ -60,69 +60,6 @@ extern unsigned int sys_parentheight;
|
|||
LONG CDAudio_MessageHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
#endif
|
||||
|
||||
/*
|
||||
struct soundcardinfo_s {
|
||||
int snd_linear_count; //change in asm_i386.h. MUST be first
|
||||
|
||||
float pitch[MAXSOUNDCHANNELS];
|
||||
float yaw[MAXSOUNDCHANNELS];
|
||||
float dist[MAXSOUNDCHANNELS];
|
||||
|
||||
void *handle;
|
||||
void *(*Lock) (soundcardinfo_t *sc);
|
||||
void (*Unlock) (soundcardinfo_t *sc, void *buffer);
|
||||
void (*Submit) (soundcardinfo_t *sc);
|
||||
void (*Shutdown) (soundcardinfo_t *sc);
|
||||
unsigned int (*GetDMAPos) (soundcardinfo_t *sc);
|
||||
void (*SetWaterDistortion) (soundcardinfo_t *sc, qboolean underwater);
|
||||
|
||||
#ifdef AVAIL_DSOUND
|
||||
LPDIRECTSOUND pDS;
|
||||
LPDIRECTSOUNDBUFFER pDSBuf;
|
||||
LPDIRECTSOUNDBUFFER pDSPBuf;
|
||||
#endif
|
||||
HWAVEOUT hWaveOut;
|
||||
HANDLE hData;
|
||||
HGLOBAL hWaveHdr;
|
||||
HPSTR lpData;
|
||||
LPWAVEHDR lpWaveHdr;
|
||||
DWORD mmstarttime;
|
||||
DWORD gSndBufSize;
|
||||
|
||||
qboolean selfpainting;
|
||||
|
||||
qboolean inactive_sound;
|
||||
|
||||
|
||||
int paintedtime;
|
||||
int oldpaintedtime;
|
||||
int oldsamplepos;
|
||||
int buffers;
|
||||
|
||||
dma_t sn;
|
||||
|
||||
|
||||
char name[128];
|
||||
|
||||
int snd_sent;
|
||||
int snd_completed;
|
||||
|
||||
channel_t channel[MAX_CHANNELS];
|
||||
int total_chans;
|
||||
|
||||
#ifdef AVAIL_DSOUND
|
||||
#ifdef _IKsPropertySet_
|
||||
LPKSPROPERTYSET EaxKsPropertiesSet;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
int rawstart;
|
||||
int rawend;
|
||||
|
||||
struct soundcardinfo_s *next;
|
||||
};
|
||||
*/
|
||||
|
||||
|
||||
//void VID_LockBuffer (void);
|
||||
//void VID_UnlockBuffer (void);
|
||||
|
|
|
@ -920,9 +920,10 @@ void R_LightArraysByte_BGR(vecV_t *coords, byte_vec4_t *colours, int vertcount,
|
|||
{
|
||||
for (i = vertcount-1; i >= 0; i--)
|
||||
{
|
||||
colours[i][0] = ambientlightb[0];
|
||||
colours[i][1] = ambientlightb[1];
|
||||
colours[i][2] = ambientlightb[2];
|
||||
*(int*)colours[i] = *(int*)ambientlightb;
|
||||
// colours[i][0] = ambientlightb[0];
|
||||
// colours[i][1] = ambientlightb[1];
|
||||
// colours[i][2] = ambientlightb[2];
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -287,7 +287,6 @@
|
|||
NAME(TL_FTEEXTENSIONS)
|
||||
NAME(TLC_LINEBREAK_NEWLEVEL)
|
||||
NAME(TLC_PC_PS_NL)
|
||||
NAME(TLC_NOQ2CINEMATICSSUPPORT)
|
||||
NAME(TLC_GOTSVDATAPACKET)
|
||||
NAME(TLC_BAD_MAXCLIENTS)
|
||||
NAME(TLC_TOOMANYMODELPRECACHES)
|
||||
|
|
|
@ -97,14 +97,14 @@ static void Matrix3_Transpose (mat3_t in, mat3_t out)
|
|||
out[2][0] = in[0][2];
|
||||
out[2][1] = in[1][2];
|
||||
}
|
||||
static void Matrix3_Multiply_Vec3 (mat3_t a, vec3_t b, vec3_t product)
|
||||
static void Matrix3_Multiply_Vec3 (const mat3_t a, const vec3_t b, vec3_t product)
|
||||
{
|
||||
product[0] = a[0][0]*b[0] + a[0][1]*b[1] + a[0][2]*b[2];
|
||||
product[1] = a[1][0]*b[0] + a[1][1]*b[1] + a[1][2]*b[2];
|
||||
product[2] = a[2][0]*b[0] + a[2][1]*b[1] + a[2][2]*b[2];
|
||||
}
|
||||
|
||||
static int Matrix3_Compare(mat3_t in, mat3_t out)
|
||||
static int Matrix3_Compare(const mat3_t in, const mat3_t out)
|
||||
{
|
||||
return !memcmp(in, out, sizeof(mat3_t));
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ typedef struct
|
|||
unsigned int flags;
|
||||
|
||||
float curtime;
|
||||
entity_t *curentity;
|
||||
const entity_t *curentity;
|
||||
shader_t *curshader;
|
||||
texnums_t *curtexnums;
|
||||
texid_t curlightmap;
|
||||
|
@ -294,25 +294,41 @@ void BE_D3D_Reset(qboolean before)
|
|||
}
|
||||
}
|
||||
|
||||
static void D3DBE_ApplyShaderBits(unsigned int bits);
|
||||
void BE_Init(void)
|
||||
static void BE_ApplyTMUState(unsigned int tu, unsigned int flags)
|
||||
{
|
||||
be_maxpasses = MAX_TMUS;
|
||||
memset(&shaderstate, 0, sizeof(shaderstate));
|
||||
shaderstate.curvertdecl = -1;
|
||||
|
||||
FTable_Init();
|
||||
|
||||
shaderstate.dynxyz_size = sizeof(vecV_t) * DYNVBUFFSIZE;
|
||||
shaderstate.dyncol_size = sizeof(byte_vec4_t) * DYNVBUFFSIZE;
|
||||
shaderstate.dynst_size = sizeof(vec2_t) * DYNVBUFFSIZE;
|
||||
shaderstate.dynidx_size = sizeof(index_t) * DYNIBUFFSIZE;
|
||||
|
||||
BE_D3D_Reset(false);
|
||||
|
||||
/*force all state to change, thus setting a known state*/
|
||||
shaderstate.shaderbits = ~0;
|
||||
D3DBE_ApplyShaderBits(0);
|
||||
if ((flags ^ shaderstate.tmuflags[tu]) & SHADER_PASS_CLAMP)
|
||||
{
|
||||
shaderstate.tmuflags[tu] ^= SHADER_PASS_CLAMP;
|
||||
if (flags & SHADER_PASS_CLAMP)
|
||||
{
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_ADDRESSW, D3DTADDRESS_CLAMP);
|
||||
}
|
||||
else
|
||||
{
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_ADDRESSW, D3DTADDRESS_WRAP);
|
||||
}
|
||||
}
|
||||
if ((flags ^ shaderstate.tmuflags[tu]) & SHADER_PASS_NOMIPMAP)
|
||||
{
|
||||
shaderstate.tmuflags[tu] ^= SHADER_PASS_NOMIPMAP;
|
||||
/*lightmaps don't use mipmaps*/
|
||||
if (flags & SHADER_PASS_NOMIPMAP)
|
||||
{
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_MIPFILTER, D3DTEXF_NONE);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
|
||||
}
|
||||
else
|
||||
{
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void D3DBE_ApplyShaderBits(unsigned int bits)
|
||||
|
@ -424,6 +440,33 @@ static void D3DBE_ApplyShaderBits(unsigned int bits)
|
|||
}
|
||||
}
|
||||
|
||||
void BE_Init(void)
|
||||
{
|
||||
unsigned int i;
|
||||
be_maxpasses = MAX_TMUS;
|
||||
memset(&shaderstate, 0, sizeof(shaderstate));
|
||||
shaderstate.curvertdecl = -1;
|
||||
|
||||
FTable_Init();
|
||||
|
||||
shaderstate.dynxyz_size = sizeof(vecV_t) * DYNVBUFFSIZE;
|
||||
shaderstate.dyncol_size = sizeof(byte_vec4_t) * DYNVBUFFSIZE;
|
||||
shaderstate.dynst_size = sizeof(vec2_t) * DYNVBUFFSIZE;
|
||||
shaderstate.dynidx_size = sizeof(index_t) * DYNIBUFFSIZE;
|
||||
|
||||
BE_D3D_Reset(false);
|
||||
|
||||
/*force all state to change, thus setting a known state*/
|
||||
shaderstate.shaderbits = ~0;
|
||||
D3DBE_ApplyShaderBits(0);
|
||||
|
||||
for (i = 0; i < MAX_TMUS; i++)
|
||||
{
|
||||
shaderstate.tmuflags[i] = ~0;
|
||||
BE_ApplyTMUState(i, 0);
|
||||
}
|
||||
}
|
||||
|
||||
static void allocvertexbuffer(IDirect3DVertexBuffer9 *buff, unsigned int bmaxsize, unsigned int *offset, void **data, unsigned int bytes)
|
||||
{
|
||||
unsigned int boff;
|
||||
|
@ -513,40 +556,7 @@ static void SelectPassTexture(unsigned int tu, shaderpass_t *pass)
|
|||
break;
|
||||
}
|
||||
|
||||
|
||||
if ((pass->flags ^ shaderstate.tmuflags[tu]) & SHADER_PASS_CLAMP)
|
||||
{
|
||||
shaderstate.tmuflags[tu] ^= SHADER_PASS_CLAMP;
|
||||
if (pass->flags & SHADER_PASS_CLAMP)
|
||||
{
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_ADDRESSW, D3DTADDRESS_CLAMP);
|
||||
}
|
||||
else
|
||||
{
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_ADDRESSW, D3DTADDRESS_WRAP);
|
||||
}
|
||||
}
|
||||
if ((pass->flags ^ shaderstate.tmuflags[tu]) & SHADER_PASS_NOMIPMAP)
|
||||
{
|
||||
shaderstate.tmuflags[tu] ^= SHADER_PASS_NOMIPMAP;
|
||||
/*lightmaps don't use mipmaps*/
|
||||
if (pass->flags & SHADER_PASS_NOMIPMAP)
|
||||
{
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_MIPFILTER, D3DTEXF_NONE);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
|
||||
}
|
||||
else
|
||||
{
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
|
||||
IDirect3DDevice9_SetSamplerState(pD3DDev9, tu, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
|
||||
}
|
||||
}
|
||||
BE_ApplyTMUState(tu, pass->flags);
|
||||
|
||||
switch (pass->blendmode)
|
||||
{
|
||||
|
@ -556,7 +566,7 @@ static void SelectPassTexture(unsigned int tu, shaderpass_t *pass)
|
|||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_COLOROP, D3DTOP_DOTPRODUCT3);
|
||||
|
||||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
|
||||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
|
||||
// IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
|
||||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
|
||||
break;
|
||||
case GL_REPLACE:
|
||||
|
@ -568,15 +578,14 @@ static void SelectPassTexture(unsigned int tu, shaderpass_t *pass)
|
|||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
|
||||
break;
|
||||
case GL_ADD:
|
||||
if (!tu)
|
||||
goto forcemod;
|
||||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_COLORARG1, D3DTA_TEXTURE);
|
||||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_COLORARG2, D3DTA_CURRENT);
|
||||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_COLOROP, D3DTOP_ADD);
|
||||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_COLOROP, D3DTOP_BLENDTEXTUREALPHA);
|
||||
shaderstate.passcolour &= 0xff000000;
|
||||
|
||||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
|
||||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
|
||||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_ALPHAOP, D3DTOP_ADD);
|
||||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
|
||||
break;
|
||||
case GL_DECAL:
|
||||
if (!tu)
|
||||
|
@ -586,7 +595,7 @@ static void SelectPassTexture(unsigned int tu, shaderpass_t *pass)
|
|||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_COLOROP, D3DTOP_BLENDTEXTUREALPHA);
|
||||
|
||||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
|
||||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_ALPHAARG2, D3DTA_CURRENT);
|
||||
// IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_ALPHAARG2, D3DTA_CURRENT);
|
||||
IDirect3DDevice9_SetTextureStageState(pD3DDev9, tu, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -308,6 +308,9 @@ void D3D9_Upload (texid_t tex, char *name, enum uploadfmt fmt, void *data, vo
|
|||
{
|
||||
switch (fmt)
|
||||
{
|
||||
case TF_RGBX32:
|
||||
flags |= IF_NOALPHA;
|
||||
//fall through
|
||||
case TF_RGBA32:
|
||||
Upload_Texture_32(tex.ptr, data, width, height, flags);
|
||||
break;
|
||||
|
@ -387,7 +390,7 @@ texid_t D3D9_LoadTexture8Pal24 (char *identifier, int width, int height, qbyte *
|
|||
(palette24[i*3+1]<<8) |
|
||||
(palette24[i*3+0]<<0);
|
||||
}
|
||||
return D3D9_LoadTexture8Pal32(identifier, width, height, data, pal32, flags);
|
||||
return D3D9_LoadTexture8Pal32(identifier, width, height, data, (qbyte*)pal32, flags);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -2043,7 +2043,7 @@ void Shader_SetPassFlush (shaderpass_t *pass, shaderpass_t *pass2)
|
|||
{
|
||||
pass->numMergedPasses++;
|
||||
}
|
||||
else if (config_tex_env_combine || config_nv_tex_env_combine4)
|
||||
else if (pass->numMergedPasses < be_maxpasses)
|
||||
{
|
||||
if ( pass->blendmode == GL_REPLACE )
|
||||
{
|
||||
|
@ -2064,33 +2064,6 @@ void Shader_SetPassFlush (shaderpass_t *pass, shaderpass_t *pass2)
|
|||
pass->numMergedPasses++;
|
||||
}
|
||||
}
|
||||
else if (config_multitexure)
|
||||
{
|
||||
//don't merge more than 2 tmus.
|
||||
if (pass->numMergedPasses != 1)
|
||||
return;
|
||||
|
||||
// check if we can use R_RenderMeshMultitextured
|
||||
if ( pass->blendmode == GL_REPLACE )
|
||||
{
|
||||
if ( pass2->blendmode == GL_ADD && config_env_add )
|
||||
{
|
||||
pass->numMergedPasses = 2;
|
||||
}
|
||||
else if ( pass2->blendmode && pass2->blendmode != GL_DECAL )
|
||||
{
|
||||
pass->numMergedPasses = 2;
|
||||
}
|
||||
}
|
||||
else if (pass->blendmode == GL_MODULATE && pass2->blendmode == GL_MODULATE)
|
||||
{
|
||||
pass->numMergedPasses = 2;
|
||||
}
|
||||
else if (pass->blendmode == GL_ADD && pass2->blendmode == GL_ADD && config_env_add)
|
||||
{
|
||||
pass->numMergedPasses = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Shader_SetFeatures ( shader_t *s )
|
||||
|
|
|
@ -75,13 +75,12 @@ void R_DrawSkyChain (batch_t *batch)
|
|||
else
|
||||
skyshader = batch->shader;
|
||||
|
||||
#ifdef GLQUAKE
|
||||
if (skyshader->skydome)
|
||||
skyboxtex = skyshader->skydome->farbox_textures;
|
||||
else
|
||||
skyboxtex = NULL;
|
||||
|
||||
if (qrenderer == QR_OPENGL && skyboxtex && TEXVALID(*skyboxtex))
|
||||
if (skyboxtex && TEXVALID(*skyboxtex))
|
||||
{
|
||||
R_CalcSkyChainBounds(batch);
|
||||
GL_DrawSkyBox (skyboxtex, batch);
|
||||
|
@ -89,7 +88,7 @@ void R_DrawSkyChain (batch_t *batch)
|
|||
GL_SkyForceDepth(batch);
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef GLQUAKE
|
||||
if (*r_fastsky.string)
|
||||
{
|
||||
R_CalcSkyChainBounds(batch);
|
||||
|
@ -338,8 +337,8 @@ static void R_CalcSkyChainBounds (batch_t *batch)
|
|||
|
||||
for (i=0 ; i<6 ; i++)
|
||||
{
|
||||
skymins[0][i] = skymins[1][i] = 9999;
|
||||
skymaxs[0][i] = skymaxs[1][i] = -9999;
|
||||
skymins[0][i] = skymins[1][i] = -1;//9999;
|
||||
skymaxs[0][i] = skymaxs[1][i] = 1;//9999;
|
||||
}
|
||||
|
||||
// calculate vertex values for sky box
|
||||
|
@ -456,11 +455,10 @@ static void GL_SkyForceDepth(batch_t *batch)
|
|||
}
|
||||
}
|
||||
|
||||
static void GL_DrawSkySphere (batch_t *batch, shader_t *shader)
|
||||
static void R_DrawSkyMesh(batch_t *batch, mesh_t *m, shader_t *shader)
|
||||
{
|
||||
static entity_t skyent;
|
||||
batch_t b;
|
||||
mesh_t *m;
|
||||
float time = cl.gametime+realtime-cl.gametimemark;
|
||||
|
||||
float skydist = gl_maxdist.value;
|
||||
|
@ -481,35 +479,31 @@ static void GL_DrawSkySphere (batch_t *batch, shader_t *shader)
|
|||
skyent.scale = 1;
|
||||
|
||||
//FIXME: We should use the skybox clipping code and split the sphere into 6 sides.
|
||||
gl_skyspherecalc(2);
|
||||
b = *batch;
|
||||
b.meshes = 1;
|
||||
b.firstmesh = 0;
|
||||
m = &skymesh;
|
||||
b.mesh = &m;
|
||||
b.ent = &skyent;
|
||||
b.shader = shader;
|
||||
b.skin = &shader->defaulttextures;
|
||||
BE_SubmitBatch(&b);
|
||||
}
|
||||
|
||||
static void GL_DrawSkySphere (batch_t *batch, shader_t *shader)
|
||||
{
|
||||
//FIXME: We should use the skybox clipping code and split the sphere into 6 sides.
|
||||
gl_skyspherecalc(2);
|
||||
R_DrawSkyMesh(batch, &skymesh, shader);
|
||||
}
|
||||
|
||||
|
||||
#ifdef GLQUAKE
|
||||
static void GL_MakeSkyVec (float s, float t, int axis, float *vc, float *tc)
|
||||
{
|
||||
vec3_t b;
|
||||
int j, k;
|
||||
float skydist = gl_skyboxdist.value;
|
||||
extern cvar_t gl_maxdist;
|
||||
|
||||
if (!skydist)
|
||||
{
|
||||
skydist = gl_maxdist.value * 0.577;
|
||||
}
|
||||
|
||||
b[0] = s*skydist;
|
||||
b[1] = t*skydist;
|
||||
b[2] = skydist;
|
||||
b[0] = s;
|
||||
b[1] = t;
|
||||
b[2] = 1;
|
||||
|
||||
for (j=0 ; j<3 ; j++)
|
||||
{
|
||||
|
@ -538,7 +532,7 @@ static void GL_MakeSkyVec (float s, float t, int axis, float *vc, float *tc)
|
|||
}
|
||||
|
||||
|
||||
|
||||
#ifdef GLQUAKE
|
||||
|
||||
|
||||
|
||||
|
@ -675,7 +669,6 @@ R_DrawSkyBox
|
|||
==============
|
||||
*/
|
||||
static int skytexorder[6] = {0,2,1,3,4,5};
|
||||
#ifdef GLQUAKE
|
||||
static void GL_DrawSkyBox (texid_t *texnums, batch_t *s)
|
||||
{
|
||||
int i;
|
||||
|
@ -709,11 +702,6 @@ static void GL_DrawSkyBox (texid_t *texnums, batch_t *s)
|
|||
}
|
||||
}
|
||||
|
||||
qglPushMatrix ();
|
||||
qglTranslatef (r_origin[0], r_origin[1], r_origin[2]);
|
||||
if (cl.skyrotate)
|
||||
qglRotatef (cl.time * cl.skyrotate, cl.skyaxis[0], cl.skyaxis[1], cl.skyaxis[2]);
|
||||
|
||||
skyfacemesh.indexes = skyface_index;
|
||||
skyfacemesh.st_array = skyface_texcoord;
|
||||
skyfacemesh.xyz_array = skyface_vertex;
|
||||
|
@ -732,14 +720,9 @@ static void GL_DrawSkyBox (texid_t *texnums, batch_t *s)
|
|||
GL_MakeSkyVec (skymaxs[0][i], skymins[1][i], i, skyface_vertex[3], skyface_texcoord[3]);
|
||||
|
||||
skyboxface->defaulttextures.base = texnums[skytexorder[i]];
|
||||
BE_DrawMesh_Single(skyboxface, &skyfacemesh, NULL, &skyboxface->defaulttextures);
|
||||
R_DrawSkyMesh(s, &skyfacemesh, skyboxface);
|
||||
}
|
||||
|
||||
qglPopMatrix ();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//===============================================================
|
||||
|
||||
|
|
Loading…
Reference in a new issue