variable target ui flush & message bitcount function
authorhgn <hgodden00@gmail.com>
Sat, 25 Nov 2023 07:47:03 +0000 (07:47 +0000)
committerhgn <hgodden00@gmail.com>
Sat, 25 Nov 2023 07:47:03 +0000 (07:47 +0000)
src/msgdump.c
vg_imgui.h
vg_lines.h
vg_msg.h

index 253233802005316a431fa264aea0401d6dcac1a4..65cdd5adb4621dbc45c3fc6fcc37376095116431 100644 (file)
@@ -14,42 +14,46 @@ int main( int argc, char *argv[] ){
                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 );
+   }
 }
index 487dfacf3c0f39193516610400865d0fe6f964a2..750ebfb866a58f5f3e411c3b52de411ba4b93bd6 100644 (file)
@@ -482,7 +482,7 @@ static void rect_copy( ui_rect a, ui_rect b ){
       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),
@@ -511,8 +511,8 @@ static void ui_flush( enum ui_shader shader ){
        
        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 );
@@ -1007,11 +1007,11 @@ static void ui_info( ui_rect inout_panel, const char *text ){
 }
 
 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 ){
@@ -1202,7 +1202,7 @@ static void ui_postrender(void){
       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();
index 569ae169739507e88419233708bbe83597227f1a..d7f277ad70347703de64f1804b1597ebb74ae61d 100644 (file)
@@ -6,6 +6,10 @@
 #define VG_GAME
 #include "vg/vg.h"
 
+/*
+ * FIXME: The line buffer sometimes overflows. Low priority
+ */
+
 typedef v3f line_co;
 
 #define VG__RED   0xff0000ff
index 5ae56c4d708de6d6fe7921d6a9d0bb849ffde2fb..b5fb4a482bf991ef4624b65ab93b89be33da51a6 100644 (file)
--- a/vg_msg.h
+++ b/vg_msg.h
@@ -262,10 +262,15 @@ static u32 vg_msg_cmd_bytecount( u8 code ){
    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 );