static int l_setbackground( lua_State* L ) { gwlua_t* state = get_state( L ); rl_image_t*** picture = (rl_image_t***)luaL_checkudata( L, 1, "picture" ); rl_image_t* bg = **picture; int width = MAX( bg->width, 480 ); if ( rl_backgrnd_create( width, bg->height ) ) { return luaL_error( L, "out of memory allocating the background framebuffer" ); } int x0 = ( width - bg->width ) / 2; state->screen = rl_backgrnd_fb( &state->width, &state->height ); rl_backgrnd_clear( 0 ); rl_image_blit_nobg( bg, x0, 0 ); rl_sprites_translate( x0, 0 ); gwlua_set_fb( state->width, state->height ); return 0; }
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; }