*/
void audio_clip_load( audio_clip *clip, vg_stack_allocator *stack )
{
+ THREAD_1;
+
if( stack == NULL )
stack = _vg_audio.permanent_stack;
{
struct audio_channel_controls *controls = get_audio_channel_controls( id );
if( controls->flags & flag )
- vg_audio_crossfade( id, NULL, 1.0f );
+ {
+ if( _vg_audio.working )
+ vg_audio_crossfade( id, NULL, 1.0f );
+ else
+ channel->stage = k_channel_stage_none;
+ }
}
}
}
{
SDL_PauseAudioDevice( _vg_audio.sdl_output_device, 0 );
vg_success( "Unpaused device %d.\n", _vg_audio.sdl_output_device );
+ _vg_audio.working = 1;
}
else
{
+ _vg_audio.working = 0;
vg_error(
"SDL_OpenAudioDevice failed. Your default audio device must support (or transcode from):\n"
" Sample rate: 44100 hz\n"
void vg_audio_free(void)
{
SDL_CloseAudioDevice( _vg_audio.sdl_output_device );
+ _vg_audio.sdl_output_device = 0;
}
+void vg_audio_preupdate(void)
+{
+ bool before_working = _vg_audio.working;
+ _vg_audio.working = 1;
+ if( _vg_audio.sdl_output_device == 0 )
+ _vg_audio.working = 0;
+ else
+ if( SDL_GetAudioDeviceStatus( _vg_audio.sdl_output_device ) == SDL_AUDIO_STOPPED )
+ _vg_audio.working = 0;
+}
continue;
vg_changevsync();
+ vg_audio_preupdate();
enum engine_status status = SDL_AtomicGet( &vg.engine_status );
if( status == k_engine_status_running )
_vg_tower_register_trigger( _vg_tower_mask( vg.sig_client ), vg_on_client_ready );
if( !vg_init_async_queue( &vg.main_tasks ) )
- return;
+ vg_fatal_error( "Failed to create main task queue\n" );
if( !vg_init_async_queue( &vg.loader_tasks ) )
- return;
+ vg_fatal_error( "Failed to create loader task queue\n" );
vg_rand_seed( &vg.rand, 461 );
}
{
vg_info( "Closing audio device %d\n", _vg_audio.sdl_output_device );
SDL_CloseAudioDevice( _vg_audio.sdl_output_device );
+ _vg_audio.sdl_output_device = 0;
}
vg_strfree( &_vg_audio.device_choice );
}
}
- vg_strnull( &_vg_audio.device_choice, NULL, -1 );
+ vg_strnull( &_vg_audio.device_choice, NULL, 0 );
vg_strcat( &_vg_audio.device_choice, oi->alias );
}
vg_compile_shader( &_shader_ui_image_grad );
u32 verts = 30000, indices = 20000;
- ui_init( &vg_ui.ctx,
- malloc( sizeof(ui_vert)*verts ), verts,
- malloc( sizeof(u16)*indices ), indices );
+ ui_init( &vg_ui.ctx, malloc( sizeof(ui_vert)*verts ), verts, malloc( sizeof(u16)*indices ), indices );
/* callbacks */
vg_ui.ctx.render_batch = ui_impl_render_batch;
glBufferData( GL_ARRAY_BUFFER, verts*sizeof(ui_vert), NULL, GL_DYNAMIC_DRAW );
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, vg_ui.ebo );
- glBufferData( GL_ELEMENT_ARRAY_BUFFER,
- indices*sizeof(u16), NULL, GL_DYNAMIC_DRAW );
+ glBufferData( GL_ELEMENT_ARRAY_BUFFER, indices*sizeof(u16), NULL, GL_DYNAMIC_DRAW );
/* Set pointers */
u32 const stride = sizeof(ui_vert);
/* XY */
- glVertexAttribPointer( 0, 2, GL_SHORT, GL_FALSE, stride,
- (void *)offsetof( ui_vert, co ) );
+ glVertexAttribPointer( 0, 2, GL_SHORT, GL_FALSE, stride, (void *)offsetof( ui_vert, co ) );
glEnableVertexAttribArray( 0 );
/* UV */
- glVertexAttribPointer( 1, 2, GL_UNSIGNED_SHORT, GL_FALSE, stride,
- (void *)offsetof( ui_vert, uv ) );
+ glVertexAttribPointer( 1, 2, GL_UNSIGNED_SHORT, GL_FALSE, stride, (void *)offsetof( ui_vert, uv ) );
glEnableVertexAttribArray( 1 );
/* COLOUR */
- glVertexAttribPointer( 2, 4, GL_UNSIGNED_BYTE, GL_TRUE, stride,
- (void *)offsetof( ui_vert, colour ) );
+ glVertexAttribPointer( 2, 4, GL_UNSIGNED_BYTE, GL_TRUE, stride, (void *)offsetof( ui_vert, colour ) );
glEnableVertexAttribArray( 2 );
- vg_ui.cursor_map[ k_ui_cursor_default ] =
- SDL_CreateSystemCursor( SDL_SYSTEM_CURSOR_ARROW );
- vg_ui.cursor_map[ k_ui_cursor_hand ] =
- SDL_CreateSystemCursor( SDL_SYSTEM_CURSOR_HAND );
- vg_ui.cursor_map[ k_ui_cursor_ibeam ] =
- SDL_CreateSystemCursor( SDL_SYSTEM_CURSOR_IBEAM );
+ vg_ui.cursor_map[ k_ui_cursor_default ] = SDL_CreateSystemCursor( SDL_SYSTEM_CURSOR_ARROW );
+ vg_ui.cursor_map[ k_ui_cursor_hand ] = SDL_CreateSystemCursor( SDL_SYSTEM_CURSOR_HAND );
+ vg_ui.cursor_map[ k_ui_cursor_ibeam ] = SDL_CreateSystemCursor( SDL_SYSTEM_CURSOR_IBEAM );
/* font
* -----------------------------------------------------
total = sheet->w*sheet->h,
data = 0;
+ /* This is fince since its before the load thread even starts */
vg_stack_clear( &vg.scratch );
u8 *image = vg_stack_allocate( &vg.scratch, total, 8, NULL );
glGenTextures( 1, &vg_ui.tex_glyphs );
glBindTexture( GL_TEXTURE_2D, vg_ui.tex_glyphs );
- glTexImage2D( GL_TEXTURE_2D, 0, GL_R8, sheet->w, sheet->h, 0,
- GL_RED, GL_UNSIGNED_BYTE, image );
+ glTexImage2D( GL_TEXTURE_2D, 0, GL_R8, sheet->w, sheet->h, 0, GL_RED, GL_UNSIGNED_BYTE, image );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );