wow
authorhgn <hgodden00@gmail.com>
Wed, 19 Oct 2022 02:22:38 +0000 (03:22 +0100)
committerhgn <hgodden00@gmail.com>
Wed, 19 Oct 2022 02:22:38 +0000 (03:22 +0100)
src/shader.c
src/tools.sh
src/vg/vg.h
src/vg/vg_m.h
src/vg/vg_platform.h
src/vg/vg_shader.h
src/vg/vg_steam_user_stats.h [new file with mode: 0644]

index 9dee03e50609d6518a289c51f8acec026755cd4d..934d30d28c1ee2ead86f7a16632a136c637540ea 100644 (file)
@@ -46,6 +46,7 @@ static int compile_subshader( FILE *header, char *name )
             {
                start += 8;
                struct uniform *uf = &uniform_buffer[ uniform_count ++ ];
+               uf->array = 0;
                for( int i=0;; i++ )
                {
                   if( start[i] == '\0' )
index 9c9fc3ac42a5d123accc32d4d77fa3494613ab1e..d7bc89319fcfbbd1fc8d5c929e915a76a339e293 100644 (file)
@@ -25,11 +25,11 @@ tool_qoiconv(){
    compile_x
 }
 
-tool_texsheet(){
-   _src="vg/src/texsheet.c"
-   _dst="tools/texsheet"
-   compile_x
-}
+#tool_texsheet(){
+#   _src="vg/src/texsheet.c"
+#   _dst="tools/texsheet"
+#   compile_x
+#}
 
 tool_shader
 tool_fontcomp
index 5d41bcc4cf7ce92610ddf8dea63cc3f6cfab12b3..e125f26a3c4111c3fa6c10c23f4d15ee2a5bee71 100644 (file)
@@ -330,6 +330,12 @@ static int vg_bake_shaders(void)
 {
    vg_acquire_thread_sync();
 
+   vg_function_push( (struct vg_cmd)
+   {
+      .name = "shaders",
+      .function = vg_shaders_live_recompile
+   });
+
    if( !vg_shaders_recompile() )
    {
       vg_shaders_free(NULL);
index c28e477e606f497c86abd6c73e34edc21208111f..03f197f94b18003b731430a6ac2228ce38eb2b62 100644 (file)
@@ -635,6 +635,45 @@ static inline void m4x3_invert_affine( m4x3f a, m4x3f b )
    v3_negate( b[3], b[3] );
 }
 
+static void m4x3_invert_full( m4x3f src, m4x3f dst )
+{
+  float t2, t4, t5,
+        det,
+        a = src[0][0], b = src[0][1], c = src[0][2],
+        e = src[1][0], f = src[1][1], g = src[1][2],
+        i = src[2][0], j = src[2][1], k = src[2][2],
+        m = src[3][0], n = src[3][1], o = src[3][2];
+
+   t2 = j*o - n*k;
+   t4 = i*o - m*k;
+   t5 = i*n - m*j;
+   
+   dst[0][0] =  f*k - g*j;
+   dst[1][0] =-(e*k - g*i);
+   dst[2][0] =  e*j - f*i;
+   dst[3][0] =-(e*t2 - f*t4 + g*t5);
+   
+   dst[0][1] =-(b*k - c*j);
+   dst[1][1] =  a*k - c*i;
+   dst[2][1] =-(a*j - b*i);
+   dst[3][1] =  a*t2 - b*t4 + c*t5;
+   
+   t2 = f*o - n*g;
+   t4 = e*o - m*g; 
+   t5 = e*n - m*f;
+   
+   dst[0][2] =  b*g - c*f ;
+   dst[1][2] =-(a*g - c*e );
+   dst[2][2] =  a*f - b*e ;
+   dst[3][2] =-(a*t2 - b*t4 + c * t5);
+
+   det = 1.0f / (a * dst[0][0] + b * dst[1][0] + c * dst[2][0]);
+   v3_muls( dst[0], det, dst[0] );
+   v3_muls( dst[1], det, dst[1] );
+   v3_muls( dst[2], det, dst[2] );
+   v3_muls( dst[3], det, dst[3] );
+}
+
 static inline void m4x3_copy( m4x3f a, m4x3f b )
 {
        v3_copy( a[0], b[0] );
index ac07582b91757cac669c1734182fcdd16a230030..b71a01d71d9abe345b49c1365c67644d86d861dc 100644 (file)
@@ -65,6 +65,17 @@ struct vg_achievement
 
 #endif
 
+static void vg_strncpy( const char *src, char *dst, u32 len )
+{
+   for( u32 i=0; i<len; i++ )
+   {
+      dst[i] = src[i];
+
+      if( !src[i] )
+         break;
+   }
+}
+
 #include <stdlib.h>
 
 #define VG_ZERO_NEW_MEM
@@ -72,10 +83,15 @@ struct vg_achievement
 static void vg_fatal_exit_loop( const char *error );
 static void *vg_alloc( size_t size )
 {
+   if( size == 0 )
+      return NULL;
+
    void *ptr = malloc( size );
    
    if( !ptr )
+   {
       vg_fatal_exit_loop( "Out of memory" );
+   }
 
 #ifdef VG_ZERO_NEW_MEM
    u8 *bytes = ptr;
@@ -93,7 +109,12 @@ static void *vg_realloc( void *orig, size_t size )
    void *ptr = realloc( orig, size );
 
    if( !ptr )
+   {
+      if( size == 0 )
+         return NULL;
+
       vg_fatal_exit_loop( "Out of memory" );
+   }
 
    return ptr;
 }
@@ -117,6 +138,17 @@ static void vg_required( void *ptr, const char *path )
    TYPE DECL = FN( PATH,##__VA_ARGS__ );                                       \
    vg_required( DECL, "Resource is required but failed to load: '" PATH "'" );
 
+#if 0
+VG_DEPRECATED
+char *strcpy(char* destination, const char* source);
+VG_DEPRECATED
+char *strncpy(char *restrict dest, const char *restrict src, size_t n);
+VG_DEPRECATED
+char *strcat(char *restrict dest, const char *restrict src);
+VG_DEPRECATED
+char *strncat(char *restrict dest, const char *restrict src, size_t n);
+#endif
+
 VG_DEPRECATED
 void *malloc( size_t size );
 
index 2186c9dace606b9e3e8b3e54dc4b1d9e9b3f39bc..06f455d59e663c52614595e2f547430d7b8fae95 100644 (file)
@@ -197,6 +197,18 @@ static int vg_shaders_recompile(void)
    return 1;
 }
 
+static int vg_shaders_live_recompile(int argc, const char *argv[])
+{
+   vg_info( "Recompiling shaders\n" );
+   for( int i=0; i<vg_shader_count; i ++ )
+   {
+      struct vg_shader *shader = vg_shaders_active[i];
+      vg_shader_compile( shader );
+   }
+
+   return 0;
+}
+
 static void vg_shader_register( struct vg_shader *shader )
 {
    shader->compiled = 0;
diff --git a/src/vg/vg_steam_user_stats.h b/src/vg/vg_steam_user_stats.h
new file mode 100644 (file)
index 0000000..1b5691f
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef VG_STEAM_USER_STATS_H
+#define VG_STEAM_USER_STATS_H
+
+#include "vg_steam.h"
+
+#if defined( VALVE_CALLBACK_PACK_SMALL )
+ #pragma pack( push, 4 )
+#elif defined( VALVE_CALLBACK_PACK_LARGE )
+ #pragma pack( push, 8 )
+#endif 
+
+typedef struct UserStatsReceived_t UserStatsReceived_t;
+struct UserStatsReceived_t
+{
+       u64                m_nGameID;           // Game these stats are for
+       EResult         m_eResult;              // Success / error fetching the stats
+       CSteamID           m_steamIDUser;       // The user for whom the stats are retrieved for
+};
+enum { k_iUserStatsReceived = k_iSteamUserStatsCallbacks + 1 };
+
+#pragma pack(pop)
+
+typedef void ISteamUserStats;
+ISteamUserStats *SteamAPI_SteamUserStats_v012(void);
+ISteamUserStats *SteamAPI_SteamUserStats(void)
+{
+   return SteamAPI_SteamUserStats_v012();
+}
+
+int SteamAPI_ISteamUserStats_RequestCurrentStats( ISteamUserStats* self );
+
+int SteamAPI_ISteamUserStats_GetAchievement( ISteamUserStats *self,
+                                             const char *pchName, 
+                                             int *pbAchieved );
+
+int SteamAPI_ISteamUserStats_SetAchievement( ISteamUserStats *self,
+                                             const char *pchName );
+
+int SteamAPI_ISteamUserStats_ClearAchievement( ISteamUserStats *self,
+                                               const char *pchName );
+
+int SteamAPI_ISteamUserStats_StoreStats( ISteamUserStats* self );
+
+#endif /* VG_STEAM_USER_STATS_H */