return &_vg_audio.lfos[ lfo_id-1 ].state;
}
-static void audio_channel_wake( audio_channel_id id )
-{
- audio_channel *channel = get_audio_channel( id );
- VG_ASSERT( channel->stage == k_channel_stage_active );
-
- struct audio_channel_state *channel_state = get_audio_channel_state( id );
- VG_ASSERT( channel_state->activity == k_channel_activity_wake );
-
- u32 format = channel->clip->flags & AUDIO_FLAG_FORMAT;
- if( format == k_audio_format_vorbis )
- {
- /* Setup vorbis decoder */
- u8 *buf = (u8*)_vg_audio.decoding_buffer,
- *loc = &buf[AUDIO_DECODE_SIZE*id];
-
- stb_vorbis_alloc alloc = {
- .alloc_buffer = (char *)loc,
- .alloc_buffer_length_in_bytes = AUDIO_DECODE_SIZE
- };
-
- int err;
- stb_vorbis *decoder = stb_vorbis_open_memory( channel->clip->any_data, channel->clip->size, &err, &alloc );
-
- if( !decoder )
- {
- vg_error( "stb_vorbis_open_memory failed on '%s' (%d)\n", channel->clip->path, err );
- channel_state->activity = k_channel_activity_error;
- }
- else
- {
- channel_state->loaded_clip_length = stb_vorbis_stream_length_in_samples( decoder );
- channel_state->decoder_handle.vorbis = decoder;
- channel_state->activity = k_channel_activity_playing;
- }
- }
- else if( format == k_audio_format_bird )
- {
- u8 *buf = (u8*)_vg_audio.decoding_buffer;
- struct synth_bird *loc = (void *)&buf[AUDIO_DECODE_SIZE*id];
-
- memcpy( loc, channel->clip->any_data, channel->clip->size );
- synth_bird_reset( loc );
-
- channel_state->decoder_handle.bird = loc;
- channel_state->loaded_clip_length = synth_bird_get_length_in_samples( loc );
- channel_state->activity = k_channel_activity_playing;
- }
- else if( format == k_audio_format_stereo )
- {
- channel_state->loaded_clip_length = channel->clip->size / 2;
- channel_state->activity = k_channel_activity_playing;
- }
- else if( format == k_audio_format_gen )
- {
- channel_state->loaded_clip_length = 0xffffffff;
- channel_state->activity = k_channel_activity_playing;
- }
- else
- {
- channel_state->loaded_clip_length = channel->clip->size;
- channel_state->activity = k_channel_activity_playing;
- }
-}
-
static void audio_decode_uncompressed_mono( i16 *src, u32 count, f32 *dst )
{
for( u32 i=0; i<count; i++ )
static f32 audio_lfo_get_sample( audio_channel_id lfo_id, struct audio_lfo_controls *controls )
{
struct audio_lfo_state *state = get_audio_lfo_state( lfo_id );
-
state->time ++;
if( state->time >= controls->period_in_samples )
return (( 2.0f * controls->sqrt_polynomial_coefficient * t ) /
/* --------------------------------------- */
- ( 1.0f + controls->polynomial_coefficient * t*t )
-
- ) * (1.0f-fabsf(t));
+ ( 1.0f + controls->polynomial_coefficient * t*t )) * (1.0f-fabsf(t));
}
else
- {
return 0.0f;
- }
}
static void audio_slew_i32( i32 *value, i32 target, i32 rate )
for( u32 i=0; i<active_channel_count; i ++ )
{
audio_channel_id id = active_channel_list[i];
- struct audio_channel_state *state = get_audio_channel_state( id );
+ struct audio_channel_state *channel_state = get_audio_channel_state( id );
- if( state->activity == k_channel_activity_wake )
- audio_channel_wake( id );
+ /* Wake up! */
+ if( channel_state->activity == k_channel_activity_wake )
+ {
+ audio_channel *channel = get_audio_channel( id );
+
+ u32 format = channel->clip->flags & AUDIO_FLAG_FORMAT;
+ if( format == k_audio_format_vorbis )
+ {
+ /* Setup vorbis decoder */
+ u8 *buf = (u8*)_vg_audio.decoding_buffer,
+ *loc = &buf[AUDIO_DECODE_SIZE*id];
+
+ stb_vorbis_alloc alloc = {
+ .alloc_buffer = (char *)loc,
+ .alloc_buffer_length_in_bytes = AUDIO_DECODE_SIZE
+ };
+
+ int err;
+ stb_vorbis *decoder = stb_vorbis_open_memory( channel->clip->any_data, channel->clip->size, &err, &alloc );
+
+ if( !decoder )
+ {
+ vg_error( "stb_vorbis_open_memory failed on '%s' (%d)\n", channel->clip->path, err );
+ channel_state->activity = k_channel_activity_error;
+ }
+ else
+ {
+ channel_state->loaded_clip_length = stb_vorbis_stream_length_in_samples( decoder );
+ channel_state->decoder_handle.vorbis = decoder;
+ channel_state->activity = k_channel_activity_playing;
+ }
+ }
+ else if( format == k_audio_format_bird )
+ {
+ u8 *buf = (u8*)_vg_audio.decoding_buffer;
+ struct synth_bird *loc = (void *)&buf[AUDIO_DECODE_SIZE*id];
+
+ memcpy( loc, channel->clip->any_data, channel->clip->size );
+ synth_bird_reset( loc );
+
+ channel_state->decoder_handle.bird = loc;
+ channel_state->loaded_clip_length = synth_bird_get_length_in_samples( loc );
+ channel_state->activity = k_channel_activity_playing;
+ }
+ else if( format == k_audio_format_stereo )
+ {
+ channel_state->loaded_clip_length = channel->clip->size / 2;
+ channel_state->activity = k_channel_activity_playing;
+ }
+ else if( format == k_audio_format_gen )
+ {
+ channel_state->loaded_clip_length = 0xffffffff;
+ channel_state->activity = k_channel_activity_playing;
+ }
+ else
+ {
+ channel_state->loaded_clip_length = channel->clip->size;
+ channel_state->activity = k_channel_activity_playing;
+ }
+ }
}
for( u32 i=0; i<active_lfo_count; i ++ )
}
vg_audio_lock();
-
for( u32 i=0; i<active_channel_count; i ++ )
{
audio_channel_id id = active_channel_list[i];
static void cb_vg_audio_close( struct vg_magi_panel *me )
{
+ vg_audio_lock();
_vg_audio.inspector_open = 0;
+ vg_audio_unlock();
free( me->data );
}
static int cmd_vg_audio( int argc, const char *argv[] )
{
+ vg_audio_lock();
if( _vg_audio.inspector_open )
{
vg_error( "Only 1 audio inspector at a time.\n" );
+ vg_audio_unlock();
return 0;
}
_vg_audio.inspector_open = 1;
+ vg_audio_unlock();
ui_px w = 800, h=8*18;
struct vg_magi_panel *magi = _vg_magi_open( w,h, VG_MAGI_ALL );
magi->title = "Audio inspector";
void vg_audio_init(void)
{
- _vg_audio.mutex = SDL_CreateMutex();
- if( _vg_audio.mutex == NULL )
- vg_fatal_error( "SDL2: %s\n", SDL_GetError() );
-
_vg_profile_reg_set( &_vg_prof_audio );
_vg_audio.permanent_stack = vg_stack_make_substack( &vg.rtmem, VG_MB(32), "Permanent audio data" );
vg_stack_set_flags( _vg_audio.permanent_stack, VG_STACK_ALLOCATOR_METADATA );
v3_copy( (v3f){1,0,0}, master_controls->listener_right_ear_direction );
v3_zero( master_controls->listener_velocity );
v3_zero( master_controls->listener_position );
-
vg_dsp_init();
+}
+
+void vg_audio_begin(void)
+{
+ _vg_audio.mutex = SDL_CreateMutex();
+ if( _vg_audio.mutex == NULL )
+ vg_fatal_error( "SDL2: %s\n", SDL_GetError() );
vg_audio_device_init();
}
void vg_audio_register(void);
void vg_audio_device_init(void);
+void vg_audio_begin(void);
void vg_audio_init(void);
void vg_audio_free(void);
{
u32 optimization;
bool debug_asan;
- bool pdb;
+ bool thread_san;
+ bool no_pdb;
enum platform
{
{
.optimization = 0,
.debug_asan = 1,
+ .thread_san = 0,
.platform = k_platform_linux,
.arch = k_architecture_x86_64,
.compiler = k_compiler_clang,
{
.optimization = 3,
.debug_asan = 0,
+ .thread_san = 0,
.platform = k_platform_anyplatform,
.arch = k_architecture_x86_64,
.compiler = k_compiler_zigcc,
}
if( (env->compiler == k_compiler_clang) && env->debug_asan )
- {
- vg_strcat( &cmd, " -rdynamic -fsanitize=address -fPIE "
- "-fstack-protector-strong " );
- }
+ vg_strcat( &cmd, " -rdynamic -fsanitize=undefined -fsanitize=address -fPIE -fstack-protector-strong " );
+
+ if( (env->compiler == k_compiler_clang) && env->thread_san )
+ vg_strcat( &cmd, " -rdynamic -fsanitize=thread -fPIE -fstack-protector-strong " );
vg_strcat( &cmd, conf->no_lto? " -fno-lto \\\n": " -flto \\\n" );
if( env->platform == k_platform_windows )
{
- /* we currently dont want pdb pretty much ever. goodbye! */
-
if( type == k_obj_type_exe )
{
- if( !env->pdb )
+ if( env->no_pdb )
vg_strcat( &cmd, " /pdb:/dev/null" );
vg_strcat( &cmd, " /SUBSYSTEM:windows" );
}
/* steamworks */
if( vg_conf->steam_api )
{
- struct compile_result steam =
- vg_compiler_run( &vg_proj, &denv, conf, "vg/vg_steam.c",
- "vg_steam", k_obj_type_obj );
+ struct compile_result steam = vg_compiler_run( &vg_proj, &denv, conf, "vg/vg_steam.c", "vg_steam", k_obj_type_obj );
vg_strcatf( &components, "%s ", steam.path );
if( env->platform == k_platform_linux )
void vg_console_reg_var( const char *alias, void *ptr, enum vg_var_dtype type, u32 flags )
{
#ifdef VG_ENGINE
+ VG_ASSERT( vg_console.registration_blocked==0 );
THREAD_1;
#endif
VG_ASSERT( vg_console.var_count < VG_ARRAY_LEN(vg_console.vars) );
void (*poll_suggest)(int argc, const char *argv[]) )
{
#ifdef VG_ENGINE
- THREAD_1;
+ VG_ASSERT( vg_console.registration_blocked==0 );
#endif
VG_ASSERT( vg_console.function_count < VG_ARRAY_LEN(vg_console.functions) );
#ifdef VG_ENGINE
void vg_console_load_autos(void)
{
+ vg_console.registration_blocked = 1;
vg_console_exec( 2, (const char *[]){ "auto.conf", "silent" } );
}
i32 enabled, cheats;
bool auto_focus;
#endif
+
+ bool registration_blocked;
}
extern vg_console;
void vg_bake_shaders(void)
{
- vg_console_reg_cmd( "reload_shaders", vg_shaders_live_recompile, NULL );
vg_async_call( &vg.main_tasks, vg_shaders_compile, NULL );
}
if( co_step( co, 1 ) )
{
/* internal */
- vg_loader_step( vg_framebuffer_init, NULL );
vg_loader_step( vg_render_init, NULL );
vg_loader_step( vg_input_init, vg_input_free );
vg_loader_step( vg_lines_init, NULL );
#ifndef VG_NO_AUDIO
vg_loader_step( vg_audio_init, vg_audio_free );
#endif
- vg_loader_step( vg_profiler_init, NULL );
- vg_loader_step( vg_mem_view_init, NULL );
/* client */
#ifdef VG_CUSTOM_SHADERS
vg_auto_shader_register();
#endif
- //vg_success( "Client loaded in %fs\n", vg.time_real );
}
if( co_step( co, 0 ) )
{
+#ifndef VG_NO_AUDIO
+ vg_audio_begin();
+#endif
SDL_AtomicSet( &vg.engine_status, k_engine_status_running );
_vg_tower_set_flag( vg.sig_engine, 1 );
}
/* ui */
vg.engine_stage = k_engine_stage_ui;
{
- ui_prerender( &vg_ui.ctx );
- vg_ui_set_screen( vg.window_x, vg.window_y );
- ui_update_mouse( &vg_ui.ctx, (ui_px[2]){ vg.mouse_pos[0], vg.mouse_pos[1] }, vg.mouse_state );
- vg_framebuffer_ui( &vg_ui.ctx );
-
- if( vg_console.enabled )
- {
- ui_ignore_input_frames( &vg_ui.ctx, 10 );
- vg_gui( &vg_ui.ctx );
- ui_ignore_input_frames( &vg_ui.ctx, 0 );
- ui_capture_mouse( &vg_ui.ctx, 1 );
- vg_console_draw( &vg_ui.ctx );
- }
- else vg_gui( &vg_ui.ctx );
+ if( _vg_tower_clearence( _vg_tower_mask(vg.sig_engine)|_vg_tower_mask(vg.sig_client) ) )
+ {
+ ui_prerender( &vg_ui.ctx );
+ vg_ui_set_screen( vg.window_x, vg.window_y );
+ ui_update_mouse( &vg_ui.ctx, (ui_px[2]){ vg.mouse_pos[0], vg.mouse_pos[1] }, vg.mouse_state );
+
+ if( vg_console.enabled )
+ {
+ ui_ignore_input_frames( &vg_ui.ctx, 10 );
+ vg_gui( &vg_ui.ctx );
+ ui_ignore_input_frames( &vg_ui.ctx, 0 );
+ ui_capture_mouse( &vg_ui.ctx, 1 );
+ vg_console_draw( &vg_ui.ctx );
+ }
+ else vg_gui( &vg_ui.ctx );
- if( vg.settings_open )
- vg_settings_gui( &vg_ui.ctx );
-
- _vg_magi_render( &vg_ui.ctx );
+ if( vg.settings_open )
+ vg_settings_gui( &vg_ui.ctx );
+
+ vg_framebuffer_ui( &vg_ui.ctx );
+ _vg_magi_render( &vg_ui.ctx );
- ui_postrender( &vg_ui.ctx, vg.time_frame_delta );
- vg_ui_post_update();
+ ui_postrender( &vg_ui.ctx, vg.time_frame_delta );
+ vg_ui_post_update();
+ }
}
}
ui_prerender( &vg_ui.ctx );
vg_ui_set_screen( vg.window_x, vg.window_y );
- ui_update_mouse( &vg_ui.ctx,
- (ui_px[2]){ vg.mouse_pos[0], vg.mouse_pos[1] }, vg.mouse_state );
-
- vg_framebuffer_ui( &vg_ui.ctx );
+ ui_update_mouse( &vg_ui.ctx, (ui_px[2]){ vg.mouse_pos[0], vg.mouse_pos[1] }, vg.mouse_state );
vg_console.enabled = 1;
ui_ignore_input_frames( &vg_ui.ctx, 10 );
while(1)
{
vg.time_hp = SDL_GetPerformanceCounter();
- u64 udt = vg.time_hp - vg.time_hp_last;
+ u64 dt_hp = vg.time_hp - vg.time_hp_last;
vg.time_hp_last = vg.time_hp;
- double dt = (double)udt / (double)SDL_GetPerformanceFrequency();
+ f64 dt = (f64)dt_hp / (f64)SDL_GetPerformanceFrequency();
vg.time_frame_delta += dt;
while( vg_async_has_work( &vg.main_tasks ) )
strcpy( dest, exe_basepath );
SDL_free( exe_basepath );
vg.base_path = dest;
-
vg_info( "Basepath: %s\n", vg.base_path );
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
SDL_GL_SetAttribute( SDL_GL_CONTEXT_MAJOR_VERSION, 3 );
SDL_GL_SetAttribute( SDL_GL_CONTEXT_MINOR_VERSION, 3 );
- SDL_GL_SetAttribute( SDL_GL_CONTEXT_PROFILE_MASK,
- SDL_GL_CONTEXT_PROFILE_CORE );
-
- SDL_GL_SetAttribute( SDL_GL_CONTEXT_RELEASE_BEHAVIOR,
- SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH );
-
+ SDL_GL_SetAttribute( SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE );
+ SDL_GL_SetAttribute( SDL_GL_CONTEXT_RELEASE_BEHAVIOR, SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH );
SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 );
SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 );
SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 );
flags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
vg_info( "CreateWindow( %d %d %u )\n", vg.window_x, vg.window_y, flags );
-
- if((vg.window = SDL_CreateWindow( window_name, 0, 0,
- vg.window_x, vg.window_y, flags )))
+ if((vg.window = SDL_CreateWindow( window_name, 0, 0, vg.window_x, vg.window_y, flags )))
{
if( vg.screen_mode == 2 )
SDL_SetWindowPosition( vg.window, video_mode.w-vg.window_x, 0 );
vg_info( "CreateContext\n" );
/* ????? */
- if( SDL_IsTextInputActive() ) SDL_StopTextInput();
+ if( SDL_IsTextInputActive() )
+ SDL_StopTextInput();
/*
* OpenGL loading
const unsigned char* glver = glGetString( GL_VERSION );
vg_success( "Load setup complete, OpenGL version: %s\n", glver );
-
SDL_GL_SetSwapInterval(0); /* disable vsync while loading */
SDL_DisplayMode dispmode;
vg_console_reg_var( "vg_vsync", &vg.vsync, k_var_dtype_i32, VG_VAR_PERSISTENT );
vg_console_reg_var( "vg_quality", &vg.quality_profile, k_var_dtype_i32, VG_VAR_PERSISTENT );
vg_console_reg_var( "vg_screen_mode", &vg.screen_mode, k_var_dtype_i32, VG_VAR_PERSISTENT );
-
+ vg_console_reg_cmd( "vg_settings", cmd_vg_settings_toggle, NULL );
rb_register_cvar();
-
vg_audio_register();
+ vg_framebuffer_register();
+ vg_render_register();
+ vg_input_register();
+ vg_lines_register();
+ vg_profiler_register();
+ vg_mem_view_register();
+ vg_console_reg_cmd( "reload_shaders", vg_shaders_live_recompile, NULL );
+
vg_console_load_autos();
- vg_console_reg_cmd( "vg_settings", cmd_vg_settings_toggle, NULL );
_vg_init_window( vg.window_name );
SDL_SetRelativeMouseMode(1);
SDL_AtomicSet( &vg.engine_status, k_engine_status_crashed );
if( vg_thread_purpose() == _thread_purpose_loader )
- {
longjmp( vg.env_loader_exit, 1 );
- }
else
{
/* TODO: This should also be able to go to the crash screen? */
ui_fill( ctx, frame, 0xff000000 );
if( at->purpose == k_framebuffer_attachment_type_renderbuffer )
{
- ui_text( ctx, frame,
- "<hardware texture>", 1, k_ui_align_middle_center, 0 );
+ ui_text( ctx, frame, "<hardware texture>", 1, k_ui_align_middle_center, 0 );
}
else
{
}
}
-void vg_framebuffer_init(void)
+void vg_framebuffer_register(void)
{
//vg_console_reg_var( "blur_strength", &k_blur_strength, k_var_dtype_f32, 0 );
//vg_console_reg_var( "render_scale", &k_render_scale,
//vg_console_reg_var( "blur_effect", &k_blur_effect,
// k_var_dtype_i32, VG_VAR_PERSISTENT );
- vg_console_reg_cmd( "fb", vg_framebuffer_control,
- vg_framebuffer_poll );
+ vg_console_reg_cmd( "fb", vg_framebuffer_control, vg_framebuffer_poll );
}
void vg_framebuffer_update_sizes(void)
/*
* Initialize framebuffer system
*/
-void vg_framebuffer_init(void);
+void vg_framebuffer_register(void);
/*
* Get the current (automatically scaled or fixed) resolution of framebuffer
}
}
+void vg_input_register(void)
+{
+ VG_VAR_F32( controller_deadzone, flags=VG_VAR_PERSISTENT );
+}
+
void vg_input_init(void)
{
THREAD_1;
- VG_VAR_F32( controller_deadzone, flags=VG_VAR_PERSISTENT );
vg_async_call( &vg.main_tasks, async_vg_input_init, NULL );
}
u8 vg_getkey( SDL_Keycode kc );
void vg_process_inputs(void);
+void vg_input_register(void);
void vg_input_init(void);
void vg_input_free(void);
struct vg_controller *vg_active_controller(void);
glEnableVertexAttribArray( 1 );
}
+void vg_lines_register(void)
+{
+ vg_console_reg_var( "vg_lines", &vg_lines.render, k_var_dtype_i32, VG_VAR_CHEAT );
+}
+
void vg_lines_init(void)
{
THREAD_1;
- vg_lines.vertex_buffer = vg_stack_allocate( &vg.rtmem, VG_LINES_MAX_VERTS*sizeof(struct vg_lines_vert),
- 8, "Debugging Lines" );
+ vg_lines.vertex_buffer = vg_stack_allocate( &vg.rtmem, VG_LINES_MAX_VERTS*sizeof(struct vg_lines_vert), 8, "Debugging Lines" );
vg_async_call( &vg.main_tasks, async_vg_lines_init, NULL );
- vg_console_reg_var( "vg_lines", &vg_lines.render, k_var_dtype_i32, VG_VAR_CHEAT );
vg_shader_register( &_shader_lines );
}
void vg_line( line_co from, line_co to, u32 colour );
void vg_line2( line_co from, line_co to, u32 fc, u32 tc );
void vg_lines_drawall( void );
+void vg_lines_register(void);
void vg_lines_init(void);
THREAD_1;
u64 t0 = SDL_GetPerformanceCounter();
- vg.time_hp_last = vg.time_hp; // ???
-
if( fn_load )
fn_load();
- u64 udt = SDL_GetPerformanceCounter() - t0;
- double dt = (double)udt / (double)SDL_GetPerformanceFrequency();
- vg_info( "%s: %fs\n", alias, dt );
+ u64 function_run_time = SDL_GetPerformanceCounter() - t0;
+ f64 run_time_seconds = (f64)function_run_time / (f64)SDL_GetPerformanceFrequency();
+ vg_info( "%s: %fs\n", alias, run_time_seconds );
if( fn_free )
{
}
enum engine_status status = SDL_AtomicGet( &vg.engine_status );
-
if( status == k_engine_status_crashed )
- {
longjmp( vg.env_loader_exit, 1 );
- }
}
#include <stdlib.h>
#include <malloc.h>
+#include <stdio.h>
void *vg_malloc( u64 size )
{
void vg_stack_free( vg_stack_allocator *stack )
{
- if( stack->flags & VG_STACK_ALLOCATOR_BUFFER_FROM_MALLOC )
- vg_free( stack->data );
+ VG_ASSERT( stack->flags & VG_STACK_ALLOCATOR_BUFFER_FROM_MALLOC );
+ vg_free( stack->data );
vg_zero_mem( stack, sizeof(vg_stack_allocator) );
}
#pragma once
#include "vg_platform.h"
#include <stdalign.h>
+#include <stdio.h>
#define VG_KB( X ) (X*1024)
#define VG_MB( X ) (X*1024*1024)
console_suggest_score_text( _vg_mem_named_buffers[i].name, term, 0 );
}
-void vg_mem_view_init(void)
+void vg_mem_view_register(void)
{
vg_console_reg_cmd( "vg_mem_view", cmd_vg_mem_view, cmd_vg_mem_view_poll );
}
#pragma once
#include "vg_ui/imgui.h"
extern int vg_mem_view;
-void vg_mem_view_init(void);
+void vg_mem_view_register(void);
console_suggest_score_text( _vg_profiler.named_sets[i]->name,term,0 );
}
-void vg_profiler_init(void)
+void vg_profiler_register(void)
{
vg_console_reg_cmd( "vg_profile", cmd_vg_profile, cmd_vg_profile_poll );
}
void vg_profile_drawn( ui_context *ctx, struct vg_profile **profiles, u32 count,
f64 budget, ui_rect panel,
int dir, i32 normalize );
-void vg_profiler_init(void);
+void vg_profiler_register(void);
void _vg_profile_reg_set( struct vg_profile_set *set );
vg_compile_shader( &_shader_blit );
}
+void vg_render_register(void)
+{
+ vg_console_reg_var( "render_scale", &_vg_render.scale, k_var_dtype_f32, VG_VAR_PERSISTENT );
+ vg_console_reg_var( "blur_strength", &_vg_postprocess.blur_strength, k_var_dtype_f32, 0 );
+ vg_console_reg_var( "blur_effect", &_vg_postprocess.blur_effect, k_var_dtype_i32, VG_VAR_PERSISTENT );
+}
+
void vg_render_init(void)
{
THREAD_1;
vg_async_call( &vg.main_tasks, vg_async_postprocess_init, NULL );
- vg_console_reg_var( "render_scale", &_vg_render.scale, k_var_dtype_f32, VG_VAR_PERSISTENT );
#ifdef VG_3D
- vg_console_reg_var( "blur_strength", &_vg_postprocess.blur_strength, k_var_dtype_f32, 0 );
- vg_console_reg_var( "blur_effect", &_vg_postprocess.blur_effect, k_var_dtype_i32, VG_VAR_PERSISTENT );
/*
* Main framebuffer
}
extern _vg_render;
+void vg_render_register(void);
void vg_render_init(void);
void vg_render_fullscreen_quad(void);
void vg_postprocess_to_screen( vg_framebuffer *fb );
* Compile OpenGL subshader from GLSL source. Type is subshader type.
* If critical is set to 1, the program will fatal exit on compile failure.
*/
-static GLuint vg_compile_opengl_subshader( GLint type,
- const char *src, bool critical )
+static GLuint vg_compile_opengl_subshader( GLint type, const char *src, bool critical )
{
GLuint shader = glCreateShader( type );
vg_steam_async_call *vg_alloc_async_steam_api_call(void)
{
if( vg_steam.call_count == VG_ARRAY_LEN(vg_steam.calls) )
- {
- vg_fatal_error( "Maximum concurrent API calls exceeded (%u)\n",
- vg_steam.call_count );
- }
+ vg_fatal_error( "Maximum concurrent API calls exceeded (%u)\n", vg_steam.call_count );
return &vg_steam.calls[ vg_steam.call_count ++ ];
}
void steam_register_callback( u32 id, void (*p_handler)( CallbackMsg_t *msg ) )
{
- if( vg_steam.callback_handler_count ==
- VG_ARRAY_LEN(vg_steam.callback_handlers) )
- {
- vg_fatal_error( "Too many steam callback handlers registered (%u)\n",
- vg_steam.callback_handler_count );
- }
+ if( vg_steam.callback_handler_count == VG_ARRAY_LEN(vg_steam.callback_handlers) )
+ vg_fatal_error( "Too many steam callback handlers registered (%u)\n", vg_steam.callback_handler_count );
- vg_steam_callback_handler *handler =
- &vg_steam.callback_handlers[ vg_steam.callback_handler_count ++ ];
-
+ vg_steam_callback_handler *handler = &vg_steam.callback_handlers[ vg_steam.callback_handler_count ++ ];
handler->p_handler = p_handler;
handler->callback_id = id;
}
void steamworks_process_api_call( HSteamPipe pipe, CallbackMsg_t *callback )
{
- SteamAPICallCompleted_t *pCallCompleted =
- (SteamAPICallCompleted_t *)callback->m_pubParam;
+ SteamAPICallCompleted_t *pCallCompleted = (SteamAPICallCompleted_t *)callback->m_pubParam;
steamapi_bool bFailed;
void *call_data = alloca( pCallCompleted->m_cubParam );
* call identified by pCallCompleted->m_hAsyncCall
*/
- vg_info( "steamworks_event::api_call_completed( %lu )\n",
- pCallCompleted->m_hAsyncCall );
+ vg_info( "steamworks_event::api_call_completed( %lu )\n", pCallCompleted->m_hAsyncCall );
int j=0;
- for( int i=0; i<vg_steam.call_count; i++ ){
- if( vg_steam.calls[i].id != pCallCompleted->m_hAsyncCall ){
+ for( int i=0; i<vg_steam.call_count; i++ )
+ {
+ if( vg_steam.calls[i].id != pCallCompleted->m_hAsyncCall )
vg_steam.calls[j ++] = vg_steam.calls[i];
- }
- else{
+ else
+ {
vg_steam_async_call *call = &vg_steam.calls[i];
call->p_handler( call_data, call->userdata );
}
}
- if( vg_steam.call_count == j ){
+ if( vg_steam.call_count == j )
vg_error( "No tracker was register for API call\n" );
- }
vg_steam.call_count = j;
}