{
u32 reg_size = sizeof(addon_reg)*ADDON_MOUNTED_MAX;
addon_system.registry = vg_linear_alloc( vg_mem.rtmemory, reg_size );
+ addon_system.cache_lock = SDL_CreateMutex();
+ VG_ASSERT( addon_system.cache_lock );
for( u32 type=0; type<k_addon_type_max; type++ )
{
void async_addon_setstate( void *_entry, u32 _state )
{
addon_cache_entry *entry = _entry;
- SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+ SDL_LockMutex( addon_system.cache_lock );
entry->state = _state;
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
vg_success( " loaded (%s)\n", entry->reg_ptr->alias.foldername );
}
{
addon_cache_entry *entry = vg_pool_item( &cache->pool, id );
- SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+ SDL_LockMutex( addon_system.cache_lock );
if( entry->state == k_addon_cache_state_load_request )
{
vg_info( "process cache load request (%u#%u, reg:%u)\n",
{
/* should maybe have a different value for this case */
entry->state = k_addon_cache_state_none;
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
continue;
}
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
/* continue with the request */
addon_reg *reg = get_addon_from_index( type, entry->reg_index, 0,0 );
}
vg_warn( "cache item did not load (%u#%u)\n", type, id );
- SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+ SDL_LockMutex( addon_system.cache_lock );
entry->state = k_addon_cache_state_none;
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
}
else
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
}
}
}
{
if( !vg_loader_availible() ) return;
- SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+ SDL_LockMutex( addon_system.cache_lock );
for( u32 type=0; type<k_addon_type_max; type++ )
{
struct addon_cache *cache = &addon_system.cache[type];
addon_cache_entry *entry = vg_pool_item( &cache->pool, id );
if( entry->state == k_addon_cache_state_load_request )
{
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
vg_loader_start( T1_addon_cache_load_loop, NULL );
return;
}
}
}
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
}
/*
if( cache_id )
{
- SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+ SDL_LockMutex( addon_system.cache_lock );
addon_cache_entry *entry = vg_pool_item( pool, cache_id );
if( entry->state == k_addon_cache_state_loaded )
addon_cache_free_item( type, cache_id );
entry->state = k_addon_cache_state_load_request;
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
}
}
size_t stride;
}
cache[k_addon_type_max];
- SDL_SpinLock sl_cache_using_resources;
+ SDL_mutex *cache_lock;
}
extern addon_system;
skaterift.rt_textures[k_skaterift_rt_workshop_preview] = vg.tex_missing;
}
- SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+ SDL_LockMutex( addon_system.cache_lock );
_skateshop.reg_loaded_preview = inf->reg;
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
}
static void skateshop_update_preview_image_thread(void *_args)
vg_str folder;
vg_strnull( &folder, path_buf, sizeof(path_buf) );
- SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+ SDL_LockMutex( addon_system.cache_lock );
addon_reg *reg_preview = _skateshop.reg_preview;
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
if( !addon_get_content_folder( reg_preview, &folder, 1 ) )
{
- SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+ SDL_LockMutex( addon_system.cache_lock );
_skateshop.reg_loaded_preview = reg_preview;
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
return;
}
{
vg_error( "Path too long to workshop preview image.\n" );
- SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+ SDL_LockMutex( addon_system.cache_lock );
_skateshop.reg_loaded_preview = reg_preview;
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
}
}
/* try to load preview image if we availible to do. */
if( vg_loader_availible() )
{
- SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+ SDL_LockMutex( addon_system.cache_lock );
if( _skateshop.reg_preview != _skateshop.reg_loaded_preview )
{
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
vg_loader_start( skateshop_update_preview_image_thread, NULL );
}
- else SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ else SDL_UnlockMutex( addon_system.cache_lock );
}
}
_skateshop.selected_world_id, ADDON_REG_HIDDEN );
if( change || (_skateshop.reg_preview == NULL) ){
- SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+ SDL_LockMutex( addon_system.cache_lock );
_skateshop.reg_preview = selected_world;
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
}
}
*mark_display = af_arritm( &world->ent_marker,
mdl_entity_id_id(shop->boards.id_display));
- SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+ SDL_LockMutex( addon_system.cache_lock );
struct addon_cache *cache = &addon_system.cache[k_addon_type_board];
/* Render loaded boards in the view slots */
if( !reg )
{
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
_skateshop.render.item_title = "";
_skateshop.render.item_desc = "";
return;
m4x3_mul( mtext, mlocal, mmdl );
font3d_simple_draw( 0, _skateshop.render.item_desc, cam, mmdl );
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
}
static void skateshop_render_charshop( ent_skateshop *shop, vg_camera *cam )
struct addon_cache *cache = &addon_system.cache[addon_type];
vg_pool *pool = &cache->pool;
- SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+ SDL_LockMutex( addon_system.cache_lock );
addon_cache_entry *entry = vg_pool_item( pool, view_id );
addon_alias_uid( &entry->reg_ptr->alias, item->uid );
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
}
vg_info( "send equip: [%u] %s\n",
void player__post_update(void)
{
- struct player_subsystem_interface *sys =
- player_subsystems[ localplayer.subsystem ];
+ struct player_subsystem_interface *sys = player_subsystems[ localplayer.subsystem ];
if( sys->post_update ) sys->post_update();
struct skeleton *sk = &localplayer.skeleton;
- SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+ SDL_LockMutex( addon_system.cache_lock );
for( u32 j=0; j<draw_list_count; j ++ ){
u32 index = draw_list[j];
&netplayers.board_poses[ index ], k_board_shader_player );
}
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
if( !gliders )
return;
void player__render( vg_camera *cam )
{
world_instance *world = &_world.main;
- SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+ SDL_LockMutex( addon_system.cache_lock );
struct player_model *model =
addon_cache_item_if_loaded( k_addon_type_player,
render_board( cam, world, board, localplayer.final_mtx[localplayer.id_board],
&localplayer.pose.board, k_board_shader_player );
- SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+ SDL_UnlockMutex( addon_system.cache_lock );
glEnable( GL_CULL_FACE );
player_glide_render( cam, world, &localplayer.pose );