8 #include "vg_platform.h"
10 #define KNRM "\x1B[0m"
11 #define KRED "\x1B[31m"
12 #define KGRN "\x1B[32m"
13 #define KYEL "\x1B[33m"
14 #define KBLU "\x1B[34m"
15 #define KMAG "\x1B[35m"
16 #define KCYN "\x1B[36m"
17 #define KWHT "\x1B[37m"
19 #define PRINTF_v2f( V2 ) "%.2f %.2f\n", V2[0], V2[1]
20 #define PRINTF_v3f( V3 ) "%.2f %.2f %.2f\n", V3[0], V3[1], V3[2]
21 #define PRINTF_v4f( V4 ) "%.2f %.2f %.2f %.2f\n", V4[0], V4[1], V4[2], V4[3]
24 static SDL_SpinLock log_print_sl
;
30 u32 buffer_line_count
, buffer_line_current
;
34 void _vg_console_append_to_log( const char *str
)
36 if( vg_log
.buffer_line_count
< vg_list_size( vg_log
.buffer
) )
37 vg_log
.buffer_line_count
++;
39 char *dest
= vg_log
.buffer
[ vg_log
.buffer_line_current
++ ];
41 for( int i
=0; i
<vg_list_size( vg_log
.buffer
[0] ); i
++ )
43 if( !str
[i
] || ( i
== vg_list_size(vg_log
.buffer
[0])-1 ) )
52 if( vg_log
.buffer_line_current
>= vg_list_size( vg_log
.buffer
) )
53 vg_log
.buffer_line_current
= 0;
56 VG_STATIC
void _vg_log_write( FILE *file
, const char *prefix
,
57 const char *fmt
, va_list args
)
60 SDL_AtomicLock( &log_print_sl
);
66 for( i
=0; i
<vg_list_size( buffer
); i
++ )
69 buffer
[i
] = prefix
[i
];
74 j
= i
+ vsnprintf( buffer
+ i
, vg_list_size( buffer
) - i
-12, fmt
, args
);
75 strcpy( buffer
+ j
, KNRM
);
77 fputs( buffer
, file
);
79 _vg_console_append_to_log( buffer
);
81 SDL_AtomicUnlock( &log_print_sl
);
85 VG_STATIC
void _vg_log_init(void)
89 #define VG_LOGX( NAME, PIPE, PFX ) \
90 VG_STATIC void NAME(const char *fmt, ...) \
93 va_start( args, fmt ); \
94 _vg_log_write( PIPE, (PFX), fmt, args ); \
98 VG_LOGX( vg_success
, stdout
, (KGRN
"success" KWHT
"| " KGRN
) )
99 VG_LOGX( vg_info
, stdout
, (KNRM
" info" KWHT
"| " KNRM
) )
100 VG_LOGX( vg_warn
, stdout
, (KYEL
" warn" KWHT
"| " KYEL
) )
101 VG_LOGX( vg_error
, stderr
, (KRED
" error" KWHT
"| " KRED
) )
102 VG_LOGX( vg_low
, stdout
, (KWHT
" log" KWHT
"| " KWHT
) )
104 #endif /* VG_LOG_H */