Esempio n. 1
0
void mygl_alloc(sdl_data *sd, int len, char *bp)
{
   char *start;
   unsigned size;

   size = * (unsigned *) bp;
   bp = start = sdl_getbuff(sd, size);
   sdl_send(sd, size);
}
Esempio n. 2
0
void es_getError(sdl_data *sd, int len, char *buff)
{
    char * err, *bp, *start;
    int length;
    err = SDL_GetError();
    length = strlen(err);
    bp = start = sdl_getbuff(sd, length);
    while(*err != '\0') {
        put8(bp, *err++);
    }
    sdl_send(sd, bp - start);
}
Esempio n. 3
0
void es_getAudioStatus(sdl_data *sd, int len, char *buff)
{
   int sendlen;
   char *bp, *start;
   SDL_audiostatus s;
   
   s = SDL_GetAudioStatus();
   start = bp = sdl_getbuff(sd, 1);
   put8(bp, s);
   sendlen = (int) (bp - start);
   sdl_send(sd, sendlen);
}
Esempio n. 4
0
void es_openAudio(sdl_data *sd, int len, char *buff)
{
   int sendlen;
   char *bp, *start;
   int ff;
   SDL_AudioSpec desired, obtained, *obptr;
   bp = buff;
   ff = get8(bp);
   desired.freq     = get32be(bp);
   desired.format   = get16be(bp);
   desired.channels = get8(bp);
   desired.samples  = get16be(bp);
   desired.padding  = get16be(bp);
   desired.callback = myaudiomixer;

   /* Init the global data structures */
   wave.sound = NULL;
   wave.soundpos = 0;
   wave.soundlen = 0;

   if(ff == 1)  /* Force the requested format */
      obptr = NULL;
   else 
      obptr = &obtained;
   
   bp = start = sdl_getbuff(sd, 16);
   if( SDL_OpenAudio(&desired, obptr) < 0 ) {
      fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError());		
   } else {
      if(ff == 1) 
	  obptr = &desired;
       put32be(bp, obptr->freq);
       put16be(bp, obptr->format);
       put8(bp, obptr->channels);
       put8(bp, obptr->silence);
       put16be(bp, obptr->samples);
       put16be(bp, obptr->padding);
       put32be(bp, obptr->size);
       wave.silence = obptr->silence;
   } 
  
   sendlen = (int) (bp - start);
   sdl_send(sd, sendlen);
}
Esempio n. 5
0
void play_audio(sdl_data *sd, int len, char *buff) 
{
   char *bp, *start;
   int sendlen;
   void * sbuff;
   bp = buff;
   
   SDL_LockAudio();   
   
   POPGLPTR(sbuff, bp);
   wave.sound    = sbuff;
   wave.soundlen = get32be(bp);
   wave.repeat   = get32be(bp);
   wave.soundpos = 0;
   
   SDL_UnlockAudio();
   bp = start = sdl_getbuff(sd, 0);
   sendlen = (int) (bp - start);
   sdl_send(sd, sendlen);
}
Esempio n. 6
0
void es_convertAudio(sdl_data *sd, int len, char *buff)
{
   char *bp, *start;
   void *mptr;
   Uint16 oformat, nformat;
   Uint8  ochannels, nchannels;
   int    ofreq, nfreq, osize, nsize;
   SDL_AudioCVT  wav_cvt;
   int sendlen;

   bp = buff;
   oformat = get16be(bp);
   ochannels = get8(bp);
   ofreq = get32be(bp);
   nformat = get16be(bp);
   nchannels = get8(bp);
   nfreq = get32be(bp);
   POPGLPTR(mptr, bp);
   osize = get32be(bp);

   bp = start = sdl_getbuff(sd, 12);
   
   /* Build AudioCVT */
   if(SDL_BuildAudioCVT(&wav_cvt,oformat, ochannels, ofreq,
			nformat, nchannels, nfreq) >= 0) {      
      /* Setup for conversion */
      nsize = osize*wav_cvt.len_mult;      
      wav_cvt.buf=(Uint8 *)malloc(nsize);
      if(wav_cvt.buf != NULL) {
	 wav_cvt.len=osize;
	 memcpy(wav_cvt.buf, mptr, osize);
	 if (SDL_ConvertAudio(&wav_cvt) >= 0) {
	   PUSHGLPTR(wav_cvt.buf, bp);
	   put32be(bp, nsize);	 	
	 }
      }
   }   
   sendlen = (int) (bp - start);
   sdl_send(sd, sendlen);
}
Esempio n. 7
0
void copySdlImage2GLArray(sdl_data *sd, int len, char * buff)
{
  Uint8 *rowhi, *rowlo, type;
  SDL_Surface *image;
  GLubyte * mem;
  char *bp, *start;
  int i, j = 0, k, sendlen;
  Uint8  rs,bs,gs,as;

  bp = buff;
  POPGLPTR(image, bp);
  type = *bp;
  if (sd->next_bin == 1) {
    mem = (GLubyte *) sd->bin[0].base;
 
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
    rs = (2 - image->format->Rshift/8);
    gs = (2 - image->format->Gshift/8);
    bs = (2 - image->format->Bshift/8);
    as = (2 - image->format->Ashift/8);     
#else
    rs = image->format->Rshift/8;
    gs = image->format->Gshift/8;
    bs = image->format->Bshift/8;
    as = image->format->Ashift/8;     
#endif   
    /* GL surfaces are upsidedown (according to SDL examples)?? */
    k = 0;
    rowhi = (Uint8 *)image->pixels;
    rowlo = rowhi + (image->h * image->pitch) - image->pitch;
   
    for(i=0; i<image->h; ++i ) {
      for(j=0; j<image->w; ++j ) {
	switch(image->format->BytesPerPixel)
	  {
	  case 1:
	    mem[k++] = image->format->palette->colors[rowlo[j]].r;
	    mem[k++] = image->format->palette->colors[rowlo[j]].g;
	    mem[k++] = image->format->palette->colors[rowlo[j]].b;
	    if(type == 4)
	      mem[k++] = 0;	       
	    break;   
	  case 3:
	    mem[k++] = rowlo[j*3 + rs];
	    mem[k++] = rowlo[j*3 + gs];
	    mem[k++] = rowlo[j*3 + bs];
	    if(type == 4) 
	      mem[k++] = 0; 
	    break;
	  case 4:
	    mem[k++] = rowlo[j*4 + rs];
	    mem[k++] = rowlo[j*4 + gs];
	    mem[k++] = rowlo[j*4 + bs];
	    if(type == 4)
	      mem[k++] = rowlo[j*4 + as];
	    break;
	  }
      }
      rowlo -= image->pitch;
    }
    /*  fprintf(stderr, "i %d, j %d k%d\n\r", i, j, k); */
    bp = start = sdl_getbuff(sd, 1);
    put8(bp, 1);
    sendlen = bp - start;
    sdl_send(sd, sendlen);
    sdl_free_binaries(sd);
  }
}