VG_STATIC vg_async_item *vg_async_alloc( u32 size )
{
/* ditch out here if engine crashed. this serves as the 'quit checking' */
-
if( _vg_engine_status() == k_engine_status_crashed ){
assert( vg_thread_purpose() == k_thread_purpose_loader );
longjmp( vg.env_loader_exit, 1 );
};
};
-static struct vg_audio_system{
+struct vg_audio_system{
SDL_AudioDeviceID sdl_output_device;
void *audio_pool,
float internal_global_volume,
external_global_volume;
}
-vg_audio = { .external_global_volume = 1.0f };
+static vg_audio = { .external_global_volume = 1.0f };
#include "vg/vg_audio_dsp.h"
}
}
- if( !vg_validf( framevol_l ) ) vg_fatal_error( "NaN left channel" );
- if( !vg_validf( framevol_r ) ) vg_fatal_error( "NaN right channel" );
- if( !vg_validf( frame_samplerate ) )
- vg_fatal_error( "NaN sample rate" );
+ if( !vg_validf( framevol_l ) ||
+ !vg_validf( framevol_r ) ||
+ !vg_validf( frame_samplerate ) ){
+ vg_fatal_error( "Invalid sampling conditions.\n"
+ "This crash is to protect your ears.\n"
+ " channel: %p (%s)\n"
+ " sample_rate: %f\n"
+ " volume: L%f R%f\n"
+ " listener: %.2f %.2f %.2f [%.2f %.2f %.2f]\n",
+ ch, ch->name, frame_samplerate,
+ framevol_l, framevol_r,
+ vg_audio.internal_listener_pos[0],
+ vg_audio.internal_listener_pos[1],
+ vg_audio.internal_listener_pos[2],
+ vg_audio.internal_listener_ears[0],
+ vg_audio.internal_listener_ears[1],
+ vg_audio.internal_listener_ears[2]
+ );
+ }
}
u32 buffer_length = AUDIO_MIX_FRAME_SIZE;
if( (vg_compiler.compiler == k_compiler_gcc) ||
(vg_compiler.compiler == k_compiler_clang ) )
{
- strcat( cmd, "-rdynamic -fsanitize=address " );
+ strcat( cmd, "-rdynamic -fsanitize=address "
+ "-fPIE -fstack-protector-strong " );
}
strcat( cmd, "\\\n" );
static inline void q_normalize( v4f q )
{
- f32 s = 1.0f/ sqrtf(v4_dot(q,q));
- q[0] *= s;
- q[1] *= s;
- q[2] *= s;
- q[3] *= s;
+ f32 l2 = v4_dot(q,q);
+ if( l2 < 0.00001f ) q_identity( q );
+ else {
+ f32 s = 1.0f/sqrtf(l2);
+ q[0] *= s;
+ q[1] *= s;
+ q[2] *= s;
+ q[3] *= s;
+ }
}
static inline void q_inv( v4f q, v4f d )
* Programming," Vol. 2 (2nd Ed.) pp.102.
*/
vg_rand.mt[0] = seed & 0xffffffff;
- for( vg_rand.index=1; vg_rand.index<MT_STATE_VECTOR_LENGTH; vg_rand.index++ ){
+ for( vg_rand.index=1; vg_rand.index<MT_STATE_VECTOR_LENGTH; vg_rand.index++){
vg_rand.mt[vg_rand.index] =
(6069 * vg_rand.mt[vg_rand.index-1]) & 0xffffffff;
}