sind_dma.c aufgeräumt

This commit is contained in:
Yamagi Burmeister 2009-03-03 11:00:08 +00:00
parent ca7ab15c1c
commit 1c161a9930
2 changed files with 33 additions and 87 deletions

View file

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

View file

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