return 0;
}
- FILE *f = fopen( argv[1], "rb" );
- if( !f ){
- vg_error( "vg_disk_open_read: %s\n", strerror(errno) );
- }
+ for( int i=0; i<argc-1; i++ ){
+ FILE *f = fopen( argv[i+1], "rb" );
+ if( !f ){
+ vg_error( "vg_disk_open_read: %s\n", strerror(errno) );
+ }
- void *buffer = NULL;
- u64 current = 0;
+ void *buffer = NULL;
+ u64 current = 0;
- /* read in chunks */
- for( u32 i=0; 1; i++ ){
- buffer = realloc( buffer, current + CHUNK_SIZE );
- u64 l = fread( buffer + current, 1, CHUNK_SIZE, f );
- current += l;
+ /* read in chunks */
+ for( u32 i=0; 1; i++ ){
+ buffer = realloc( buffer, current + CHUNK_SIZE );
+ u64 l = fread( buffer + current, 1, CHUNK_SIZE, f );
+ current += l;
- if( l != CHUNK_SIZE ){
- if( feof( f ) ){
- break;
- }
- else{
- if( ferror( f ) ){
- fclose(f);
- vg_fatal_error( "read error" );
+ if( l != CHUNK_SIZE ){
+ if( feof( f ) ){
+ break;
}
else{
- fclose(f);
- vg_fatal_error( "unknown error codition" );
+ if( ferror( f ) ){
+ fclose(f);
+ vg_fatal_error( "read error" );
+ }
+ else{
+ fclose(f);
+ vg_fatal_error( "unknown error codition" );
+ }
}
}
}
- }
- fclose( f );
+ fclose( f );
+
+ printf( "%s (%u bytes):", argv[i+1], (u32)current );
- vg_msg msg;
- vg_msg_init( &msg, buffer, current );
- vg_msg_print( &msg, current );
+ vg_msg msg;
+ vg_msg_init( &msg, buffer, current );
+ vg_msg_print( &msg, current );
- free( buffer );
+ free( buffer );
+ }
}
b[i] = a[i];
}
-static void ui_flush( enum ui_shader shader ){
+static void ui_flush( enum ui_shader shader, f32 w, f32 h ){
u32 vertex_offset = vg_ui.vert_start*sizeof(ui_vert),
vertex_count = vg_ui.cur_vert-vg_ui.vert_start,
vertex_size = vertex_count*sizeof(ui_vert),
m3x3f view = M3X3_IDENTITY;
m3x3_translate( view, (v3f){ -1.0f, 1.0f, 0.0f } );
- m3x3_scale( view, (v3f){ 1.0f/((float)vg.window_x*0.5f),
- -1.0f/((float)vg.window_y*0.5f), 1.0f } );
+ m3x3_scale( view, (v3f){ 1.0f/(w*0.5f),
+ -1.0f/(h*0.5f), 1.0f } );
if( shader == k_ui_shader_colour ){
glUseProgram( _shader_ui.id );
}
static void ui_image( ui_rect rect, GLuint image ){
- ui_flush( k_ui_shader_colour );
+ ui_flush( k_ui_shader_colour, vg.window_x, vg.window_y );
glActiveTexture( GL_TEXTURE0 );
glBindTexture( GL_TEXTURE_2D, image );
ui_fill_rect( rect, 0xffffffff, (ui_px[4]){ 0,256,256,0 } );
- ui_flush( k_ui_shader_image );
+ ui_flush( k_ui_shader_image, vg.window_x, vg.window_y );
}
static u32 v4f_u32_colour( v4f colour ){
vg_ui.wants_mouse = 1;
}
- ui_flush( k_ui_shader_colour );
+ ui_flush( k_ui_shader_colour, vg.window_x, vg.window_y );
if( !vg_ui.focused_control_hit ){
ui_defocus_all();
#define VG_GAME
#include "vg/vg.h"
+/*
+ * FIXME: The line buffer sometimes overflows. Low priority
+ */
+
typedef v3f line_co;
#define VG__RED 0xff0000ff
return vg_msg_cmd_array_count( code ) * vg_msg_cmd_type_size( code );
}
+static u8 vg_msg_count_bits( u32 count ){
+ assert( (count <= 16) && count );
+ return ((count-1)<<2);
+}
+
/* write a sized type */
static void vg_msg_wkvnum( vg_msg *msg, const char *key,
u8 type, u8 count, void *data ){
- u8 code = type | ((count-1)<<2);
+ u8 code = type | vg_msg_count_bits(count);
vg_msg_wbuf( msg, &code, 1 );
vg_msg_wstr( msg, key );