コード例 #1
0
ファイル: rl_image.c プロジェクト: kurumushi/gw-libretro
void rl_imageset_destroy( const rl_imageset_t* imageset )
{
  for ( int i = imageset->num_images - 1; i >= 0; --i )
  {
    rl_image_destroy( imageset->images[ i ] );
  }
  
  rl_free( (void*)imageset );
}
コード例 #2
0
ファイル: libretro.c プロジェクト: RobLoach/retroluxury
void retro_unload_game( void )
{
  rl_sound_destroy( &state.sound );
  rl_snddata_destroy( &state.snddata );
  rl_sound_stop( state.music );
  
  for ( unsigned i = 0; i < COUNT; i++ )
  {
    rl_sprite_destroy( state.smiles[ i ].sprite );
  }
  
  rl_imgdata_destroy( &state.imgdata );
  rl_image_destroy( &state.image );
  rl_backgrnd_destroy();
}
コード例 #3
0
ファイル: rl_image.c プロジェクト: kurumushi/gw-libretro
rl_imageset_t* rl_imageset_create( const void* data, size_t size )
{
  union
  {
    const void*     restrict v;
    const uint8_t*  restrict u8;
    const uint16_t* restrict u16;
    const uint32_t* restrict u32;
  }
  ptr;
  
  ptr.v = data;
  
  int num_images = ne16( *ptr.u16++ );
  
  rl_imageset_t* imageset = (rl_imageset_t*)rl_malloc( sizeof( rl_imageset_t ) + num_images * sizeof( rl_image_t* ) );
  
  if ( imageset )
  {
    imageset->num_images = num_images;
    
    for ( int i = 0; i < num_images; i++ )
    {
      size_t image_size = ne32( *ptr.u32++ );
      imageset->images[ i ] = rl_image_create( ptr.v, image_size );
      
      if ( !imageset->images[ i ] )
      {
        for ( int j = i - 1; j >= 0; --j )
        {
          rl_image_destroy( (void*)imageset->images[ j ] );
        }
        
        rl_free( imageset );
        return NULL;
      }
      
      ptr.u8 += image_size;
    }
    
    return imageset;
  }
  
  return NULL;
}
コード例 #4
0
ファイル: libretro.c プロジェクト: RobLoach/retroluxury
bool retro_load_game( const struct retro_game_info* info )
{
  enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_RGB565;
  
  if ( !env_cb( RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt ) )
  {
    log_cb( RETRO_LOG_ERROR, "retroluxury needs RGB565\n" );
    return false;
  }
  
  rl_image_init();
  rl_sprite_init();
  
  if ( rl_backgrnd_create( WIDTH, HEIGHT, RL_BACKGRND_EXACT ) != 0 )
  {
    log_cb( RETRO_LOG_ERROR, "Error creating the framebuffer\n" );
    return false;
  }
  
  rl_backgrnd_clear( RL_COLOR( 64, 64, 64 ) );
  
  if ( rl_imgdata_create( &state.imgdata, res_smile_png, sizeof( res_smile_png ) ) != 0 )
  {
    log_cb( RETRO_LOG_ERROR, "Error loading image smile.png\n" );
error1:
    rl_backgrnd_destroy();
    return false;
  }
  
  if ( rl_image_create( &state.image, &state.imgdata, 0, 0 ) != 0 )
  {
    log_cb( RETRO_LOG_ERROR, "Error creating RLE-image\n" );
error2:
    rl_imgdata_destroy( &state.imgdata );
    goto error1;
  }
  
  for ( unsigned i = 0; i < COUNT; i++ )
  {
    rl_sprite_t* sprite = rl_sprite_create();
    
    if ( sprite == NULL )
    {
      log_cb( RETRO_LOG_ERROR, "Error creating sprite %u of %u\n", i, COUNT );
error3:
      rl_image_destroy( &state.image );
      
      for ( i = 0; i < COUNT; i++ )
      {
        if ( state.smiles[ i ].sprite != NULL )
        {
          rl_sprite_destroy( state.smiles[ i ].sprite );
        }
      }
      
      goto error2;
    }
    
    sprite->x = rand() % ( WIDTH - state.imgdata.width + 1 );
    sprite->y = rand() % ( HEIGHT - state.imgdata.height + 1 );
    sprite->layer = i;
    sprite->image = &state.image;
    
    state.smiles[ i ].sprite = sprite;
    state.smiles[ i ].dx = rand() & 1 ? -1 : 1;
    state.smiles[ i ].dy = rand() & 1 ? -1 : 1;
  }
  
  state.music = rl_sound_play_ogg( res_sketch008_ogg, sizeof( res_sketch008_ogg ), 1, NULL );
  
  if ( state.music == NULL )
  {
    log_cb( RETRO_LOG_ERROR, "Error loading music sketch008.ogg\n" );
    goto error3;
  }
  
  if ( rl_snddata_create( &state.snddata, res_bounce_wav, sizeof( res_bounce_wav ) ) != 0 )
  {
    log_cb( RETRO_LOG_ERROR, "Error loading wave bounce.wav\n" );
error4:
    rl_sound_stop( state.music );
    goto error3;
  }
  
  if ( rl_sound_create( &state.sound, &state.snddata ) != 0 )
  {
    log_cb( RETRO_LOG_ERROR, "Error creating PCM data\n" );
//error5:
    rl_snddata_destroy( &state.snddata );
    goto error4;
  }
  
  return true;
}