resource: more consistent API function names

This commit is contained in:
Andrei Alexeyev 2023-03-22 23:14:10 +01:00
parent ef762dc48b
commit ad295005db
No known key found for this signature in database
GPG key ID: 72D26128040B9690
47 changed files with 192 additions and 198 deletions

View file

@ -392,12 +392,12 @@ static void *update_sounds_callback(const char *name, Resource *res, void *arg)
}
void reset_all_sfx(void) {
resource_for_each(RES_SFX, update_sounds_callback, (void*)true);
res_for_each(RES_SFX, update_sounds_callback, (void*)true);
list_foreach(&audio.sound_queue, discard_enqueued_sound, NULL);
}
void update_all_sfx(void) {
resource_for_each(RES_SFX, update_sounds_callback, (void*)false);
res_for_each(RES_SFX, update_sounds_callback, (void*)false);
for(struct enqueued_sound *s = audio.sound_queue, *next; s; s = next) {
next = (struct enqueued_sound*)s->next;

View file

@ -1617,7 +1617,7 @@ void _begin_boss_attack_task(const BossAttackTaskArgs *args) {
}
void boss_preload(void) {
preload_resources(RES_SFX, RESF_OPTIONAL,
res_preload_multi(RES_SFX, RESF_OPTIONAL,
"charge_generic",
"charge_extra",
"spellend",
@ -1627,7 +1627,7 @@ void boss_preload(void) {
"bossdeath",
NULL);
preload_resources(RES_SPRITE, RESF_DEFAULT,
res_preload_multi(RES_SPRITE, RESF_DEFAULT,
"boss_circle",
"boss_indicator",
"boss_spellcircle0",
@ -1636,7 +1636,7 @@ void boss_preload(void) {
"spell",
NULL);
preload_resources(RES_SHADER_PROGRAM, RESF_DEFAULT,
res_preload_multi(RES_SHADER_PROGRAM, RESF_DEFAULT,
"boss_zoom",
"boss_death",
"spellcard_intro",
@ -1650,7 +1650,7 @@ void boss_preload(void) {
StageInfo *s = global.stage;
if(s->type != STAGE_SPELL || s->spell->type == AT_ExtraSpell) {
preload_resources(RES_TEXTURE, RESF_DEFAULT,
res_preload_multi(RES_TEXTURE, RESF_DEFAULT,
"stage3/wspellclouds",
"stage4/kurumibg2",
NULL);

View file

@ -555,21 +555,21 @@ static void credits_free(void) {
}
void credits_preload(void) {
preload_resource(RES_BGM, "credits", RESF_OPTIONAL);
preload_resources(RES_SHADER_PROGRAM, RESF_DEFAULT,
res_preload(RES_BGM, "credits", RESF_OPTIONAL);
res_preload_multi(RES_SHADER_PROGRAM, RESF_DEFAULT,
"pbr",
"envmap_reflect",
"stage6_sky",
NULL);
preload_resource(RES_SPRITE, "kyoukkuri", RESF_DEFAULT);
preload_resources(RES_TEXTURE, RESF_DEFAULT,
res_preload(RES_SPRITE, "kyoukkuri", RESF_DEFAULT);
res_preload_multi(RES_TEXTURE, RESF_DEFAULT,
"loading", // for transition
"stage6/sky",
NULL);
preload_resources(RES_MATERIAL, RESF_DEFAULT,
res_preload_multi(RES_MATERIAL, RESF_DEFAULT,
"credits/tower",
NULL);
preload_resources(RES_MODEL, RESF_DEFAULT,
res_preload_multi(RES_MODEL, RESF_DEFAULT,
"credits/metal_columns",
"credits/tower",
"cube",

View file

@ -409,7 +409,7 @@ static void cutscene_end_loop(void *ctx) {
static void cutscene_preload(const CutscenePhase phases[]) {
for(const CutscenePhase *p = phases; p->background; ++p) {
if(*p->background) {
preload_resource(RES_TEXTURE, p->background, RESF_DEFAULT);
res_preload(RES_TEXTURE, p->background, RESF_DEFAULT);
}
}
}

View file

@ -387,5 +387,5 @@ bool dialog_is_active(Dialog *d) {
}
void dialog_preload(void) {
preload_resource(RES_SHADER_PROGRAM, "text_dialog", RESF_DEFAULT);
res_preload(RES_SHADER_PROGRAM, "text_dialog", RESF_DEFAULT);
}

View file

@ -56,6 +56,6 @@ const Color *difficulty_color(Difficulty diff) {
void difficulty_preload(void) {
for(Difficulty diff = D_Easy; diff < NUM_SELECTABLE_DIFFICULTIES + D_Easy; ++diff) {
preload_resource(RES_SPRITE, difficulty_sprite_name(diff), RESF_PERMANENT);
res_preload(RES_SPRITE, difficulty_sprite_name(diff), RESF_PERMANENT);
}
}

View file

@ -345,7 +345,7 @@ void process_enemies(EnemyList *enemies) {
}
void enemies_preload(void) {
preload_resources(RES_ANIM, RESF_DEFAULT,
res_preload_multi(RES_ANIM, RESF_DEFAULT,
"enemy/fairy_blue",
"enemy/fairy_red",
"enemy/bigfairy",
@ -353,14 +353,14 @@ void enemies_preload(void) {
"enemy/superfairy",
NULL);
preload_resources(RES_SPRITE, RESF_DEFAULT,
res_preload_multi(RES_SPRITE, RESF_DEFAULT,
"fairy_circle",
"fairy_circle_red",
"fairy_circle_big_and_mean",
"enemy/swirl",
NULL);
preload_resources(RES_SFX, RESF_OPTIONAL,
res_preload_multi(RES_SFX, RESF_OPTIONAL,
"enemydeath",
NULL);
}

View file

@ -528,7 +528,7 @@ static bool events_handler_hotkeys(SDL_Event *event, void *arg) {
}
if(scan == config_get_int(CONFIG_KEY_RELOAD_RESOURCES)) {
reload_all_resources();
res_reload_all();
return true;
}

View file

@ -389,14 +389,14 @@ void spawn_and_collect_items(cmplx pos, float collect_value, SpawnItemsArgs grou
void items_preload(void) {
for(ItemType i = ITEM_FIRST; i <= ITEM_LAST; ++i) {
preload_resource(RES_SPRITE, item_sprite_name(i), RESF_PERMANENT);
res_preload(RES_SPRITE, item_sprite_name(i), RESF_PERMANENT);
const char *indicator = item_indicator_sprite_name(i);
if(indicator != NULL) {
preload_resource(RES_SPRITE, indicator, RESF_PERMANENT);
res_preload(RES_SPRITE, indicator, RESF_PERMANENT);
}
}
preload_resources(RES_SFX, RESF_OPTIONAL,
res_preload_multi(RES_SFX, RESF_OPTIONAL,
"item_generic",
NULL);
}

View file

@ -251,7 +251,7 @@ static void create_pass2_resources(void) {
}
void laserdraw_preload(void) {
preload_resources(RES_SHADER_PROGRAM, RESF_DEFAULT,
res_preload_multi(RES_SHADER_PROGRAM, RESF_DEFAULT,
"lasers/sdf_apply",
"lasers/sdf_generate",
NULL);

View file

@ -48,7 +48,7 @@ static void taisei_shutdown(void) {
progress_unload();
stage_objpools_shutdown();
gamemode_shutdown();
shutdown_resources();
res_shutdown();
taskmgr_global_shutdown();
audio_shutdown();
video_shutdown();
@ -373,13 +373,13 @@ static void main_post_vfsinit(CallChainResult ccr) {
events_init();
video_init();
filewatch_init();
init_resources();
res_init();
r_post_init();
draw_loading_screen();
dynstage_init_monitoring();
audio_init();
load_resources();
res_post_init();
gamepad_init();
progress_load();
video_post_init();

View file

@ -368,7 +368,7 @@ void preload_charprofile_menu(void) {
portrait_preload_face_sprite(profiles[i].name, profiles[i].faces[f], RESF_PERMANENT);
}
portrait_preload_base_sprite(profiles[i].name, NULL, RESF_PERMANENT);
preload_resource(RES_TEXTURE, profiles[i].background, RESF_PERMANENT);
res_preload(RES_TEXTURE, profiles[i].background, RESF_PERMANENT);
}
};

View file

@ -382,12 +382,12 @@ void preload_char_menu(void) {
for(int i = 0; i < NUM_CHARACTERS; ++i) {
PlayerCharacter *pchar = plrchar_get(i);
portrait_preload_base_sprite(pchar->lower_name, NULL, RESF_PERMANENT);
preload_resource(RES_TEXTURE, pchar->menu_texture_name, RESF_PERMANENT);
res_preload(RES_TEXTURE, pchar->menu_texture_name, RESF_PERMANENT);
}
char *p = (char*)facedefs;
for(int i = 0; i < sizeof(facedefs) / FACENAME_LEN; ++i) {
preload_resource(RES_SPRITE, p + i * FACENAME_LEN, RESF_PERMANENT);
res_preload(RES_SPRITE, p + i * FACENAME_LEN, RESF_PERMANENT);
}
}

View file

@ -185,7 +185,7 @@ static void start_game_do_cleanup(CallChainResult ccr) {
replay_reset(&ctx->replay);
kill_aux_menus(ctx);
mem_free(ctx);
free_resources(false);
res_unload_all(false);
global.gameover = GAMEOVER_NONE;
replay_state_deinit(&global.replay.output);
main_menu_update_practice_menus();

View file

@ -241,8 +241,8 @@ void draw_main_menu(MenuData *menu) {
}
void draw_loading_screen(void) {
preload_resource(RES_TEXTURE, "loading", RESF_DEFAULT);
preload_resource(RES_SHADER_PROGRAM, "text_default", RESF_PERMANENT);
res_preload(RES_TEXTURE, "loading", RESF_DEFAULT);
res_preload(RES_SHADER_PROGRAM, "text_default", RESF_PERMANENT);
set_ortho(SCREEN_W, SCREEN_H);
fill_screen("loading");
@ -260,19 +260,19 @@ void draw_loading_screen(void) {
void menu_preload(void) {
difficulty_preload();
preload_resources(RES_FONT, RESF_PERMANENT,
res_preload_multi(RES_FONT, RESF_PERMANENT,
"big",
"small",
NULL);
preload_resources(RES_TEXTURE, RESF_PERMANENT,
res_preload_multi(RES_TEXTURE, RESF_PERMANENT,
"abstract_brown",
"cell_noise",
"stage1/cirnobg",
"menu/mainmenubg",
NULL);
preload_resources(RES_SPRITE, RESF_PERMANENT,
res_preload_multi(RES_SPRITE, RESF_PERMANENT,
"part/smoke",
"part/petal",
"menu/logo",
@ -280,18 +280,18 @@ void menu_preload(void) {
"star",
NULL);
preload_resources(RES_SHADER_PROGRAM, RESF_PERMANENT,
res_preload_multi(RES_SHADER_PROGRAM, RESF_PERMANENT,
"mainmenubg",
"sprite_circleclipped_indicator",
NULL);
preload_resources(RES_SFX, RESF_PERMANENT | RESF_OPTIONAL,
res_preload_multi(RES_SFX, RESF_PERMANENT | RESF_OPTIONAL,
"generic_shot",
"shot_special1",
"hit",
NULL);
preload_resources(RES_BGM, RESF_PERMANENT | RESF_OPTIONAL,
res_preload_multi(RES_BGM, RESF_PERMANENT | RESF_OPTIONAL,
"menu",
NULL);

View file

@ -220,7 +220,7 @@ static void add_bgm(MenuData *m, const char *bgm_name, bool preload) {
// FIXME HACK: make this just RESF_OPTIONAL once we have proper refcounting for resources!
// Currently without RESF_PERMANENT we segfault after returning from demo playback,
// because transient resources get unloaded.
preload_resource(RES_BGM, bgm_name, RESF_PERMANENT | RESF_OPTIONAL);
res_preload(RES_BGM, bgm_name, RESF_PERMANENT | RESF_OPTIONAL);
return;
}

View file

@ -1673,23 +1673,23 @@ uint64_t player_next_extralife_threshold(uint64_t step) {
void player_preload(void) {
const int flags = RESF_DEFAULT;
preload_resources(RES_SHADER_PROGRAM, flags,
res_preload_multi(RES_SHADER_PROGRAM, flags,
"circle_distort",
"player_death",
NULL);
preload_resources(RES_TEXTURE, flags,
res_preload_multi(RES_TEXTURE, flags,
"static",
NULL);
preload_resources(RES_SPRITE, flags,
res_preload_multi(RES_SPRITE, flags,
"fairy_circle",
"focus",
"part/blast_huge_halo",
"part/powersurge_field",
NULL);
preload_resources(RES_SFX, flags | RESF_OPTIONAL,
res_preload_multi(RES_SFX, flags | RESF_OPTIONAL,
"death",
"extra_bomb",
"extra_life",

View file

@ -47,7 +47,7 @@ void plrchar_preload(PlayerCharacter *pc) {
char buf[64];
plrchar_player_anim_name(pc, sizeof(buf), buf);
preload_resource(RES_ANIM, buf, RESF_DEFAULT);
res_preload(RES_ANIM, buf, RESF_DEFAULT);
}
void plrchar_render_bomb_portrait(PlayerCharacter *pc, Sprite *out_spr) {

View file

@ -717,20 +717,20 @@ static double marisa_laser_property(Player *plr, PlrProperty prop) {
static void marisa_laser_preload(void) {
const int flags = RESF_DEFAULT;
preload_resources(RES_SPRITE, flags,
res_preload_multi(RES_SPRITE, flags,
"proj/marisa",
"part/maristar_orbit",
"hakkero",
"masterspark_ring",
NULL);
preload_resources(RES_TEXTURE, flags,
res_preload_multi(RES_TEXTURE, flags,
"marisa_bombbg",
"part/marisa_laser0",
"part/marisa_laser1",
NULL);
preload_resources(RES_SHADER_PROGRAM, flags,
res_preload_multi(RES_SHADER_PROGRAM, flags,
"blur25",
"blur5",
"marisa_laser",
@ -739,11 +739,11 @@ static void marisa_laser_preload(void) {
"sprite_hakkero",
NULL);
preload_resources(RES_ANIM, flags,
res_preload_multi(RES_ANIM, flags,
"fire",
NULL);
preload_resources(RES_SFX, flags | RESF_OPTIONAL,
res_preload_multi(RES_SFX, flags | RESF_OPTIONAL,
"bomb_marisa_a",
NULL);
}

View file

@ -524,7 +524,7 @@ static double marisa_star_property(Player *plr, PlrProperty prop) {
static void marisa_star_preload(void) {
const int flags = RESF_DEFAULT;
preload_resources(RES_SPRITE, flags,
res_preload_multi(RES_SPRITE, flags,
"hakkero",
"masterspark_ring",
"part/maristar_orbit",
@ -533,17 +533,17 @@ static void marisa_star_preload(void) {
"proj/maristar",
NULL);
preload_resources(RES_TEXTURE, flags,
res_preload_multi(RES_TEXTURE, flags,
"marisa_bombbg",
NULL);
preload_resources(RES_SHADER_PROGRAM, flags,
res_preload_multi(RES_SHADER_PROGRAM, flags,
"masterspark",
"maristar_bombbg",
"sprite_hakkero",
NULL);
preload_resources(RES_SFX, flags | RESF_OPTIONAL,
res_preload_multi(RES_SFX, flags | RESF_OPTIONAL,
"bomb_marisa_b",
NULL);
}

View file

@ -45,7 +45,7 @@ DEFINE_ENTITY_TYPE(ReimuASlave, {
static void reimu_spirit_preload(void) {
const int flags = RESF_DEFAULT;
preload_resources(RES_SPRITE, flags,
res_preload_multi(RES_SPRITE, flags,
"yinyang",
"proj/ofuda",
"proj/needle",
@ -55,16 +55,16 @@ static void reimu_spirit_preload(void) {
"part/fantasyseal_impact",
NULL);
preload_resources(RES_TEXTURE, flags,
res_preload_multi(RES_TEXTURE, flags,
"runes",
NULL);
preload_resources(RES_SHADER_PROGRAM, flags,
res_preload_multi(RES_SHADER_PROGRAM, flags,
"sprite_yinyang",
"reimu_bomb_bg",
NULL);
preload_resources(RES_SFX, flags | RESF_OPTIONAL,
res_preload_multi(RES_SFX, flags | RESF_OPTIONAL,
"boom",
"bomb_reimu_a",
"bomb_marisa_b",

View file

@ -679,7 +679,7 @@ static void reimu_dream_init(Player *plr) {
static void reimu_dream_preload(void) {
const int flags = RESF_DEFAULT;
preload_resources(RES_SPRITE, flags,
res_preload_multi(RES_SPRITE, flags,
"yinyang",
"proj/ofuda",
"proj/needle2",
@ -688,19 +688,19 @@ static void reimu_dream_preload(void) {
"part/stardust",
NULL);
preload_resources(RES_TEXTURE, flags,
res_preload_multi(RES_TEXTURE, flags,
"runes",
"gaplight",
NULL);
preload_resources(RES_SHADER_PROGRAM, flags,
res_preload_multi(RES_SHADER_PROGRAM, flags,
"sprite_yinyang",
"reimu_gap",
"reimu_gap_light",
"reimu_bomb_bg",
NULL);
preload_resources(RES_SFX, flags | RESF_OPTIONAL,
res_preload_multi(RES_SFX, flags | RESF_OPTIONAL,
"bomb_marisa_a",
"boon",
NULL);

View file

@ -619,7 +619,7 @@ static void youmu_mirror_init(Player *plr) {
static void youmu_mirror_preload(void) {
const int flags = RESF_DEFAULT;
preload_resources(RES_SPRITE, flags,
res_preload_multi(RES_SPRITE, flags,
"part/arc",
"part/blast_huge_halo",
"part/myon",
@ -629,17 +629,17 @@ static void youmu_mirror_preload(void) {
"proj/youmu",
NULL);
preload_resources(RES_TEXTURE, flags,
res_preload_multi(RES_TEXTURE, flags,
"youmu_bombbg1",
NULL);
preload_resources(RES_SHADER_PROGRAM, flags,
res_preload_multi(RES_SHADER_PROGRAM, flags,
"sprite_youmu_myon_shot",
"youmu_bomb_bg",
"youmua_bomb",
NULL);
preload_resources(RES_SFX, flags | RESF_OPTIONAL,
res_preload_multi(RES_SFX, flags | RESF_OPTIONAL,
"bomb_youmu_b",
NULL);
}

View file

@ -598,16 +598,16 @@ static void youmu_haunting_init(Player *plr) {
static void youmu_haunting_preload(void) {
const int flags = RESF_DEFAULT;
preload_resources(RES_SPRITE, flags,
res_preload_multi(RES_SPRITE, flags,
"proj/youmu",
"part/youmu_slice",
NULL);
preload_resources(RES_TEXTURE, flags,
res_preload_multi(RES_TEXTURE, flags,
"youmu_bombbg1",
NULL);
preload_resources(RES_SFX, flags | RESF_OPTIONAL,
res_preload_multi(RES_SFX, flags | RESF_OPTIONAL,
"bomb_youmu_b",
NULL);
}

View file

@ -35,7 +35,7 @@ Sprite *portrait_get_base_sprite(const char *charname, const char *variant) {
void portrait_preload_base_sprite(const char *charname, const char *variant, ResourceFlags rflags) {
char buf[BUFFER_SIZE];
portrait_get_base_sprite_name(charname, variant, sizeof(buf), buf);
preload_resource(RES_SPRITE, buf, rflags);
res_preload(RES_SPRITE, buf, rflags);
}
int portrait_get_face_sprite_name(const char *charname, const char *face, size_t bufsize, char buf[bufsize]) {
@ -51,7 +51,7 @@ Sprite *portrait_get_face_sprite(const char *charname, const char *face) {
void portrait_preload_face_sprite(const char *charname, const char *face, ResourceFlags rflags) {
char buf[BUFFER_SIZE];
portrait_get_face_sprite_name(charname, face, sizeof(buf), buf);
preload_resource(RES_SPRITE, buf, rflags);
res_preload(RES_SPRITE, buf, rflags);
}
void portrait_render(Sprite *s_base, Sprite *s_face, Sprite *s_out) {

View file

@ -1036,17 +1036,17 @@ void projectiles_preload(void) {
const uint num_shaders = sizeof(shaders)/sizeof(*shaders);
for(uint i = 0; i < num_shaders; ++i) {
preload_resource(RES_SHADER_PROGRAM, shaders[i], RESF_PERMANENT);
res_preload(RES_SHADER_PROGRAM, shaders[i], RESF_PERMANENT);
}
// FIXME: Why is this here?
preload_resources(RES_TEXTURE, RESF_PERMANENT,
res_preload_multi(RES_TEXTURE, RESF_PERMANENT,
"part/lasercurve",
NULL);
// TODO: Maybe split this up into stage-specific preloads too?
// some of these are ubiquitous, but some only appear in very specific parts.
preload_resources(RES_SPRITE, RESF_PERMANENT,
res_preload_multi(RES_SPRITE, RESF_PERMANENT,
"part/blast",
"part/bullet_flare",
"part/flare",
@ -1061,11 +1061,11 @@ void projectiles_preload(void) {
"part/stardust_green",
NULL);
preload_resources(RES_ANIM, RESF_PERMANENT,
res_preload_multi(RES_ANIM, RESF_PERMANENT,
"part/bullet_clear",
NULL);
preload_resources(RES_SFX, RESF_PERMANENT,
res_preload_multi(RES_SFX, RESF_PERMANENT,
"shot1",
"shot2",
"shot3",

View file

@ -20,7 +20,7 @@ typedef struct PPBasicPriv {
} PPBasicPriv;
static void pp_basic_preload(ProjPrototype *proto) {
preload_resource(RES_SPRITE, ((PPBasicPriv*)proto->private)->sprite_name, RESF_PERMANENT);
res_preload(RES_SPRITE, ((PPBasicPriv*)proto->private)->sprite_name, RESF_PERMANENT);
// not assigning ->sprite here because it'll block the thread until loaded
}

View file

@ -46,7 +46,7 @@ void r_post_init(void) {
_r_models_init();
_r_sprite_batch_init();
preload_resources(RES_SHADER_PROGRAM, RESF_PERMANENT,
res_preload_multi(RES_SHADER_PROGRAM, RESF_PERMANENT,
"sprite_default",
"texture_post_load",
"standard",
@ -54,7 +54,7 @@ void r_post_init(void) {
NULL);
#if DEBUG
preload_resources(RES_FONT, RESF_PERMANENT,
res_preload_multi(RES_FONT, RESF_PERMANENT,
"monotiny",
NULL);
#endif

View file

@ -982,12 +982,12 @@ void r_clear(BufferKindFlags flags, const Color *colorval, float depthval) {
INLINE attr_nonnull(1)
void r_draw_model(const char *model) {
r_draw_model_ptr(get_resource_data(RES_MODEL, model, RESF_DEFAULT), 0, 0);
r_draw_model_ptr(res_get_data(RES_MODEL, model, RESF_DEFAULT), 0, 0);
}
INLINE attr_nonnull(1)
void r_draw_model_instanced(const char *model, uint instances, uint base_instance) {
r_draw_model_ptr(get_resource_data(RES_MODEL, model, RESF_DEFAULT), instances, base_instance);
r_draw_model_ptr(res_get_data(RES_MODEL, model, RESF_DEFAULT), instances, base_instance);
}
INLINE

View file

@ -93,7 +93,7 @@ static void replay_do_cleanup(CallChainResult ccr) {
global.gameover = 0;
replay_state_deinit(&global.replay.input);
free_resources(false);
res_unload_all(false);
CallChain cc = ctx->cc;
mem_free(ctx);

View file

@ -301,7 +301,7 @@ static void load_animation_stage2(ResourceLoadState *st) {
for(int i = 0; i < ani->sprite_count; ++i) {
snprintf(buf, sizeof(buf), "%s.frame%04d", st->name, i);
if(!(ani->sprites[i] = get_resource_data(RES_SPRITE, buf, st->flags))) {
if(!(ani->sprites[i] = res_get_data(RES_SPRITE, buf, st->flags))) {
log_error("Animation frame '%s' not found but @sprite_count was %d",buf,ani->sprite_count);
unload_animation(ani);
ani = NULL;

View file

@ -196,7 +196,7 @@ static void init_fonts(void) {
fonts_event, NULL, EPRIO_SYSTEM,
});
preload_resources(RES_FONT, RESF_PERMANENT,
res_preload_multi(RES_FONT, RESF_PERMANENT,
"standard",
NULL);
@ -223,7 +223,7 @@ static void init_fonts(void) {
}
static void post_init_fonts(void) {
globals.default_shader = get_resource_data(RES_SHADER_PROGRAM, "text_default", RESF_PERMANENT | RESF_PRELOAD);
globals.default_shader = res_get_data(RES_SHADER_PROGRAM, "text_default", RESF_PERMANENT | RESF_PRELOAD);
}
static void shutdown_fonts(void) {
@ -799,7 +799,7 @@ static void* reload_font_callback(const char *name, Resource *res, void *varg) {
}
static void reload_fonts(double quality) {
resource_for_each(RES_FONT, reload_font_callback, &(struct rlfonts_arg) { quality });
res_for_each(RES_FONT, reload_font_callback, &(struct rlfonts_arg) { quality });
}
static inline int apply_kerning(Font *font, uint prev_index, Glyph *gthis) {

View file

@ -116,7 +116,7 @@ static void material_load_stage1(ResourceLoadState *st) {
#define LOADMAP(_map_) do { \
if(ld->_map_##_map) { \
ld->mat->_map_##_map = get_resource_data( \
ld->mat->_map_##_map = res_get_data( \
RES_TEXTURE, ld->_map_##_map, st->flags & ~RESF_RELOAD); \
if(UNLIKELY(ld->mat->_map_##_map == NULL)) { \
log_error("%s: failed to load " #_map_ " map '%s'", st->name, ld->_map_##_map); \

View file

@ -35,7 +35,7 @@ static bool postprocess_load_callback(const char *key, const char *value, void *
current->uniforms = NULL;
// if loading this fails, get_resource will print a warning
current->shader = get_resource_data(RES_SHADER_PROGRAM, value, ldata->resflags);
current->shader = res_get_data(RES_SHADER_PROGRAM, value, ldata->resflags);
list_append(slist, current);
return true;
@ -68,7 +68,7 @@ static bool postprocess_load_callback(const char *key, const char *value, void *
const UniformTypeInfo *type_info = r_uniform_type_info(type);
if(UNIFORM_TYPE_IS_SAMPLER(type)) {
Texture *tex = get_resource_data(RES_TEXTURE, value, ldata->resflags);
Texture *tex = res_get_data(RES_TEXTURE, value, ldata->resflags);
if(tex) {
list_append(&current->uniforms, ALLOC(PostprocessShaderUniform, {

View file

@ -991,7 +991,7 @@ static char *get_name_from_path(ResourceHandler *handler, const char *path) {
return NULL;
}
return resource_util_basename(handler->subdir, path);
return res_util_basename(handler->subdir, path);
}
static bool should_defer_load(InternalResLoadState *st) {
@ -1343,7 +1343,7 @@ static void load_resource_finish(InternalResLoadState *st) {
ires_unlock(persistent);
}
Resource *_get_resource(ResourceType type, const char *name, hash_t hash, ResourceFlags flags) {
Resource *_res_get_prehashed(ResourceType type, const char *name, hash_t hash, ResourceFlags flags) {
InternalResource *ires;
Resource *res;
@ -1394,16 +1394,6 @@ Resource *_get_resource(ResourceType type, const char *name, hash_t hash, Resour
}
}
void *_get_resource_data(ResourceType type, const char *name, hash_t hash, ResourceFlags flags) {
Resource *res = _get_resource(type, name, hash, flags);
if(res) {
return res->data;
}
return NULL;
}
static InternalResource *preload_resource_internal(
ResourceType type, const char *name, ResourceFlags flags
) {
@ -1420,18 +1410,18 @@ static InternalResource *preload_resource_internal(
return ires;
}
void preload_resource(ResourceType type, const char *name, ResourceFlags flags) {
void res_preload(ResourceType type, const char *name, ResourceFlags flags) {
if(!res_gstate.env.no_preload) {
preload_resource_internal(type, name, flags | RESF_PRELOAD);
}
}
void preload_resources(ResourceType type, ResourceFlags flags, const char *firstname, ...) {
void res_preload_multi(ResourceType type, ResourceFlags flags, const char *firstname, ...) {
va_list args;
va_start(args, firstname);
for(const char *name = firstname; name; name = va_arg(args, const char*)) {
preload_resource(type, name, flags);
res_preload(type, name, flags);
}
va_end(args);
@ -1452,7 +1442,7 @@ static void reload_resources(ResourceHandler *h) {
ht_iter_end(&iter);
}
void reload_all_resources(void) {
void res_reload_all(void) {
for(uint i = 0; i < RES_NUMTYPES; ++i) {
ResourceHandler *h = get_handler(i);
assert(h != NULL);
@ -1530,7 +1520,7 @@ static bool resource_filewatch_handler(SDL_Event *e, void *a) {
return false;
}
void init_resources(void) {
void res_init(void) {
res_gstate.env.no_async_load = env_get("TAISEI_NOASYNC", false);
res_gstate.env.no_preload = env_get("TAISEI_NOPRELOAD", false);
res_gstate.env.no_unload = env_get("TAISEI_NOUNLOAD", false);
@ -1563,7 +1553,7 @@ void init_resources(void) {
});
}
void resource_util_strip_ext(char *path) {
void res_util_strip_ext(char *path) {
char *dot = strrchr(path, '.');
char *psep = strrchr(path, '/');
@ -1572,16 +1562,16 @@ void resource_util_strip_ext(char *path) {
}
}
char *resource_util_basename(const char *prefix, const char *path) {
char *res_util_basename(const char *prefix, const char *path) {
assert(strstartswith(path, prefix));
char *out = strdup(path + strlen(prefix));
resource_util_strip_ext(out);
res_util_strip_ext(out);
return out;
}
const char *resource_util_filename(const char *path) {
const char *res_util_filename(const char *path) {
char *sep = strrchr(path, '/');
if(sep) {
@ -1595,7 +1585,7 @@ static void preload_path(const char *path, ResourceType type, ResourceFlags flag
if(_handlers[type]->procs.check(path)) {
char *name = get_name_from_path(_handlers[type], path);
if(name) {
preload_resource(type, name, flags);
res_preload(type, name, flags);
mem_free(name);
}
}
@ -1614,7 +1604,7 @@ static void *preload_all(const char *path, void *arg) {
return NULL;
}
void *resource_for_each(ResourceType type, void* (*callback)(const char *name, Resource *res, void *arg), void *arg) {
void *res_for_each(ResourceType type, void* (*callback)(const char *name, Resource *res, void *arg), void *arg) {
ht_str2ptr_ts_iter_t iter;
ht_iter_begin(&get_handler(type)->private.mapping, &iter);
void *result = NULL;
@ -1638,7 +1628,7 @@ void *resource_for_each(ResourceType type, void* (*callback)(const char *name, R
return result;
}
void load_resources(void) {
void res_post_init(void) {
for(uint i = 0; i < RES_NUMTYPES; ++i) {
ResourceHandler *h = get_handler(i);
assert(h != NULL);
@ -1661,7 +1651,7 @@ void load_resources(void) {
}
}
static void _free_resources(IResPtrArray *tmp_ires_array, bool all) {
static void _res_unload_all(IResPtrArray *tmp_ires_array, bool include_permanent) {
ht_str2ptr_ts_iter_t iter;
bool retry = false;
@ -1676,7 +1666,7 @@ static void _free_resources(IResPtrArray *tmp_ires_array, bool all) {
for(; iter.has_data; ht_iter_next(&iter)) {
ires = iter.value;
if(all || !(ires->res.flags & RESF_PERMANENT)) {
if(include_permanent || !(ires->res.flags & RESF_PERMANENT)) {
*dynarray_append(tmp_ires_array) = ires;
}
}
@ -1693,11 +1683,11 @@ static void _free_resources(IResPtrArray *tmp_ires_array, bool all) {
if(retry) {
// Tail call; hope your compiler agrees.
_free_resources(tmp_ires_array, all);
_res_unload_all(tmp_ires_array, include_permanent);
}
}
void free_resources(bool all) {
void res_unload_all(bool include_permanent) {
// Wait for all resources to finish (re)loading first, and pray that nothing else starts loading
// while we are in this function (FIXME)
@ -1716,12 +1706,12 @@ void free_resources(bool all) {
}
IResPtrArray a = { };
_free_resources(&a, all);
_res_unload_all(&a, include_permanent);
dynarray_free_data(&a);
}
void shutdown_resources(void) {
free_resources(true);
void res_shutdown(void) {
res_unload_all(true);
for(ResourceType type = 0; type < RES_NUMTYPES; ++type) {
ResourceHandler *handler = get_handler(type);

View file

@ -131,41 +131,45 @@ typedef struct Resource {
ResourceFlags flags;
} Resource;
void init_resources(void);
void load_resources(void);
void shutdown_resources(void);
void free_resources(bool all);
void reload_all_resources(void);
void res_init(void);
void res_post_init(void);
void res_shutdown(void);
void res_unload_all(bool include_permanent);
void res_reload_all(void);
Resource *_get_resource(ResourceType type, const char *name, hash_t hash, ResourceFlags flags) attr_nonnull_all;
void *_get_resource_data(ResourceType type, const char *name, hash_t hash, ResourceFlags flags) attr_nonnull_all;
Resource *_res_get_prehashed(ResourceType type, const char *name, hash_t hash, ResourceFlags flags) attr_nonnull_all;
attr_nonnull_all
INLINE Resource *get_resource(ResourceType type, const char *name, ResourceFlags flags) {
return _get_resource(type, name, ht_str2ptr_hash(name), flags);
INLINE void *_res_get_data_prehashed(ResourceType type, const char *name, hash_t hash, ResourceFlags flags) {
Resource *res = _res_get_prehashed(type, name, hash, flags);
return res ? res->data : NULL;
}
attr_nonnull_all
INLINE void *get_resource_data(ResourceType type, const char *name, ResourceFlags flags) {
return _get_resource_data(type, name, ht_str2ptr_hash(name), flags);
INLINE Resource *res_get(ResourceType type, const char *name, ResourceFlags flags) {
return _res_get_prehashed(type, name, ht_str2ptr_hash(name), flags);
}
void preload_resource(ResourceType type, const char *name, ResourceFlags flags);
void preload_resources(ResourceType type, ResourceFlags flags, const char *firstname, ...) attr_sentinel;
void *resource_for_each(ResourceType type, void *(*callback)(const char *name, Resource *res, void *arg), void *arg);
attr_nonnull_all
INLINE void *res_get_data(ResourceType type, const char *name, ResourceFlags flags) {
return _res_get_data_prehashed(type, name, ht_str2ptr_hash(name), flags);
}
void resource_util_strip_ext(char *path);
char *resource_util_basename(const char *prefix, const char *path);
const char *resource_util_filename(const char *path);
void res_preload(ResourceType type, const char *name, ResourceFlags flags);
void res_preload_multi(ResourceType type, ResourceFlags flags, const char *firstname, ...) attr_sentinel;
void *res_for_each(ResourceType type, void *(*callback)(const char *name, Resource *res, void *arg), void *arg);
void res_util_strip_ext(char *path);
char *res_util_basename(const char *prefix, const char *path);
const char *res_util_filename(const char *path);
#define DEFINE_RESOURCE_GETTER(_type, _name, _enum) \
attr_nonnull_all attr_returns_nonnull \
INLINE _type *_name(const char *resname) { \
return NOT_NULL(get_resource_data(_enum, resname, RESF_DEFAULT)); \
return NOT_NULL(res_get_data(_enum, resname, RESF_DEFAULT)); \
}
#define DEFINE_OPTIONAL_RESOURCE_GETTER(_type, _name, _enum) \
attr_nonnull_all \
INLINE _type *_name(const char *resname) { \
return get_resource_data(_enum, resname, RESF_OPTIONAL); \
return res_get_data(_enum, resname, RESF_OPTIONAL); \
}

View file

@ -89,7 +89,7 @@ static void load_shader_program_stage2(ResourceLoadState *st) {
char *objname = ldata.objlist;
for(int i = 0; i < ldata.num_objects; ++i) {
if(!(objs[i] = get_resource_data(RES_SHADER_OBJECT, objname, st->flags & ~RESF_RELOAD))) {
if(!(objs[i] = res_get_data(RES_SHADER_OBJECT, objname, st->flags & ~RESF_RELOAD))) {
log_error("%s: couldn't load shader object '%s'", st->path, objname);
mem_free(ldata.objlist);
res_load_failed(st);

View file

@ -111,7 +111,7 @@ static void load_sprite_stage2(ResourceLoadState *st) {
struct sprite_load_state *state = NOT_NULL(st->opaque);
Sprite *spr = NOT_NULL(state->spr);
spr->tex = get_resource_data(RES_TEXTURE, state->texture_name, st->flags & ~RESF_RELOAD);
spr->tex = res_get_data(RES_TEXTURE, state->texture_name, st->flags & ~RESF_RELOAD);
mem_free(state->texture_name);
mem_free(state);

View file

@ -805,7 +805,7 @@ static void stage_preload(void) {
enemies_preload();
if(global.stage->type != STAGE_SPELL) {
preload_resource(RES_BGM, "gameover", RESF_DEFAULT);
res_preload(RES_BGM, "gameover", RESF_DEFAULT);
dialog_preload();
}

View file

@ -269,27 +269,27 @@ static void stage_draw_destroy_framebuffers(void) {
void stage_draw_pre_init(void) {
stagedraw.mfb_group = fbmgr_group_create();
preload_resources(RES_POSTPROCESS, RESF_OPTIONAL,
res_preload_multi(RES_POSTPROCESS, RESF_OPTIONAL,
"viewport",
NULL);
preload_resources(RES_SPRITE, RESF_PERMANENT,
res_preload_multi(RES_SPRITE, RESF_PERMANENT,
"hud/heart",
"hud/star",
"star",
NULL);
preload_resources(RES_TEXTURE, RESF_PERMANENT,
res_preload_multi(RES_TEXTURE, RESF_PERMANENT,
"powersurge_flow",
"titletransition",
"hud",
NULL);
preload_resources(RES_MODEL, RESF_PERMANENT,
res_preload_multi(RES_MODEL, RESF_PERMANENT,
"hud",
NULL);
preload_resources(RES_SHADER_PROGRAM, RESF_PERMANENT,
res_preload_multi(RES_SHADER_PROGRAM, RESF_PERMANENT,
"ingame_menu",
"powersurge_effect",
"powersurge_feedback",
@ -306,7 +306,7 @@ void stage_draw_pre_init(void) {
#endif
NULL);
preload_resources(RES_FONT, RESF_PERMANENT,
res_preload_multi(RES_FONT, RESF_PERMANENT,
"mono",
"small",
"monosmall",
@ -322,20 +322,20 @@ void stage_draw_pre_init(void) {
stagedraw.objpool_stats = env_get("TAISEI_OBJPOOL_STATS", OBJPOOLSTATS_DEFAULT);
if(stagedraw.framerate_graphs) {
preload_resources(RES_SHADER_PROGRAM, RESF_PERMANENT,
res_preload_multi(RES_SHADER_PROGRAM, RESF_PERMANENT,
"graph",
NULL);
}
if(stagedraw.objpool_stats) {
preload_resources(RES_FONT, RESF_PERMANENT,
res_preload_multi(RES_FONT, RESF_PERMANENT,
"monotiny",
NULL);
}
}
void stage_draw_init(void) {
stagedraw.viewport_pp = get_resource_data(RES_POSTPROCESS, "viewport", RESF_OPTIONAL);
stagedraw.viewport_pp = res_get_data(RES_POSTPROCESS, "viewport", RESF_OPTIONAL);
stagedraw.hud_text.shader = res_shader("text_hud");
stagedraw.hud_text.font = res_font("standard");
stagedraw.shaders.fxaa = res_shader("fxaa");

View file

@ -92,26 +92,26 @@ static void stage1_preload(void) {
// DIALOG_PRELOAD(&global.plr, Stage1PreBoss, RESF_DEFAULT);
portrait_preload_base_sprite("cirno", NULL, RESF_DEFAULT);
portrait_preload_face_sprite("cirno", "normal", RESF_DEFAULT);
preload_resources(RES_BGM, RESF_OPTIONAL, "stage1", "stage1boss", NULL);
preload_resources(RES_SPRITE, RESF_DEFAULT,
res_preload_multi(RES_BGM, RESF_OPTIONAL, "stage1", "stage1boss", NULL);
res_preload_multi(RES_SPRITE, RESF_DEFAULT,
"stage1/cirnobg",
"stage1/fog",
"stage1/snowlayer",
"stage1/waterplants",
NULL);
preload_resources(RES_TEXTURE, RESF_DEFAULT,
res_preload_multi(RES_TEXTURE, RESF_DEFAULT,
"fractal_noise",
"stage1/horizon",
NULL);
preload_resources(RES_SHADER_PROGRAM, RESF_DEFAULT,
res_preload_multi(RES_SHADER_PROGRAM, RESF_DEFAULT,
"blur5",
"stage1_water",
"zbuf_fog",
NULL);
preload_resources(RES_ANIM, RESF_DEFAULT,
res_preload_multi(RES_ANIM, RESF_DEFAULT,
"boss/cirno",
NULL);
preload_resources(RES_SFX, RESF_OPTIONAL,
res_preload_multi(RES_SFX, RESF_OPTIONAL,
"laser1",
NULL);
}

View file

@ -71,46 +71,46 @@ static void stage2_end(void) {
static void stage2_preload(void) {
portrait_preload_base_sprite("hina", NULL, RESF_DEFAULT);
portrait_preload_face_sprite("hina", "normal", RESF_DEFAULT);
preload_resources(RES_BGM, RESF_OPTIONAL, "stage2", "stage2boss", NULL);
res_preload_multi(RES_BGM, RESF_OPTIONAL, "stage2", "stage2boss", NULL);
preload_resources(RES_SPRITE, RESF_DEFAULT,
res_preload_multi(RES_SPRITE, RESF_DEFAULT,
"fairy_circle_big",