8 #include "vg_platform.h"
10 #define KNRM "\x1B[0m"
11 #define KBLK "\x1B[30m"
12 #define KRED "\x1B[31m"
13 #define KGRN "\x1B[32m"
14 #define KYEL "\x1B[33m"
15 #define KBLU "\x1B[34m"
16 #define KMAG "\x1B[35m"
17 #define KCYN "\x1B[36m"
18 #define KWHT "\x1B[37m"
20 #define PRINTF_v2f( V2 ) "%.4f %.4f\n", V2[0], V2[1]
21 #define PRINTF_v3f( V3 ) "%.4f %.4f %.4f\n", V3[0], V3[1], V3[2]
22 #define PRINTF_v4f( V4 ) "%.4f %.4f %.4f %.4f\n", V4[0], V4[1], V4[2], V4[3]
25 #define PRINTF_U64 "%llu"
27 #define PRINTF_U64 "%lu"
31 static SDL_SpinLock log_print_sl
;
37 u32 buffer_line_count
, buffer_line_current
;
41 void _vg_console_append_to_log( const char *str
)
43 if( vg_log
.buffer_line_count
< vg_list_size( vg_log
.buffer
) )
44 vg_log
.buffer_line_count
++;
46 char *dest
= vg_log
.buffer
[ vg_log
.buffer_line_current
++ ];
48 for( int i
=0; i
<vg_list_size( vg_log
.buffer
[0] ); i
++ ){
49 if( !str
[i
] || ( i
== vg_list_size(vg_log
.buffer
[0])-1 ) ){
57 if( vg_log
.buffer_line_current
>= vg_list_size( vg_log
.buffer
) )
58 vg_log
.buffer_line_current
= 0;
61 VG_STATIC
void _vg_log_write( FILE *file
, const char *prefix
,
62 const char *fmt
, va_list args
)
65 SDL_AtomicLock( &log_print_sl
);
71 for( i
=0; i
<vg_list_size( buffer
); i
++ ){
73 buffer
[i
] = prefix
[i
];
78 j
= i
+ vsnprintf( buffer
+ i
, vg_list_size( buffer
) - i
-12, fmt
, args
);
79 strcpy( buffer
+ j
, KNRM
);
81 fputs( buffer
, file
);
83 _vg_console_append_to_log( buffer
);
85 SDL_AtomicUnlock( &log_print_sl
);
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 */