now we're doing a bunch of them
[carveJwlIkooP6JGAAIwe30JlM.git] / world_sfd.h
index a83fe0a92359c4b8cb9cb885fb30b9dc360474d2..1b59e5a8c509cb477968473298b327b9d19def2d 100644 (file)
@@ -7,8 +7,10 @@
 
 #include "world.h"
 
+#if 0
 #include "shaders/scoretext.h"
 #include "shaders/vblend.h"
+#endif
 
 vg_tex2d tex_scoretext = { .path = "textures/scoretext.qoi",
                            .flags = VG_TEXTURE_CLAMP|VG_TEXTURE_NEAREST };
@@ -56,20 +58,22 @@ float sfd_encode_glyph( char c )
 VG_STATIC void sfd_encode( u32 row, const char *str )
 {
    int end=0;
-   u32 row_h = world.sfd.h -1 -row;
+   u32 row_h = world_global.sfd.h -1 -row;
 
-   for( int i=0; i<world.sfd.w; i++ )
+   for( int i=0; i<world_global.sfd.w; i++ )
    {
+      u32 idx = (world_global.sfd.w*row_h + i) * 2;
+
       if( end )
       {
-         world.sfd.buffer[world.sfd.w*row_h + i] = 0.0f;
+         world_global.sfd.buffer[idx] = 0.0f;
       }
       else
       {
          if( !str[i] )
             end = 1;
 
-         world.sfd.buffer[world.sfd.w*row_h + i] = sfd_encode_glyph( str[i] );
+         world_global.sfd.buffer[idx] = sfd_encode_glyph( str[i] );
       }
    }
 }
@@ -80,10 +84,10 @@ VG_STATIC void sfd_init( u32 w, u32 h )
 
 VG_STATIC void sfd_update(void)
 {
-   for( int i=0; i<world.sfd.w*world.sfd.h; i++ )
+   for( int i=0; i<world_global.sfd.w*world_global.sfd.h; i++ )
    {
-      float *target = &world.sfd.buffer[i*2+0],
-            *cur =    &world.sfd.buffer[i*2+1];
+      float *target = &world_global.sfd.buffer[i*2+0],
+            *cur =    &world_global.sfd.buffer[i*2+1];
       
       float const rate = vg.time_delta * 15.2313131414f;
       float d1 = *target-*cur;
@@ -99,20 +103,26 @@ VG_STATIC void sfd_update(void)
    }
 }
 
-VG_STATIC void sfd_render( m4x4f projection, v3f camera, m4x3f transform )
+VG_STATIC void bind_terrain_noise(void);
+VG_STATIC void sfd_render( camera *cam, m4x3f transform )
 {
+#if 0
    mesh_bind( &world.sfd.mesh_display );
-
    shader_scoretext_use();
    shader_scoretext_uTexGarbage(0);
    shader_scoretext_uTexGradients(1);
    shader_link_standard_ub( _shader_scoretext.id, 2 );
-   bind_terrain_textures();
+   bind_terrain_noise();
    vg_tex2d_bind( &tex_scoretext, 1 );
 
-   shader_scoretext_uPv( projection );
+   m4x4f pvm_prev;
+   m4x3_expand( transform, pvm_prev );
+   m4x4_mul( cam->mtx_prev.pv, pvm_prev, pvm_prev );
+
+   shader_scoretext_uPv( cam->mtx.pv );
+   shader_scoretext_uPvmPrev( pvm_prev );
    shader_scoretext_uMdl( transform );
-   shader_scoretext_uCamera( camera );
+   shader_scoretext_uCamera( cam->transform[3] );
 
    for( int y=0;y<world.sfd.h; y++ )
    {
@@ -128,21 +138,25 @@ VG_STATIC void sfd_render( m4x4f projection, v3f camera, m4x3f transform )
    shader_vblend_uTexGarbage(0);
    shader_vblend_uTexGradients(1);
    shader_link_standard_ub( _shader_vblend.id, 2 );
-   bind_terrain_textures();
+   bind_terrain_noise();
+   vg_tex2d_bind( &tex_scoretext, 1 );
+
+   shader_vblend_uPv( cam->mtx.pv );
+   shader_vblend_uPvmPrev( pvm_prev );
 
-   shader_vblend_uPv( projection );
    shader_vblend_uMdl( transform );
-   shader_vblend_uCamera( camera );
+   shader_vblend_uCamera( cam->transform[3] );
    
    mesh_bind( &world.sfd.mesh_base );
    mesh_draw( &world.sfd.mesh_base );
+#endif
 }
 
 VG_STATIC int world_sfd_test( int argc, const char *argv[] )
 {
    if( argc == 2 )
    {
-      int row = vg_min( vg_max(atoi(argv[0]),0), world.sfd.h);
+      int row = vg_min( vg_max(atoi(argv[0]),0), world_global.sfd.h);
       sfd_encode( row, argv[1] );
    }
 
@@ -152,7 +166,10 @@ VG_STATIC int world_sfd_test( int argc, const char *argv[] )
 VG_STATIC void world_sfd_init(void)
 {
    vg_info( "world_sfd_init\n" );
+
+#if 0
    shader_scoretext_register();
+#endif
 
        vg_function_push( (struct vg_cmd){
                .name = "sfd",
@@ -173,11 +190,13 @@ VG_STATIC void world_sfd_init(void)
    m4x3f identity;
    m4x3_identity( identity );
 
+   /* FIXME: dont use scene header for this you fucking idiots */
    for( int i=4;i<6;i++ )
    {
       u32 vert_start = sc->vertex_count;
-      scene_add_submesh( sc, mboard, card, identity );
+      scene_add_mdl_submesh( sc, mboard, card, identity );
 
+#if 0
       for( int j=0; j<card->vertex_count; j++ )
       {
          mdl_vert *vert = &sc->arrvertices[ vert_start+j ];
@@ -187,12 +206,13 @@ VG_STATIC void world_sfd_init(void)
          vert->colour[0] = 0.0f;
          vert->colour[1] = i*36;
       }
+#endif
    }
 
    vg_acquire_thread_sync();
    {
-      scene_upload( sc, &world.sfd.mesh_display );
-      mdl_unpack_submesh( mboard, &world.sfd.mesh_base, backer );
+      scene_upload( sc, &world_global.sfd.mesh_display );
+      mdl_unpack_submesh( mboard, &world_global.sfd.mesh_base, backer );
 
       vg_tex2d_init( (vg_tex2d *[]){ &tex_scoretext }, 1 );
    }
@@ -201,12 +221,13 @@ VG_STATIC void world_sfd_init(void)
    int w = 27,
        h = 13;
 
-   world.sfd.w = w;
-   world.sfd.h = h;
-   world.sfd.buffer = vg_linear_alloc( vg_mem.rtmemory, 2*w*h*sizeof(float) );
+   world_global.sfd.w = w;
+   world_global.sfd.h = h;
+   world_global.sfd.buffer = 
+                     vg_linear_alloc( vg_mem.rtmemory, 2*w*h*sizeof(float) );
 
    for( int i=0; i<w*h*2; i++ )
-      world.sfd.buffer[i] = 0.0f;
+      world_global.sfd.buffer[i] = 0.0f;
 }
 
 #endif /* SFD_H */