mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2025-02-18 10:02:12 +00:00
sind_dma.c aufgeräumt
This commit is contained in:
parent
ca7ab15c1c
commit
1c161a9930
2 changed files with 33 additions and 87 deletions
|
@ -34,7 +34,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#define SHELL_BLUE_COLOR 0xF3
|
#define SHELL_BLUE_COLOR 0xF3
|
||||||
|
|
||||||
#define SHELL_RG_COLOR 0xDC
|
#define SHELL_RG_COLOR 0xDC
|
||||||
//#define SHELL_RB_COLOR 0x86
|
|
||||||
#define SHELL_RB_COLOR 0x68
|
#define SHELL_RB_COLOR 0x68
|
||||||
#define SHELL_BG_COLOR 0x78
|
#define SHELL_BG_COLOR 0x78
|
||||||
|
|
||||||
|
@ -74,20 +73,12 @@ typedef struct entity_s
|
||||||
|
|
||||||
struct image_s *skin; // NULL for inline skin
|
struct image_s *skin; // NULL for inline skin
|
||||||
int flags;
|
int flags;
|
||||||
#ifdef QMAX
|
|
||||||
int renderfx;
|
|
||||||
#endif
|
|
||||||
} entity_t;
|
} entity_t;
|
||||||
|
|
||||||
#define ENTITY_FLAGS 68
|
#define ENTITY_FLAGS 68
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
#ifdef QMAX
|
|
||||||
qboolean spotlight;
|
|
||||||
vec3_t direction;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
vec3_t origin;
|
vec3_t origin;
|
||||||
vec3_t color;
|
vec3_t color;
|
||||||
float intensity;
|
float intensity;
|
||||||
|
@ -98,17 +89,6 @@ typedef struct
|
||||||
vec3_t origin;
|
vec3_t origin;
|
||||||
int color;
|
int color;
|
||||||
float alpha;
|
float alpha;
|
||||||
#ifdef QMAX
|
|
||||||
vec3_t angle;
|
|
||||||
float size;
|
|
||||||
int flags;
|
|
||||||
|
|
||||||
float red;
|
|
||||||
float green;
|
|
||||||
float blue;
|
|
||||||
|
|
||||||
int image;
|
|
||||||
#endif
|
|
||||||
} particle_t;
|
} particle_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -141,8 +121,6 @@ typedef struct
|
||||||
particle_t *particles;
|
particle_t *particles;
|
||||||
} refdef_t;
|
} refdef_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define API_VERSION 3
|
#define API_VERSION 3
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -180,18 +158,8 @@ typedef struct
|
||||||
void (*EndRegistration) (void);
|
void (*EndRegistration) (void);
|
||||||
|
|
||||||
void (*RenderFrame) (refdef_t *fd);
|
void (*RenderFrame) (refdef_t *fd);
|
||||||
|
void (*DrawStretchPic) (int x, int y, int w, int h, char *name);
|
||||||
#ifdef QMAX
|
void (*DrawChar) (int x, int y, int c);
|
||||||
void (*AddStain) (vec3_t org, float intensity, float r, float g, float b);
|
|
||||||
void (*SetParticlePicture) (int num, char *name);
|
|
||||||
void (*DrawScaledPic) (int x, int y, float scale, float alpha, char *name);
|
|
||||||
float (*CharMap_Scale) (void);
|
|
||||||
void (*DrawStretchPic) (int x, int y, int w, int h, char *name, float alpha);
|
|
||||||
void (*DrawChar) (int x, int y, int c, int alpha);
|
|
||||||
#else
|
|
||||||
void (*DrawStretchPic) (int x, int y, int w, int h, char *name);
|
|
||||||
void (*DrawChar) (int x, int y, int c);
|
|
||||||
#endif
|
|
||||||
void (*DrawGetPicSize) (int *w, int *h, char *name); // will return 0 0 if not found
|
void (*DrawGetPicSize) (int *w, int *h, char *name); // will return 0 0 if not found
|
||||||
void (*DrawPic) (int x, int y, char *name);
|
void (*DrawPic) (int x, int y, char *name);
|
||||||
void (*DrawTileClear) (int x, int y, int w, int h, char *name);
|
void (*DrawTileClear) (int x, int y, int w, int h, char *name);
|
||||||
|
@ -246,28 +214,8 @@ typedef struct
|
||||||
qboolean (*Vid_GetModeInfo)( int *width, int *height, int mode );
|
qboolean (*Vid_GetModeInfo)( int *width, int *height, int mode );
|
||||||
void (*Vid_MenuInit)( void );
|
void (*Vid_MenuInit)( void );
|
||||||
void (*Vid_NewWindow)( int width, int height );
|
void (*Vid_NewWindow)( int width, int height );
|
||||||
|
|
||||||
#ifdef QMAX
|
|
||||||
void (*SetParticlePics) (void);
|
|
||||||
#endif
|
|
||||||
} refimport_t;
|
} refimport_t;
|
||||||
|
|
||||||
#ifdef QMAX
|
|
||||||
#define DIV254BY255 (0.9960784313725490196078431372549f)
|
|
||||||
#define DIV255 (0.003921568627450980392156862745098f)
|
|
||||||
#define DIV256 (0.00390625f)
|
|
||||||
#define DIV512 (0.001953125f)
|
|
||||||
#define TWOTHIRDS (0.666666666666666666666666666666666666666f)
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
vec3_t origin;
|
|
||||||
vec3_t color;
|
|
||||||
float intensity;
|
|
||||||
} dstain_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// this is the only function actually exported at the linker level
|
// this is the only function actually exported at the linker level
|
||||||
typedef refexport_t (*GetRefAPI_t) (refimport_t);
|
typedef refexport_t (*GetRefAPI_t) (refimport_t);
|
||||||
|
|
||||||
|
|
|
@ -382,7 +382,7 @@ channel_t *S_PickChannel(int entnum, int entchannel)
|
||||||
if (entchannel<0)
|
if (entchannel<0)
|
||||||
Com_Error (ERR_DROP, "S_PickChannel: entchannel<0");
|
Com_Error (ERR_DROP, "S_PickChannel: entchannel<0");
|
||||||
|
|
||||||
// Check for replacement sound, or find the best one to replace
|
// Check for replacement sound, or find the best one to replace
|
||||||
first_to_die = -1;
|
first_to_die = -1;
|
||||||
life_left = 0x7fffffff;
|
life_left = 0x7fffffff;
|
||||||
for (ch_idx=0 ; ch_idx < MAX_CHANNELS ; ch_idx++)
|
for (ch_idx=0 ; ch_idx < MAX_CHANNELS ; ch_idx++)
|
||||||
|
@ -435,7 +435,7 @@ void S_SpatializeOrigin (vec3_t origin, float master_vol, float dist_mult, int *
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// calculate stereo seperation and distance attenuation
|
// calculate stereo seperation and distance attenuation
|
||||||
VectorSubtract(origin, listener_origin, source_vec);
|
VectorSubtract(origin, listener_origin, source_vec);
|
||||||
|
|
||||||
dist = VectorNormalize(source_vec);
|
dist = VectorNormalize(source_vec);
|
||||||
|
@ -448,17 +448,17 @@ void S_SpatializeOrigin (vec3_t origin, float master_vol, float dist_mult, int *
|
||||||
|
|
||||||
if (dma.channels == 1 || !dist_mult)
|
if (dma.channels == 1 || !dist_mult)
|
||||||
{ // no attenuation = no spatialization
|
{ // no attenuation = no spatialization
|
||||||
rscale = 1.0;
|
rscale = 1.0f;
|
||||||
lscale = 1.0;
|
lscale = 1.0f;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rscale = 0.5 * (1.0 + dot);
|
rscale = 0.5f * (1.0f + dot);
|
||||||
lscale = 0.5*(1.0 - dot);
|
lscale = 0.5f * (1.0f - dot);
|
||||||
}
|
}
|
||||||
|
|
||||||
// add in distance effect
|
// add in distance effect
|
||||||
scale = (1.0 - dist) * rscale;
|
scale = (1.0f - dist) * rscale;
|
||||||
*right_vol = (int) (master_vol * scale);
|
*right_vol = (int) (master_vol * scale);
|
||||||
if (*right_vol < 0)
|
if (*right_vol < 0)
|
||||||
*right_vol = 0;
|
*right_vol = 0;
|
||||||
|
@ -493,7 +493,7 @@ void S_Spatialize(channel_t *ch)
|
||||||
else
|
else
|
||||||
CL_GetEntitySoundOrigin (ch->entnum, origin);
|
CL_GetEntitySoundOrigin (ch->entnum, origin);
|
||||||
|
|
||||||
S_SpatializeOrigin (origin, ch->master_vol, ch->dist_mult, &ch->leftvol, &ch->rightvol);
|
S_SpatializeOrigin (origin, (float)ch->master_vol, ch->dist_mult, &ch->leftvol, &ch->rightvol);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -564,9 +564,9 @@ void S_IssuePlaysound (playsound_t *ps)
|
||||||
|
|
||||||
// spatialize
|
// spatialize
|
||||||
if (ps->attenuation == ATTN_STATIC)
|
if (ps->attenuation == ATTN_STATIC)
|
||||||
ch->dist_mult = ps->attenuation * 0.001;
|
ch->dist_mult = ps->attenuation * 0.001f;
|
||||||
else
|
else
|
||||||
ch->dist_mult = ps->attenuation * 0.0005;
|
ch->dist_mult = ps->attenuation * 0.0005f;
|
||||||
ch->master_vol = ps->volume;
|
ch->master_vol = ps->volume;
|
||||||
ch->entnum = ps->entnum;
|
ch->entnum = ps->entnum;
|
||||||
ch->entchannel = ps->entchannel;
|
ch->entchannel = ps->entchannel;
|
||||||
|
@ -695,16 +695,16 @@ void S_StartSound(vec3_t origin, int entnum, int entchannel, sfx_t *sfx, float f
|
||||||
ps->sfx = sfx;
|
ps->sfx = sfx;
|
||||||
|
|
||||||
// drift s_beginofs
|
// drift s_beginofs
|
||||||
start = cl.frame.servertime * 0.001 * dma.speed + s_beginofs;
|
start = (int)(cl.frame.servertime * 0.001f * dma.speed + s_beginofs);
|
||||||
if (start < paintedtime)
|
if (start < paintedtime)
|
||||||
{
|
{
|
||||||
start = paintedtime;
|
start = paintedtime;
|
||||||
s_beginofs = start - (cl.frame.servertime * 0.001 * dma.speed);
|
s_beginofs = (int)(start - (cl.frame.servertime * 0.001f * dma.speed));
|
||||||
}
|
}
|
||||||
else if (start > paintedtime + 0.3 * dma.speed)
|
else if (start > paintedtime + 0.3f * dma.speed)
|
||||||
{
|
{
|
||||||
start = paintedtime + 0.1 * dma.speed;
|
start = (int)(paintedtime + 0.1f * dma.speed);
|
||||||
s_beginofs = start - (cl.frame.servertime * 0.001 * dma.speed);
|
s_beginofs = (int)(start - (cl.frame.servertime * 0.001f * dma.speed));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -714,7 +714,7 @@ void S_StartSound(vec3_t origin, int entnum, int entchannel, sfx_t *sfx, float f
|
||||||
if (!timeofs)
|
if (!timeofs)
|
||||||
ps->begin = paintedtime;
|
ps->begin = paintedtime;
|
||||||
else
|
else
|
||||||
ps->begin = start + timeofs * dma.speed;
|
ps->begin = (int)(start + timeofs * dma.speed);
|
||||||
|
|
||||||
// sort into the pending sound list
|
// sort into the pending sound list
|
||||||
for (sort = s_pendingplays.next ;
|
for (sort = s_pendingplays.next ;
|
||||||
|
@ -870,7 +870,7 @@ void S_AddLoopSounds (void)
|
||||||
ent = &cl_parse_entities[num];
|
ent = &cl_parse_entities[num];
|
||||||
|
|
||||||
// find the total contribution of all sounds of this type
|
// find the total contribution of all sounds of this type
|
||||||
S_SpatializeOrigin (ent->origin, 255.0, SOUND_LOOPATTENUATE,
|
S_SpatializeOrigin (ent->origin, 255.0f, SOUND_LOOPATTENUATE,
|
||||||
&left_total, &right_total);
|
&left_total, &right_total);
|
||||||
for (j=i+1 ; j<cl.frame.num_entities ; j++)
|
for (j=i+1 ; j<cl.frame.num_entities ; j++)
|
||||||
{
|
{
|
||||||
|
@ -881,7 +881,7 @@ void S_AddLoopSounds (void)
|
||||||
num = (cl.frame.parse_entities + j)&(MAX_PARSE_ENTITIES-1);
|
num = (cl.frame.parse_entities + j)&(MAX_PARSE_ENTITIES-1);
|
||||||
ent = &cl_parse_entities[num];
|
ent = &cl_parse_entities[num];
|
||||||
|
|
||||||
S_SpatializeOrigin (ent->origin, 255.0, SOUND_LOOPATTENUATE,
|
S_SpatializeOrigin (ent->origin, 255.0f, SOUND_LOOPATTENUATE,
|
||||||
&left, &right);
|
&left, &right);
|
||||||
left_total += left;
|
left_total += left;
|
||||||
right_total += right;
|
right_total += right;
|
||||||
|
@ -948,7 +948,6 @@ void S_RawSamples (int samples, int rate, int width, int channels, byte *data)
|
||||||
s_rawend = paintedtime;
|
s_rawend = paintedtime;
|
||||||
scale = (float)rate / dma.speed;
|
scale = (float)rate / dma.speed;
|
||||||
|
|
||||||
//Com_Printf ("%i < %i < %i\n", soundtime, paintedtime, s_rawend);
|
|
||||||
if (channels == 2 && width == 2)
|
if (channels == 2 && width == 2)
|
||||||
{
|
{
|
||||||
if (scale == 1.0)
|
if (scale == 1.0)
|
||||||
|
@ -967,7 +966,7 @@ void S_RawSamples (int samples, int rate, int width, int channels, byte *data)
|
||||||
{
|
{
|
||||||
for (i=0 ; ; i++)
|
for (i=0 ; ; i++)
|
||||||
{
|
{
|
||||||
src = i*scale;
|
src = (int)(i*scale);
|
||||||
if (src >= samples)
|
if (src >= samples)
|
||||||
break;
|
break;
|
||||||
dst = s_rawend&(MAX_RAW_SAMPLES-1);
|
dst = s_rawend&(MAX_RAW_SAMPLES-1);
|
||||||
|
@ -983,7 +982,7 @@ void S_RawSamples (int samples, int rate, int width, int channels, byte *data)
|
||||||
{
|
{
|
||||||
for (i=0 ; ; i++)
|
for (i=0 ; ; i++)
|
||||||
{
|
{
|
||||||
src = i*scale;
|
src = (int)(i*scale);
|
||||||
if (src >= samples)
|
if (src >= samples)
|
||||||
break;
|
break;
|
||||||
dst = s_rawend&(MAX_RAW_SAMPLES-1);
|
dst = s_rawend&(MAX_RAW_SAMPLES-1);
|
||||||
|
@ -998,7 +997,7 @@ void S_RawSamples (int samples, int rate, int width, int channels, byte *data)
|
||||||
{
|
{
|
||||||
for (i=0 ; ; i++)
|
for (i=0 ; ; i++)
|
||||||
{
|
{
|
||||||
src = i*scale;
|
src = (int)(i*scale);
|
||||||
if (src >= samples)
|
if (src >= samples)
|
||||||
break;
|
break;
|
||||||
dst = s_rawend&(MAX_RAW_SAMPLES-1);
|
dst = s_rawend&(MAX_RAW_SAMPLES-1);
|
||||||
|
@ -1013,7 +1012,7 @@ void S_RawSamples (int samples, int rate, int width, int channels, byte *data)
|
||||||
{
|
{
|
||||||
for (i=0 ; ; i++)
|
for (i=0 ; ; i++)
|
||||||
{
|
{
|
||||||
src = i*scale;
|
src = (int)(i*scale);
|
||||||
if (src >= samples)
|
if (src >= samples)
|
||||||
break;
|
break;
|
||||||
dst = s_rawend&(MAX_RAW_SAMPLES-1);
|
dst = s_rawend&(MAX_RAW_SAMPLES-1);
|
||||||
|
@ -1103,7 +1102,7 @@ void S_Update(vec3_t origin, vec3_t forward, vec3_t right, vec3_t up)
|
||||||
Com_Printf ("----(%i)---- painted: %i\n", total, paintedtime);
|
Com_Printf ("----(%i)---- painted: %i\n", total, paintedtime);
|
||||||
}
|
}
|
||||||
|
|
||||||
// mix some sound
|
// mix some sound
|
||||||
S_Update_();
|
S_Update_();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1116,8 +1115,8 @@ void GetSoundtime(void)
|
||||||
|
|
||||||
fullsamples = dma.samples / dma.channels;
|
fullsamples = dma.samples / dma.channels;
|
||||||
|
|
||||||
// it is possible to miscount buffers if it has wrapped twice between
|
// it is possible to miscount buffers if it has wrapped twice between
|
||||||
// calls to S_Update. Oh well.
|
// calls to S_Update. Oh well.
|
||||||
samplepos = SNDDMA_GetDMAPos();
|
samplepos = SNDDMA_GetDMAPos();
|
||||||
|
|
||||||
if (samplepos < oldsamplepos)
|
if (samplepos < oldsamplepos)
|
||||||
|
@ -1150,19 +1149,18 @@ void S_Update_(void)
|
||||||
if (!dma.buffer)
|
if (!dma.buffer)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Updates DMA time
|
// Updates DMA time
|
||||||
GetSoundtime();
|
GetSoundtime();
|
||||||
|
|
||||||
// check to make sure that we haven't overshot
|
// check to make sure that we haven't overshot
|
||||||
if (paintedtime < soundtime)
|
if (paintedtime < soundtime)
|
||||||
{
|
{
|
||||||
Com_DPrintf ("S_Update_ : overflow\n");
|
Com_DPrintf ("S_Update_ : overflow\n");
|
||||||
paintedtime = soundtime;
|
paintedtime = soundtime;
|
||||||
}
|
}
|
||||||
|
|
||||||
// mix ahead of current position
|
// mix ahead of current position
|
||||||
endtime = soundtime + s_mixahead->value * dma.speed;
|
endtime = (int)(soundtime + s_mixahead->value * dma.speed);
|
||||||
//endtime = (soundtime + 4096) & ~4095;
|
|
||||||
|
|
||||||
// mix to an even submission block size
|
// mix to an even submission block size
|
||||||
endtime = (endtime + dma.submission_chunk-1)
|
endtime = (endtime + dma.submission_chunk-1)
|
||||||
|
@ -1195,11 +1193,11 @@ void S_Play(void)
|
||||||
{
|
{
|
||||||
if (!strrchr(Cmd_Argv(i), '.'))
|
if (!strrchr(Cmd_Argv(i), '.'))
|
||||||
{
|
{
|
||||||
strcpy(name, Cmd_Argv(i));
|
strncpy(name, Cmd_Argv(i), sizeof(name)-5);
|
||||||
strcat(name, ".wav");
|
strcat(name, ".wav");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
strcpy(name, Cmd_Argv(i));
|
strncpy(name, Cmd_Argv(i), sizeof(name)-1);
|
||||||
sfx = S_RegisterSound(name);
|
sfx = S_RegisterSound(name);
|
||||||
S_StartSound(NULL, cl.playernum+1, 0, sfx, 1.0, 1.0, 0);
|
S_StartSound(NULL, cl.playernum+1, 0, sfx, 1.0, 1.0, 0);
|
||||||
i++;
|
i++;
|
||||||
|
|
Loading…
Reference in a new issue